Почему в Электронном УПД (ЭДО) вместо штрихкода выгружается артикул и как это исправить?

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

При работе с электронным документооборотом (ЭДО) пользователи 1С часто сталкиваются с ситуацией, когда в Универсальном передаточном документе (УПД) вместо ожидаемого штрихкода товара выгружается его артикул. Эта проблема может привести к некорректной обработке документов у вашего контрагента и потребовать ручных исправлений. Давайте вместе разберем, почему это происходит и как можно эффективно решить эту задачу.

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

Решение 1: Проверка настроек ЭДО для контрагента

Наиболее частая причина некорректного заполнения поля "Код товара" в электронном УПД кроется в специфических настройках обмена электронными документами с конкретным контрагентом. Система 1С предоставляет гибкие возможности для определения того, какое именно значение будет выгружаться в качестве идентификатора товара.

Рассмотрим по шагам, где найти и как изменить эти настройки:

  1. Перейдите в раздел "Администрирование" или "НСИ и администрирование" вашей конфигурации 1С.
  2. Найдите пункт "Обмен электронными документами" и далее "Настройки ЭДО". Также вы можете перейти в настройки ЭДО непосредственно из карточки нужного контрагента, выбрав соответствующую команду.
  3. В списке настроек ЭДО найдите и откройте настройку, относящуюся к вашему контрагенту и виду документа "Реализация товаров" (или "Акты, накладные, счет-фактуры", если используется универсальный тип).
  4. В открывшейся форме настроек обратите внимание на вкладку "Настройки отправки".
  5. Найдите параметр "Выгружать в качестве кода товара". Это ключевая настройка, которая определяет, какое значение будет помещено в поле "Код товара/работ, услуг" (раздел А) электронного УПД.
  6. Убедитесь, что для этого параметра выбрано значение "Штрихкод". Если там установлено "Артикул" или "Код", система будет выгружать соответствующее значение из карточки номенклатуры.
  7. Сохраните изменения.

После изменения этой настройки попробуйте сформировать электронный УПД заново и проверьте его содержимое.

Решение 2: Отладка типового механизма формирования XML-документа

Если проверка настроек ЭДО не помогла, или вы хотите более глубоко разобраться в логике работы системы, нам потребуется использовать отладчик. Это мощный инструмент, который позволяет пошагово проследить выполнение кода 1С и выяснить, откуда берутся данные для каждого поля XML-файла.

Как верно отмечено в обсуждениях, за формирование XML-документа УПД (в частности, формата 5.03) отвечают общие модули. Мы с вами сосредоточимся на модулях, содержащих в названии ФорматыЭДО_ФНС или ФорматыЭДО.

Разберем процесс отладки по шагам:

  1. Откройте конфигурацию в режиме "Конфигуратор".
  2. В дереве объектов конфигурации найдите раздел "Общие" -> "Общие модули".
  3. Используйте поиск (Ctrl+F) для обнаружения модулей, содержащих ФорматыЭДО_ФНС или ФорматыЭДО. Обычно это модули типа ФорматыЭДО_ФНС503 или ФорматыЭДОВызовСервера.
  4. Откройте найденные модули. Ваша задача — найти процедуры или функции, которые отвечают за заполнение структуры данных, преобразуемой затем в XML. Часто это функции, которые принимают в качестве параметра документ "Реализация товаров и услуг" и возвращают структуру или объект для сериализации в XML.
  5. Установите точки останова (F9) в ключевых местах, где происходит получение данных для полей товара, особенно для поля "Код товара/работ, услуг".
  6. Запустите 1С в режиме отладки (F5 или через меню "Отладка" -> "Начать отладку").
  7. В пользовательском режиме сформируйте электронный УПД из документа реализации, который вызывает проблему.
  8. Отладчик остановится на установленных вами точках останова. Пошагово (F10 - шаг через, F11 - шаг в) проследите выполнение кода.
  9. Обратите особое внимание на переменные, которые хранят данные о номенклатуре и ее идентификаторах (штрихкод, артикул, код). Выясните, в какой момент и почему вместо штрихкода подставляется артикул. Это позволит точно локализовать проблемное место в типовом коде.

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

Решение 3: Использование расширений для доработки функционала

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

