Создание внешней обработки заполнения объекта с выводом диалога в режиме управляемого приложения

11.08.25

Разработка - Механизмы типовых конфигураций

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

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

В примере буду рассматривать демо-конфигурацию 1С:ERP Управление предприятием 2 (2.5.22.76) и заполнение табличной части "Прочие доходы" документа "Отражение прочих доходов и расходов" (e1cib/list/Документ.ПрочиеДоходыРасходы) по данным табличной части "Удержания" документа "Отражение зарплаты в финансовом учете" (e1cib/list/Документ.ОтражениеЗарплатыВФинансовомУчете). Форма документа "Отражение прочих доходов и расходов" отображает не только сами реквизиты документа, но и программно добавленные представление реквизитов.  

1. Для начала рассмотрим пример использования внешней обработки заполнения табличной части документа, когда используется команда с параметром "Использованием" и значением параметра "ОткрытиеФормы":

Пример функции СведенияОВнешнейОбработке в модуле внешней обработки:

 

 

В обработку добавляется вспомогательная форма с размещением необходимых реквизитов, которые заполняются пользователем и будут передаваться в процедуру заполнения объекта. На форме, как пример, создается элемент формы типа Кнопка к которому подключается команда с именем, например, с ЗаполнитьДокумент и одноименным связанным действием:

Пример кода в модуле вспомогательной формы внешней обработки:

 

 

Пример заполнения табличной части "Прочие доходы" документа "Отражение прочих доходов и расходов":
 

 

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

 

Прямая передача формы (формы клиентского приложения) по ссылке на сервер невозможна. Т.е. нет возможности на клиенте в процедуре ЗаполнитьДокумент выполнить такой код для передачи формы на сервер для дополнительной обработки:

 

 

Для возможности обработки контекста формы на сервере пришла идея попробовать переопределить некоторые параметры команды, которые были указаны в модуле обработки в функции СведенияОВнешнейОбработке, так, чтобы при вызове команды из формы документа поведение команды соответствовало бы значению "ТипКомандыОткрытиеФормы" параметра команды "Использование":

Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();


А после того, как откроется форма обработки с необходимыми реквизитами, которые будут передаваться в процедуру заполнения объекта, поведение команды соответствовало бы значению "ЗаполнениеФормы" параметра команды "Использование": 

Команда.Использование = Перечисления.СпособыВызоваДополнительныхОбработок.ЗаполнениеФормы();

 

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

2. Для реализации этой идеи создадим вторую внешнюю обработку заполнения документа, и с данными в функции СведенияОВнешнейОбработке:  

 

 

В этой второй внешней обработке процедура модуля вспомогательной формы диалога изменяется и добавляется процедура модификации некоторых параметров команды:

 

 

При использовании подключаемых команд БСП создает на форме реквизит формы ПараметрыПодключаемыхКоманд и в ПараметрыПодключаемыхКоманд.АдресТаблицыКоманд помещает  адрес таблицы значений со всеми командами формы, а так же их параметрами. Переопределение адреса команд формы требуется из-за того, что в типовой процедуре ПодключаемыеКомандыКлиент.ВыполнитьКоманду описание выполняемой команды возвращается как значение функции общего модуля с установленным значением "Повторное использование возвращаемых значений" – "На время сеанса". В качестве адреса настроек формы указывается уникальный идентификатор самой формы из которой вызывается команда. Поэтому приходится переопределять адрес команд формы, чтобы он не кэшировался и была возможность параметры команды при каждом ее вызове в модуле вспомогательной формы. Передачу введенных данных на вспомогательной форме оказалось возможным передавать в модуль обработки через ДополнительныеПараметры команды.

Последним шагом в модуле внешней обработки необходимо добавить стандартные процедуры для обработки выполнения подключаемой команды, как если бы для команды в функции СведенияОВнешнейОбработке изначально было установлено значение "ЗаполнениеФормы" параметра "Использование":

 

 

Пример заполнения табличной "Прочие доходы" документа "Отражение прочих доходов и расходов" с учетом серверного контекста формы:
 

 

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

Использовалась демо-база 1С:ERP Управление предприятием 2 (2.5.22.76) на 1С:Предприятие 8.3 (8.3.27.1644).

Вступайте в нашу телеграмм-группу Инфостарт

БСП (Библиотека стандартных подсистем) Программист 1С v8.3 Управляемые формы Заполнение объекта

См. также

Логистика, склад и ТМЦ Ценообразование, анализ цен Механизмы типовых конфигураций Программист 1С v8.3 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Бухгалтерский учет Управленческий учет Бесплатно (free)

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

05.02.2011    10450    roman-sln    6    

12

Механизмы типовых конфигураций Программист 1С v8.3 1С:Управление торговлей 10 Россия Бесплатно (free)

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

03.11.2010    12911    quick    7    

13

Механизмы типовых конфигураций Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Данная статья предназначена для начинающих программистов 1с. Конфигурация Бухгалтерия предприятия, редакция 2.0 (2.0.14.5) . Платформа 8.2 (8.2.11.236).

1 стартмани

30.09.2010    26670    115    Tsprogrammist1    14    

42

Зарплата Кассовые операции Механизмы типовых конфигураций Программист 1С v8.3 1С:Зарплата и Управление Персоналом 2.5 1С:Управление производственным предприятием 1С:Франчайзи, автоматизация бизнеса Россия Бухгалтерский учет Налоговый учет Управленческий учет НДФЛ Бесплатно (free)

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

1 стартмани

08.09.2010    21391    progr-2008    15    

45

Математика и алгоритмы Механизмы типовых конфигураций Программист 1С v8.3 1C:Бухгалтерия Россия Бесплатно (free)

В статье делается попытка обосновать алгоритм расчета по базе с автоматическим вычислением приоритета расчета - т.е. без применения реквизита ПВР КатегорияРасчета. Выгрузки информационных баз загружаются в пустую базу 1С 8.2 и работают в обычном режиме.

22.07.2010    22925    boln    4    

12

Механизмы типовых конфигураций Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Россия Абонемент ($m)

Серия мини-FAQ/ЧаВо/инструкция по элементарным действиям в 1с 8.0/8.1/8.2 с картинками

1 стартмани

03.06.2010    63122    1457    anig99    25    

93

Механизмы типовых конфигураций Программист 1С v8.3 1C:Бухгалтерия Россия Абонемент ($m)

В этой статье мне хотелось бы поговорить о решении нетривиальных задач на платформе "1С:Предприятии 8". Рассмотрим задачу учета аналогов, разберем варианты реализации. Решение упрощенной задачи учета аналогов можно будет посмотреть в приложенных видео-уроках. Видео-уроки можно также рассматривать как пример разработки на платформе "1С:Предприятие 8.2". Полный текст статьи с картинками можно скачать в приложенном pdf-файле. Также в самом конце pdf-статьи находятся альтернативные ссылки на скачивание видео-уроков, их можно использовать при низкой скорости скачивания с инфостарта.

1 стартмани

28.05.2010    32078    1754    coach    27    

102
Для отправки сообщения требуется регистрация/авторизация