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