Как исправить ошибку при создании нового документа в 1С:УТ 11, связанную со справочником наборов дополнительных реквизитов и сведений?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При разработке новой функциональности в типовых конфигурациях 1С (таких как 1С:Управление торговлей 11, 1С:ERP или 1С:Комплексная автоматизация) программисты часто создают новый документ путем копирования существующего типового объекта метаданных (например, документа ОтчетКомиссионера). Однако при первой попытке интерактивного создания такого документа в режиме «1С:Предприятие» возникает ошибка обращения к справочнику НаборыДополнительныхРеквизитовИСведений.

Проанализируем причины возникновения этой проблемы и разберем по шагам все возможные способы её устранения в зависимости от поставленных перед разработчиком задач.

Почему возникает ошибка?

Типовые документы глубоко интегрированы с Библиотекой стандартных подсистем (БСП), в частности с подсистемой «Свойства» (дополнительные реквизиты и сведения). При обычном копировании объекта метаданных в конфигураторе переносятся все процедуры и функции модулей объекта и формы. При открытии формы нового документа срабатывают программные вызовы к общему модулю УправлениеСвойствами, который пытается найти в справочнике НаборыДополнительныхРеквизитовИСведений набор, привязанный именно к новому типу документа. Поскольку в справочнике отсутствует соответствующий предопределенный элемент или служебная запись, система генерирует исключение.

Кроме того, полноценная работа подсистемы требует включения нового типа документа в состав определяемых типов (например, ОпределяемыйТип.ВладелецДополнительныхРеквизитов, ОпределяемыйТип.ВладелецНаборовДополнительныхРеквизитовИСведений и ОпределяемыйТип.НаборСвойствВладельца), а также в источники соответствующих подписок на события БСП.

Вариант 1. Отключение функционала дополнительных реквизитов и сведений

Если для нового документа не требуется пользовательская настройка дополнительных реквизитов и сведений, самым простым и чистым решением будет полное отключение вызовов подсистемы свойств. Это позволит не снимать типовые справочники БСП с поддержки и не усложнять структуру метаданных.

Разберем, какие действия необходимо выполнить:

  1. Откроем модуль формы документа и найдем процедуру ПриСозданииНаСервере. Закомментируем или удалим вызов инициализации свойств: // УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры);
  2. Проверим остальные события формы на наличие вызовов подсистемы УправлениеСвойствами. При необходимости закомментируем обработку свойств в процедурах:
    • ПриЧтенииНаСервере
    • ПередЗаписьюНаСервере
    • ПослеЗаписиНаСервере
    • ОбработкаПроверкиЗаполненияНаСервере
  3. Проверим модуль объекта нового документа (процедуры ОбработкаЗаполнения, ПередЗаписью, ПриЗаписи, ОбработкаПроверкиЗаполнения) и исключим из них обращения к методам проверки и сохранения свойств.
  4. Если на управляемой форме присутствуют реквизиты (например, ПараметрыУправленияСвойствами) или команды динамического отображения свойств, удалим их. Также при отсутствии необходимости можно удалить табличную часть ДополнительныеРеквизиты в самом объекте метаданных.

Вариант 2. Добавление предопределенного элемента в конфигураторе

Если дополнительными реквизитами для нового документа пользоваться планируется, необходимо предоставить подсистеме БСП соответствующий набор свойств.

Разберем порядок действий в конфигураторе:

  1. Убедимся, что конфигурация находится на поддержке с возможностью редактирования. Если справочник НаборыДополнительныхРеквизитовИСведений закрыт замком, перейдем в меню Конфигурация — Поддержка — Настройка поддержки и включим возможность изменения для данного справочника.
  2. В дереве метаданных найдем справочник НаборыДополнительныхРеквизитовИСведений, кликнем по нему правой кнопкой мыши и выберем пункт «Открыть предопределенные данные».
  3. В открывшемся списке предопределенных элементов создадим новую запись по аналогии с остальными документами системы:
    • Имя: Документ_ИмяВашегоДокумента (где ИмяВашегоДокумента — точное системное имя нового документа в метаданных).
    • Наименование: Синоним созданного документа.
  4. Добавим тип нового документа в определяемые типы:
    • ОпределяемыйТип.ВладелецДополнительныхРеквизитов
    • ОпределяемыйТип.ВладелецНаборовДополнительныхРеквизитовИСведений
    • ОпределяемыйТип.НаборСвойствВладельца
  5. Обновим конфигурацию базы данных (по клавише F7) и запустим сеанс «1С:Предприятие».

Вариант 3. Программная инициализация без изменения предопределенных данных

В некоторых случаях добавление предопределенных элементов в конфигураторе нежелательно (например, для сохранения типовой поддержки объекта). Тогда можно воспользоваться штатными механизмами БСП или программным созданием элемента:

  1. Через переопределяемый модуль БСП: В общем модуле УправлениеСвойствамиПереопределяемый в процедуре ПриОпределенииНаборовСвойств (или ПриЗаполненииНаборовСвойств в зависимости от редакции БСП) программно регистрируется новый набор свойств для документа. При последующем обновлении информационной базы БСП создаст служебный элемент справочника автоматически.
  2. Через внешнюю обработку в режиме предприятия: Создать новый элемент справочника НаборыДополнительныхРеквизитовИСведений программно, заполнив реквизит ИмяПредопределенногоНабора строкой вида Документ_ИмяВашегоДокумента.

На что еще обратить внимание при копировании типовых документов

Поскольку исходный документ (например, ОтчетКомиссионера) содержит в себе логику множества связанных типовых механизмов, аналогичные ошибки при открытии, проведении или печати могут возникнуть и в других подсистемах:

← На главную