Как исправить ошибку выгрузки количества и единиц измерения в УПД через обработку СБИС для 1С?

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

При интеграции конфигураций 1С (таких как «1С:Управление нашей фирмой» или «1С:Управление торговлей») со сторонними операторами электронного документооборота нередко возникают сложности с единицами измерения. Распространенный сценарий: в первичном документе реализация оформлена в упаковках с коэффициентом (например, коробка по 10 штук), печатная форма УПД стандартными средствами формируется корректно, однако при передаче через внешнюю обработку СБИС единица измерения принудительно заменяется на базовую (штуки), а само количество остается неизменным. В итоге клиенту уходит документ с заниженным в несколько раз объемом товара.

Разберем причины возникновения этой ошибки и детально рассмотрим способы корректной настройки выгрузки.

Выясним причину некорректной выгрузки данных

Проанализируем механику работы типовой обработки СБИС:

  1. Рассинхронизация маппинга единицы и количества. В типовых правилах выгрузки (файлах настроек XML) реквизит единицы измерения часто считывается из карточки товара: Номенклатура.ЕдиницаХранения или ее кода по ОКЕИ. При этом реквизит Количество читается напрямую из строки табличной части документа (Строка.Количество), где оно зафиксировано в единицах документа (упаковках).
  2. Отсутствие автоматического пересчета цены. При замене упаковки на базовую единицу обработка не пересчитывает связанные реквизиты: Количество = Количество * Коэффициент и Цена = Цена / Коэффициент. В результате нарушается фундаментальное условие Количество * Цена = Сумма, что приводит к ошибкам при проверке формата XML на стороне ФНС или к спорам с контрагентом.
  3. Обход общих механизмов печати. Печатная форма УПД в конфигурации формируется через менеджер печати, где реализован разбор упаковок. Обработка оператора ЭДО часто обращается напрямую к табличным частям через запросы, пропуская штатные процедуры подготовки данных.

Решение 1. Использование внешней обработки «ВнешниеФункции_Клиент.epf»

Наиболее гибкий и обновляемый способ исправить поведение выгрузки без правки ядра обработки оператора — подключение алгоритмов через файл внешних функций. Обработка СБИС штатно поддерживает переопределение логики через внешние модули (ВнешниеФункции_Клиент.epf или ВнешниеФункции_Сервер.epf).

Разберем по шагам, как настроить расчет правильного количества и цены:

  1. Откроем или создадим внешнюю обработку ВнешниеФункции_Клиент.epf в конфигураторе.
  2. В модуле объекта создадим экспортную функцию, которая принимает контекст обрабатываемой строки табличной части и выполняет анализ коэффициента.
  3. Посмотрим на пример логики пересчета реквизитов строки:

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

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


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

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

Решение 2. Корректировка маппинга единиц измерения

Если специфика учета контрагента допускает выставление электронных УПД непосредственно в упаковках (коробках, ящиках, палетах), мы можем изменить правила выгрузки тега единицы измерения вместо пересчета сумм и объемов.

  1. В файле настроек выгрузки находим узел, отвечающий за заполнение единицы измерения (код ОКЕИ и наименование).
  2. Заменяем обращение к реквизитам карточки товара (Номенклатура.ЕдиницаХранения) на обращение к реквизитам строки: Строка.ЕдиницаИзмерения.Код и Строка.ЕдиницаИзмерения.Наименование.
  3. В этом случае количество и цена передаются без модификаций, полностью совпадая со строкой документа реализации.

Важно: При ручной правке XML-файлов настроек выгрузки обязательно отключите параметр «Автоматически обновлять настройки» в интерфейсе модуля интеграции. В противном случае обработка при следующем сеансе обновит конфигурационные файлы с сервера оператора, стерев внесенные доработки.

Нюансы и особенности учета

Рассмотрим моменты, о которых важно помнить при доработке:

  1. Округление цен. При делении цены на коэффициент (особенно при значениях 3, 6, 7) часто возникают бесконечные дроби. Всегда контролируйте формулу Количество * Цена = Сумма. В электронном формате УПД ФНС проверяет контрольные соотношения строк, поэтому приоритет всегда отдается исходной сумме строки и сумме НДС.
  2. Входящие документы. При получении входящих накладных через обработку СБИС проблема может проявиться в обратную сторону: если поставщик прислал товар в коробках, обработка может не сопоставить упаковку с вашей базовой единицей. Потребуется аналогичная доработка модуля разбора входящих документов.
  3. Использование типового 1С-ЭДО. Если доработка внешней обработки СБИС оказывается трудоемкой, можно использовать штатный функционал библиотеки электронных документов (1С-ЭДО), встроенный в конфигурацию. Типовой механизм формирует файл передачи по утвержденным алгоритмам печати без ошибок пересчета упаковок, а доставка контрагенту в СБИС настраивается через роуминг.
← На главную