Имя: Пароль:
1C
 
Зачем в БСП используют Вычислить() при получении общего модуля?
0 ДНН
 
16.11.20
11:57
Например: МодульСтандартныеПодсистемыКлиентСерверЛокализация = Вычислить("СтандартныеПодсистемыКлиентСерверЛокализация");
Если можно = МодульСтандартныеПодсистемыКлиентСерверЛокализация  = СтандартныеПодсистемыКлиентСерверЛокализация;

В обоих случаях будет ошибка, если нет такого модуля.
1 H A D G E H O G s
 
16.11.20
12:00
Чтобы не спотыкалось при проверке в конфах, где этого модуля нет.
2 fisher
 
16.11.20
12:02
(0) Только в первом случае ошибка будет в рантайме, а во втором случае при инициализации. Не?
3 Василий Алибабаевич
 
16.11.20
12:05
В БПО применяется для того чтобы однообразным способом получить обработчик.
Типа такого :
Сканер.Драйвер = Вычислить("ОбщийМодульДрайверСканера");
Весы.Драйвер = Вычислить("ОбщийМодульДрайверВесов");
Дисплей.Драйвер = Вычислить("ОбщийМодульДрайверДисплеев");
4 ДНН
 
16.11.20
12:05
(2) да
5 Ненавижу 1С
 
гуру
16.11.20
12:08
(3) и в чем отличие того однообразия от этого?

Сканер.Драйвер = ОбщийМодульДрайверСканера;
Весы.Драйвер = ОбщийМодульДрайверВесов;
Дисплей.Драйвер = ОбщийМодульДрайверДисплеев;
6 timurhv
 
16.11.20
12:08
(2) не должно, там идет проверка на тип:

ПравилаТранслитерации = Новый Соответствие;
МодульСтандартныеПодсистемыКлиентСерверЛокализация = Вычислить("СтандартныеПодсистемыКлиентСерверЛокализация");
Если ТипЗнч(МодульСтандартныеПодсистемыКлиентСерверЛокализация) = Тип("ОбщийМодуль") Тогда
    МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(ПравилаТранслитерации);
КонецЕсли;
Возврат ОбщегоНазначенияСлужебныйКлиентСервер.СтрокаЛатиницей(Значение, ПравилаТранслитерации);
7 fisher
 
16.11.20
12:10
(4) Тогда варианта два.
1) В рантайме до нее может и не дойти (при обработке веток выборочного внедрения БСП)
2) ЕМНИП, второй вариант синтаксиса с явной ссылкой на модуль в платформе появился не сразу.
8 ДНН
 
16.11.20
12:10
(6) МодульСтандартныеПодсистемыКлиентСерверЛокализация = Вычислить("СтандартныеПодсистемыКлиентСерверЛокализация");

Если модуля нет, то будет ошибка переменная не определена СтандартныеПодсистемыКлиентСерверЛокализация
9 timurhv
 
16.11.20
12:18
(8) Угу, в других местах проверка другого вида:
Если Метаданные.ОбщиеМодули.Найти("СтандартныеПодсистемыКлиентСерверЛокализация") <> Неопределено Тогда
    МодульСтандартныеПодсистемыКлиентСерверЛокализация = ОбщегоНазначения.ОбщийМодуль("СтандартныеПодсистемыКлиентСерверЛокализация");
    МодульСтандартныеПодсистемыКлиентСерверЛокализация.ПриЗаполненииПравилТранслитерации(ПравилаТранслитерации);
КонецЕсли;

Проверка на тип некорректна.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой