1с создание связанных объектов
В этой статье я хотел бы рассказать об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С БСП).
Для начала предлагаю разобраться с терминологией 1С БСП: согласно ИТС дополнительные реквизиты и сведения — это свойства. По моему мнению, подсистема «Свойства» (Управление свойствами) — это очень мощный функционал, который позволяет во многих случаях отказаться от снятия конфигурации с поддержки или внесения ненужных изменений и ошибок в конфигурацию.
Архитектура
Описание работы с подсистемой «Свойства» на сайте ИТС 1С является исчерпывающим для типовых конфигураций, но в любом случае, для того, чтобы начать работать со свойствами в любой конфигурации с внедрённым 1С БСП необходимо установить установить константу «Использовать дополнительные реквизиты и сведения» в значение «Истина». После этого мы можем открыть справочник «Наборы дополнительных реквизитов и сведений», который содержит список объектов для которых можно создавать дополнительные реквизиты и сведения. При добавлении через стандартные формы 1С БСП пользователь создаёт новый элемент «Плана видов характеристик», который добавляется в табличную часть элемента.
Дополнительные сведения отличаются от дополнительных реквизитов прежде всего расположением, дополнительные сведения содержатся в отдельном регистре с одноименным названием, а дополнительные реквизиты являются табличной частью объекта, к которому относятся. На рисунке ниже слева-направо изображены: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и список регистра сведений «Дополнительные сведения».
Следующий рисунок изображает пример дополнительного реквизита, слева-направо: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и элемент справочника, в который был добавлен дополнительный реквизит.
Также стоит учитывать, что большая часть объектов метаданных в справочнике «Наборы дополнительных реквизитов и сведений» является предопределённой:
Однако, заполнение этих данных происходит программно, при внедрении 1С БСП или обновлении информационной базы — для этого в общих модулях добавляют процедуру ПриПолученииПредопределенныхНаборовСвойств. Уникальный идентификатор задаётся в явном виде, в т.ч. для того чтобы облегчить процедуры обмена между базами.
С точки зрения интеграции с объектами механизм работы с формами не сильно отличается от аналогичных у других подсистем 1С БСП: из модуля УправлениеСвойствами вызываются процедуры и функции с названиями соответствующими названиям событий для которых они вызываются, например:
Полный список функций и процедур находится в общем модуле УправлениеСвойствами в блоке, озаглавленным: «Процедуры и функции для стандартной обработки дополнительных реквизитов».
Использование
Каждый дополнительный реквизит или свойство содержит поле «Имя», подразумевается, что для программного использования будет использоваться этот реквизит.
Пример использования имени для получения дополнительного реквизита:
Пример запроса для получения всех дополнительных свойств:
Примеры получения свойств без запроса:
Особенности реализации
Если с запросами и функциями всё более менее ясно неприятным сюрпризом может стать то, что дополнительный реквизит на форме содержит название, отличающееся от этого реквизита, например, такое:
Чтобы найти реквизит на форме 1С БСП создаёт новые реквизиты формы Свойства_ОписаниеДополнительныхРеквизитов и Свойства_ОписаниеЗависимыхДополнительныхРеквизитов, с помощью них можно установить однозначное соответствие между элементом и значением объекта:
Второй особенностью реализации можно выделить невозможность создания свойства с мутабельным типом, с одной стороны это очевидное ограничение, с другой тип «Список значений» вполне допустим, но только для дополнительного реквизита (у дополнительных сведений невозможность связана с архитектурными ограничениями, так как объект и свойство — это измерения регистра «Дополнительные сведения»). Возможно, отсутствие такого типа связано со сложностями при обмене, а возможно в скором времени это будет реализовано, предлагаю посмотреть на пример такой реализации ниже.
Добавим новый дополнительный реквизит для справочника физические лица «Номера счетов»
Добавляем программно, вторую запись в табличную часть «Дополнительные реквизиты» справочника «Физические лица» с тем же самым свойством:
Немного модифицируем код функции ЗначенияСвойств в общем модуле УправлениеСвойствамиСлужебный:
А также код процедуры ЗаполнитьДополнительныеРеквизитыВФорме в общем модуле УправлениеСвойствами:
Таким образом мы можем сохранять и восстанавливать значения реквизитов, которые, принимают множество значений.
Задача: В "1С:Управление торговлей 11" (релиз 11.06.7). Создать документ Счет-фактура выданный аванс на основании документа Поступление безналичных денежных средств из формы документа или из формы списка документов.
1) До записи нового документа счет-фактура выданный аванс показать его заполненную, по основанию, форму и предложить пользователю интерактивно его записать;
2) Обработку создания документа сделать внешней и подключаемой к форме документа основания.
Нюанс: У документа счет-фактура выданный аванс в конфигурации оснований не задано.
Понятно, что от нас требуется создать внешнюю обработку вида "СозданиеСвязанныхОбъектов" и подключить её в информационную базу.
Приведу код в модуле обработки:
Так как нам придется работать с формами объектов, мы просто вынуждены использовать метод ВызовКлиентскогоМетода для вызова команды внешней обработки.
Напомню, при использовании ВызовСерверногоМетода с формами объектов работать не получится.
Подробнее о типовых принципах создания внешних подключаемых обработок и печатных форм вы можете почитать здесь.
Так как мы использовали ВызовКлиентскогоМетода, то обязательную процедуру, для внешней подключаемой обработки создания связанных объектов, ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт, необходимо выполнять &НаКлиенте в модуле формы обработки, а значит создадим любую форму обработки, пользователь её всеравно не увидит, и поместим внутрь модуля формы следующий код:
Ниже приведу код, который у вас может быть совершенно другим, и делать какие-либо другие манипуляции с объектом формы:
В результате наша задача будет выполнена, документ счет-фактура выданный аванс будет создан на основании документа поступление безналичных денежных средств из его же формы. Но при этом созданный документ не будет записан в информационную базу, а будет открыта только его заполненная форма с возможностью интерактивной записи, проведением и возможностью редактирования.
Если есть более оптимальные, более правильные решения поставленной задачи, сообщайте об этом мне или публикуйтесь самостоятельно, не молчите. На данный момент информации о внешних подключаемых обработках на управляемом приложении почти нет, даже книги Радченко М.Г. дают её в ограниченном объеме.
Задача: В "1С:Управление торговлей 11" (релиз 11.06.7). Создать документ Счет-фактура выданный аванс на основании документа Поступление безналичных денежных средств из формы документа или из формы списка документов.
1) До записи нового документа счет-фактура выданный аванс показать его заполненную, по основанию, форму и предложить пользователю интерактивно его записать;
2) Обработку создания документа сделать внешней и подключаемой к форме документа основания.
Нюанс: У документа счет-фактура выданный аванс в конфигурации оснований не задано.
Понятно, что от нас требуется создать внешнюю обработку вида "СозданиеСвязанныхОбъектов" и подключить её в информационную базу.
Приведу код в модуле обработки:
Так как нам придется работать с формами объектов, мы просто вынуждены использовать метод ВызовКлиентскогоМетода для вызова команды внешней обработки.
Напомню, при использовании ВызовСерверногоМетода с формами объектов работать не получится.
Подробнее о типовых принципах создания внешних подключаемых обработок и печатных форм вы можете почитать здесь.
Так как мы использовали ВызовКлиентскогоМетода, то обязательную процедуру, для внешней подключаемой обработки создания связанных объектов, ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) Экспорт, необходимо выполнять &НаКлиенте в модуле формы обработки, а значит создадим любую форму обработки, пользователь её всеравно не увидит, и поместим внутрь модуля формы следующий код:
Ниже приведу код, который у вас может быть совершенно другим, и делать какие-либо другие манипуляции с объектом формы:
В результате наша задача будет выполнена, документ счет-фактура выданный аванс будет создан на основании документа поступление безналичных денежных средств из его же формы. Но при этом созданный документ не будет записан в информационную базу, а будет открыта только его заполненная форма с возможностью интерактивной записи, проведением и возможностью редактирования.
Если есть более оптимальные, более правильные решения поставленной задачи, сообщайте об этом мне или публикуйтесь самостоятельно, не молчите. На данный момент информации о внешних подключаемых обработках на управляемом приложении почти нет, даже книги Радченко М.Г. дают её в ограниченном объеме.
Дополнительные отчеты и обработки — подсистема 1С БСП, предназначена для расширения функционала без изменения конфигурации.
Для более полного ознакомления можно развернуть демонстрационную конфигурацию по БСП. В ней есть необходимые примеры.
Что можно подключить
- внешние обработки (файлы с расширением “epf”) ;
- внешние отчеты (файлы с расширением «erf»).
Виды разработок
- Дополнительная обработка.
- Дополнительный отчет.
- Заполнение объекта. Возможность установить свои кнопки по заполнению документа (ранее были только кнопки по заполнению табличной части).
- Печатная форма. Дополнительная печатная форма. Добавляется кнопка «Дополнительные печатные формы».
- Отчет. Прикрепляемый к справочникам и документам.
- Создание связанных объектов. Свой ввод на основании. В пункт меню «Ввод на основании» добавляется кнопка «Создание связанных объектов…».
Возможности БСП:
- В документах можно добавлять кнопки по заполнению всего документа, кнопки по вводу на основании.
- Обработка может содержать несколько команд меню.
- Вводить на основании и заполнять объекты сразу на основании нескольких объектов.
- Задавать расписание выполнение серверных команд (на сервере).
- Задавать режим «Безопасный» или «Небезопасный», т.е. запускать обработку с учетом ограничением прав или полные права
- Задать режим использования: «Не использовать», «Отладка», «Использовать».
- Включить использование в формах объекта и в форма списков
- Привязать ко всем указанным объектам обработку или отчет.
- Настроить быстрый доступ к определенным командам внешних обработок.
- Возможность указать в каких разделах интерфейса должны появляться дополнительные обработки и отчеты.
Сведения о внешней обработке
«Вид»
Минимальным условием для регистрации разработки является заполнение поля «Вид».
Значение поле может принимать одно из значений, возвращаемых функциями: ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработки().
Таблица. Поле «ВИД».
«Назначение»
Содержит массив объектов конфигурации в формате «.», для которых будет назначен внешний отчет/обработка.
«Наименование»
Строка. Подставляется в наименование при создании элемента справочника «Дополнительные отчеты и обработки». Если не заполнено, то используется синоним внешней обработки/отчета.
«Команды»
Таблица значений. Загружается в одноименную табличную часть элемента справочника «Дополнительные отчеты и обработки» при регистрации внешней обработки.
Эту табличную часть можно заполнить и вручную.
Колонки таблицы:
Идентификатор – строка (идентификатор команды).
Представление – описание команды.
Модификатор — строка (используется для дополнительных печатных форм).
ПоказыватьОповещение – окно оповещение будет появляться перед началом и после окончания выполнения (для команд клиентских и серверных без формы).
Использование – режим запуска обработки.
В колонке «Использование» указывается тип вызываемой команды. По сочетанию Вид-Тип команды система определяет какая предопределенная процедура будет вызвана из внешней обработки/отчета, и где она будет объявлена — на клиенте или на сервере.
Наиболее часто используются процедуры Печать() и ВыполнитьКоманду(), а также открытие формы без обращения к методу.
Это поле может принимать одно из значений, возвращаемых функциями ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКоманды(), например, ТипКомандыВызовСерверногоМетода().
Таблица. Возможные варианты использования в таблице.
Тип команды | Значение поля «Вид» | Вызываемая экспортная процедура |
ВызовСерверногоМетода | ПечатнаяФорма | Печать( МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) |
ДополнительнаяОбработка ДополнительныйОтчет Отчет | ВыполнитьКоманду( ИдентификаторКоманды, ПараметрыВыполнения) | |
СозданиеСвязанныхОбъектов | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, СозданныеОбъекты, ПараметрыВыполнения) | |
ЗаполнениеОбъекта | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) | |
ВызовКлиентскогоМетода | ПечатнаяФорма | &НаКлиенте Печать( ИдентификаторКоманды, ОбъектыНазначенияМассив) |
ДополнительнаяОбработка ДополнительныйОтчет | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды) | |
СозданиеСвязанныхОбъектов | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив, СозданныеОбъекты) | |
ЗаполнениеОбъекта Отчет | &НаКлиенте ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначенияМассив) | |
Для всех видов | в форму передается параметр ДополнительнаяОбработкаСсылка | |
ОткрытиеФормы | СозданиеСвязанныхОбъектов ЗаполнениеОбъекта Отчет | в форму передается дополнительный параметр ОбъектыНазначения |
Для всех видов | в форму передаются параметры ИдентификаторКоманды ДополнительнаяОбработкаСсылка ИмяФормы | |
Отчет | Отчет с макетом СКД может не иметь форму, тогда будет использована общая форма для отчетов по умолчанию | |
ЗаполнениеФормы | ЗаполнениеОбъекта | ВыполнитьКоманду( ИдентификаторКоманды, ОбъектыНазначения, ПараметрыВыполнения) |
СценарийВБезопасномРежиме | Для всех видов | см. описание в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер .ТипКомандыСценарийВБезопасномРежиме() |
ЗагрузкаДанныхИзФайла | ДополнительнаяОбработка | см. описание в комментарии к функции ДополнительныеОтчетыИОбработкиКлиентСервер .ТипКомандыЗагрузкаДанныхИзФайла() |
Для типа команды ВызовКлиентскогоМетода необходимо создать форму в обработке, назначить ее основной и объявить экспортную процедуру.
«Версия БСП»
Строка, версия встроенной в конфигурации БСП. Необходима для поддержки совместимости. Можно не заполнять.
«Безопасный Режим»
Булево, отображает режим запуска обработка. В безопасном режиме недоступен привилегированный режим, COM-соединение, загрузка dll, доступ к файловой системе и интернету.
«Информация»
Строка, комментарий, который характеризует обработку.
«Версия»
Строка, версия обработки.
Подготовка разработки к подключению.
Для подключения разработки в базу необходимо задать параметры в экспортной функции модуля объекта «СведенияОВнешнейОбработке».
Пример
Подключение к базе.
Открываем справочник «Дополнительные отчеты и обработки». Кнопкой «Добавить» создаем элемент справочника. После чего система предложит прикрепить вашу разработку. Система автоматически заполнит поля формы функцией «СведенияОВнешнейОбработке.
Отладка
Единственный минус дополнительных отчетов и обработок заключается в том, что внутри них не работает встроенный в платформу отладчик.
Связано это в первую очередь с тем, что, запуская такую форму, система создает временный файл, и точки останова не срабатывают.
Продолжаем разбирать технологию разработки внешних отчетов и обработок. Данная технология очень широко используется, много статей и примеров, но, лично мне, не хватает простого и удобного классификатора с примерами, чтобы быстро сверстать собственную обработку или отчет.
Я вот, например, постоянно ищу и копирую подходящие собственные обработки, чтобы создать новую. Иной раз долго копаюсь, чтобы найти нужный шаблон. И вот чтобы поменьше искать — выкладываю — для себя, в том числе.
Кому интересно немного теории и ознакомиться с моим стандартом — переходите по ссылке, остальных томить не буду, переходим к делу и собственно шаблонам:
Вид обработки и Тип команды
Поведение внешних отчетов и обработок, главным образом, определяется Видом обработки и Типом команды (описание).
Виды обработок
Главным параметром, определяющим вид обработки является «Вид». Их немного, остановимся кратко на каждом:
Дополнительная обработка
Обработка произвольного вида. Привязывается к выбранному разделу главного меню и вызывается из меню «Сервис» => «Дополнительные обработки». Классический пример — обработка с открытием формы.
Заполнение объекта
Дополнительная обработка специального вида «Заполнение объекта». Предназначена для обработки данных документа или другого объекта (но далеко не всех!). При регистрации обработки на форме появляется невидимая до сих пор кнопка «Заполнение»
Подробно разобраны для типов команды «ТипКомандыОткрытиеФормы» и «ТипКомандыВызовКлиентскогоМетода»:
Пример самой функции (ТипКомандыОткрытиеФормы):
Печатная форма
Самый частый для разработки вид внешних обработок. Предназначена для формирования печатных форм одного или нескольких объектов (документов, справочников). При регистрации печатной формы документа появляется пункт в меню «Печать» форм списков и формы документа.
Создание связанных объектов
Пока нет примера
Пока нет примера
Дополнительный отчет
Предназначен для добавления произвольного отчета. Можно назначить в один или несколько подсистем (Продажи, Закупки и т.д.). Шаблон ниже:
Отчет
Для дополнительных контекстных отчетов. Встраиваются в списки справочников и документов для вызова по кнопке «Отчеты».
Необходимо обратить внимание на передачу параметров и автоформирование отчета:
- «ОпределитьНастройкиФормы» в СведенияОВнешнейОбработке — обязательно установить флаг Истина
- Доп процедура ОпределитьНастройкиФормы
- Доп процедура ПриСозданииНаСервере
Немного теории и описание моего стандарта функции СведенияОВнешнейОбработке
«Программа позволяет подключать и использовать дополнительные (внешние) отчеты и обработки в режиме 1С:Предприятия. Они расширяют возможности программы и могут использоваться для упрощения работы и оперативной доработки под особенности учета в организации. В отличие от стандартных средств доработки конфигурации, дополнительные отчеты и обработки подключаются без изменения конфигурации поставщика и не замедляют обновление программы (также остается возможность обновлять программу в автоматическом режиме). » — Подробнее на сайте 1С…
Внешний отчет / обработка должен содержать в модуле обработки экспортную функцию СведенияОВнешнейОбработке без параметров. Функция должна возвращать Структуру с определенным обязательным набором параметров. Разберем функцию по строкам
- Для инициализации параметров структуры, которую будем заполнять и затем возвращать я использую стандартную функцию ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(«ВерсияБСП»)
- ВерсиюБСП я тоже предпочитаю получать ту, которая используется в конфигурации.
ВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки()
Стоит заметить, что есть теоретическая вероятность, что в результате изменений версий БСП после обновления конфигурации и изменения версии библиотеки ваш код перестанет работать и, с этой точки зрения, безопаснее использовать ту версию, которую вы использовали на момент отладки. - ПараметрыРегистрации.Вид, с видом все понятно, см. выше
- ПараметрыРегистрации.БезопасныйРежим — всегда выставляю = Истина. Однако, надо быть готовым к тому, чтобы прописать нужные разрешения
- ПараметрыРегистрации.Наименование — ставлю = Метаданные().Синоним, т.к. при правильно названной обработке — код получается универсальным (см скрин выше)
- ПараметрыРегистрации.Версия = Метаданные().Комментарий, мне лично версии удобнее поддерживать в метаданных обработки, чем в коде. Опять-таки, код универсален
- ПараметрыРегистрации. Назначение. Это должен быть массив с перечислением идентификаторов метаданных. Актуально для объектов, к которым привязывается обработка (к примеру, к печатным формам). По примеру должно быть все ясно.
- Добавление разрешений — это опять-таки см п4 и разрешения
- Нужно создать одну или несколько Команд. Поэтому пишем НоваяКоманда = ПараметрыРегистрации.Команды.Добавить(), где ПараметрыРегистрации.Команды — это Таблица значений с колонками:
- ЗаменяемыеКоманды
- Идентификатор
- Использование
- Модификатор
- ПоказыватьОповещение
- Представление
- Скрыть
- НоваяКоманда.Представление = Метаданные().Синоним — чтобы не придумывать другое имя команды и для универсальности кода. В некоторых случаях бывает целесообразно заменить на другое (например, если команд — несколько)
- НоваяКоманда.Идентификатор = Метаданные().Имя — аналогично с п10, чтобы не придумывать другой идентификатор команды и для универсальности кода. В некоторых случаях бывает целесообразно заменить на другое (например, если команд — несколько)
- НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода()
или другая из 7 вариантов, описанных ниже
Типы команд
ПараметрыРегистрации.Команды — это Таблица значений с колонками:
- Идентификатор
- Представление
- Использование
- Модификатор
- ПоказыватьОповещение
- ЗаменяемыеКоманды
- Скрыть
Самое важное значение — «Использование» — может принимать несколько значений для исполнения разных назначений:
- ТипКомандыВызовСерверногоМетода
- ТипКомандыВызовКлиентскогоМетода
- ТипКомандыЗагрузкаДанныхИзФайла.
- ТипКомандыЗаполнениеФормы
- ТипКомандыОткрытиеФормы
- ТипКомандыСценарийВБезопасномРежиме
С типами команд надо бы тему раскрыть, но как-нибудь в другой раз…
На этом пока все, тема не закрыта, эту статью, вероятно, буду подправлять, т.к. будет как справочник
Читайте также: