В типовых конфигурациях 1С, таких как «Зарплата и управление персоналом 3.1», механизм дополнительных реквизитов и сведений реализован на базе Библиотеки стандартных подсистем (БСП). Однако разработчики включают эту возможность не для всех объектов. Документ ГрафикОтпусков — один из тех, где этот функционал по умолчанию может отсутствовать в списке доступных наборов. В данной статье мы разберем, как расширить возможности программы и добавить поддержку произвольных полей для этого документа, сохранив при этом конфигурацию на поддержке.
Прежде чем приступать к разработке, давайте проанализируем, какой именно механизм нам нужен, так как они имеют принципиальные технические различия:
ДополнительныеСведения. Для их внедрения не нужно изменять структуру самого документа (добавлять таблицы). Они удобны, если данные нужны редко и их не обязательно видеть сразу в основной форме.Рассмотрим наиболее востребованный вариант — добавление именно дополнительных реквизитов, которые будут отображаться на форме документа График отпусков.
Чтобы не снимать конфигурацию с поддержки и обеспечить легкость обновлений, мы будем использовать механизм расширений. Создадим новое расширение и добавим в него документ ГрафикОтпусков, а также справочник НаборыДополнительныхРеквизитовИСведений.
Важный нюанс: в расширении необходимо убедиться, что включена возможность изменения структуры данных, так как нам потребуется добавить новую табличную часть.
Для того чтобы БСП «узнала» документ как объект, поддерживающий доп. реквизиты, нам необходимо добавить в него табличную часть. Разберем по шагам состав этой таблицы:
ГрафикОтпусков (в расширении) табличную часть с именем ДополнительныеРеквизиты.Свойство — тип ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения.Значение — тип Характеристика.ДополнительныеРеквизитыИСведения.ТекстоваяСтрока — тип Строка (неограниченной длины).Проанализируем ситуацию: наличие этой табличной части является сигналом для программных механизмов БСП о том, что объект потенциально может хранить дополнительные данные.
Теперь выясним причину, по которой документ не отображается в режиме «1С:Предприятие» в списке наборов. Система ищет соответствие между типом ссылки объекта и предопределенным элементом в справочнике НаборыДополнительныхРеквизитовИСведений.
Поскольку мы не можем напрямую добавить предопределенный элемент в расширение для системного справочника, у нас есть два пути:
УправлениеСвойствамиПереопределяемый и прописать регистрацию там.Рассмотрим программный метод регистрации через переопределяемый модуль. Нам нужно найти процедуру ПриОпределенииОбъектовСДополнительнымиРеквизитами и добавить наш документ:
&После("ПриОпределенииОбъектовСДополнительнымиРеквизитами")
Процедура Расш1_ПриОпределенииОбъектовСДополнительнымиРеквизитами(Объекты)
Объекты.Вставить(Метаданные.Документы.ГрафикОтпусков);
КонецПроцедуры
Даже если мы добавили ТЧ и зарегистрировали набор, поля на форме не появятся сами собой. Нам нужно модифицировать форму документа ГрафикОтпусков. Рассмотрим, как это сделать в расширении:
В модуле формы документа, в процедуре ПриСозданииНаСервере, необходимо вызвать обработчик БСП. Это заставит систему динамически отрисовать дополнительные поля на форме.
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПараметрыПодсистемы = УправлениеСвойствами.ПараметрыРедактированияСвойств(ЭтотОбъект);
ПараметрыПодсистемы.ИмяГруппыДополнительныхРеквизитов = "ГруппаДополнительныеРеквизиты"; // Укажите имя группы на форме
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыПодсистемы);
КонецПроцедуры
Не забудьте предварительно создать на форме документа обычную группу (без заголовка или с ним), в которую система будет «складывать» новые поля. Назовите её, например, ГруппаДополнительныеРеквизиты.
Выясним еще один важный момент: чтобы добавленные реквизиты можно было использовать в списках документов (через «Изменить форму») или выводить в отчеты, необходимо настроить Характеристики в метаданных документа. Это делается на вкладке «Данные» в Конфигураторе.
Разберем параметры настройки характеристик:
ДополнительныеРеквизитыИСведения.ДополнительныеРеквизиты.После этой настройки механизм СКД (Система компоновки данных) автоматически увидит ваши новые реквизиты как полноценные поля документа в любом отчете по графикам отпусков.
Чтобы данные корректно сохранялись, в модуле объекта (через расширение) желательно проверить наличие вызовов БСП в обработчиках записи. Обычно в современных версиях ЗУП 3.1 базовые механизмы уже интегрированы в общие модули, но если реквизиты не сохраняются, проверьте наличие кода в ПередЗаписью:
&После("ПередЗаписью")
Процедура Расш1_ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
УправлениеСвойствами.ПередЗаписьюОбъекта(ЭтотОбъект);
КонецПроцедуры
Мы проанализировали комплексный подход к добавлению функционала дополнительных реквизитов. Главное помнить: простого добавления табличной части недостаточно. Магия БСП работает только тогда, когда соблюдена цепочка: Метаданные (ТЧ) -> Регистрация в наборах (код) -> Вызов на форме (динамическое создание элементов) -> Настройка характеристик (для отчетов).
Используя расширения, вы решаете задачу максимально корректно, не создавая сложностей при последующих обновлениях программы 1С:ЗУП КОРП.