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

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С 8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

1 стартмани

20.03.2026    623    InFlach    0    

6

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

Интервальные регистры в 1С:ЗУП 3.1 заменяют тяжелые срезы последних, ускоряя отчеты по кадровым данным через интервалы ДатаНачала–ДатаОкончания. Разбираем отличия, примеры кода, плюсы и способы синхронизации.

12.03.2026    1989    AlexeyPROSTO_1C    4    

18

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

Как в ЗУП работает механизм расстановки времени в регистрах сведений с помощью подписки на события?Рассматривается логика сдвигов для разных типов документов (прием, увольнение, отпуск) и дается инструкция по подключению нового регистра к этому механизму.

03.03.2026    881    YA_1100893639    1    

7

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

Каждый, кто работал с кадровыми отчетами в ЗУП, ERP или УХ, сталкивался с механизмом представлений – странным кодом запроса, где поля отображаются пустыми ссылками, а в названии временной таблицы есть слово «Представление». В статье разберем, что такое представления и как ими пользоваться. Больше не нужно ломать голову над тем, откуда и как правильно получать данные. Механизм представлений сделает это за вас.

08.07.2025    13581    user2012581    55    

61

Механизмы типовых конфигураций Программист Стажер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Бесплатно (free)

В типовых решениях типа УТ, КА, ERP при вводе строк в поля ввода осуществляется поиск по первым символам. С помощью небольшой доработки (делается через расширение) можно организовать поиск по вхождению.

02.06.2025    3166    lkey    2    

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