При эксплуатации крупных систем на базе 1С:ERP Управление предприятием (особенно редакций 2.4 и 2.5) администраторы и разработчики часто сталкиваются с последствиями обновлений конфигурации. Одна из специфических и неприятных проблем — внезапное исчезновение дополнительных реквизитов из списка доступных полей в типовых отчетах. При этом в самих карточках объектов (например, в справочнике Договоры контрагентов) реквизиты отображаются и доступны для заполнения, но в настройках отчета (группировки, отборы, дополнительные поля) они полностью отсутствуют.
В этой статье мы подробно разберем, почему это происходит, как диагностировать причину сбоя и какими методами можно восстановить работоспособность системы. Мы проанализируем механизмы Библиотеки стандартных подсистем (БСП), которые отвечают за динамическое формирование полей отчетов, и выясним, как исправить "кривое" обновление метаданных.
Для начала давайте разберем механизм работы дополнительных реквизитов. В типовых решениях 1С они не являются "жестко" прописанными полями таблиц базы данных. Система компоновки данных (СКД), на которой построены почти все типовые отчеты (ОСВ по счету, Ведомость по расчетам и др.), динамически добавляет эти поля в список доступных при формировании отчета. Этот процесс опирается на связи между объектом метаданных и набором свойств в Плане видов характеристик (ПВХ) ДополнительныеРеквизитыИСведения.
Если после обновления системы связь между реальным справочником (например, Справочник.ДоговорыКонтрагентов) и соответствующим ему элементом в ПВХ нарушается, программный код БСП не может определить, какие именно доп. реквизиты относятся к отчету, и просто исключает их из пользовательского выбора.
Прежде чем приступать к программным исправлениям, нам необходимо выяснить масштаб "бедствия". Проанализируем следующие моменты:
Договоры) или для всех сразу (Номенклатура, Контрагенты, Партнеры). Если в справочнике Номенклатура реквизиты в отчетах на месте, значит, общая функциональная опция ИспользоватьДополнительныеРеквизитыИСведения включена и работает корректно.Если базовые проверки не помогли, перейдем к глубокой диагностике. Выясним состояние предопределенных элементов в ПВХ ДополнительныеРеквизитыИСведения. Именно здесь кроется наиболее частая причина сбоя в релизах ERP 2.4.13.х.
Рассмотрим ситуацию: в процессе обновления ссылка на предопределенный элемент, соответствующий справочнику Договоры, могла стать "битой" или очиститься. Это происходит из-за сбоев в справочнике ИдентификаторыОбъектовМетаданных. Нам нужно проверить реквизит ИмяПредопределенныхДанных для соответствующих записей ПВХ.
Воспользуемся консолью запросов и проанализируем таблицу:
ВЫБРАТЬ
ДопРеквизиты.Ссылка,
ДопРеквизиты.Наименование,
ДопРеквизиты.ИмяПредопределенныхДанных,
ДопРеквизиты.ТипЗначения
ИЗ
ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДопРеквизиты
ГДЕ
ДопРеквизиты.Наименование ПОДОБНО "%Договор%"
Если мы увидим, что для элементов, связанных с договорами, поле ИмяПредопределенныхДанных пустое или содержит некорректную ссылку, значит, механизм БСП потерял ориентир. Система видит "просто запись" в ПВХ, но не понимает, что она является владельцем свойств для метаданных договоров.
Рассмотрим несколько способов решения проблемы, от самых простых до радикальных.
Попробуем заставить систему заново пересчитать связи между объектами конфигурации и записями в справочнике идентификаторов. Для этого запустим базу с параметром:
/C ЗавершитьРаботуПользователей /ОбновитьИнформационнуюБазу
Это инициирует выполнение всех процедур обновления, предусмотренных БСП, включая актуализацию идентификаторов объектов метаданных. В ряде случаев это восстанавливает "слетевшие" ссылки в ПВХ автоматически.
В составе БСП есть обработка РедактированиеРегистрационныхДанных (или аналогичные инструменты в составе "Инструментов разработчика"). Мы можем попробовать перепривязать наборы свойств к объектам. Однако, если повреждены предопределенные данные, этот метод может не сработать через обычный интерфейс.
Если мы обнаружили, что в ПВХ ссылки действительно пустые или повреждены, нам поможет небольшой скрипт. Нам нужно вручную установить соответствие. Рассмотрим пример кода, который восстанавливает связь для справочника договоров:
&НаСервере
Процедура ВосстановитьСвязьДопРеквизитовНаСервере()
// Получаем нужный элемент ПВХ, который должен быть предопределенным
НаборДоговоры = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Справочник ""Договоры контрагентов""");
Если Не НаборДоговоры.Пустая() Тогда
ОбъектПВХ = НаборДоговоры.ПолучитьОбъект();
// Устанавливаем признак загрузки, чтобы обойти проверки
ОбъектПВХ.ОбменДанными.Загрузка = Истина;
// ВНИМАНИЕ: Имя должно строго соответствовать имени в конфигураторе
// Обычно это формат: Справочник_ДоговорыКонтрагентов
ОбъектПВХ.ИмяПредопределенныхДанных = "Справочник_ДоговорыКонтрагентов";
Попытка
ОбъектПВХ.Записать();
Сообщить("Связь для Договоров успешно восстановлена!");
Исключение
Сообщить("Ошибка при записи: " + ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Важный нюанс: В ERP 2.4 для договоров может быть несколько наборов (для поставщиков, для клиентов и т.д.). Необходимо проверить каждый из них и убедиться, что ИмяПредопределенныхДанных заполнено верно. Именно этот реквизит связывает физическую запись в БД с программным кодом конфигурации.
После того как мы восстановили связи в ПВХ, реквизиты могут не появиться в отчетах мгновенно. Система компоновки данных в ERP часто использует подготовленные данные для поиска и отборов. Проанализируем состояние регламентных заданий. Нам необходимо убедиться, что успешно выполнено задание ЗаполнениеДанныхДляПоискаИОтборов.
Это задание пересчитывает внутренние индексы, которые отчеты используют для вывода дополнительных полей. Рекомендуется запустить его принудительно после восстановления связей в ПВХ.
Подводя итог, разберем краткий алгоритм действий при исчезновении доп. реквизитов из отчетов:
ДополнительныеРеквизитыИСведения на предмет пустых имен предопределенных данных.ОбменДанными.Загрузка = Истина.Подобные сбои в ветке ERP 2.4.13 часто связаны с тем, что эти релизы были переходными и содержали значительные изменения в архитектуре БСП. При обновлении на такие версии всегда рекомендуется выполнять полное тестирование и исправление информационной базы, а также внимательно следить за протоколом выполнения обработок обновления в журнале регистрации.