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

20.02.20

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

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

Всем привет.

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

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

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

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

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

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

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

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

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

ИЛИ

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

 

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

См. также

Сервисы интеграции без Шины и интеграции

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

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

13.03.2024    3202    dsdred    16    

65

Как готовить и есть массивы

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

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

24.01.2024    7479    YA_418728146    25    

69

Планы обмена VS История данных

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

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    7729    dsdred    36    

115

1С-ная магия

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

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

06.10.2023    20089    SeiOkami    46    

124

Дефрагментация и реиндексация после перехода на платформу 8.3.22

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

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    14024    human_new    27    

77

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    10383    YA_418728146    7    

148

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    7002    sebekerga    54    

99
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. json 3324 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 48 08.08.19 15:20 Сейчас в теме
а для чего это &НаСервере? Там же нет работы с пользователем. ОписаниеОповещения - это же чисто интерактивные процедуры, которые серверу не нужны.
Поправьте, если ошибаюсь.
7. Jokemas 192 08.08.19 16:08 Сейчас в теме
(5) бывает запрос надо выполнить по возвращении данных из открытой формы, например, либо еще какие серверные "дела провернуть". Согласен, бывает редко.
10. vandalsvq 1558 11.08.19 09:22 Сейчас в теме
В данном случае это можно считать не багом, а фичей ))))
14. Yashazz 4743 12.08.19 10:42 Сейчас в теме
(5) С помощью "ОписанияОповещения" можно перекидывать процедуру в процедуру, контекст в контекст, и даже попробовать кодить в духе Java
И это совершенно необязательно на клиенте.
11. Yashazz 4743 11.08.19 10:25 Сейчас в теме
Знаю, сталкивался. Тоже сначала обалдел - как это, на сервере, да ещё и не экспортный... А вот так)

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

	

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

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


При вызове Обработчика_Завершения_Загрузки выдает ошибку, что ожидает 4 параметра.
Вопрос:
Каких параметров не хватает?
17. ImHunter 318 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 . Не работает она в вэб-клиенте. Вываливает ошибку - метод /указанный в оповещении/ не обнаружен. Пришлось костылить /ПроверитьЗавершениеЗаполнения /
20. Aleksandr_prof 195 26.09.23 09:30 Сейчас в теме
В 23 платформе в тонком клиенте серверная процедура обработчик отрабатывает. (мне нужна именно серверная).
А вот в веб клиенте пришлось делать по стандарту: обработчик экспортный на клиенте, а далее серверный. Иными словами по такой схеме:
&НаКлиенте
МояПроцедура(Команда);

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

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