Имя: Пароль:
1C
1С v8
Одна внешняя обработка для разных (отличных) конфигураций.
,
0 new_hope
 
06.03.19
16:54
Есть небольшая внешняя обработка, которая (как Я этого хочу) должна работать в двух разных конфигурациях.

Так вот - в одной конфигурации она запускается и все Ок, в другой - вываливается с ошибкой, ошибка в коде, в процедуре - которая никогда не вызывается в другой конфигурации.
В этой процедуре идет вызов процедуры общего модуля конфигурации, которая отсутствует во второй.

То-есть перед открытием внешней обработки проходит полный синтаксический контроль?

Этого можно избежать? Или делать две разные обработки и все?

Сорри, если совсем дурной вопрос.
1 zak555
 
06.03.19
16:55
пример кода
2 zak555
 
06.03.19
16:55
а так в выполнить
3 Fragster
 
гуру
06.03.19
17:00
завернуть код в Выполнить или в другую форму
4 new_hope
 
06.03.19
17:00
(1)
Вот ошибка:

{ВнешняяОбработка.ЗагрузкаПД.Форма.Форма.Форма(150,61)}: Переменная не определена (глТекущийПользователь)
        ОбщегоНазначения.ЗаполнитьШапкуДокумента(ДокументПлатежка,<<?>>глТекущийПользователь);


Просто в другой конфигурации отсутствует переменная "глТекущийПользователь".
Но - во второй конфигурации я и не предполагал вызов этой процедуры, где эта "ошибочная" строка кода. Но система всеравно проверяет и вываливает обработку
5 new_hope
 
06.03.19
17:01
(3) Сейчас попробую. Спасибо.
6 new_hope
 
06.03.19
17:01
(2) Спасибо. пробую.
7 mistеr
 
06.03.19
19:25
Проще не использовать глТекущийПользователь.
8 lubitelxml
 
06.03.19
19:30
используйте ПараметрыСеанса.ТекущийПользователь
9 Смотрящий
 
06.03.19
20:22
(0) глТекущийПользователь = глТекущийПользователь;
ОбщегоНазначения.ЗаполнитьШапкуДокумента(ДокументПлатежка, глТекущийПользователь);
10 d4rkmesa
 
06.03.19
20:29
(0) В БСП есть процедура ОбщегоНазначения.ОбщийМодуль :

Функция ОбщийМодуль(Имя) Экспорт
    
    Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
        Модуль = Вычислить(Имя); // ВычислитьВБезопасномРежиме не требуется, т.к. проверка надежная.
    ИначеЕсли СтрЧислоВхождений(Имя, ".") = 1 Тогда
        Возврат СерверныйМодульМенеджера(Имя);
    Иначе
        Модуль = Неопределено;
    КонецЕсли;
    
    Если ТипЗнч(Модуль) <> Тип("ОбщийМодуль") Тогда
        ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Общий модуль ""%1"" не найден.'"), Имя);
    КонецЕсли;
    
    Возврат Модуль;
    
КонецФункции

Через возвращаемое значение можно вызывать свою функцию.
11 Мимохожий Однако
 
06.03.19
23:32
Если известны идентификаторы конфигураций, можно прописать для каждой конфигурации свою функцию
12 Сияющий в темноте
 
06.03.19
23:52
Можно общий модуль подучать через выполнить в переменную,а потом уже вызывать функцию через точку от этой переменной,контроль синтаксиса не заметит,что модуля нету.
13 Бертыш
 
07.03.19
01:13
ОбщегоНазначения.ЗаполнитьШапкуДокумента(ДокументПлатежка,Вычислить("глТекущийПользователь"));
14 PaulBC
 
07.03.19
02:40
а что нельзя поместить процедуру общего модуля в модуль обработки?
15 Cyberhawk
 
07.03.19
07:17
(11) Задача автора не в том, как разделить выполнение кода, а как обеспечить его компиляцию без ошибок
16 seevkik
 
07.03.19
07:27
(15) В таком случае обращаться к метаданным через [""]
17 Мимохожий Однако
 
07.03.19
08:23
(15) Можно поместить проблемный код в макет, например.
18 xXeNoNx
 
07.03.19
08:28
Запаковать различные версии обработки в макеты, потом по какому-либо ID вытаскивать их от туда и запускать
19 Мимохожий Однако
 
07.03.19
08:32
(18) Похожую штуку однажды наблюдал в обработке для подготовки данных ТСЖ в госорганы. Там для каждого региона была отдельная форма.
20 Cyberhawk
 
07.03.19
08:58
(16) Это не всегда возможно
21 Cyberhawk
 
07.03.19
08:59
(17) Ну это вариация на уже предложенный вариант со строкой + Выполнить()
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший