Изменения и дополнения:
Обновлено 08.11.2018. Добавлено расширение для конфигурации "Бухгалтерия предприятия, ред. 3.0.65", пример заполнения документа "Реализация (акты, накладные)"
Обновлено 09.10.2018. Добавлено расширение для конфигурации "Зарплата и управление персоналом, ред. 3.1.7", пример заполнения документа "График отпусков"
Обновлено 08.10.2018. Добавлено расширение для конфигурации "Розница, ред. 2.2.9", пример заполнения документа "Заказ покупателя"
Обновлено 07.10.2018. Добавлено расширение для конфигурации "Управление торговлей, ред. 11.4.2", пример заполнения документа "Заказ клиента"
Добавлено 07.10.2018 Краткое содержание: описана альтернатива внешним обработкам заполнения объектов, в конфигурациях на основе БСП.
Почему не через подсистему "Дополнительные отчеты и обработки"? Мне показалось это более удобным способом именно при вызове клиентского метода, так как можно просто получить форму объекта и сам объект, удобнее отлаживать код. Плюс подключение команды имеет больше дополнительных настроек. В конечном итоге у разработчика есть выбор как решить задачу в том или ином случае.
Итак, что нужно для подключения команды заполнения объекта?
- Добавить новое расширение или использовать имеющееся.
- Добавить в расширение подсистему "ПодключаемыеОтчетыИОбработки"
- Добавить в расширение роль "БазовыеПрава"
- Добавить в расширение объект, который будем заполнять, в моем случае документ "ЗаказПокупателя"
- Создать в расширении обработку, в моем случае "ЗаполнениеЗаказПокупателя"
- В обработке "ЗаполнениеЗаказПокупателя" добавить основную форму
Это все объекты, которые понадобятся в расширении для включения через подсистему "Подключаемые команды" команды заполнения объекта.
Далее надо настроить объекты расширения и добавить программный код:
- В расширении в состав подсистемы"ПодключаемыеОтчетыИОбработки" включить обработку "ЗаполнениеЗаказПокупателя"
- В расширении для роли "БазовыеПрава" дать право "Использование" на обработку "ЗаполнениеЗаказПокупателя"
- В расширении в модуле менеджера документа "ЗаказПокупателя" надо добавить экспортную процедуру "ДобавитьКомандыЗаполнения". Процедуру надо добавить в том случае, если в основной конфигурации нет этой процедуры.
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда Процедура ДобавитьКомандыЗаполнения(КомандыЗаполнения, Параметры) Экспорт КонецПроцедуры #КонецЕсли
- В расширении в модуле менеджера обработки "ЗаполнениеЗаказПокупателя" надо добавить две экспортные процедуры "ПриОпределенииНастроек" и "ДобавитьКомандыЗаполнения". При добавлении команды указывается видимость команды в формах (можно указать видимость только в форме документа, как в примере), можно указать необходимость записывать ил проводить объект перед вызовом команды, определять условия видимости команды, указывать дополнительные параметры формы (более подробно в документации к БСП).
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда // Определяет состав программного интерфейса для интеграции с конфигурацией. Процедура ПриОпределенииНастроек(Настройки) Экспорт Настройки.ДобавитьКомандыЗаполнения = Истина; Настройки.Размещение.Добавить(Метаданные.Документы.ЗаказПокупателя); КонецПроцедуры // Определяет список команд заполнения. Процедура ДобавитьКомандыЗаполнения(КомандыЗаполнения, Параметры) Экспорт Команда = КомандыЗаполнения.Добавить(); Команда.Представление = НСтр("ru = 'Заполнить объект'"); Команда.Идентификатор = "ЗаполнитьОбъект"; Команда.Важность = "Важное"; Команда.Порядок = 10; Команда.МножественныйВыбор = Ложь; Команда.ИзменяетВыбранныеОбъекты = Истина; Команда.ВидимостьВФормах = "ФормаДокумента"; Команда.РежимЗаписи = "НеЗаписывать"; Команда.ИмяФормы = "Форма"; Команда.Обработчик = "Подключаемый_ЗаполнитьОбъект"; КонецПроцедуры #КонецЕсли
- В модуле основной формы обработки "ЗаполнениеЗаказПокупателя" добавить экспортную процедуру "Подключаемый_ЗаполнитьОбъект". Имя процедуры такое, как задано в параметре команды "Обработчик". В теле процедуры собственно код заполнения объекта. Получение формы объекта и самого объекта через параметр процедуры "ПараметрыВыполнения".
&НаКлиенте Процедура Подключаемый_ЗаполнитьОбъект(МассивОбъектов, ПараметрыВыполнения) Экспорт ИсточникФорма = ПараметрыВыполнения.Форма; ИсточникОбъект = ИсточникФорма.Объект; //Здесь код заполнения объекта КонецПроцедуры
Собственно это весь необходимый минимум, согласно документации БСП. Если добавляемая команда одна, то она отображается в форме документа на командной панели формы в виде кнопки с представлением команды. Если команд несколько, то команды отображаются в подменю "Заполнить".
Для конфигурации "Управление нашей фирмой, ред 1.6.14" мне понадобилось дополнительно включить в расширение общий модуль "ЗаполнениеОбъектовПереопределяемый" и разрешить использование подключаемых команд для формы объекта "ЗаказПокупателя" добавив процедуру "ПередДобавлениемКомандЗаполнения" с аннотацией "&После".
&После("ПередДобавлениемКомандЗаполнения")
Процедура афс_ПередДобавлениемКомандЗаполнения(КомандыЗаполнения, Параметры, СтандартнаяОбработка) Экспорт
Если Параметры.ИмяФормы = "Документ.ЗаказПокупателя.Форма.ФормаДокумента" Тогда
СтандартнаяОбработка = Истина;
КонецЕсли;
КонецПроцедуры
В приложении к публикации расширение с описанным примером плюс дополнительно показано как получить объект формы на сервере и перенести изменения объекта, сделанные на сервере, в форму объекта на клиенте. Также в расширении показано как отобразить одну команду в подменю "Заполнить".