Рассмотрим, как расширение может помочь в решении нашей задачи:

  1. Переопределение функций заполнения: Вы можете переопределить функции в общих модулях, которые отвечают за формирование данных для ЭДО. Например, если вы выяснили, что некая функция ПолучитьКодТовараДляЭДО возвращает артикул, вы можете переопределить ее в расширении, чтобы она возвращала штрихкод.
  2. Добавление собственных реквизитов: В некоторых случаях может потребоваться добавить в табличную часть документа "Реализация товаров и услуг" дополнительное поле для явного выбора штрихкода, который должен быть выгружен. Расширение позволяет добавить такой реквизит и реализовать логику его заполнения.
  3. Реализация собственной логики выбора штрихкода: Если у номенклатуры несколько штрихкодов, и типовая логика выбирает не тот, что нужен, вы можете в расширении реализовать свой алгоритм.

Давайте посмотрим на пример концептуального кода, который мог бы быть использован в расширении для корректировки значения, если бы мы, например, переопределяли некую функцию, которая определяет код товара:


// Пример переопределения функции, которая формирует данные для ЭДО
// Предположим, что есть функция в типовой конфигурации,
// которая возвращает код товара для ЭДО.
// В расширении мы можем создать свою версию.

Функция ПолучитьДанныеТовараДляЭДО(СтрокаТабличнойЧастиДокумента) Экспорт

    // Вызываем оригинальную функцию для получения базовых данных
    // или формируем данные самостоятельно, если переопределяем полностью.
    // Для примера, допустим, оригинал вернул структуру с Артикулом.
    ДанныеТовара = ВызовИсходнойФункции(СтрокаТабличнойЧастиДокумента); // это может быть фиктивный вызов или реальный, если функция не помечена как "БезОригинала"

    // Теперь мы можем изменить поле "КодТовара"
    Если ЗначениеЗаполнено(СтрокаТабличнойЧастиДокумента.Номенклатура) Тогда
        // Получаем штрихкод из регистра сведений "Штрихкоды" или из других источников
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ ПЕРВЫЕ 1
            |    Штрихкоды.Штрихкод КАК Штрихкод
            |ИЗ
            |    РегистрСведений.Штрихкоды КАК Штрихкоды
            |ГДЕ
            |    Штрихкоды.Номенклатура = &Номенклатура
            |    И Штрихкоды.Характеристика = &Характеристика";

        Запрос.УстановитьПараметр("Номенклатура", СтрокаТабличнойЧастиДокумента.Номенклатура);
        Запрос.УстановитьПараметр("Характеристика", СтрокаТабличнойЧастиДокумента.Характеристика); // Если используются характеристики

        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать();

        Если Выборка.Следующий() Тогда
            ДанныеТовара.Вставить("КодТовара", Выборка.Штрихкод);
        Иначе
            // Если штрихкод не найден, можно оставить артикул или установить пустое значение
            // или использовать другую логику.
            ДанныеТовара.Вставить("КодТовара", СтрокаТабличнойЧастиДокумента.Номенклатура.Артикул); 
        КонецЕсли;
    КонецЕсли;

    Возврат ДанныеТовара;

КонецФункции

Важно: При работе с расширениями всегда тестируйте изменения в тестовой базе перед применением на рабочей. Убедитесь, что ваше расширение не вызывает побочных эффектов и корректно обрабатывает все сценарии.

Дополнительные нюансы и важные моменты

При решении проблемы с артикулом вместо штрихкода мы также должны учитывать несколько дополнительных аспектов:

  1. Глобальные настройки печати vs. ЭДО: Обратите внимание, что в 1С существуют общие настройки печати документов (например, в разделе "НСИ и администрирование" -> "Продажи" -> "Печать документов"), где можно выбрать, что будет выводиться в дополнительной колонке печатных форм. Эта настройка влияет только на печатные формы (УПД, ТОРГ-12) и не всегда напрямую управляет содержимым XML-файла для ЭДО. Не путайте эти настройки.
  2. Приоритет выбора штрихкода: Если в карточке номенклатуры имеется несколько штрихкодов, типовой функционал 1С может иметь определенный порядок их выбора. Если этот порядок не соответствует вашим требованиям, потребуется доработка через расширение.
  3. Артикул партнера: В некоторых конфигурациях и при использовании механизма "номенклатура контрагентов" система может выгружать "артикул партнера" вместо внутреннего артикула или штрихкода. Если это ваш случай, механизм расширения также будет наиболее подходящим решением.
  4. Маркированные товары: Для маркированных товаров, помимо штрихкода, в УПД также передаются коды маркировки. Хотя это отдельный реквизит, это подчеркивает общую важность корректной идентификации товаров в ЭДО. Убедитесь, что все необходимые данные для маркировки также заполняются корректно.

Надеемся, что этот подробный разбор поможет вам решить проблему с выгрузкой артикула вместо штрихкода в электронном УПД. Начните с проверки настроек, при необходимости примените отладку и, если стандартных средств недостаточно, используйте мощь расширений 1С.

← К списку