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