При разработке универсальных расширений и обработок 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 поменялось имя общего модула
| СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
|КонецПопытки;");
|