Как реализовать сопоставление номенклатуры при внедрении ЭДО в нетиповой конфигурации 1С 7.7

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Переход на электронный документооборот (ЭДО) в старых конфигурациях на платформе 1С 7.7 (например, на базе «Торговля и Склад») ставит перед разработчиком сложную задачу: как сопоставить товар из входящего XML-файла с тем, что уже заведено в справочнике Номенклатура. Проблема усугубляется тем, что у каждого поставщика свои артикулы, наименования могут различаться, а единый классификатор (вроде GTIN) заполнен далеко не всегда.

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

Анализ проблемы: почему стандартные поля не подходят

При загрузке XML-файла формата УПД (утвержденного ФНС) мы получаем набор данных о товаре: наименование, единицу измерения, количество, цену и, зачастую, внутренний код товара в базе поставщика. Попытка сопоставить эти данные напрямую со справочником Номенклатура сталкивается со следующими трудностями:

  1. Разные артикулы: Один и тот же товар у пяти разных поставщиков может иметь пять разных кодов. Хранить их все в карточке товара в виде отдельных реквизитов невозможно.
  2. Необязательность EAN/GTIN: Штрихкод является хорошим идентификатором, но он не всегда передается в ЭДО, а иногда производители меняют штрихкоды, сохраняя сам товар.
  3. Вариативность наименований: У поставщика товар может называться «Вода минер. 0.5л», а в вашей базе — «Минералка (газ) 0.5». Поиск по строке крайне ненадежен.

Проанализировав ситуацию, мы приходим к выводу, что нам необходим промежуточный механизм — «карта соответствий».

Архитектурное решение: Справочник соответствий

Наиболее эффективным решением для 1С 7.7 является создание нового справочника. Рассмотрим его структуру подробнее. Назовем его КодыНоменклатурыПоставщиков.

Основные характеристики справочника:

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

Алгоритм автоматического сопоставления при загрузке

Разберем по шагам, как должна работать обработка загрузки XML-файла из Личного кабинета оператора ЭДО (СБИС, Диадок и др.).

Шаг 1. Идентификация поставщика. Сначала находим контрагента по ИНН/КПП, указанным в XML. Это будет владелец нашего справочника соответствий.

Шаг 2. Поиск по карте соответствий. Для каждой строки из файла пытаемся найти запись в справочнике КодыНоменклатурыПоставщиков, где Владелец = ТекущийПоставщик и КодПоставщика = КодИзФайла.

Шаг 3. Резервный поиск по GTIN/Штрихкоду. Если по коду поставщика ничего не найдено, пробуем найти товар в общем справочнике Номенклатура по штрихкоду (если он есть в XML).

Шаг 4. Обработка неопознанных позиций. Если автоматика не сработала, пользователю открывается форма сопоставления. После того как пользователь один раз вручную выберет нужный товар из базы, система должна автоматически создать запись в справочнике КодыНоменклатурыПоставщиков. В следующий раз этот товар от этого поставщика подтянется сам.

Рассмотрим пример кода для поиска соответствия:


Функция НайтиСвоюНоменклатуру(КонтрСсылка, КодТовараПоставщика, ШтрихкодПоставщика)
    Перем СпрСоответствий, РезНоменклатура;
    
    СпрСоответствий = СоздатьОбъект("Справочник.КодыНоменклатурыПоставщиков");
    СпрСоответствий.ИспользоватьВладельца(КонтрСсылка);
    
    // Пытаемся найти по внутреннему коду поставщика
    Если СпрСоответствий.НайтиПоРеквизиту("КодПоставщика", КодТовараПоставщика, 1) = 1 Тогда
        Возврат СпрСоответствий.Номенклатура;
    КонецЕсли;
    
    // Если не нашли, пробуем по штрихкоду в основной базе
    Если ПустаяСтрока(ШтрихкодПоставщика) = 0 Тогда
        СпрНом = СоздатьОбъект("Справочник.Номенклатура");
        Если СпрНом.НайтиПоРеквизиту("Штрихкод", ШтрихкодПоставщика, 1) = 1 Тогда
            // Нашли по ШК, сразу запомним это соответствие для будущего
            СпрСоответствий.Новый();
            СпрСоответствий.КодПоставщика = КодТовараПоставщика;
            СпрСоответствий.Номенклатура = СпрНом.ТекущийЭлемент();
            СпрСоответствий.Записать();
            Возврат СпрНом.ТекущийЭлемент();
        КонецЕсли;
    КонецЕсли;
    
    Возврат ПолучитьПустоеЗначение("Справочник.Номенклатура");
КонецФункции

Нюансы работы с единицами измерения и упаковками

Проанализируем ситуацию, когда поставщик присылает товар в упаковках (например, «коробка 10 шт»), а у вас учет ведется в штуках. В XML-файле УПД единицы измерения передаются кодами ОКЕИ (например, «796» — штука, «006» — метр).

Для корректной загрузки рекомендуем:

  1. В справочник соответствий добавить реквизит Коэффициент.
  2. При первом сопоставлении товара проверять, совпадает ли единица измерения поставщика с вашей базовой единицей.
  3. Если не совпадает, просить пользователя указать коэффициент пересчета. Например, если пришла 1 упаковка, а в ней 12 штук, в документ ПоступлениеТМЦ должно попасть количество 12.

Интеграция с системой маркировки (Честный ЗНАК)

Поскольку современные требования ЭДО часто связаны с маркировкой (табак, обувь, молочная продукция), важно учитывать наличие кодов маркировки в XML-файле (теги НомСредИдент).

Выясним, как это реализовать в 1С 7.7: При парсинге XML необходимо извлекать блоки с кодами DataMatrix. Поскольку в типовой «Торговле и Склад» нет штатных механизмов для хранения марок, вам придется либо создавать подчиненный справочник к документу поступления, либо использовать внешние компоненты (например, 1С++ и таблицы SQLite/DBF) для хранения тяжелых данных о марках, чтобы не раздувать основной файл 1cv7.md.

При загрузке документа ПоступлениеТМЦ, если в файле присутствуют коды маркировки, система должна автоматически помечать такие позиции и записывать считанные коды в привязке к каждой строке документа.

Заключение

Реализация ЭДО на 1С 7.7 через внешние XML-файлы — это надежный и бюджетный способ соответствовать требованиям законодательства без перехода на дорогостоящие API-решения. Использование подчиненного справочника соответствий позволяет системе «обучаться» в процессе работы: после первого ручного разбора накладной последующие будут загружаться практически мгновенно.

Такой подход обеспечивает гибкость («многие к одному»), сохраняет чистоту основного справочника номенклатуры и позволяет легко масштабировать систему при увеличении количества поставщиков.

← На главную