Каталог решений - Открытие формы подключаемой внешней обработки без записи документа

Открытие формы подключаемой внешней обработки без записи документа

Открытие формы подключаемой внешней обработки без записи документа

В наличии

Доработка подсистемы «Дополнительные отчеты и обработки». Доработана возможность отключения предварительной записи документа при открытии обработки заполнения.

Категория:

Описание

"Для выполнения команды данные будут записаны. Продолжить?"

Сталкивались? Бывает необходимо, перед заполнением документа из внешней обработки, вызвать некий диалог с предварительными настройками, но к сожалению типовой функционал не позволяет сделать это без записи документа. А если у нас сложный документ с большим объемом данных, который долго пишется?  Или мы просто не хотим записывать документ, а только посмотреть результат заполнения? В этой статье я попытаюсь решить данную задачу доработкой типовой подсистемы подсистемы "Дополнительные отчеты и обработки".

Доработку можно сделать через расширение или напрямую в конфигурацию.

1. Добавляем в ТЧ "Команды" справочника "ДополнительныеОтчетыИОбработки" новый реквизит "доп_РежимЗаписи" с типом Строка(50)

2. В общем модуле "ДополнительныеОтчетыИОбработки" вносим следующие доработки

2.1. Функция "СведенияОВнешнейОбработке".

Необходимо для таблицы команд добавить еще одну колонку "доп_РежимЗаписи"

  ТаблицаКоманд.Колонки.Добавить("доп_РежимЗаписи", Новый ОписаниеТипов("Строка"));
  

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

2.2. Функция "ТаблицаОтчетовИОбработок"

Необходимо доработать запрос, а именно добавить новый реквизит в выборку из таблицы команд

  	|		ПоказыватьОповещение,
  	//+++
  	|		доп_РежимЗаписи,
  	//---
  	|		Скрыть
  

2.3. Процедура "ПриОпределенииКомандЗаполненияПодключенныхКОбъекту"

Добавим дополнительное условие для отмены записи документа

  Если СтрокаТаблицы.ВариантЗапуска = ЗаполнениеФормы Тогда
  	Команда.Обработчик  = "ДополнительныеОтчетыИОбработки.ОбработчикКомандыЗаполнения";
  	Команда.РежимЗаписи = "НеЗаписывать";
  //+++
  ИначеЕсли СтрокаТаблицы.доп_РежимЗаписи = "НеЗаписывать" Тогда
  	Команда.Обработчик  = "ДополнительныеОтчетыИОбработкиКлиент.ОбработчикКомандыЗаполнения";
  	Команда.РежимЗаписи = "НеЗаписывать";
  //---
  Иначе
  	Команда.Обработчик  = "ДополнительныеОтчетыИОбработкиКлиент.ОбработчикКомандыЗаполнения";
  	Команда.РежимЗаписи = "Записывать";
  КонецЕсли;
  

Обратите внимание как работает типовой функционал.

Если у нас вид обработки "Заполнение формы", то идет вызов команды на сервер (модуль обработки) и запись отключена.

Во всех остальных случаях режим записи — "Записывать".

Мы же добавили новое условие, что если у обработки реквизит "доп_РежимЗаписи" равен "НеЗаписывать" тогда мы устанавливаем режим записи "НеЗаписывать".

 

Пример вызова из самой обработки:

  Функция СведенияОВнешнейОбработке() Экспорт
  
  	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("");
  	ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта();
  
  ...
  
  	Команда = ПараметрыРегистрации.Команды.Добавить();
  	Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
  	//Добавляем при необходимости режим записи. Условие добавлено для обратной совместимости.
  	Если ПараметрыРегистрации.Команды.Колонки.Найти("доп_РежимЗаписи") <> Неопределено Тогда
  		Команда.доп_РежимЗаписи = "НеЗаписывать";
  	КонецЕсли;
  
  ...
  
  	Возврат ПараметрыРегистрации;
  
  КонецФункции
  
  

Часть типового кода я пропустил, думаю тут нет необходимости что либо показывать. Полное описание в документации БСП или в приложенной обработке — примере.

Как происходит заполнение:

Открывается обработка. В событии "ПриОткрытии" на клиенте, нам доступен реквизит "ВладелецФормы"  — владелец этой формы.

Мы выполняем какие либо промежуточные действия. Данные берем с реквизитов или объекта формы владельца.

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

 

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

Можно обойтись без нового реквизита, например добавить признак в реквизит "Модификатор", но все равно нужно доработать процедуру "ПриОпределенииКомандЗаполненияПодключенныхКОбъекту", чтобы учесть нужный модификатор, например:

  ИначеЕсли СтрокаТаблицы.Модификатор = "НеЗаписывать" Тогда
  	Команда.Обработчик  = "ДополнительныеОтчетыИОбработкиКлиент.ОбработчикКомандыЗаполнения";
  	Команда.РежимЗаписи = "НеЗаписывать";
  

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

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

Тестировалось в конфигурации 1C:ERP 2.5.7.201 (БСП 3.1.5.192).

В обработке примере прописано назначение "Документ.ЗаказКлиента".

has been added to your cart:
Оформление заказа