|
Зачем в БСП используют Вычислить() при получении общего модуля?
| ☑ |
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ет в милосердии тем, кто ниже его? Петр Трубецкой