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