Ошибка при вызове конструктора описаниеоповещения не найден экспортируемый метод

Не найден экспортируемый метод: ВыборКодаЗавершение

Я
   TolstiyBeremenniy

14.09.18 — 07:12

У формы записи регистра сведений делаю подбор, у одного поля.

По подобию подбора в типовом документе. Но выходит ошибка

{РегистрСведений.КоэффициентыРасчетаЗемельногоНалога.Форма.ФормаЗаписи.Форма(19)}: Ошибка при вызове конструктора (ОписаниеОповещения)

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтотОбъект.Запись, ДополнительныеПараметры);

по причине:

Не найден экспортируемый метод: ВыборКодаЗавершение

Эта процедура же есть в модуле, почему ругается?

&НаКлиенте

Процедура КодКатегорииЗемельНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    ВыборКода(«КодКатегорииЗемель», «КатегорииЗемельныхУчастков»);

КонецПроцедуры

&НаКлиенте

Процедура ВыборКода(ИмяКода, НазваниеМакета)

    СтандартнаяОбработка = Ложь;

    ПараметрыФормы = Новый Структура;

    ПараметрыФормы.Вставить(«ТипОбъекта»,      «РегистрСведений»);

    ПараметрыФормы.Вставить(«НазваниеОбъекта», «РегистрацияЗемельныхУчастков»);

    ПараметрыФормы.Вставить(«НазваниеМакета»,  НазваниеМакета);

    ПараметрыФормы.Вставить(«ТекущийПериод»,   ЭтотОбъект.Запись.Период);

    ПараметрыФормы.Вставить(«ТекущийКод»,      ЭтотОбъект.Запись[ИмяКода]);

    ДополнительныеПараметры = Новый Структура;

    ДополнительныеПараметры.Вставить(«ИмяКода», ИмяКода);

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтотОбъект.Запись, ДополнительныеПараметры);

    ОткрытьФорму(«ОбщаяФорма.ФормаВыбораКода», ПараметрыФормы,,,,,ОповещениеОЗакрытии);

КонецПроцедуры

&НаКлиенте

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

    ИмяКода      = ДополнительныеПараметры.ИмяКода;

    ВыбранныйКод = РезультатЗакрытия;

    Если ВыбранныйКод <> Неопределено Тогда

        Модифицированность  = Истина;

        ЭтотОбъект.Запись[ИмяКода] = ВыбранныйКод;

    КонецЕсли;

КонецПроцедуры

   TolstiyBeremenniy

1 — 14.09.18 — 07:39

Подскажете по вопросу? Я чего то не вижу или недопонимаю. Процедура есть, а ОписаниеОповещения её не видит?

   Mankubus

2 — 14.09.18 — 07:45

(0) >>ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтотОбъект.Запись, ДополнительныеПараметры);

Зачем здесь «ЭтотОбъект.Запись»? Напиши ЭтаФорма

   TolstiyBeremenniy

3 — 14.09.18 — 07:51

(2) Этот код я взял с формы одного типового документа.

Тым везде было Объект. В форме регистра сведений на Объект

шла ошибка. Я написал везде ЭтотОбъект. А ЭтотОбъект.Запись,

так как у регистра сведений значения полей тут хранятся.

Пока ещё не запустил этот код.

Сейчас попробую написать ЭтаФорма.

   TolstiyBeremenniy

4 — 14.09.18 — 08:01

