Почему в модуле 1С:Диадок некорректно сохраняется сопоставление номенклатуры и как это исправить?

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

В процессе работы с модулем интеграции Диадок в 1С:Бухгалтерии пользователи нередко сталкиваются с ситуацией, когда при массовом сопоставлении номенклатуры контрагента с позициями в 1С данные записываются некорректно — для этой задачи есть рабочее место для электронного документооборота в 1С. Чаще всего это проявляется так: если несколько разных позиций в документе от поставщика соответствуют одной и той же номенклатуре в вашей базе, система «запоминает» только последнюю обработанную строку, игнорируя предыдущие. В итоге при формировании документа часть номенклатуры остается нераспознанной.

Анализ причин возникновения проблемы

Разберем, почему это происходит. Основная причина кроется в алгоритме записи соответствий в регистр сведений модуля — для этого подойдёт интеллектуальное сопоставление номенклатуры в 1С:ЭДО. В штатном механизме часто не предусмотрена обработка циклической записи для группы товаров, объединенных общим признаком. Если логика записи построена на простом присваивании по индексу или по последнему элементу выборки, система будет «затирать» предыдущие связи.

Также важно учитывать, что Контур.Диадок использует внутренние идентификаторы XDTO. Если наименование товара у поставщика немного отличается (другой порядок слов, наличие артикула), модуль воспринимает это как новую позицию, требующую отдельной настройки соответствия.

Решение через использование подключаемого модуля

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

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

Пошаговая реализация логики подмены

Для начала нам необходимо определить структуру, в которой будет храниться таблица соответствий (номенклатура контрагента — номенклатура 1С). Разберем пример реализации функции:


Функция ПодготовитьЭлектронныйДокумент(Параметры)
    Если ТипЗнч(Параметры) = Тип("Структура") И Параметры.Свойство("Результат_ИМ") Тогда
        Content = Параметры.Результат.Content;
        ВидДокументаРазвернутый = Параметры.ВидДокументаРазвернутый;
        ТипКонтента_XDTO = ВидДокументаРазвернутый.ТипКонтента;
        
        // Проверяем тип документа, например, универсальный передаточный документ
        Если ВРЕГ(ТипКонтента_XDTO) = ВРЕГ("Utd820SellerContent") Тогда
             // ТаблицаПодменыНоменклатуры содержит соответствие наименований
             ТаблицаПодменыНоменклатуры = ПолучитьВашуТаблицуСоответствий();
             Items = Content.Table.Items;    
             
             Для Каждого Item ИЗ Items Цикл
                 СлужебнаяИнформация = ОсновнойМодуль.ОбъектXDTOВСтруктуру(Item.СлужебнаяИнформация);
                 
                 // Ищем текущую номенклатуру в нашей таблице подмены
                 Ном = ТаблицаПодменыНоменклатуры.Найти(СлужебнаяИнформация.Номенклатура, "Номенклатура");
                 
                 Если Ном <> Неопределено Тогда
                     // Принудительно задаем верное значение из нашей таблицы
                     Item.Product = Ном.Наименование;
                 КонецЕсли;
             КонецЦикла;
        КонецЕсли;
        Возврат Истина;
    КонецЕсли;
    Возврат Ложь;
КонецФункции

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

  1. Использование «Технического специалиста»: Всегда проверяйте записи в регистре сведений (поможет редактор записей регистров сведений 1С), отвечающем за сопоставление. С помощью Функции технического специалиста откройте соответствующий регистр и посмотрите, действительно ли создаются записи для всех позиций или они перезаписываются.
  2. Отладка вложенных обработок: Поскольку модуль работает через вложенные обработки, стандартная отладка может быть затруднена — есть инструмент для отладки кода 1С в режиме Предприятие. Рекомендуем воспользоваться официальной документацией по отладке вложенных обработок, чтобы иметь возможность ставить точки останова прямо в коде подключаемого модуля.
  3. Версионность: Перед тем как писать собственный код, убедитесь, что ваш модуль Диадок обновлен до последней версии. Разработчики часто исправляют подобные «баги» в типовых механизмах обработки табличных частей.
  4. Массовое пересопоставление: Если проблема возникла из-за накопленного «мусора» в регистре, попробуйте удалить все старые связи по конкретному проблемному контрагенту и настроить их заново. Иногда это помогает сбросить некорректные идентификаторы, застрявшие в кэше модуля.

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

← На главную