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