Имя: Пароль:
1C
 
Экранирование кода от проверки синтаксиса
,
0 picom
 
22.02.23
06:37
Здравствуйте!
Имеем расширение1 (Б24), пишем новое расширение2 (пусть будет Б52), в нем ссылка на процедуру из расширения1
И есессно конфигуратор ругается что такого общего модуля нет.
Как экранировать код от проверки?
(вариант с Выполнить не предлагать)
1 RomaH
 
naïve
22.02.23
06:45
в типовых везде
ищется ОМ
присваивается переменной
...
2 АНДР
 
22.02.23
06:52
Если Ложь Тогда
    //Обманываем проверку через объявление переменной
КонецЕсли;
3 Rovan
 
гуру
22.02.23
07:00
млм так Выполнить( "ОМ.Процедура" )
4 RomaH
 
naïve
22.02.23
07:01
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда
        МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент");
        МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(ОповещениеОЗакрытии, ВладелецФормы);
    КонецЕсли;
5 TormozIT
 
гуру
22.02.23
07:30
ОбщегоНазначенияПереопределяемыйМой = Вычислить("ОбщегоНазначенияПереопределяемый");
        #Если Сервер И Не Сервер Тогда
            ОбщегоНазначенияПереопределяемыйМой = ОбщегоНазначенияПереопределяемый;
        #КонецЕсли
        ОбщегоНазначенияПереопределяемыйМой.ПриДобавленииИсключенийПоискаСсылок(Массив);
6 magicSan
 
22.02.23
08:02
даааа, умеют некоторые ненависть к себе кодить
7 НафНаф
 
22.02.23
08:36
(5) какой-то пи*дец. Зачем?
8 s202
 
22.02.23
09:01
(7) Чтобы нам скучно не было. Ты еще спроси, как во внешней обработке свой собственный макет получить.
9 TormozIT
 
гуру
22.02.23
09:51
(7) Покажи свой вариант. Тогда отвечу.
10 lodger
 
22.02.23
10:10
(9) наш вариант уже привели в (4)
11 RomaH
 
naïve
22.02.23
10:13
(10) - он плох что нет контекстной
и нельзя по F12 перейти в процедуру
12 TormozIT
 
гуру
22.02.23
10:51
(10) Я БСПшникам уже предлагал свой вариант https://partners.v8.1c.ru/forum/topic/1596879 , но они побрезговали.
Кому то важнее формальная красота кода, в кому то удобство работы с ним (мне).
13 НафНаф
 
22.02.23
10:52
(9) почему нельзя просто написать:

ОбщегоНазначенияПереопределяемыйМой = ОбщегоНазначенияПереопределяемый;
14 TormozIT
 
гуру
22.02.23
10:53
(13) Садись. Двойка!
15 Гипервизор
 
22.02.23
11:09
(12) А что именно БСПшникам не понравилось? Инструкции препроцессора?
16 НафНаф
 
22.02.23
11:13
(14) это твой развернутый ответ?
17 Fragster
 
гуру
22.02.23
11:42
(12) а будет ли работать контекстная подсказка в случае (0)?
18 mikecool
 
22.02.23
11:50
(5) на одном из проектов тоже пользовались таким способом, только с заведомо ошибочной проверкой
типа
#Если Незнайка Тогда
...
19 mikecool
 
22.02.23
11:51
+18 при компиляции эти блоки удаляются, емнип, без каких то проверок
20 picom
 
22.02.23
11:54
(17) Какие контекстные подсказки, если модули одного расширения дёргаются из другого расширения. Такого даже 8.3.23 еще не умеет.
21 TormozIT
 
гуру
22.02.23
12:11
(20) Согласен. Пока добавку для подсказки ( #Если Сервер И Не Сервер Тогда ) бесполезно добавлять в случае обращения к модулю рожденному другим расширением.
22 НафНаф
 
22.02.23
13:10
(21) так что пока двойка не у меня )))
23 Гипервизор
 
22.02.23
13:16
(22) Это вы ИР так высоко оцениваете, да?)
24 АНДР
 
22.02.23
13:21
(21) Сервер И Не Сервер - надо вникать, Ложь - читается легче.
(22) Если такого модуля нет - будет ошибка.
25 TormozIT
 
гуру
22.02.23
13:37
(22) У тебя двойка за понимание ошибок компиляции.
26 НафНаф
 
22.02.23
13:46
(25) если модуль есть в другом расширении - то все будет хорошо, если его нет, то зачатую лучше иметь ошибку компиляции, чем ошибку выполнения
27 TormozIT
 
гуру
22.02.23
14:53
(26) Компиляция времени выполнения (runtime) действительно ошибки не выдаст. Но это здесь вроде бы всем итак было понятно.

Ты же предлагаешь фактически оставить код (0) как есть, т.е. с прямой ссылкой на модуль другого расширения.
В этом случае компиляция времени разработки (designtime) или по-другому "синтаксический контроль" - будет ругаться на такое обращение к модулю.
Это затрудняет проверку корректности кода модуля в целом. Вот (0) и просит как то локально отключить эту ругань.

Мы ему предложили проверенный кодами подход - чисто динамическую (runtime) компиляцию кода обращения к модулю - через Вычислить("<ИмяМодуля>")
28 НафНаф
 
22.02.23
15:08
(27) надо различать все-таки ошибки компиляции, от синтакс-контроля, тем более в 1С они имеют разные области покрытия. Я не сторонник Вычислить, ибо это попахивает использованием рефлексии не к месту.