Имя: Пароль:
1C
 
Проверить существование общего модуля
,
0 Stim
 
17.03.15
10:29
Добрый день.
Есть обработка, работающая на типовой БП 3.0.
Но в связи с тем, что разработчики делают мигрирование процедур/функций из одного общего модуля в другой, приходится делать несколько версий обработки. В некоторых версиях - отличия только в наименовании общего модуля.

Хотелось бы оставить одну универсальную версию, проверяя общие модули в базе.
Через попытку сделать не получается, выдается ошибка.

как бы так сделать по-правильному?
1 butterbean
 
17.03.15
10:31
метаданные.общиеМодули
2 patria0muerte
 
17.03.15
10:31
А если так:

ОбщийМодуль = Метаданные.ОбщиеМодули.Найти(
и далее...

Или из внешней обработки не вызовется?
3 pessok
 
17.03.15
10:33
общий модуль то никуда не денется, скорее всего, а вот метод из него могут удалить, так что, скорее всего, не взлетит. можно костыли понаставить в виде Попытка Исключение, но тоже моветон. Лучше уж сделать зависимость от версии конфы, имхо
4 Поpyчик-4
 
17.03.15
10:34
(0)

&НаСервереБезКонтекста
Функция ЕстьОбщийМодуль(НазваниеМодуля)
    Возврат Метаданные.ОбщиеМодули.Найти(НазваниеМодуля) <> Неопределено;
КонецФункции



    Если ЕстьОбщийМодуль("ОбменДаннымиПовтИсп") Тогда
        Результат = Вычислить("ОбменДаннымиПовтИсп.ПланыОбменаБСП().Найти(ТекущийПланОбмена) <> Неопределено");
        Элементы.СписокУзловОбменаВыполнитьОбменДанными.Видимость = Результат;
    КонецЕсли;
5 Stim
 
17.03.15
10:35
(2) и далее

не сработает


Если Метаданные.ОбщиеМодули.Найти("общийМодуль1") <> Неопределенно Тогда
ОбщийМодуль1.Процедура();
Иначеесли Метаданные.ОбщиеМодули.Найти("общийМодуль2") <> Неопределенно Тогда
ОбщийМодуль2.Процедура();
КонецЕсли;


будет открываться с ошибкой в коде, потому что какого-то общего модуля нет
6 Stim
 
17.03.15
10:35
(3) про версии тоже думал, но лень перебирать все сборки, смотреть, в какой что изменилось
7 patria0muerte
 
17.03.15
10:36
(5) Так через Выполнить("ОбщийМодуль1.Процедура") можно сделать наверное... хотя опять же - параметры как...
8 Поpyчик-4
 
17.03.15
10:36
(6) Выполнить("Ваш код");
9 Stim
 
17.03.15
10:38
(7) (8) да, сделаю через выполнить(), спасибо
10 Stim
 
17.03.15
10:38
(7) параметры одинаковые

УправлениеКонтактнойИнформацией.ПредыдущаяСтруктураКонтактнойИнформацииXML
и
КонтактнаяИнформацияСлужебный.ПредыдущаяСтруктураКонтактнойИнформацииXML

кому интересно
11 Поpyчик-4
 
17.03.15
10:42
(10) Вот ещё для интереса
http://forum.aeroion.ru/topic820.html#5664
12 patria0muerte
 
17.03.15
10:48
(10) Да я просто как то выполнить() не пользовал в работе. Параметры туда вообще реально передать? Т.е. такая конструкция взлетит:

Параметры = Новый СТруктура("Параметр1", Параметр1);
ВЫполнить("ОбщийМодуль1.ПРоцедура111(Параметры)");

?
13 Stim
 
17.03.15
10:52
(12) да
14 Stim
 
17.03.15
10:53
+ выполнится везде, кроме веб-клиента( интересно, почему)
15 pessok
 
17.03.15
10:55
чтобы всякие html - лютые не запихнули в потенциально опасный "Выполнить"