При разработке универсальных расширений и обработок 1С сталкиваемся с ситуацией, когда разработчики изменяют название общих модулей или переносят процедуры или функции из одного модуля в другой. Таким образом, чтобы обработка работала и в старых и в новых конфигурациях требуется дополнительная проверка.
Как проверить существование общего модуля?
Если разработчики добавили новый модуль и туда перенесли нужную процедуру, то можно добавить проверку на существование общего модуля. Сделать это можно с помощью следующего кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
&НаКлиенте Процедура v8PRO_МояПроцедура() Экспорт // Если работаем на сервере, то нужно заменить ОбщегоНазначенияКлиент на ОбщегоНазначения ОМ_СкидкиНаценки = ОбщегоНазначенияКлиент.ОбщийМодуль(v8PRO_ПолучитьИмяМодульСкидкиНаценки()); ОМ_СкидкиНаценки.СброситьФлагСкидкиРассчитаны(ЭтотОбъект); КонецПроцедуры &НаСервере Функция v8PRO_ПолучитьИмяМодульСкидкиНаценки() ИмяОбщегоМодуля = "СкидкиНаценкиЗаполнениеКлиент"; // Появился в КА 2.5.6 ОМ_Метаданные = Метаданные.ОбщиеМодули.Найти(ИмяОбщегоМодуля); Если ОМ_Метаданные = Неопределено Тогда ИмяОбщегоМодуля = "СкидкиНаценкиКлиент"; КонецЕсли; Возврат ИмяОбщегоМодуля; КонецФункции |
В дальнейшем к нужному модулю можно будет обратиться, если его присвоить некой переменной.
Как проверить существование процедуры или функции общего модуля?
Бывают ситуации когда оба модуля существуют и в старой и в новой конфигурации, но нужная процедура в старой конфигурации находится в модуле «СкидкиНаценкиКлиент», а в новой конфигурации она уже в модуле «СкидкиНаценкиЗаполнениеКлиент». В этом случае можно воспользоваться попыткой, но эту попытку нужно обернуть в метод «Выполнить» иначе наш модуль не пройдет синтаксический контроль.
1 2 3 4 5 6 7 8 |
Выполнить(" |Попытка | // Для совместимости с УТ 11.4 | СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект); |Исключение | // В версии КА 2.5.6 поменялось имя общего модула | СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект); |КонецПопытки;"); |