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