Вход | Регистрация
 

Зачем в БСП используют Вычислить() при получении общего модуля?

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

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

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

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

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

Проверка на тип некорректна.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.