На клиенте или на сервере (описание оповещения)

20.02.20

Разработка - Механизмы платформы 1С

Описание оповещения на сервере, да еще и не экспорт? Возможно все...

Всем привет.

Поискал на Инфостарте и не нашел подобной темы, надеюсь, что это не "баян". Итак, друзья. 

Ковыряясь в конфигураторе, случайно допустил, как мне казалось, ошибку в коде, используя в качестве процедуры описания оповещения серверную не экспортную процедуру, но, как оказалось, это работает.

При этом, если обратиться к ИТС, то станет очевидно, что процедура обязательно должна быть экспортной, однако работает и так. Если же использовать клиентскую процедуру, то "экспорт" обязателен. Обновление: на платформе 8.13 и далее экспорт писать обязательно.

Кроме того, есть возможность использовать сразу серверную процедуру, если того требует задача, без промежуточного "клиентского" звена - это тоже оказалось неожиданным, так как во всех мануалах, да и на ИТС во всех скриншотах указывается, что процедура используется "&НаКлиенте" и с экспортом. Оказывается, все не так однозначно.

Объект встроенного языка ОписаниеОповещения

Назначение этого объекта - указать точку конфигурации, с которой должно быть продолжено исполнение кода после того, как пользователь закроет блокирующее окно. Этот объект содержит имя экспортируемой процедуры, которая начнёт выполняться, а также указание на модуль, в котором находится эта процедура.

Если процедура находится в том же модуле, в котором создаётся описание оповещения, то для указания на этот модуль используется значение ЭтотОбъект. Это новое свойство, реализованное для управляемой формы, команды командного интерфейса и общего модуля. Именно в этих модулях может находиться процедура обработки оповещения. Пример есть в разделе Вопрос в модуле команды, формы или в общем модуле.

Иногда возникает необходимость разместить обработчик оповещения не в том модуле, в котором создаётся описание оповещения, а в другом, например, в общем модуле. В таком случае вместо ЭтотОбъект можно указать имя общего модуля. Пример можно посмотреть в разделе Вопрос в модуле управляемого приложения.

Кроме этих параметров описание оповещения может содержать структуру с произвольными данными. Передача этих данных в обработчик оповещения может понадобиться для того, чтобы алгоритм, выполняемый после реакции пользователя, мог использовать значения, вычисленные перед открытием блокирующего окна. Такой пример можно посмотреть в разделе Как передать дополнительную информацию в форму, открываемую в блокирующем режиме.

ИЛИ

Особенность этого примера заключается в том, что нет возможности сослаться на модуль приложения с помощью свойства ЭтотОбъект. Поэтому процедуру, обрабатывающую оповещение, нужно располагать, например, в неглобальном клиентском общем модуле. В конструкторе описания оповещения на такой модуль можно сослаться, просто указав его имя:

 

Данная особенность обнаружена на платформе 8.3.12.1790, 8.3.13.1865 и 8.3.15.1534, но скорее всего появилась намного раньше, работает в тонком и толстом клиенте.

См. также

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    8450    bayselonarrend    20    

156

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример использования «Сервисов интеграции» без подключения к Шине и без обменов.

13.03.2024    6458    dsdred    18    

80

Механизмы платформы 1С Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    19899    YA_418728146    26    

72

Механизмы платформы 1С Программист Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    24399    SeiOkami    48    

135

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    15471    YA_418728146    7    

169
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. json 3352 08.08.19 14:17 Сейчас в теме
Да, есть такая тема.
Метод на сервере формы всегда экспортный.
Об этом даже статья была у Аrtbear

А вот про то, что в описании оповещения можно использовать серверную процедуру - это новость для меня.
Интересно

И картинка, кстати, зачетная)
Onaisoft; Светлый ум; Merkalov; koln; Jokemas; CyberCerber; +6 Ответить
2. VmvLer 08.08.19 14:30 Сейчас в теме
(1) В СП ничего не сказано о контекстах методов

