Ошибка при выполнении обработчика обработкаполученияформы

Привет парни, сформулировал БП, который сам по себе работает нормально, но при открытии задачи пишет следующее:

Ошибка при выполнении обработчика — ‘ОбработкаПолученияФормы’

по причине:

Метод объекта не обнаружен (ФормаВыполненияЗадачи)

{ОбщийМодуль.БизнесПроцессыИЗадачиВызовСервера.Модуль(33)}:    ПараметрыФормы = БизнесПроцессы[ТипБизнесПроцесса.Имя].ФормаВыполненияЗадачи(ЗадачаСсылка,

{Задача.ЗадачаИсполнителя.МодульМенеджера(53)}:        ПараметрыФормы = БизнесПроцессыИЗадачиВызовСервера.ФормаВыполненияЗадачи(Параметры.Ключ);

1С 8.3, Управление Торговлей 11

Спасибо!

Установка флага «Вызов сервера» помогла. Благо, база не на поддержке.

Только не у указанного вами модуля, а у модуля «CRM_МетодыМодулейМенеджеровЗадач», метод которого и вызывается подпиской.

Также могу дополнить, что для обхода подобной ошибки при открытии в толстом клиенте форм отчетов (например, Валовая прибыль предприятия), данный флаг нужно также установить у модуля «CRM_МетодыМодулейМенеджеровПВХ»

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

Скажите, а поддержка толстого клиента управляемого приложения в УТиВсК планируется?

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

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

ОткрытьФорму и «ничего не происходит»

Вводная

перешли с 8.3.11 на 8.3.12 после отключения совместимости фрагмент кода ниже перестал открывать требуемую форму из другой (справедливо для клиент-серверного варианта проверить файловый вариант ИБ не было возможности)

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

Теперь немного больше деталей.  

Для справочника ДоговорыКонтрагентов реализовано переопределение формы в обработчике получения формы

Процедура ОбработкаПолученияФормы(ВидФормы, 
Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
 
 Если ВидФормы = "ФормаОбъекта" Тогда
        // . . . 
 КонецЕсли;
 
КонецПроцедуры

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

ОткрытьФорму(«Справочник.ДоговорыКонтрагентов.ФормаОбъекта». . . );

 В случае если требуемые ключи не заданы — открываем диалог выбора требуемых значений для заполнения нового

ВыбраннаяФорма = 
"Справочник.ДоговорыКонтрагентов.Форма.ФормаВыбораТипаДоговораКонтрагента";

Но на какую конкретно форму, это уже не так важно.

Решение

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

Включение в параметры Уникальность = Истина. Возвращает нас к исходному поведению (требуемая форма открывается).

 Дальше теории конспирологов (когда сколько бы ты не знал, это только догадки).

Что у нас произошло:

По умолчанию Уникальность = Ложь, те форма не уникальная и сначала попытаться найти среди открытых.

1. мы создали интерактивно новый элемент
2. платформа открывает для него форму по-умолчанию (Справочник.ДоговорыКонтрагентов.ФормаОбъекта, Владелец)
3. мы переопределяем форму в обработчике получения формы
4. платформа кеширует ФормаОбъекта+Владелец = форма из п.3 (точнее любая форма какую вернет сервер)
5. Мы программно открывает форму ФормаОбъекта+тот же Владелец — платформа нашла по этим ключам форму из п.2 (тот же набор ключей). Так как форма уже открыта, мы интерактивно не ощущаем каких либо изменений и считаем что открытие формы «не работает».

Ещё немного

Фрагмент справки 8.3.11.2954 идентичен фрагменту справки 8.3.12.1529, 8.3.12.1616

<Уникальность> (необязательный)
Тип: Произвольный.
В данном параметре может быть задан некоторый ключ, значение которого будет использоваться для поиска уже открытых форм. Если будет найдена форма с таким же ключом уникальности, вместо открытия новой формы будет активизирована найденная форма.
Ложь — искать форму с ключом уникальности по умолчанию, Истина — не искать форму вообще, любое другое значение устанавливает ключ уникальности, по которому будет произведен поиск.
Значение по умолчанию: Ложь.

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

Можно открывать уже
полученную форму. В этом случае в параметрах передается уже полученная форма и
окно, в котором открыть форму.
Можно открыть по имени формы. В этом случае в
параметры передаются имя формы, параметры формы, владелец, ключ уникальности и
окно, в котором должна быть открыта форма.

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

Для варианта
«По названию» параметры вызова аналогичны параметрам метода ПолучитьФорму.
Обычные
формы внешних обработок не поддерживаются.
В управляемом приложении не
следует выполнять программное открытие и закрытие одной и той же формы в одном
вызове встроенного языка.

Если при открытии обычной формы в параметре
<ИмяФормы> указано не стандартное имя формы, передаваемые параметры не
обрабатываются.
В процессе выполнения может быть несколько обращений к
серверу. Часть из них кэшируются. Как минимум одно обращение к серверу есть
всегда и оно не кэшируется.
Кэширование зависит от версии платформы и версии
конфигурации в целом. Если установлена низкая скорость соединения и не
указывается текущая строка, то кэшируется форма выбора. Очистка кэша
осуществляется с периодичностью в 20 мин. Удаляются формы, которые не
использовались в этот период времени

Из описания ОткрытьФорму() трудно сделать выводы об явном изменении в поведении платформы, скорее всего было исправленооптимизировано ранее существовавшее допущение. Скорее всего изменилась обработка Уникального пользовательского ключа и поиска формы по нему, в 8.3.11 пустое значение — не сопоставляется при поиске среди открытых форм, то в 8.3.12 — пустое значение, тоже значение. Напомню в режиме «совместимости с 8.3.11» в 8.3.12 — форма открывается и с Уникальность = Ложь (значение по умолчанию, если верить документации оно — Ложь).

Так же о многом говорит — ничего не говоря конкретно — расплывчатая формулировка «Кэширование зависит от версии платформы и версии конфигурации в целом.»

Skip to content

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

Для решения этой задачи в модуле менеджера объекта следует создать обработчик события ОбработкаПолученияФормы. В этом обработчике нужно выполнить все необходимые проверки и принять решение о том, какую форму следует открывать. И соответствующим образом переопределить параметр обработчика ВыбраннаяФорма .

Обработчик «ОбработкаПолученияФормы» в модуле менеджера

Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)

Если Параметры.Свойство(«НужноеСвойство») Тогда

  Если ВидФормы = «ФормаОбъекта» И Параметры.Ключ.Родитель.Наименование = «Услуги» Тогда

   ВыбраннаяФорма = «Справочник.Товары.Форма.ПроизвольнаяФормаТовара»;

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

  КонецЕсли;

КонецЕсли;

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

Понравилась статья? Поделить с друзьями:
  • Ошибка при выполнении обработчика обработка проведения
  • Ошибка при выполнении обработчика обработка заполнения
  • Ошибка при выполнении обработчика деление на 0
  • Ошибка при выполнении обновления сервера
  • Ошибка при выполнении нападающего удара является касание рукой сетки