Как сопоставить предопределенный счет источника с непредопределенным счетом в приемнике при настройке обмена в КД 2.1

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

При настройке обмена данными между конфигурациями 1С часто возникает ситуация, когда структура плана счетов в двух базах различается. Типичный пример: в одной базе счет является предопределенным (созданным в конфигураторе), а в другой базе для этих же целей используется непредопределенный счет (созданный пользователем в режиме «1С:Предприятие»). Если просто выгрузить данные, система может не найти соответствия или создать дубли. Рассмотрим, как правильно настроить правила конвертации объектов (ПКО) в «1С:Конвертация данных 2.1» для решения этой задачи.

Вариант 1. Программная подмена кода в ПКС

Самый простой и быстрый способ, который применил автор темы, заключается в изменении кода счета непосредственно в правилах конвертации свойств (ПКС). Разберем этот алгоритм по шагам.

Во-первых, перейдем в ПКО нужного плана счетов (например, Хозрасчетный). Найдем ПКС для реквизита Код. Нам необходимо написать обработчик, который будет перехватывать значение кода при выгрузке или загрузке. Проанализируем пример кода для обработчика «Перед выгрузкой» или «При выгрузке»:


Если Значение = "10.09" Тогда 
    Значение = "10.99"; 
КонецЕсли;

Важный нюанс: Обратите внимание на точность написания кода. Как выяснилось в ходе обсуждения на форуме, ошибка в один символ (например, «10.9» вместо «10.09») приведет к тому, что условие не сработает. Всегда проверяйте, как именно записан код в информационной базе, учитывая маску счета и лидирующие нули.

Вариант 2. Использование настройки «Конвертация значений»

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

  1. В справочнике «Конвертации» выберем ПКО нашего плана счетов.
  2. Перейдем на закладку «Конвертация значений».
  3. Нажмем кнопку «Добавить». В качестве Источника выберем имя предопределенного счета из конфигурации-источника.
  4. В качестве Приемника укажем код счета в базе-приемнике.

Несмотря на то что КД 2.1 ориентирована на работу с именами предопределенных данных, встроенные механизмы загрузки позволяют сопоставлять их с кодами. Если система не найдет предопределенный элемент с указанным именем в приемнике, она выполнит поиск по коду, используя стандартный алгоритм Менеджер.НайтиПоКоду(Значение).

Вариант 3. Использование обработчика «Поля поиска»

Этот метод считается наиболее надежным для сложных случаев. Обработчик «Поля поиска» выполняется в базе-приемнике в момент загрузки данных. Он позволяет точно определить, как именно нужно искать объект, если стандартный поиск по GUID (Уникальному идентификатору) не дал результатов. Проанализируем логику реализации:

В ПКО плана счетов найдем вкладку «Обработчики событий» и выберем «Поля поиска». Напишем следующий код:


// Если поиск идет по коду
Если НомерВариантаПоиска = 1 Тогда
    Если СвойстваПоиска.Получить("Код") = "10.09" Тогда
        СсылкаНаОбъект = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.99");
        ПрекратитьПоиск = Истина;
    КонецЕсли;
КонецЕсли;

Этот подход гарантирует, что система принудительно подставит нужную ссылку на объект, даже если в файле обмена передаются признаки предопределенности счета источника.

Вариант 4. Массовое сопоставление через параметры

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

В обработчике «После загрузки правил обмена» создадим таблицу соответствий:


СоответствиеКодовСчетов = Новый Соответствие;
СоответствиеКодовСчетов.Вставить("10.09", "10.99");
СоответствиеКодовСчетов.Вставить("20.01", "20.99"); // Пример для другого счета
Параметры.Вставить("СоответствиеКодовСчетов", СоответствиеКодовСчетов);

Затем в ПКО плана счетов в обработчике «При загрузке» или «Поля поиска» мы сможем обращаться к этому соответствию. Это значительно ускорит работу и упростит поддержку правил в будущем.

Нюанс с признаком предопределенности

Выясним причину, по которой иногда сопоставление по коду не срабатывает. Когда мы выгружаем предопределенный элемент, в файл обмена попадает свойство ИмяПредопределенныхДанных. При загрузке в приемник КД пытается найти элемент с таким же внутренним именем. Если в приемнике счет создан вручную, у него это имя пустое.

Чтобы избежать конфликтов, в ПКО плана счетов в обработчике «Перед выгрузкой» можно программно очистить это имя, если мы знаем, что счет в приемнике — обычный элемент:


Если Источник.Код = "10.09" Тогда
    // Очищаем имя предопределенного элемента, чтобы поиск шел только по коду
    ИмяПредопределенныхДанных = "";
КонецЕсли;

Подведем итоги

Сопоставление предопределенных и непредопределенных данных требует внимательности к деталям. Основные моменты, которые мы разобрали:

  1. Проверяйте точность кодов: различие между «10.9» и «10.09» критично для поиска.
  2. Приоритет поиска: система сначала ищет по идентификатору, затем по предопределенному имени, и только потом по коду.
  3. Программные обработчики: использование Поля поиска или подмена Значения в ПКС являются самыми гибкими инструментами разработчика.

Используя эти методы, мы сможем настроить корректную передачу данных в любую базу, независимо от того, как там создавался план счетов.

← На главную