Новый ОписаниеОповещения(<ИмяПроцедуры>, <Модуль>, <ДополнительныеПараметры>, <ИмяПроцедурыОбработкиОшибки>, <МодульОбработкиОшибки>)

Параметры:
<ИмяПроцедуры> (необязательный)
Тип: Строка, Неопределено. Имя экспортируемой процедуры модуля, которая будет вызвана.

<Модуль> (необязательный)
Тип: ФормаКлиентскогоПриложения, КомандаКомандногоИнтерфейса, ОбщийМодуль, Строка, Неопределено. Программный модуль, процедура которого будет вызвана.
При использовании типа ФормаКлиентскогоПриложения будет вызван метод модуля указанной формы
3. Jokemas 192 08.08.19 14:31 Сейчас в теме
(1) Спасибо за разъяснение. Буду знать =)
4. Ilya_138 08.08.19 15:03 Сейчас в теме
Это баг платофрмы. На 13 платформе этот код работать не будет, поэтому не рекомендую использовать такие конструкции.
Alien_RS_Forever; +1 Ответить
6. Jokemas 192 08.08.19 16:05 Сейчас в теме
(4) Вранье. Проверил на 8.3.13.1865 и 8.3.15.1534 - работает как вверху написано.
check2; CyberCerber; +2 Ответить
8. Ilya_138 08.08.19 16:46 Сейчас в теме
(6) совместимость значит осталась с 12 платформой или ниже. На голой конфе созданной в 13 платформе (8.3.13.1865) такой финт ушами уже не работает.
+ в патч-нотах 13 платформы есть описания изменений, связанных с экспортными функциями форм. Там что-то другое было, не связанное с оповещениями, но какие-то доработки были.

upd: Как и говорил, на 13 без совместимости - не работает, на 13 в режиме совместимости с 12 - работает.
Мораль: избегать использование недокументированных особенностей плаформы, если хочется писать стабильный код (:
Прикрепленные файлы:
artichoke; Danila-Master; ltfriend; ZLENKO; Alien_RS_Forever; CyberCerber; Evg-Lylyk; +7 Ответить
9. Jokemas 192 08.08.19 17:33 Сейчас в теме
(8) Проверил, да экспорт нужен 15 платформа, но на сервере работает:
Прикрепленные файлы:
5. Denis_CFO 49 08.08.19 15:20 Сейчас в теме
а для чего это &НаСервере? Там же нет работы с пользователем. ОписаниеОповещения - это же чисто интерактивные процедуры, которые серверу не нужны.
Поправьте, если ошибаюсь.
7. Jokemas 192 08.08.19 16:08 Сейчас в теме
(5) бывает запрос надо выполнить по возвращении данных из открытой формы, например, либо еще какие серверные "дела провернуть". Согласен, бывает редко.
10. vandalsvq 1592 11.08.19 09:22 Сейчас в теме
В данном случае это можно считать не багом, а фичей ))))
14. Yashazz 4796 12.08.19 10:42 Сейчас в теме
(5) С помощью "ОписанияОповещения" можно перекидывать процедуру в процедуру, контекст в контекст, и даже попробовать кодить в духе Java
И это совершенно необязательно на клиенте.
11. Yashazz 4796 11.08.19 10:25 Сейчас в теме
Знаю, сталкивался. Тоже сначала обалдел - как это, на сервере, да ещё и не экспортный... А вот так)