Все равно ошибка ((((( Что нужно поправить? Что не так?

{РегистрСведений.КоэффициентыРасчетаЗемельногоНалога.Форма.ФормаЗаписи.Форма(19)}: Ошибка при вызове конструктора (ОписаниеОповещения)

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтаФорма, ДополнительныеПараметры);

по причине:

Не найден экспортируемый метод: ВыборКодаЗавершение

   TolstiyBeremenniy

5 — 14.09.18 — 08:06

Что не так????

&НаКлиенте

Процедура КодКатегорииЗемельНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    ВыборКода(«КодКатегорииЗемель», «КатегорииЗемельныхУчастков»);

КонецПроцедуры

&НаКлиенте

Процедура ВыборКода(ИмяКода, НазваниеМакета)

    СтандартнаяОбработка = Ложь;

    ПараметрыФормы = Новый Структура;

    ПараметрыФормы.Вставить(«ТипОбъекта»,      «РегистрСведений»);

    ПараметрыФормы.Вставить(«НазваниеОбъекта», «РегистрацияЗемельныхУчастков»);

    ПараметрыФормы.Вставить(«НазваниеМакета»,  НазваниеМакета);

    ПараметрыФормы.Вставить(«ТекущийПериод»,   ЭтотОбъект.Запись.Период);

    ПараметрыФормы.Вставить(«ТекущийКод»,      ЭтотОбъект.Запись[ИмяКода]);

    ДополнительныеПараметры = Новый Структура;

    ДополнительныеПараметры.Вставить(«ИмяКода», ИмяКода);

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтаФорма, ДополнительныеПараметры);

    ОткрытьФорму(«ОбщаяФорма.ФормаВыбораКода», ПараметрыФормы,,,,,ОповещениеОЗакрытии);

КонецПроцедуры

&НаКлиенте

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

    ИмяКода      = ДополнительныеПараметры.ИмяКода;

    ВыбранныйКод = РезультатЗакрытия;

    Если ВыбранныйКод <> Неопределено Тогда

        Модифицированность  = Истина;

        ЭтотОбъект.Запись[ИмяКода] = ВыбранныйКод;

    КонецЕсли;

КонецПроцедуры

   Остап Сулейманович

6 — 14.09.18 — 08:11

(5) Вот здесь :

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

нет слова Экспорт

   TolstiyBeremenniy

7 — 14.09.18 — 08:23

И так тоже ошибка ((((((

{РегистрСведений.КоэффициентыРасчетаЗемельногоНалога.Форма.ФормаЗаписи.Форма(19)}: Ошибка при вызове конструктора (ОписаниеОповещения)

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтотОбъект, ДополнительныеПараметры);

по причине:

Не найден экспортируемый метод: ВыборКодаЗавершение

(6) Оно было, я его убрал. Убрал так как ошибка шла, не знал что менять. Сейчас верну.

   TolstiyBeremenniy

8 — 14.09.18 — 08:28

(6) Да, спасибо! Если я не ошибаюсь пошло! Забыл я про это слово Экспорт. Но почему первый раз с ним не работало не понятно.

   Пробел

9 — 14.09.18 — 08:33

В первый раз не пошло из-за «ЭтотОбъект.Запись», во второй из-за Экспорта)

Вторым параметром указывается модуль, откуда будет вызвана процедура, а Вы указали какой-то реквизит объекта.

   TolstiyBeremenniy

10 — 14.09.18 — 08:35

(9) Понятно. Спасибо. Методом проб и ошибок делал.

  

TolstiyBeremenniy

11 — 14.09.18 — 14:51

(9) В документе нужно писать Объект

и Экспорт есть

вот я и не пойму

Ошибка при вызове конструктора ОписаниеОповещения по причине: Не найден экспортируемый метод

Иногда при немодальном вызове с использование описаний  оповещений выходит ошибка

Ошибка при вызове конструктора (ОписаниеОповещения)
ПоказатьВводСтроки(Новый ОписаниеОповещения(«_ПослеВводаШтрихКода»,ЭтаФорма),,»Введите штрихкод»,13,Ложь);
по причине:
Не найден экспортируемый метод:

Это говорит что для процедуры _ПослеВводаШтрихКода() исполняемой на клиенте надо добавить директиву Экспорт в конце, иначе она не будет видна.

Либо данную процедуру надо сделать с директивой &НаСервере

Люди глупо доверчивы… Вся реклама мира основана на трех принципах: «Хорошо, много и даром». Поэтому можно давать скверно, мало и дорого.

Не найден экспортируемый метод: ВыборКодаЗавершение

Я

  

TolstiyBeremenniy

14.09.18 — 07:12

У формы записи регистра сведений делаю подбор, у одного поля.

По подобию подбора в типовом документе. Но выходит ошибка

{РегистрСведений.КоэффициентыРасчетаЗемельногоНалога.Форма.ФормаЗаписи.Форма(19)}: Ошибка при вызове конструктора (ОписаниеОповещения)

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтотОбъект.Запись, ДополнительныеПараметры);

по причине:

Не найден экспортируемый метод: ВыборКодаЗавершение

Эта процедура же есть в модуле, почему ругается?

&НаКлиенте

Процедура КодКатегорииЗемельНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    ВыборКода(«КодКатегорииЗемель», «КатегорииЗемельныхУчастков»);

КонецПроцедуры

&НаКлиенте

Процедура ВыборКода(ИмяКода, НазваниеМакета)

    СтандартнаяОбработка = Ложь;

    ПараметрыФормы = Новый Структура;

    ПараметрыФормы.Вставить(«ТипОбъекта»,      «РегистрСведений»);

    ПараметрыФормы.Вставить(«НазваниеОбъекта», «РегистрацияЗемельныхУчастков»);

    ПараметрыФормы.Вставить(«НазваниеМакета»,  НазваниеМакета);

    ПараметрыФормы.Вставить(«ТекущийПериод»,   ЭтотОбъект.Запись.Период);

    ПараметрыФормы.Вставить(«ТекущийКод»,      ЭтотОбъект.Запись[ИмяКода]);

    ДополнительныеПараметры = Новый Структура;

    ДополнительныеПараметры.Вставить(«ИмяКода», ИмяКода);

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтотОбъект.Запись, ДополнительныеПараметры);

    ОткрытьФорму(«ОбщаяФорма.ФормаВыбораКода», ПараметрыФормы,,,,,ОповещениеОЗакрытии);

КонецПроцедуры

&НаКлиенте

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

    ИмяКода      = ДополнительныеПараметры.ИмяКода;

    ВыбранныйКод = РезультатЗакрытия;

    Если ВыбранныйКод <> Неопределено Тогда

        Модифицированность  = Истина;

        ЭтотОбъект.Запись[ИмяКода] = ВыбранныйКод;

    КонецЕсли;

КонецПроцедуры

  

TolstiyBeremenniy

1 — 14.09.18 — 07:39

Подскажете по вопросу? Я чего то не вижу или недопонимаю. Процедура есть, а ОписаниеОповещения её не видит?

  

Mankubus

2 — 14.09.18 — 07:45

(0) >>ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтотОбъект.Запись, ДополнительныеПараметры);

Зачем здесь «ЭтотОбъект.Запись»? Напиши ЭтаФорма

  

TolstiyBeremenniy

3 — 14.09.18 — 07:51

(2) Этот код я взял с формы одного типового документа.

Тым везде было Объект. В форме регистра сведений на Объект

шла ошибка. Я написал везде ЭтотОбъект. А ЭтотОбъект.Запись,

так как у регистра сведений значения полей тут хранятся.

Пока ещё не запустил этот код.

Сейчас попробую написать ЭтаФорма.

  

TolstiyBeremenniy

4 — 14.09.18 — 08:01

Все равно ошибка ((((( Что нужно поправить? Что не так?

{РегистрСведений.КоэффициентыРасчетаЗемельногоНалога.Форма.ФормаЗаписи.Форма(19)}: Ошибка при вызове конструктора (ОписаниеОповещения)

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтаФорма, ДополнительныеПараметры);

по причине:

Не найден экспортируемый метод: ВыборКодаЗавершение

  

TolstiyBeremenniy

5 — 14.09.18 — 08:06

Что не так????

&НаКлиенте

Процедура КодКатегорииЗемельНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

    СтандартнаяОбработка = Ложь;

    ВыборКода(«КодКатегорииЗемель», «КатегорииЗемельныхУчастков»);

КонецПроцедуры

&НаКлиенте

Процедура ВыборКода(ИмяКода, НазваниеМакета)

    СтандартнаяОбработка = Ложь;

    ПараметрыФормы = Новый Структура;

    ПараметрыФормы.Вставить(«ТипОбъекта»,      «РегистрСведений»);

    ПараметрыФормы.Вставить(«НазваниеОбъекта», «РегистрацияЗемельныхУчастков»);

    ПараметрыФормы.Вставить(«НазваниеМакета»,  НазваниеМакета);

    ПараметрыФормы.Вставить(«ТекущийПериод»,   ЭтотОбъект.Запись.Период);

    ПараметрыФормы.Вставить(«ТекущийКод»,      ЭтотОбъект.Запись[ИмяКода]);

    ДополнительныеПараметры = Новый Структура;

    ДополнительныеПараметры.Вставить(«ИмяКода», ИмяКода);

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтаФорма, ДополнительныеПараметры);

    ОткрытьФорму(«ОбщаяФорма.ФормаВыбораКода», ПараметрыФормы,,,,,ОповещениеОЗакрытии);

КонецПроцедуры

&НаКлиенте

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

    ИмяКода      = ДополнительныеПараметры.ИмяКода;

    ВыбранныйКод = РезультатЗакрытия;

    Если ВыбранныйКод <> Неопределено Тогда

        Модифицированность  = Истина;

        ЭтотОбъект.Запись[ИмяКода] = ВыбранныйКод;

    КонецЕсли;

КонецПроцедуры

  

Остап Сулейманович

6 — 14.09.18 — 08:11

(5) Вот здесь :

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

нет слова Экспорт

  

TolstiyBeremenniy

7 — 14.09.18 — 08:23

И так тоже ошибка ((((((

{РегистрСведений.КоэффициентыРасчетаЗемельногоНалога.Форма.ФормаЗаписи.Форма(19)}: Ошибка при вызове конструктора (ОписаниеОповещения)

    ОповещениеОЗакрытии = Новый ОписаниеОповещения(«ВыборКодаЗавершение», ЭтотОбъект, ДополнительныеПараметры);

по причине:

Не найден экспортируемый метод: ВыборКодаЗавершение

(6) Оно было, я его убрал. Убрал так как ошибка шла, не знал что менять. Сейчас верну.

  

TolstiyBeremenniy

8 — 14.09.18 — 08:28

(6) Да, спасибо! Если я не ошибаюсь пошло! Забыл я про это слово Экспорт. Но почему первый раз с ним не работало не понятно.

  

Пробел

9 — 14.09.18 — 08:33

В первый раз не пошло из-за «ЭтотОбъект.Запись», во второй из-за Экспорта)

Вторым параметром указывается модуль, откуда будет вызвана процедура, а Вы указали какой-то реквизит объекта.

  

TolstiyBeremenniy

10 — 14.09.18 — 08:35

(9) Понятно. Спасибо. Методом проб и ошибок делал.

  

TolstiyBeremenniy

11 — 14.09.18 — 14:51

(9) В документе нужно писать Объект

и Экспорт есть

вот я и не пойму

ОписаниеОповещения — объект встроенного языка 1С:Предприятия, указывающий на процедуру, в которой будет продолжено исполнение кода при наступлении определенного события.

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

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

Основным инструментом отказа от модальности стало ОписаниеОповещения.

Содержание

  1. Как работает ОписаниеОповещения
  2. Синтаксис
  3. Вызываемая процедура и её параметры
  4. Выполнение обработки оповещения
  5. Работа на сервере
  6. Возможные ошибки
  7. Не найден экспортируемый метод
  8. Количество параметров 1. Ожидаемое количество – 2
  9. Примеры использования ОписаниеОповещения
  10. Оповещение о закрытии формы
  11. Ввод значений и предупреждения
  12. Проверка существования файла и передача описания оповещения через дополнительные параметры

Как работает ОписаниеОповещения

Для начала разберем как работает платформа с модальными окнами на примере метода Вопрос(). Напишем не хитрый код, в котором пользователю показывается диалог с вопросом и вариантами ответа Да и Нет.

Процедура ВыполнитьКоманду(Команда)
	
    Ответ = Вопрос("Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры

В данном случае пользователю будет показан диалог, а работа клиентской части будет полностью приостановлена до момента, пока пользователь не ответит на вопрос.

Диалог с ОписаниеОповещения

Тогда результат поместится в переменную Ответ и только после этого работа клиентской части будет возобновлена для выполнения алгоритма заполнения.

Напишем аналогичный пример, но уже без модального вызова. Будем использовать метод ПоказатьВопрос(), которому передадим ОписаниеОповещения.

&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
	
    Оповещение = Новый ОписаниеОповещения("ОбработатьОтветПользователя", ЭтаФорма);
	
    ПоказатьВопрос(Оповещение, "Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
	
    // Дальнейший алгоритм
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьОтветПользователя(Ответ, ДополнительныеПараметры) Экспорт 
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры	

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

После ответа пользователя будет вызвана процедура ОбработатьОтветПользователя(), которую мы указали в конструкторе ОписаниеПоповещения и только тогда будет выполнен алгоритм заполнения.

Описание функционала от разработчиков на ИТС

Синтаксис

Конструктор ОписаниеОповещения имеет 5 необязательных параметров:

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

ИмяПроцедуры — Имя экспортируемой процедуры, которая будет вызвана;

Модуль — Модуль в котором расположена вызываемая процедура. Могут быть указаны Форма, Общий модуль, Команда командного интерфейса;

ДополнительныеПараметры — Произвольное значение, которое будет передано в вызываемую процедуру последним параметром;

ИмяПроцедурыОбработкиОшибки — Имя экспортируемой процедуры, которая будет вызвана в случае ошибки;

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

Вызываемая процедура и её параметры

Вызываемая процедура должна быть экспортируемой, и в самом простом случае содержать два параметра Результат и ДополнительныеПараметры.

&НаКлиенте
Процедура ПроцедураОбработкиОповещения(Результат, ДополнительныеПараметры) Экспорт 
	
    Если Результат = Неопределено Тогда 
        Возврат;
    КонецЕсли;
	
    // Код для обработки результата
	
КонецПроцедуры

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

Например вызываемая процедура для обработки оповещения метода глобального контекста НачатьПомещениеФайла() должна иметь 4 параметра.

Для избежания ошибок обращайтесь к Синтаксис-помощнику, там описано количество и порядок необходимых параметров.

Выполнение обработки оповещения

В платформе реализован метод  ВыполнитьОбработкуОповещения(), для возможности непосредственного выполнения обработки оповещения.

Методу в качестве параметра необходимо передать ОписаниеОповещения, которое будет выполнено. Так же можно передать в процедуру обработки произвольный результат вторым необязательным параметром.

&НаКлиенте
Процедура ВыполнениеОписанияОповещения(Команда)
	
    Оповещение = Новый ОписаниеОповещения("ОбработатьОтветПользователя", ЭтаФорма);
    ВыполнитьОбработкуОповещения(Оповещение, КодВозвратаДиалога.Да); 
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьОтветПользователя(Ответ, ДополнительныеПараметры) Экспорт 
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры

Работа на сервере

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

&НаКлиенте
Процедура ОбрабокаЗакрытияФормы(Команда)
		
    Оповещение = Новый ОписаниеОповещения("ПослеПодбора", ЭтаФорма);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", , ЭтаФорма, , , , Оповещение);

КонецПроцедуры

&НаСервере
Процедура ПослеПодбора(РезультатЗакрытия, ДополнительныеПараметры) Экспорт 
		
    Если Не РезультатЗакрытия = Неопределено Тогда 
	Возврат;
    КонецЕсли;	
	
// Обработка результата выбора
	
КонецПроцедуры

Возможные ошибки

Не найден экспортируемый метод

Если вызываемая процедура не экспортная, то при исполнении будет вызвано исключение. Решается указанием экспортной процедуры.

Не найден экспортируемый метод

Количество параметров 1. Ожидаемое количество – 2

Если вызываемая процедура будет объявлена с одним параметром, то при исполнении будет вызвано исключение. Решается добавлением второго параметра в вызываемую процедуру.

Количество параметров 1. Ожидаемое количество – 2

Примеры использования ОписаниеОповещения

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

Оповещение о закрытии формы

Реализуем функционал открытия формы подбора с дальнейшей обработкой результата

&НаКлиенте
Процедура Подбор(Команда)
	
    // Параметры для работы подбора
    ПараметрыПодбора = Новый Структура;
    ПараметрыПодбора.Вставить("Параметр1", Истина);
    ПараметрыПодбора.Вставить("Параметр2", Ложь);
	
    // Опишем процедуру, которая будет вызвана после подбора
    Оповещение	= Новый ОписаниеОповещения("ПослеПодбора", ЭтаФорма);
	
    // Заблокируем форму владельца
    РежимОткрытия	= РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
	
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора", ПараметрыПодбора, ЭтаФорма, , , , Оповещение, РежимОткрытия);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодбора(РезультатЗакрытия, ДополнительныеПараметры) Экспорт 
	
    Если РезультатЗакрытия = Неопределено Тогда 
	Возврат;
    КонецЕсли;
	
    // Код для обработки результата подбора
	
КонецПроцедуры

Ввод значений и предупреждения

Реализуем функционал ввода числа. После ввода выполним проверку на четность введенного числи, если число не четное выведем предупреждение

&НаКлиенте
Процедура ВвестиЧетноеЧисло(Команда)

    Оповещение	= Новый ОписаниеОповещения("ПослеВводаЧисла", ЭтаФорма);
    Подсказка	= "Введите четное число";
    ПоказатьВводЧисла(Оповещение, , Подсказка);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВводаЧисла(ВведенноеЧисло, ДополнительныеПараметры) Экспорт 

    // Если пользователь откажется от ввода вернется Неопределено	
    Если ВведенноеЧисло = Неопределено Тогда	 
        Возврат;
    КонецЕсли;
	
    ЧислоЧетное = ВведенноеЧисло % 2 = 0;
	
    Если Не ЧислоЧетное Тогда
        // Первый параметр не обязателен. Если не надо обрабатывать
        // завершение предупреждения просто не заполняем 
	ПоказатьПредупреждение( , "Введено не четное число");
    КонецЕсли;	
	
КонецПроцедуры

Проверка существования файла и передача описания оповещения через дополнительные параметры

При работе на стороне клиента, например с оборудованием, логику работы системы можно организовать при помощи оповещений. Можно передавать ОписаниеОповещения в качестве следующего шага, ветвления логики или вызывать одно оповещение из нескольких мест.

Разработаем функционал проверки существования файла. В модуле реализована процедура для централизованной обработки ошибок ОповеститьОбОшибке(), будем передавать ОписаниеОповещения об ошибке через дополнительные параметры.

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
	
	ПутьКФайлу = ПутьКФайлуФлагу();
	
	// Оповещение для обработки ошибки
	ОповещениеОбОшибке = Новый ОписаниеОповещения("ОповеститьОбОшибке", ЭтаФорма);
	
	// Оповещение проверки существоания файла
	// с передачей оповещения об ошибке через дополнительные параметры
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ОповещениеОбОшибке", ОповещениеОбОшибке);
	
	ОповещениеПроверки = Новый ОписаниеОповещения("ПослеПроверкиСуществованияФайла", ЭтаФорма, ДополнительныеПараметры);
	
	// ПРоверка существования файла
	Файл = Новый Файл(ПутьКФайлу);
	Файл.НачатьПроверкуСуществования(ОповещениеПроверки);
		
КонецПроцедуры

Обработаем результат проверки существования файла. Если файл не существует, выполним обработку оповещения переданного через дополнительные параметры

&НаКлиенте
Процедура ПослеПроверкиСуществованияФайла(Существует, ДополнительныеПараметры) Экспорт 
	
    Если Не Существует Тогда 
		
	Если ДополнительныеПараметры.Свойство("ОповещениеОбОшибке") Тогда 
			
		ТекстОшибки = "Файл не существует!";
		ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОбОшибке, ТекстОшибки);
			
	КонецЕсли;	
		
	Возврат;
		
    КонецЕсли;
	
    // Код для дальнейшей обработки файла
	
КонецПроцедуры

Процедура для централизованной обработки ошибок

&НаКлиенте
Процедура ОповеститьОбОшибке(ТекстОшибки, ДополнительныеПараметры) Экспорт 
	
    // Сообщим об ошибке
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ТекстОшибки;
    Сообщение.Сообщить();

    // Код для дальнейшей обработки ошибки
	
КонецПроцедуры

Ошибка в конфигураторе 1С Конструктор не найден Новый ОписаниеОповещения(«ВыборКонтрагента»); (Проверка: Тонкий клиент)

Описание ошибки:
Конструктор не найден
ОповещениеВыборКонтрагента = Новый <

>ОписаниеОповещения(«ВыборКонтрагента»); (Проверка: Тонкий клиент)
Файловая база. Релиз платформы 1С: Предприятие 8.3.16.1148

Найденные решения:

1C 8 ошибка в конфигураторе Форма.ФормаСписка.Форма(139,37)}: Конструктор не найден Новый ОписаниеОповещения

Кажется, что все сделано верно — конструктор ОписаниеОповещения на клиенте, указано имя экспортной процедуры, выполняемой на клиенте, тут же в модуле. Если верить информации в синтакс-помощнике, то второй и первый параметры конструктора оповещения являются необязательными. Для первого парамера конструктора «необязательность» кажется странной, но для второго параметра вполне нормальной практикой на примере подобных конструкторов в 1С является то, что он «необязательный».

1C 8 описание в синтакс помощнике конструктора ОписаниеОповещения

Но, как выясняется на практике, не такой уж и необязательный второй параметр конструктора «Новый ОписаниеОповещения». Очень даже обязательный. После указания в качестве параметра переменной «ЭтаФорма» конфигуратор не выводит ошибку и код в дальнейшем работает исправно. Еще раз обращу внимание еще на то, что параметр «ИмяПроцедуры» — должно быть указано имя экспортной процедуры, т.е. после имени процедуры в модуле должно быть зарезервированное слово «Экспорт«.

1с 8 конструктор описаниеоповещения ошибка Конструктор не найден

Видео практического примера:

Оцените, помогло ли Вам предоставленное описание решения ошибки?




© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

21-10-2020

Журавлев А.С.
(Сайт azhur-c.ru)

ОписаниеОповещения — объект встроенного языка 1С:Предприятия, указывающий на процедуру, в которой будет продолжено исполнение кода при наступлении определенного события.

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

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

Основным инструментом отказа от модальности стало ОписаниеОповещения.

Содержание

  1. Как работает ОписаниеОповещения
  2. Синтаксис
  3. Вызываемая процедура и её параметры
  4. Выполнение обработки оповещения
  5. Работа на сервере
  6. Возможные ошибки
  7. Не найден экспортируемый метод
  8. Количество параметров 1. Ожидаемое количество – 2
  9. Примеры использования ОписаниеОповещения
  10. Оповещение о закрытии формы
  11. Ввод значений и предупреждения
  12. Проверка существования файла и передача описания оповещения через дополнительные параметры

Как работает ОписаниеОповещения

Для начала разберем как работает платформа с модальными окнами на примере метода Вопрос(). Напишем не хитрый код, в котором пользователю показывается диалог с вопросом и вариантами ответа Да и Нет.

Процедура ВыполнитьКоманду(Команда)
	
    Ответ = Вопрос("Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры

В данном случае пользователю будет показан диалог, а работа клиентской части будет полностью приостановлена до момента, пока пользователь не ответит на вопрос.

Диалог с ОписаниеОповещения

Тогда результат поместится в переменную Ответ и только после этого работа клиентской части будет возобновлена для выполнения алгоритма заполнения.

Напишем аналогичный пример, но уже без модального вызова. Будем использовать метод ПоказатьВопрос(), которому передадим ОписаниеОповещения.

&НаКлиенте
Процедура ВыполнитьКоманду(Команда)
	
    Оповещение = Новый ОписаниеОповещения("ОбработатьОтветПользователя", ЭтаФорма);
	
    ПоказатьВопрос(Оповещение, "Табличная часть будет очищена. Продолжить?", РежимДиалогаВопрос.ДаНет);
	
    // Дальнейший алгоритм
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьОтветПользователя(Ответ, ДополнительныеПараметры) Экспорт 
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры	

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

После ответа пользователя будет вызвана процедура ОбработатьОтветПользователя(), которую мы указали в конструкторе ОписаниеПоповещения и только тогда будет выполнен алгоритм заполнения.

Описание функционала от разработчиков на ИТС

Синтаксис

Конструктор ОписаниеОповещения имеет 5 необязательных параметров:

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

ИмяПроцедуры — Имя экспортируемой процедуры, которая будет вызвана;

Модуль — Модуль в котором расположена вызываемая процедура. Могут быть указаны Форма, Общий модуль, Команда командного интерфейса;

ДополнительныеПараметры — Произвольное значение, которое будет передано в вызываемую процедуру последним параметром;

ИмяПроцедурыОбработкиОшибки — Имя экспортируемой процедуры, которая будет вызвана в случае ошибки;

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

Вызываемая процедура и её параметры

Вызываемая процедура должна быть экспортируемой, и в самом простом случае содержать два параметра Результат и ДополнительныеПараметры.

&НаКлиенте
Процедура ПроцедураОбработкиОповещения(Результат, ДополнительныеПараметры) Экспорт 
	
    Если Результат = Неопределено Тогда 
        Возврат;
    КонецЕсли;
	
    // Код для обработки результата
	
КонецПроцедуры

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

Например вызываемая процедура для обработки оповещения метода глобального контекста НачатьПомещениеФайла() должна иметь 4 параметра.

Для избежания ошибок обращайтесь к Синтаксис-помощнику, там описано количество и порядок необходимых параметров.

Выполнение обработки оповещения

В платформе реализован метод  ВыполнитьОбработкуОповещения(), для возможности непосредственного выполнения обработки оповещения.

Методу в качестве параметра необходимо передать ОписаниеОповещения, которое будет выполнено. Так же можно передать в процедуру обработки произвольный результат вторым необязательным параметром.

&НаКлиенте
Процедура ВыполнениеОписанияОповещения(Команда)
	
    Оповещение = Новый ОписаниеОповещения("ОбработатьОтветПользователя", ЭтаФорма);
    ВыполнитьОбработкуОповещения(Оповещение, КодВозвратаДиалога.Да); 
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьОтветПользователя(Ответ, ДополнительныеПараметры) Экспорт 
	
    Если Ответ = КодВозвратаДиалога.Нет Тогда	 
        Возврат;
    КонецЕсли;
	
    // Алгоритм заполнения
	
КонецПроцедуры

Работа на сервере

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

&НаКлиенте
Процедура ОбрабокаЗакрытияФормы(Команда)
		
    Оповещение = Новый ОписаниеОповещения("ПослеПодбора", ЭтаФорма);
    ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", , ЭтаФорма, , , , Оповещение);

КонецПроцедуры

&НаСервере
Процедура ПослеПодбора(РезультатЗакрытия, ДополнительныеПараметры) Экспорт 
		
    Если Не РезультатЗакрытия = Неопределено Тогда 
	Возврат;
    КонецЕсли;	
	
// Обработка результата выбора
	
КонецПроцедуры

Возможные ошибки

Не найден экспортируемый метод

Если вызываемая процедура не экспортная, то при исполнении будет вызвано исключение. Решается указанием экспортной процедуры.

Не найден экспортируемый метод

Количество параметров 1. Ожидаемое количество – 2

Если вызываемая процедура будет объявлена с одним параметром, то при исполнении будет вызвано исключение. Решается добавлением второго параметра в вызываемую процедуру.

Количество параметров 1. Ожидаемое количество – 2

Примеры использования ОписаниеОповещения

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

Оповещение о закрытии формы

Реализуем функционал открытия формы подбора с дальнейшей обработкой результата

&НаКлиенте
Процедура Подбор(Команда)
	
    // Параметры для работы подбора
    ПараметрыПодбора = Новый Структура;
    ПараметрыПодбора.Вставить("Параметр1", Истина);
    ПараметрыПодбора.Вставить("Параметр2", Ложь);
	
    // Опишем процедуру, которая будет вызвана после подбора
    Оповещение	= Новый ОписаниеОповещения("ПослеПодбора", ЭтаФорма);
	
    // Заблокируем форму владельца
    РежимОткрытия	= РежимОткрытияОкнаФормы.БлокироватьОкноВладельца;
	
    ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаПодбора", ПараметрыПодбора, ЭтаФорма, , , , Оповещение, РежимОткрытия);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеПодбора(РезультатЗакрытия, ДополнительныеПараметры) Экспорт 
	
    Если РезультатЗакрытия = Неопределено Тогда 
	Возврат;
    КонецЕсли;
	
    // Код для обработки результата подбора
	
КонецПроцедуры

Ввод значений и предупреждения

Реализуем функционал ввода числа. После ввода выполним проверку на четность введенного числи, если число не четное выведем предупреждение

&НаКлиенте
Процедура ВвестиЧетноеЧисло(Команда)

    Оповещение	= Новый ОписаниеОповещения("ПослеВводаЧисла", ЭтаФорма);
    Подсказка	= "Введите четное число";
    ПоказатьВводЧисла(Оповещение, , Подсказка);
	
КонецПроцедуры

&НаКлиенте
Процедура ПослеВводаЧисла(ВведенноеЧисло, ДополнительныеПараметры) Экспорт 

    // Если пользователь откажется от ввода вернется Неопределено	
    Если ВведенноеЧисло = Неопределено Тогда	 
        Возврат;
    КонецЕсли;
	
    ЧислоЧетное = ВведенноеЧисло % 2 = 0;
	
    Если Не ЧислоЧетное Тогда
        // Первый параметр не обязателен. Если не надо обрабатывать
        // завершение предупреждения просто не заполняем 
	ПоказатьПредупреждение( , "Введено не четное число");
    КонецЕсли;	
	
КонецПроцедуры

Проверка существования файла и передача описания оповещения через дополнительные параметры

При работе на стороне клиента, например с оборудованием, логику работы системы можно организовать при помощи оповещений. Можно передавать ОписаниеОповещения в качестве следующего шага, ветвления логики или вызывать одно оповещение из нескольких мест.

Разработаем функционал проверки существования файла. В модуле реализована процедура для централизованной обработки ошибок ОповеститьОбОшибке(), будем передавать ОписаниеОповещения об ошибке через дополнительные параметры.

&НаКлиенте
Процедура ПрочитатьФайл(Команда)
	
	ПутьКФайлу = ПутьКФайлуФлагу();
	
	// Оповещение для обработки ошибки
	ОповещениеОбОшибке = Новый ОписаниеОповещения("ОповеститьОбОшибке", ЭтаФорма);
	
	// Оповещение проверки существоания файла
	// с передачей оповещения об ошибке через дополнительные параметры
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("ОповещениеОбОшибке", ОповещениеОбОшибке);
	
	ОповещениеПроверки = Новый ОписаниеОповещения("ПослеПроверкиСуществованияФайла", ЭтаФорма, ДополнительныеПараметры);
	
	// ПРоверка существования файла
	Файл = Новый Файл(ПутьКФайлу);
	Файл.НачатьПроверкуСуществования(ОповещениеПроверки);
		
КонецПроцедуры

Обработаем результат проверки существования файла. Если файл не существует, выполним обработку оповещения переданного через дополнительные параметры

&НаКлиенте
Процедура ПослеПроверкиСуществованияФайла(Существует, ДополнительныеПараметры) Экспорт 
	
    Если Не Существует Тогда 
		
	Если ДополнительныеПараметры.Свойство("ОповещениеОбОшибке") Тогда 
			
		ТекстОшибки = "Файл не существует!";
		ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеОбОшибке, ТекстОшибки);
			
	КонецЕсли;	
		
	Возврат;
		
    КонецЕсли;
	
    // Код для дальнейшей обработки файла
	
КонецПроцедуры

Процедура для централизованной обработки ошибок

&НаКлиенте
Процедура ОповеститьОбОшибке(ТекстОшибки, ДополнительныеПараметры) Экспорт 
	
    // Сообщим об ошибке
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ТекстОшибки;
    Сообщение.Сообщить();

    // Код для дальнейшей обработки ошибки
	
КонецПроцедуры

Платформа: 8.3.23.1437
Конфигурация. типовая БП КОРП 3.0.122.97
Версия ИР: Расширение 6.60.2e
Инструмент: Подбор и обработка объектов БД

Если стоит галка Выполнять на сервере, то после отработки алгоритма выскакивает ошибка

Не найден экспортируемый метод: ОповещениеОткрытьФормуЛкс

Ошибка при вызове конструктора (ОписаниеОповещения)
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирКлиент.Модуль(14454)}:ОписаниеОповещения = Новый ОписаниеОповещения(«ОповещениеОткрытьФормуЛкс», ирОбщий, Новый Структура(«Форма», ФормаЗадания));
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирКлиент.Модуль(14361)}:ОбработатьЗавершениеЗаданияФормыЛкс(ОписаниеЗадания, ЭтаФорма, ФоновоеЗадание,,, Результат);
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирКлиент.Модуль(14178)}:ПроверитьЗавершениеФоновыхЗаданийФормыЛкс(ЭтаФорма, ОписаниеЗадания, Результат);
{ИнструментыРазработчикаTormozit ОбщийМодуль.ирОбщий.Модуль(20892)}:Результат = ирКлиент.ЗапуститьИлиОтменитьФоновоеЗаданиеФормыЛкс(ЭтаФормаИлиОбработка, ОписаниеЗадания, Перезапустить, ОшибкаСериализации);
{ИнструментыРазработчикаTormozit Обработка.ирПодборИОбработкаОбъектов.МодульОбъекта(67)}:РезультатЗадания = ирОбщий.ВыполнитьЗаданиеФормыЛкс(«ВыполнитьГрупповуюОбработку», ПараметрыЗадания, ФормаОбработки, «ОбработкаОбъектов», «Обработка объектов » + ПараметрыЗадания.ИмяОбработки,
{ИнструментыРазработчикаTormozit Обработка.ирПодборИОбработкаОбъектов.Форма.ПроизвольныйАлгоритм.Форма(266)}:ВыполнитьЗаданиеГрупповойОбработки(ЭтаФорма, Кнопка);
{ИнструментыРазработчикаTormozit Обработка.ирПодборИОбработкаОбъектов.Форма.ПодборИОбработка.Форма(1555)}:Обработка.вВыполнитьОбработку();

по причине:
Не найден экспортируемый метод: ОповещениеОткрытьФормуЛкс

Если галка не стоит, то все отрабатывает без ошибок

При этом в других инструментах, например Удаление объектов с контролем ссылок, такой проблемы нет.

  • Ошибка при вызове конструктора записьтекста ошибка при вызове конструктора записьтекста
  • Ошибка при вызове конструктора записьтекста ошибка доступа к файлу
  • Ошибка при вызове конструктора двоичныеданные файл не обнаружен licence 0
  • Ошибка при вызове конструктора двоичные данные 1с
  • Ошибка при вызове конструктора wsпрокси сервис не найден