Имя: Пароль:
1C
 
Puzzlers из мира 1С
, , , ,
0 fisher
 
02.11.20
16:48
Если в секции инициализации модуля формы внешней обработке УФ написать вывод сообщения и открыть обработку - сообщение выведется четыре раза.
Два раза - понятно почему. Но почему два раза? :)
1 Fedor-1971
 
02.11.20
16:50
(0) и почему понятно вывод сообщения 2 раза?
2 fisher
 
02.11.20
16:50
(1) А это вопрос на сообразительность :)
3 Fedor-1971
 
02.11.20
16:57
(2) так куда положил вывод сообщения? в ПриСозданииНаСервере?
4 Asmody
 
02.11.20
17:00
(3) Написано русским языком "в секции инициализации модуля формы"
5 fisher
 
02.11.20
17:01
(3) Не. В доке 1С по структуре программных модулей это почему-то называют "разделом основной программы", хотя это всегда называлось секцией инициализации. Короче просто в модуле пишешь. Вне процедур и функций.
6 Вафель
 
02.11.20
17:03
зачем пытаться понять пому косячный код косячит?
7 H A D G E H O G s
 
02.11.20
17:04
Подключить-Создать?
8 fisher
 
02.11.20
17:06
(7) Очень, очень правдоподобно. Бинго, я бы сказал.
Потому что во встроенной обработке выводится два раза.
9 Многолетний Апельсин
 
02.11.20
17:10
Очень любопытно,
Сделал такой код:
#Если НаКлиенте Тогда
    Сообщить("НаКлиенте");
#ИначеЕсли НаСервере Тогда
    Сообщить("НаСервере")
#КонецЕсли

Платформа пишет:
НаСервере
НаСервере
НаСервере
НаКлиенте

Интересно, откуда 3-й раз "НаСервере"?
10 fisher
 
02.11.20
17:20
(9) Да, не сростается...
Видать еще какая-то фича внешних обработок срабатывает. Может, что-то с защитой от опасных действий связанное... Ну да гадать бесполезно.
11 Ботаник Гарден Меран
 
02.11.20
17:46
Похоже на кэш метаданных.
Если изменить внутреннее имя обработки, то выведется четыре сообщения (три "НаСервере" и одно "НаКлиенте").
При повторном открытии - два ("НаСервере" и "НаКлиенте").
12 Жан Пердежон
 
02.11.20
17:48
кстати да, тоже 2 раза выводилось, пока имя не поменял
13 Fedor-1971
 
02.11.20
17:49
(9) так нормально
1 Компиляция для серверных процедур
2 компиляция для клиентских процедур
3 Собственно вызов НаСервере
4 вызов НаКлиенте
14 fisher
 
02.11.20
17:50
(11) Похоже именно на Подключить-Создать (оно как кэш в том числе и работает). Почему-то при подключении два раза инициализирует.
15 fisher
 
02.11.20
17:54
Просто при повторном открытии менеджер внешних обработок находит ее в уже подключенных и открывает без спецэффектов.
16 mistеr
 
02.11.20
18:00
(13) При компиляции выполняется код? О_О
17 Fedor-1971
 
02.11.20
18:03
(16) 1с Интерпретатор с кэшем кода. Не?
18 mistеr
 
02.11.20
18:10
(17) ХЗ, но ЗАЧЕМ?!
19 fisher
 
02.11.20
18:11
Хотя не очень понятно, зачем вообще инициализировать модуль при подключении внешней обработки, не говоря уже про два раза. Похоже на багофичу.
20 Fedor-1971
 
03.11.20
09:39
(19) Возможно и баг, логика примерно такая:
компилим модуль, отправляем его в кэш и выполняем то, что не относится к обработчикам событий или функциям (типа выполняем инициализационные мероприятия).

Вот система и дёргает код вывода сообщения лишних 2 раза, вполне возможно, что сия фича появилась с защитой от опасных действий
21 mistеr
 
03.11.20
12:14
(20) Бредовая логика. При компиляции невозможно ничего выполнить, т.к. нет контекста.
22 Fedor-1971
 
03.11.20
12:28
(21) не совсем, мы дёрнули подключение внешней обработки и контекст таки есть,
а вот выполнить код инициализации формы сразу после компиляции, тут, наверно, есть какой-то глубинный смысл или косяк в платформе, а может то и другое в одном флаконе.
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.