При настройке обмена между конфигурациями Комплексная автоматизация 1.1 и Бухгалтерия предприятия 3.0 через Конвертацию данных 2.0 часто возникает проблема: вместо того чтобы использовать уже существующие в базе-приемнике счета (например, 90.01.01 или 90.02.01), система создает новые элементы плана счетов. В результате в документе Реализация товаров и услуг вместо корректной ссылки на существующий счет мы получаем дубликат, что может привести к ошибкам в проводках и отчетности.
Давайте разберем, почему это происходит и как программно заставить систему использовать нужные нам счета.
Основная причина заключается в работе механизма поиска объектов. При загрузке Конвертация данных пытается найти объект в базе-приемнике по правилам сопоставления. Если правила не настроены корректно (например, не указано поле поиска по коду) или внутренние идентификаторы UUID не совпадают, система создает новый объект. Попытки просто подставить строковое значение (например, "91.01.01") в поле свойства приводят к ошибке, так как 1С ожидает ссылку на конкретный элемент плана счетов, а не текстовую строку.
Прежде чем писать программный код, попробуйте настроить правила в Конвертации данных:
ПКО для объекта Счет (план счетов Хозрасчетный).Код и установите для него флаг Поиск.Продолжить поиск, если не найден по идентификатору, чтобы система при отсутствии прямого соответствия UUID пыталась найти счет по его коду.Этот метод предпочтителен, так как он позволяет системе автоматически сопоставлять счета без написания дополнительного кода в документах.
Если настройка правил не дает нужного результата, или вы хотите гарантированно использовать определенные счета, самый надежный способ — принудительно назначить их в событии После загрузки непосредственно в правиле обмена документом.
Рассмотрим, как это реализовать. В Конвертации данных перейдите в ПКО вашего документа (например, РеализацияТоваровУслуг) и откройте обработчик события После загрузки. В этом обработчике мы пропишем логику переопределения счетов для табличной части Товары:
// Проходим по каждой строке табличной части Товары
Для Каждого Стр Из Объект.Товары Цикл
// Находим нужные счета по коду в плане счетов Хозрасчетный
СчДоходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
СчРасходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
// Присваиваем найденные ссылки реквизитам табличной части
Стр.СчетДоходов = СчДоходов;
Стр.СчетРасходов = СчРасходов;
КонецЦикла;
Важное замечание: Используйте метод НайтиПоКоду с тем строковым представлением, которое фактически записано в вашей базе БП 3.0. Убедитесь, что коды счетов точно соответствуют тем, что есть в конфигураторе, включая префиксы и количество знаков.
Многие разработчики совершают ошибку, пытаясь присвоить значение в событии Перед выгрузкой свойства ПКС:
Значение = "91.01.01";
Это приводит к ошибке Получение элемента по индексу для значения не определено. Система пытается обратиться к переданному значению как к ссылочному объекту 1С, но получает строку, что вызывает конфликт типов. Помните: в правилах обмена всегда передаются ссылки. Если вы хотите передать данные строкой, вам нужно предварительно найти объект по этой строке с помощью НайтиПоКоду или НайтиПоНаименованию и передать уже полученную ссылку.
ПустойСсылки, если счет не найден.ПланыСчетов.Хозрасчетный.ПродажиПродукции. Это делает код более устойчивым к изменениям в кодах счетов.После загрузки является «золотым стандартом» для обменов, требующих жесткого контроля за корректностью бухгалтерских данных.Используя данный подход, вы сможете избежать дублирования счетов и обеспечить корректный перенос данных в Бухгалтерию предприятия 3.0 без необходимости ручной корректировки документов после каждой выгрузки.