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