Как избежать дублирования счетов при выгрузке документов из КА 1.1 в БП 3.0?

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

При настройке обмена между конфигурациями Комплексная автоматизация 1.1 и Бухгалтерия предприятия 3.0 через Конвертацию данных 2.0 часто возникает проблема: вместо того чтобы использовать уже существующие в базе-приемнике счета (например, 90.01.01 или 90.02.01), система создает новые элементы плана счетов. В результате в документе Реализация товаров и услуг вместо корректной ссылки на существующий счет мы получаем дубликат, что может привести к ошибкам в проводках и отчетности.

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

Почему создаются дубликаты?

Основная причина заключается в работе механизма поиска объектов. При загрузке Конвертация данных пытается найти объект в базе-приемнике по правилам сопоставления. Если правила не настроены корректно (например, не указано поле поиска по коду) или внутренние идентификаторы UUID не совпадают, система создает новый объект. Попытки просто подставить строковое значение (например, "91.01.01") в поле свойства приводят к ошибке, так как 1С ожидает ссылку на конкретный элемент плана счетов, а не текстовую строку.

Решение 1: Настройка поиска в правилах обмена (ПКО)

Прежде чем писать программный код, попробуйте настроить правила в Конвертации данных:

  1. Откройте ПКО для объекта Счет (план счетов Хозрасчетный).
  2. В настройках свойств найдите свойство Код и установите для него флаг Поиск.
  3. При необходимости можно установить флаг Продолжить поиск, если не найден по идентификатору, чтобы система при отсутствии прямого соответствия UUID пыталась найти счет по его коду.

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

Решение 2: Программное присвоение счетов в событии «После загрузки»

Если настройка правил не дает нужного результата, или вы хотите гарантированно использовать определенные счета, самый надежный способ — принудительно назначить их в событии После загрузки непосредственно в правиле обмена документом.

Рассмотрим, как это реализовать. В Конвертации данных перейдите в ПКО вашего документа (например, РеализацияТоваровУслуг) и откройте обработчик события После загрузки. В этом обработчике мы пропишем логику переопределения счетов для табличной части Товары:


// Проходим по каждой строке табличной части Товары
Для Каждого Стр Из Объект.Товары Цикл
    
    // Находим нужные счета по коду в плане счетов Хозрасчетный
    СчДоходов  = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
    СчРасходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
    
    // Присваиваем найденные ссылки реквизитам табличной части
    Стр.СчетДоходов  = СчДоходов;
    Стр.СчетРасходов = СчРасходов;
    
КонецЦикла;

Важное замечание: Используйте метод НайтиПоКоду с тем строковым представлением, которое фактически записано в вашей базе БП 3.0. Убедитесь, что коды счетов точно соответствуют тем, что есть в конфигураторе, включая префиксы и количество знаков.

Анализ ошибок при попытке «быстрого» решения

Многие разработчики совершают ошибку, пытаясь присвоить значение в событии Перед выгрузкой свойства ПКС:

Значение = "91.01.01";

Это приводит к ошибке Получение элемента по индексу для значения не определено. Система пытается обратиться к переданному значению как к ссылочному объекту 1С, но получает строку, что вызывает конфликт типов. Помните: в правилах обмена всегда передаются ссылки. Если вы хотите передать данные строкой, вам нужно предварительно найти объект по этой строке с помощью НайтиПоКоду или НайтиПоНаименованию и передать уже полученную ссылку.

Рекомендации по реализации

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

← На главную