При разработке универсальных расширений и обработок 1С сталкиваемся с ситуацией, когда разработчики изменяют название общих модулей или переносят процедуры или функции из одного модуля в другой. Таким образом, чтобы обработка работала и в старых и в новых конфигурациях требуется дополнительная проверка.
Как проверить существование общего модуля?
Если разработчики добавили новый модуль и туда перенесли нужную процедуру, то можно добавить проверку на существование общего модуля. Сделать это можно с помощью следующего кода:
&НаКлиенте Процедура v8PRO_МояПроцедура() Экспорт // Если работаем на сервере, то нужно заменить ОбщегоНазначенияКлиент на ОбщегоНазначения ОМ_СкидкиНаценки = ОбщегоНазначенияКлиент.ОбщийМодуль(v8PRO_ПолучитьИмяМодульСкидкиНаценки()); ОМ_СкидкиНаценки.СброситьФлагСкидкиРассчитаны(ЭтотОбъект); КонецПроцедуры &НаСервере Функция v8PRO_ПолучитьИмяМодульСкидкиНаценки() ИмяОбщегоМодуля = "СкидкиНаценкиЗаполнениеКлиент"; // Появился в КА 2.5.6 ОМ_Метаданные = Метаданные.ОбщиеМодули.Найти(ИмяОбщегоМодуля); Если ОМ_Метаданные = Неопределено Тогда ИмяОбщегоМодуля = "СкидкиНаценкиКлиент"; КонецЕсли; Возврат ИмяОбщегоМодуля; КонецФункции
В дальнейшем к нужному модулю можно будет обратиться, если его присвоить некой переменной.
Как проверить существование процедуры или функции общего модуля?
Бывают ситуации когда оба модуля существуют и в старой и в новой конфигурации, но нужная процедура в старой конфигурации находится в модуле “СкидкиНаценкиКлиент”, а в новой конфигурации она уже в модуле “СкидкиНаценкиЗаполнениеКлиент”. В этом случае можно воспользоваться попыткой, но эту попытку нужно обернуть в метод “Выполнить” иначе наш модуль не пройдет синтаксический контроль.
Выполнить(" |Попытка | // Для совместимости с УТ 11.4 | СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект); |Исключение | // В версии КА 2.5.6 поменялось имя общего модула | СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект); |КонецПопытки;");