Как найти документы-регистраторы для подчиненного регистра сведений в 1С

Программист 1С v8.3 (Управляемые формы) Финансы и профессиональные услуги
← На главную

В процессе обновления нетиповых или доработанных конфигураций разработчики нередко сталкиваются с ситуацией, когда платформа блокирует сохранение конфигурации базы данных из-за нового регистра сведений. В структуре метаданных появляется регистр с режимом записи Подчинение регистратору, но в списке его регистраторов нет ни одного документа. Платформа «1С:Предприятие» не позволяет применить такие изменения структуры данных.

Попытка обойти ошибку переключением режима записи регистра в значение Независимый приводит к еще более серьезным проблемам. При таком переключении физически удаляются стандартные реквизиты Регистратор и НомерСтроки, в результате чего при проверке конфигурации падает весь исходный код: модули проведения, запросы и обработчики наборов записей, обращающиеся к регистратору. Разберем архитектурные особенности этой проблемы и рассмотрим по шагам, как выявить нужные документы и корректно восстановить связи метаданных.

Почему регистр сведений остался без регистраторов

Проанализируем механизм связывания метаданных в платформе 1С. В дереве метаданных у регистра сведений вкладка Регистраторы доступна только для чтения: разработчик не может вручную отметить нужные документы непосредственно в свойствах регистра. Привязка настраивается исключительно на стороне документа — в ветке свойств Движения.

Сбой возникает при выполнении процедуры «Сравнить, объединить с конфигурацией из файла» или обновлении через поддержку. Если новый регистр был отмечен к объединению, а типовые документы, формирующие движения, ранее были доработаны и исключены из обновления (или для них был установлен запрет на перезапись свойств), их ветка Движения не обновляется. В результате регистр сведений переносится в основную конфигурацию, а флажки в документах не выставляются, оставляя подчиненный регистр без единого источника записей.

Способ 1. Поиск регистраторов через конфигурацию поставщика или файл поставки

Самый надежный и быстрый способ узнать полный состав регистраторов — обратиться к эталонной конфигурации поставщика, откуда пришел новый регистр. Разберем возможные варианты работы с файлами поставки:

  1. Просмотр конфигурации поставщика в текущей базе. Перейдем в главное меню: Конфигурация — Поддержка — Настройка поддержки. В открывшемся окне нажмем кнопку Включить возможность изменения (если она еще не включена) или нажмем Сравнить, чтобы сопоставить текущую конфигурацию с конфигурацией поставщика. В окне сравнения раскроем нужный регистр сведений: вкладка регистраторов покажет весь исходный состав документов.
  2. Открытие полного файла поставки (.cf) без создания базы. Если доступен файл поставки релиза .cf, его не требуется загружать в отдельную базу. Достаточно в меню Конфигуратора выбрать Файл — Открыть, выбрать файл .cf и открыть его как конфигурацию из файла. Раскрыв дерево метаданных открытого файла, перейдем к регистру и посмотрим заполненный список регистраторов.
  3. Действия при наличии только файла обновления (.cfu). Файл обновления .cfu содержит только дельту (разницу) между версиями и не может быть открыт напрямую. В такой ситуации развернем пустую информационную базу, загрузим в нее конфигурацию поставщика предыдущей версии, штатно применим обновление через меню поддержки и уже из полученной конфигурации извлечем нужные связи.

Способ 2. Программный вывод списка регистраторов через объект метаданных

Если у нас есть доступ к демонстрационной базе нужного релиза или к конфигурации поставщика, мы можем получить полный список документов программно. Для этого выполним короткий фрагмент кода во внешней обработке или в консоли кода:


Для Каждого Регистратор Из Метаданные.РегистрыСведений.ЛМБ_ПерезаложенныеБилеты.Регистраторы Цикл
    Сообщить(Регистратор.Имя);
КонецЦикла;

Коллекция Метаданные.РегистрыСведений.[ИмяРегистра].Регистраторы возвращает массив объектов описания метаданных документов, назначенных регистраторами в данной конфигурации. Этот способ полностью исключает человеческий фактор и позволяет мгновенно сформировать точный список для переноса.

Способ 3. Глобальный поиск по коду конфигурации

Если под рукой нет эталонной базы, выясним регистраторы по текстам модулей. Формирование движений по подчиненным регистрам в подавляющем большинстве случаев происходит в процедуре ОбработкаПроведения модуля документа через коллекцию Движения.

Выполним следующие шаги:

  1. Нажмем сочетание клавиш Ctrl + Shift + F для вызова диалога Глобальный поиск.
  2. В строке поиска укажем конструкцию вида: Движения.ЛМБ_ПерезаложенныеБилеты (где вместо имени примера подставим имя проблемного регистра).
  3. В области поиска укажем Конфигурация и нажмем Найти.
  4. Проанализируем результаты выдачи. Все документы, в модулях проведения которых инициализируется или заполняется данный набор записей, гарантированно должны иметь установленный флаг в свойствах движений.
  5. Дополнительно проверим наличие общего универсального документа (например, КорректировкаЗаписейРегистров или КорректировкаРегистров), который в большинстве типовых конфигураций выступает регистратором практически для всех подчиненных регистров.

Правильный порядок исправления метаданных

После того как список документов-регистраторов определен, выполним правильное объединение свойств, чтобы не затереть сделанные ранее пользовательские доработки:

  1. Вернем режим записи проблемного регистра сведений в состояние Подчинение регистратору, если он ранее ошибочно переключался в Независимый.
  2. Откроем окно сравнения и объединения с файлом конфигурации поставщика или выберем Конфигурация — Сравнить, объединить с конфигурацией из файла.
  3. В дереве сравнения снимем все флажки, чтобы исключить случайную перезапись модулей.
  4. Найдем выявленные документы, развернем их состав и найдем свойство Движения.
  5. Раскроем список регистров сведений внутри движений каждого документа и отметим флажком только нужный регистр. При таком подходе текст модулей документов останется нетронутым, а в метаданные добавится необходимая связь.
  6. Сохраним конфигурацию и выполним обновление конфигурации базы данных клавишей F5.

Соблюдение этой последовательности действий гарантирует корректную структуру базы данных и сохраняет работоспособность прикладного кода при обновлении нетиповых конфигураций.

← На главную