ОписаниеОпевещения то работает то не работает
Здравствуйте! У меня такая штопорная ситуация. В ниже приведенном коде то работает то не работает ОписаниеОповещения. Проявляется это вот как. Когда первый раз нажимаешь на клавишу "Переименовать" все нормально работает. Но если сначала нажать "Создать", система определит, что создавать не нужно и так все есть, можно переименовать, я выбираю "Переименовать", и тогда система аварийно завершается "Подождите пожалуйста идет сохранение информации об ошибке...". Это мозговыносящее зрелище именуемое особенностью платформы? Версия 1С:Предприятие 8.3 (8.3.4.389). Конфа сама себя писала :) Или особенность в запаренном мозге разработчика?
P.SSS: Если процедура указанная в ОбработкеОповещения объявлена с директивой компиляции НаСервере то в момент обращения системы к ОбработкеОповещения вылазиет ошибка времени выполнения. И в пользовательском режиме сообщение, что не найден экспортируемый метод имя которого указано в ОбработкеОповещения :). С какого он должен быть экспортируемым? Но даже если Экспорт поставить ситуация не решается, может система хочет чтобы процедура была экспортируемая и объявленная в модуле ОБЪЕКТА КОМАНДЫ :))) Вариантов нет:)
P.SSS: Если процедура указанная в ОбработкеОповещения объявлена с директивой компиляции НаСервере то в момент обращения системы к ОбработкеОповещения вылазиет ошибка времени выполнения. И в пользовательском режиме сообщение, что не найден экспортируемый метод имя которого указано в ОбработкеОповещения :). С какого он должен быть экспортируемым? Но даже если Экспорт поставить ситуация не решается, может система хочет чтобы процедура была экспортируемая и объявленная в модуле ОБЪЕКТА КОМАНДЫ :))) Вариантов нет:)
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
СписокДействийДляВыбораПользователя = Новый СписокЗначений;
СписокДействийДляВыбораПользователя.Добавить("Посмотреть", "Посмотреть имя шаблона");
СписокДействийДляВыбораПользователя.Добавить("Создать", "Создать шаблон");
СписокДействийДляВыбораПользователя.Добавить("Переименовать", "Переименовать шаблон");
СписокДействийДляВыбораПользователя.Добавить("Удалить", "Удалить Шаблон");
ДопПараметры = Новый Структура("Ссылка, ИмяРеквизита, СписокДействийДляВыбораПользователя");
ДопПараметры.Ссылка = ПараметрыВыполненияКоманды.Источник.Объект.Ссылка;
ДопПараметры.ИмяРеквизита = ПараметрыВыполненияКоманды.Источник.ТекущийЭлемент.Имя;
ДопПараметры.СписокДействийДляВыбораПользователя = СписокДействийДляВыбораПользователя;
Описание = Новый ОписаниеОповещения("ОбработкаВыбораПользователя", ЭтотОбъект, ДопПараметры);
ПоказатьВопрос(Описание, "Что вы хотите сделать?", СписокДействийДляВыбораПользователя);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбораПользователя (ДанныеВыбора, ПолученныеДопПараметры)
Если ДанныеВыбора = "Посмотреть" Тогда
ПоказатьЗначение(, ОбщийСервер.НайденныйШаблон (ПолученныеДопПараметры));
ИначеЕсли ДанныеВыбора = "Создать" Тогда
ИмяШаблона = ОбщийСервер.НайденныйШаблон (ПолученныеДопПараметры);
Если ИмяШаблона = Неопределено Тогда
Описание = Новый ОписаниеОповещения("СоздатьШаблон", ЭтотОбъект, ПолученныеДопПараметры);
ПоказатьВводЗначения(Описание,,"Введите имя шаблона", Тип("Строка"));
Иначе
Описание = Новый ОписаниеОповещения("ОбработкаВыбораПользователя", ЭтотОбъект, ПолученныеДопПараметры);
ПоказатьВопрос(Описание, " Создать невозможно! Шаблон для данного реквизита задан! Имя шаблона: ["+ ИмяШаблона +"]", ПолученныеДопПараметры.СписокДействийДляВыбораПользователя);
КонецЕсли;
ИначеЕсли ДанныеВыбора = "Переименовать" Тогда
ИмяШаблона = ОбщийСервер.НайденныйШаблон (ПолученныеДопПараметры);
Если ИмяШаблона = Неопределено Тогда
Описание = Новый ОписаниеОповещения("ОбработкаВыбораПользователя", ЭтотОбъект, ПолученныеДопПараметры);
ПоказатьВопрос(Описание, "Переименовать невозможно! Шаблон для данного реквизита не задан!", ПолученныеДопПараметры.СписокДействийДляВыбораПользователя);
Иначе
Описание = Новый ОписаниеОповещения("ПереименоватьШаблон", ЭтотОбъект, ПолученныеДопПараметры);
ПоказатьВводСтроки(Описание, ИмяШаблона,"Введите имя шаблона");
КонецЕсли;
ИначеЕсли ДанныеВыбора = "Удалить" Тогда
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьШаблон (ВведенныеДанные, ДополнительныеПараметры)
ПоказатьЗначение(, ОбщийСервер.СоздатьШаблон(ВведенныеДанные, ДополнительныеПараметры));
КонецПроцедуры
&НаКлиенте
Процедура ПереименоватьШаблон (ВведенныеДанные, ДополнительныеПараметры)
КонецПроцедуры
ПоказатьОтветы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(3) Boneman, О да в СП написано! Меня это мало убеждать стало :) Дело в том, что
объявлено без ключевого слова Экспорт. Но при выборе из Процедура ОбработкаКоманды срабатывает. И без этого загадочного слова.
Ну а если Экспорт указан ничего не меняется. Отрубается и все!
&НаКлиенте
Процедура ПереименоватьШаблон (ВведенныеДанные, ДополнительныеПараметры)
КонецПроцедуры
объявлено без ключевого слова Экспорт. Но при выборе из Процедура ОбработкаКоманды срабатывает. И без этого загадочного слова.
Ну а если Экспорт указан ничего не меняется. Отрубается и все!
(4) aleksandrjurevich,
не знаю.
реально работающий код.
Если процедура не экспортная - она ее не находит, выдает ошибку.
Попробуй обновить платформу.
У меня 3.5
не знаю.
реально работающий код.
Если процедура не экспортная - она ее не находит, выдает ошибку.
&НаКлиенте
Процедура ЗаполнитьПоляИсточника(Команда)
ТекущийИсточник = Элементы.СписокИсточников.ТекущиеДанные;
Если ТекущийИсточник = Неопределено Тогда
Возврат
КонецЕсли;
Если ПоляИсточника.Количество() > 0 Тогда
Режим = РежимДиалогаВопрос.ДаНет;
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопросаЗаполнитьПоляИсточника", ЭтаФорма, Параметры);
ПоказатьВопрос(Оповещение,"Таблица полей будет очищена. Продолжить?", Режим, 0);
Иначе
ТупоЗаполнитьПоляИсточника();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопросаЗаполнитьПоляИсточника(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Нет тогда
Возврат;
КонецЕсли;
ПоляИсточника.Очистить();
ТупоЗаполнитьПоляИсточника();
КонецПроцедуры
ПоказатьПопробуй обновить платформу.
У меня 3.5
(5) Boneman, У меня так работает! Но перестанет работать вот так: Попробую обновиться. Спс.
&НаКлиенте
Процедура ЗаполнитьПоляИсточника(Команда)
ТекущийИсточник = Элементы.СписокИсточников.ТекущиеДанные;
Если ТекущийИсточник = Неопределено Тогда
Возврат
КонецЕсли;
Если ПоляИсточника.Количество() > 0 Тогда
Режим = РежимДиалогаВопрос.ДаНет;
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопросаЗаполнитьПоляИсточника", ЭтаФорма, Параметры);
ПоказатьВопрос(Оповещение,"Таблица полей будет очищена. Продолжить?", Режим, 0);
Иначе
ТупоЗаполнитьПоляИсточника();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗакрытияВопросаЗаполнитьПоляИсточника(Результат, Параметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
Режим = РежимДиалогаВопрос.ОКОтмена;
Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопросаЗаполнитьПоляИсточника", ЭтаФорма, Параметры);
ПоказатьВопрос(Оповещение,"Вы уверены?", Режим, 0);
ИначеЕсли Результат = КодВозвратаДиалога.ОК Тогда
Описание = Новый ОписаниеОповещения("ПроцедураЕщеОдна", ЭтаФорма, Параметры);
ПоказатьВводСтроки(Описание, "Ля-ля-ля","Что хотите то введите!");
КонецЕсли;
Если Результат = КодВозвратаДиалога.Нет тогда
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПроцедураЕщеОдна(Результат, Параметры) Экспорт
КонецПроцедуры;
Показать
Еще если в модуле формы обработки указать в ОписанииОповещения имя процедуры, то система будет искать процедуру в модуле формы (т.к. это и указано) только с директивой компиляции НаСервере, если процедура объявлена с директивой НаКлиенте появляется сообщения об том что такая процедура не найдена.
(7) caponid, Нее. Выше код. Самый первый, что в первом сообщении. Например там тоже так сказать рекурсивный вызов когда заходишь в ветку "Создать", так можно уйти в транс нажимая на Создать, но система не отрубается. Точнее иногда все таки отрубается. Но не всегда. Тык-тык-тык и бывает отрубается.
(9) adhocprog, Да :) Как давно это было! Но только не в модуле общей команды. Чтобы этот код работал, я, вынес его в общий модуль и обращаюсь к нему из обработчика команды управляемой формы. Для этого чуть пришлось подправить параметры Процедуры ОбработкаКоманды. И все полетело (в хорошем смысле этого слова :).
(9) возникла такая же ошибка.
Это из-за:
Формы у меня обычные.
Для такого случая вынес процедуру в оповещении в модуль объекта и все нормально заработало!
Это из-за:
<Модуль> (обязательный)
Тип: УправляемаяФорма; КомандаКомандногоИнтерфейса; ОбщийМодуль.
Программный модуль, процедура которого будет вызвана.
При использовании типа УправляемаяФорма будет вызван метод модуля указанной управляемой формы.
При использовании типа ОбщийМодуль будет вызван метод общего неглобального модуля.
При использовании типа КомандаКомандногоИнтерфейса будет вызван метод модуля команды командного интерфейса.
Объект данного типа может быть получен только из модуля команды.
Для получения ссылки на него необходимо использовать свойство "ЭтотОбъект".
Оно доступно в контексте модуля команды и аналогично свойству ЭтаФорма в модуле формы.
Тип: УправляемаяФорма; КомандаКомандногоИнтерфейса; ОбщийМодуль.
Программный модуль, процедура которого будет вызвана.
При использовании типа УправляемаяФорма будет вызван метод модуля указанной управляемой формы.
При использовании типа ОбщийМодуль будет вызван метод общего неглобального модуля.
При использовании типа КомандаКомандногоИнтерфейса будет вызван метод модуля команды командного интерфейса.
Объект данного типа может быть получен только из модуля команды.
Для получения ссылки на него необходимо использовать свойство "ЭтотОбъект".
Оно доступно в контексте модуля команды и аналогично свойству ЭтаФорма в модуле формы.
Формы у меня обычные.
Для такого случая вынес процедуру в оповещении в модуль объекта и все нормально заработало!
Та же проблема с Оповещением:
&НаКлиенте
Процедура ОповещатьГде()
Оповещение=Новый ОписаниеОповещения("ОбработатьВыборФайла",ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
а=Результат;
КонецПроцедуры
В пользовательском режиме - выдает ошибку:"Не найден экспортируемый метод: ОбработатьВыборФайла"
Обе процедуры были написаны в Модуле Формы, поэтому при обязательном указании в ф-ции Оповещения параметра-исполняемый модуль-стоит ЭтаФорма, Пробывала выносить код на МодульОбъекта, тогда исполняющий модуль нужно указывать как ЭтотОбъект.
Но чтобы все-таки Оповещение вызвало указанную в его параметрах процедуру, то на ней нужно ставить слово Экспорт.....Таким образом, сейчас у меня обе процедуры в одном Модуле формы находятся, но на вызываемой проц.стоит Экспорт...Работает))) Хотя полностью не понятно как...
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) ЭКСПОРТ
а=Результат;
КонецПроцедуры
&НаКлиенте
Процедура ОповещатьГде()
Оповещение=Новый ОписаниеОповещения("ОбработатьВыборФайла",ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры)
а=Результат;
КонецПроцедуры
В пользовательском режиме - выдает ошибку:"Не найден экспортируемый метод: ОбработатьВыборФайла"
Обе процедуры были написаны в Модуле Формы, поэтому при обязательном указании в ф-ции Оповещения параметра-исполняемый модуль-стоит ЭтаФорма, Пробывала выносить код на МодульОбъекта, тогда исполняющий модуль нужно указывать как ЭтотОбъект.
Но чтобы все-таки Оповещение вызвало указанную в его параметрах процедуру, то на ней нужно ставить слово Экспорт.....Таким образом, сейчас у меня обе процедуры в одном Модуле формы находятся, но на вызываемой проц.стоит Экспорт...Работает))) Хотя полностью не понятно как...
&НаКлиенте
Процедура ОбработатьВыборФайла(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) ЭКСПОРТ
а=Результат;
КонецПроцедуры
(12) пора бы уже научиться пользоваться СП.
ОписаниеОповещения (NotifyDescription)
Основной
Синтаксис:
Новый ОписаниеОповещения(<ИмяПроцедуры>, <Модуль>, <ДополнительныеПараметры>, <ИмяПроцедурыОбработкиОшибки>, <МодульОбработкиОшибки>)
Параметры:
<ИмяПроцедуры> (обязательный)
Тип: Строка.
Имя экспортируемой процедуры модуля, которая будет вызвана.
<Модуль> (обязательный)
Тип: УправляемаяФорма; КомандаКомандногоИнтерфейса; ОбщийМодуль.
Программный модуль, процедура которого будет вызвана.
При использовании типа УправляемаяФорма будет вызван метод модуля указанной управляемой формы.
При использовании типа ОбщийМодуль будет вызван метод общего неглобального модуля.
При использовании типа КомандаКомандногоИнтерфейса будет вызван метод модуля команды командного интерфейса.
Объект данного типа может быть получен только из модуля команды.
Для получения ссылки на него необходимо использовать свойство "ЭтотОбъект".
Оно доступно в контексте модуля команды и аналогично свойству ЭтаФорма в модуле формы. Показать
ОписаниеОповещения (NotifyDescription)
Основной
Синтаксис:
Новый ОписаниеОповещения(<ИмяПроцедуры>, <Модуль>, <ДополнительныеПараметры>, <ИмяПроцедурыОбработкиОшибки>, <МодульОбработкиОшибки>)
Параметры:
<ИмяПроцедуры> (обязательный)
Тип: Строка.
Имя экспортируемой процедуры модуля, которая будет вызвана.
<Модуль> (обязательный)
Тип: УправляемаяФорма; КомандаКомандногоИнтерфейса; ОбщийМодуль.
Программный модуль, процедура которого будет вызвана.
При использовании типа УправляемаяФорма будет вызван метод модуля указанной управляемой формы.
При использовании типа ОбщийМодуль будет вызван метод общего неглобального модуля.
При использовании типа КомандаКомандногоИнтерфейса будет вызван метод модуля команды командного интерфейса.
Объект данного типа может быть получен только из модуля команды.
Для получения ссылки на него необходимо использовать свойство "ЭтотОбъект".
Оно доступно в контексте модуля команды и аналогично свойству ЭтаФорма в модуле формы.
Напишу здесь, встретилась такая же ошибка, в расширении, вызывалась процедура серверная экспортная, все работало, в модуле формы. понадобилось поднять режим совместимости до 8.3.21 - перестала видеть процедуру. ЧТо сделал : процедуру сделал НаКлиенте , экспортную . а из нее уже вызвал серверную старую.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот