Почему не отображаются партнеры и контрагенты в УТ 11 после программного переноса?

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

Процесс программного переноса данных из старых систем в современные конфигурации, такие как 1С:Управление торговлей 11, ERP Управление предприятием 2 или Комплексная автоматизация 2, часто сопровождается неприятным эффектом. Программист успешно создает объекты в базе, они видны в консоли запросов, но при открытии справочника Партнеры пользователь видит пустой экран или только предопределенный элемент Розничный покупатель.

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

Особенность иерархии в современных конфигурациях

Первое, что нам необходимо осознать: в справочнике Партнеры (в отличие от старой УТ 10.3) на уровне метаданных используется Иерархия элементов, а не групп и элементов. Это означает, что привычных «папок» в системе больше нет. Роль групп выполняют обычные элементы справочника.

Рассмотрим ситуацию: если при программном создании элементов вы по привычке пытались установить признак ЭтоГруппа = Истина, система может повести себя непредсказуемо. В УТ 11 этот реквизит может физически присутствовать в таблице БД для совместимости, но логика динамического списка его не поддерживает. Проанализируем структуру данных: все партнеры должны иметь ЭтоГруппа = Ложь, а иерархия строится исключительно через реквизит Родитель.

Проблема битых ссылок и некорректного родителя

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

Часто при переносе программно создается иерархия, где родителем назначается объект, который еще не был записан или чей UID был перенесен некорректно. Проверим это с помощью небольшого фрагмента кода в обработке:


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Партнеры.Ссылка КАК Партнер,
    |	Партнеры.Родитель КАК Родитель
    |ИЗ
    |	Справочник.Партнеры КАК Партнеры
    |ГДЕ
    |	Партнеры.Родитель <> ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)
    |	И Партнеры.Родитель.Ссылка ЕСТЬ NULL";

Результат = Запрос.Выполнить();
Если Не Результат.Пустой() Тогда
    // Обнаружены элементы с битыми ссылками в родителях
КонецЕсли;

Если запрос вернул строки, значит, у ваших партнеров указаны родители, которых нет в справочнике. В режиме списка 1С просто отображает текстовое представление (или Объект не найден), но в дереве такая запись ломает логику отображения всей ветки.

Обязательные реквизиты-флаги (Булево)

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

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

Реквизит Головной партнер

Посмотрим на специфический реквизит ГоловнойПартнер. В логике УТ 11/ERP он используется для управленческого учета холдингов. Для корректной работы дерева и отчетности важно соблюдать правило: У корневого элемента (у которого нет родителя) реквизит ГоловнойПартнер должен ссылаться на самого себя.

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


НовыйПартнер = Справочники.Партнеры.СоздатьЭлемент();
НовыйПартнер.Наименование = "ООО Мегатрейд";
НовыйПартнер.Клиент = Истина;
// ... заполнение других реквизитов ...
НовыйПартнер.Записать(); // Сначала записываем, чтобы получить ссылку

Если НовыйПартнер.Родитель.Пустая() Тогда
    НовыйПартнер.ГоловнойПартнер = НовыйПартнер.Ссылка;
Иначе
    НовыйПартнер.ГоловнойПартнер = НовыйПартнер.Родитель.ГоловнойПартнер;
КонецЕсли;
НовыйПартнер.Записать();

Права доступа и RLS

Выясним, не влияет ли на видимость система ограничений доступа. В современных конфигурациях активно используется RLS (Record Level Security). У справочника Партнеры есть реквизит ГруппаДоступа. Если при переносе это поле не заполнено, а в базе включен учет по группам доступа партнеров, то обычные пользователи (а иногда и администраторы в режиме ограниченного интерфейса) могут не видеть новые записи, так как они не входят ни в одну разрешенную группу.

Проверьте значение реквизита ГруппаДоступа. Если он пуст, установите значение по умолчанию, принятое в вашей системе.

Итоговый чек-лист для исправления

Если вы столкнулись с тем, что партнеры видны только в списке, выполните следующие шаги для исправления ситуации:

  1. Проверьте иерархию: Убедитесь, что реквизит ЭтоГруппа у всех записей установлен в Ложь.
  2. Исправьте родителей: Если иерархия не нужна, программно очистите реквизит Родитель (установите ПустаяСсылка). Если нужна — убедитесь, что родительские элементы существуют.
  3. Заполните флаги деятельности: Установите Клиент = Истина или Поставщик = Истина для всех перенесенных записей.
  4. Проверьте Головного партнера: Убедитесь, что для корневых элементов этот реквизит совпадает со ссылкой на сам элемент.
  5. Обновите индексы: В редких случаях помогает обновление полнотекстового поиска и очистка кэша конфигурации, чтобы динамические списки перестроили свои внутренние таблицы.

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

← На главную