При настройке обмена данными между конфигурациями 1С часто возникает ситуация, когда структура плана счетов в двух базах различается. Типичный пример: в одной базе счет является предопределенным (созданным в конфигураторе), а в другой базе для этих же целей используется непредопределенный счет (созданный пользователем в режиме «1С:Предприятие»). Если просто выгрузить данные, система может не найти соответствия или создать дубли. Рассмотрим, как правильно настроить правила конвертации объектов (ПКО) в «1С:Конвертация данных 2.1» для решения этой задачи.
Самый простой и быстрый способ, который применил автор темы, заключается в изменении кода счета непосредственно в правилах конвертации свойств (ПКС). Разберем этот алгоритм по шагам.
Во-первых, перейдем в ПКО нужного плана счетов (например, Хозрасчетный). Найдем ПКС для реквизита Код. Нам необходимо написать обработчик, который будет перехватывать значение кода при выгрузке или загрузке. Проанализируем пример кода для обработчика «Перед выгрузкой» или «При выгрузке»:
Если Значение = "10.09" Тогда
Значение = "10.99";
КонецЕсли;
Важный нюанс: Обратите внимание на точность написания кода. Как выяснилось в ходе обсуждения на форуме, ошибка в один символ (например, «10.9» вместо «10.09») приведет к тому, что условие не сработает. Всегда проверяйте, как именно записан код в информационной базе, учитывая маску счета и лидирующие нули.
Если мы хотим избежать написания кода вручную, мы можем воспользоваться механизмом сопоставления значений. Это удобно, если счетов для замены немного. Рассмотрим, как это сделать:
Несмотря на то что КД 2.1 ориентирована на работу с именами предопределенных данных, встроенные механизмы загрузки позволяют сопоставлять их с кодами. Если система не найдет предопределенный элемент с указанным именем в приемнике, она выполнит поиск по коду, используя стандартный алгоритм Менеджер.НайтиПоКоду(Значение).
Этот метод считается наиболее надежным для сложных случаев. Обработчик «Поля поиска» выполняется в базе-приемнике в момент загрузки данных. Он позволяет точно определить, как именно нужно искать объект, если стандартный поиск по GUID (Уникальному идентификатору) не дал результатов. Проанализируем логику реализации:
В ПКО плана счетов найдем вкладку «Обработчики событий» и выберем «Поля поиска». Напишем следующий код:
// Если поиск идет по коду
Если НомерВариантаПоиска = 1 Тогда
Если СвойстваПоиска.Получить("Код") = "10.09" Тогда
СсылкаНаОбъект = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.99");
ПрекратитьПоиск = Истина;
КонецЕсли;
КонецЕсли;
Этот подход гарантирует, что система принудительно подставит нужную ссылку на объект, даже если в файле обмена передаются признаки предопределенности счета источника.
Если нам нужно сопоставить большое количество счетов, прописывать условия Если...Тогда в каждом правиле будет неэффективно. Рассмотрим более профессиональный подход с использованием Соответствия в параметрах конвертации.
В обработчике «После загрузки правил обмена» создадим таблицу соответствий:
СоответствиеКодовСчетов = Новый Соответствие;
СоответствиеКодовСчетов.Вставить("10.09", "10.99");
СоответствиеКодовСчетов.Вставить("20.01", "20.99"); // Пример для другого счета
Параметры.Вставить("СоответствиеКодовСчетов", СоответствиеКодовСчетов);
Затем в ПКО плана счетов в обработчике «При загрузке» или «Поля поиска» мы сможем обращаться к этому соответствию. Это значительно ускорит работу и упростит поддержку правил в будущем.
Выясним причину, по которой иногда сопоставление по коду не срабатывает. Когда мы выгружаем предопределенный элемент, в файл обмена попадает свойство ИмяПредопределенныхДанных. При загрузке в приемник КД пытается найти элемент с таким же внутренним именем. Если в приемнике счет создан вручную, у него это имя пустое.
Чтобы избежать конфликтов, в ПКО плана счетов в обработчике «Перед выгрузкой» можно программно очистить это имя, если мы знаем, что счет в приемнике — обычный элемент:
Если Источник.Код = "10.09" Тогда
// Очищаем имя предопределенного элемента, чтобы поиск шел только по коду
ИмяПредопределенныхДанных = "";
КонецЕсли;
Сопоставление предопределенных и непредопределенных данных требует внимательности к деталям. Основные моменты, которые мы разобрали:
Поля поиска или подмена Значения в ПКС являются самыми гибкими инструментами разработчика.Используя эти методы, мы сможем настроить корректную передачу данных в любую базу, независимо от того, как там создавался план счетов.