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


1С:Предприятие :: 1С:Предприятие 8 общая

Зачем нужен вызов процедуры по ссылке?

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

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

    Если Имя = "ВерсионированиеОбъектов" Тогда
        Возврат Вычислить("НовыйМодульВерсионированияОбъектов"); 
        Конецесли;
    Если Метаданные.ОбщиеМодули.Найти(Имя) <> Неопределено Тогда
        Модуль = Вычислить(Имя);// ВычислитьВБезопасномРежиме не требуется, т.к. проверка надежная.

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

            МодульЗащитаПерсональныхДанных = ОбщегоНазначения.ОбщийМодуль("ЗащитаПерсональныхДанных");
            #Если Сервер И НЕ Сервер Тогда

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

не работает в edt
   Serg_1960
 
22 - 20.11.18 - 13:42
(18) Прочти ещё раз своё же (3) - баклань, не баклань, а если нет подсистемы БСП, то конфигурация всё равно отвалится :)
   Cyberhawk
 
23 - 20.11.18 - 14:09
(22) Конечно же ничего не отвалится, иначе зачем бы такое делать?
   Dzenn
 
24 - 20.11.18 - 14:22
Ещё один уровень абстракции, появившийся вследствие того, что один и тот же код начали использовать в разных конфигурациях (БСП и может быть что-то ещё)


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