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