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

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 Бесплатно (free)

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

08.07.2025    3801    user2012581    47    

52

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

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

02.06.2025    696    lkey    0    

5

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

В этой статье я расскажу, как в конфигурации 1С:ERP 2.5 при начале работы системы настроить открытие своих нетиповых форм (в том числе и из внешних обработок). Данную методику можно использовать как на тонком клиенте, так и на мобильном или веб-клиенте, а также в мобильном приложении.

12.05.2025    2728    PROSTO-1C    1    

16

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

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

27.02.2025    1195    PROSTO-1C    1    

6
Оставьте свое сообщение