Имя: Пароль:
1C
1С v8
Зачем нужен вызов процедуры по ссылке?
0 Dotoshin
 
20.11.18
10:08
Добрый день, коллеги.
Периодически натыкаюсь в УТ 11 на такие вот конструкции:
            МодульВерсионированиеОбъектов = ОбщегоНазначения.ОбщийМодуль("ВерсионированиеОбъектов");
            Используется = МодульВерсионированиеОбъектов.ЕстьПравоЧтенияИнформацииОВерсияхОбъектов();

Подскажите пожалуйста для чего это делается и почему нельзя сразу написать:
ВерсионированиеОбъектов.ЕстьПравоЧтенияИнформацииОВерсияхОбъектов();
1 ДенисЧ
 
20.11.18
10:08
Они просто эти... Которые поворотники не включают на дороге
2 Cyberhawk
 
20.11.18
10:09
Это чтобы F12 у тебя не работало )
3 Cyberhawk
 
20.11.18
10:14
Ну а без шуток если - чтоб при компиляции не ругалось, если какая-то подсистема из БСП не внедрена в конфигурацию. "Экранирование" типа.
4 DrWatson
 
20.11.18
10:15
БСП же. Оно рассчитано на то что ты вставляешь не все модули. Поэтому сначала проверяют есть ли соответствующая подсистема, а потом вызывают функцию из модуля. Так вот если этого модуля нет, то 1с упадет ещё на проверке синтаксиса. а так будет работать.
5 asady
 
20.11.18
10:18
(0) ну ясно же - потом можно в модуле общего назначения написать:
Функция ОбщийМодуль(Имя) Экспорт

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

            МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных");
            #Если Сервер И НЕ Сервер Тогда
                МодульЗащитаПерсональныхДанных = ЗащитаПерсональныхДанных;    
            #КонецЕсли
7 Dotoshin
 
20.11.18
10:21
(3) (4) Все понял. Спасибо за разъяснение :)
и за шутки тоже спасибо, (1) и (2) улыбнуло :)
8 loololool
 
20.11.18
11:26
(6) Так это в 1С писать надобно
9 Cyberhawk
 
20.11.18
11:32
(8) Кому оно надо?)
10 loololool
 
20.11.18
11:43
(9) А кому ты тут написал? ))
11 Serg_1960
 
20.11.18
11:43
(6) Если так написать, то F12 может быть и заработает, а F7, Ctrl+F7 и F5 могут отвалиться :)
12 loololool
 
20.11.18
11:45
(11) Тааак... А что такое Ф7, СТРЛ+Ф7 ? И почему запуск отладки, вдруг, отвалиться может?
13 Serg_1960
 
20.11.18
11:48
(12) Ошибка при компиляции - какая уж тут отладка :)
14 loololool
 
20.11.18
12:15
Не должно ведь компилироваться
15 Cyberhawk
 
20.11.18
12:15
(10) Очевидно, любому, кто прочитает
16 Вафель
 
20.11.18
12:17
(15) не уж-то есть такие д..бы которые правят бспшный код?
17 Cyberhawk
 
20.11.18
12:17
(16) Зачем БСПшный? Свой, если пишешь так же. Он же не только для проверки существования подсистем применяется, но и для проверки релиза платформы, например.
18 Cyberhawk
 
20.11.18
12:18
(11) Не баклань - предлагаемая мною вставка не компилируется
19 Вафель
 
20.11.18
12:19
(17) зачем также писать? что за извращение?
20 Cyberhawk
 
20.11.18
12:20
(19) Для обратной совместимости. Что-то ты бакланишь.
21 NuclearWinter
 
20.11.18
12:22
Говорят, конструкция #Если Сервер И НЕ Сервер Тогда
не работает в edt
22 Serg_1960
 
20.11.18
13:42
(18) Прочти ещё раз своё же (3) - баклань, не баклань, а если нет подсистемы БСП, то конфигурация всё равно отвалится :)
23 Cyberhawk
 
20.11.18
14:09
(22) Конечно же ничего не отвалится, иначе зачем бы такое делать?
24 Dzenn
 
гуру
20.11.18
14:22
Ещё один уровень абстракции, появившийся вследствие того, что один и тот же код начали использовать в разных конфигурациях (БСП и может быть что-то ещё)