Единственно, не понял, зачем ради этого тему на ИС создавать.
13. &rew 52 12.08.19 06:20 Сейчас в теме
(11)Да нормально, пусть будет. Многие уважаемые 1с ники на это спотыкались, решали и дальше пошли. А вот те, кто еще не сталкивался, очень будут благодарны, т.к. ИС в топе запросов на эту тему будет
12. Eret1k 11.08.19 18:34 Сейчас в теме
Спасибо автору, буду знать, может когда-нибудь воспользуюсь данной возможностью.
15. markers 277 15.08.19 07:31 Сейчас в теме
Тоже как-то давно решил проверить работоспособность варианта вызова сразу на сервере оповещения (требовалось задачей) и оказалось что работает без проблем, у меня 8.3.10. Вообще я ни чуть этому не удивлен, так как по завершению, происходит обычный вызов процедуры, а уж в каком контексте она это уже не важно, только главное чтобы она была видима с клиента.
16. vkozak 10.12.19 13:05 Сейчас в теме
Спасибо автору, дал толчок к пониманию.
Попытался оповещением воспользоваться для выбора файла:
&НаКлиенте
Процедура Обработчик_Завершения_Загрузки(Результат, ДополнительныеПараметры) Экспорт 

	

КонецПроцедуры // Обработчик_Завершения_Загрузки()
 

&НаКлиенте
Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	СтандартнаяОбработка=ложь;
	//#Если ВебКлиент Тогда
		ДиалогОткрытия = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); 
		ДиалогОткрытия.Заголовок = "Собственный заголовок диалога загрузки файла"; 
		ДиалогОткрытия.ПолноеИмяФайла = "";
		Фильтр = "XBase, *.dbf|*.DBf";
		ДиалогОткрытия.Фильтр = Фильтр;
		ДиалогОткрытия.МножественныйВыбор = ложь;
		ОбработкаОкончанияЗагрузки = Новый ОписаниеОповещения("Обработчик_Завершения_Загрузки", ЭтотОбъект, ДиалогОткрытия); 
		НачатьПомещениеФайла(ОбработкаОкончанияЗагрузки, , ДиалогОткрытия, Истина, УникальныйИдентификатор);	
Показать


При вызове Обработчика_Завершения_Загрузки выдает ошибку, что ожидает 4 параметра.
Вопрос:
Каких параметров не хватает?
17. ImHunter 328 10.12.19 15:12 Сейчас в теме
(16) Написано ведь в СП для НачатьПомещениеФайла:
...
<ОписаниеОповещенияОЗавершении> (необязательный)
Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после завершения помещения файла со следующими параметрами:
<Результат> - Ложь - в параметре <Интерактивно> установлен интерактивный режим (Истина) и пользователь отказался от выполнения операции в диалоге выбора файла,
<Адрес> - расположение нового файла,
<ПомещаемыйФайл> - Через этот параметр возвращается путь к файлу, указанный в диалоге выбора файла. Для неинтерактивного режима выбранное имя файла соответствует начальному имени файла. В веб-клиенте значение параметра зависит от типа браузера. Для Microsoft Internet Explorer возвращаемое значение зависит от настройки текущей зоны. Подробности: http://msdn.microsoft.com/en-us/library/ms535128(VS.85).aspx,
<ДополнительныеПараметры> - значение, которое было указано при создании объекта ОписаниеОповещения.

Вот, 4 пар-ра
18. vkozak 10.12.19 15:31 Сейчас в теме
19. user646881_rudalex 1 14.09.20 18:37 Сейчас в теме
Вот налетел на эту "фичу" в типовой конфигурации БГУ 2.0 . Не работает она в вэб-клиенте. Вываливает ошибку - метод /указанный в оповещении/ не обнаружен. Пришлось костылить /ПроверитьЗавершениеЗаполнения /
Windsor77; +1 Ответить
20. Aleksandr_prof 198 26.09.23 09:30 Сейчас в теме
В 23 платформе в тонком клиенте серверная процедура обработчик отрабатывает. (мне нужна именно серверная).
А вот в веб клиенте пришлось делать по стандарту: обработчик экспортный на клиенте, а далее серверный. Иными словами по такой схеме:
&НаКлиенте
МояПроцедура(Команда);

&НаКлиенте
МояПроцедураЗавершение(Результат, ДополнительныеПараметры) Экспорт

&НаСервере
МояПроцедураЗавершениеНаСервере(КакойТоПараметр)
Windsor77; +1 Ответить
Оставьте свое сообщение