Как автоматически установить флаг «Цена включает НДС» при загрузке документов через 1С-ЭДО в УТ 11?

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

При работе с входящими электронными документами в 1С:Управление торговлей 11 пользователи часто сталкиваются с неудобством: система загружает приходные накладные с выключенным флагом «Цена включает НДС». Это происходит даже в тех случаях, когда в соглашении с поставщиком явно указана обратная настройка. В результате бухгалтерам и менеджерам приходится вручную заходить в каждый документ, менять признак и пересчитывать цены, что нередко приводит к «развалу» сумм из-за округлений.

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

Выясним причину: почему настройки Соглашения не работают для ЭДО?

Рассмотрим стандартную логику работы системы. Казалось бы, достаточно установить в Соглашении с поставщиком на вкладке «Условия закупок» признак Цена включает НДС, и все документы должны создаваться в соответствии с этим правилом. Однако при использовании 1С-ЭДО (Библиотеки электронного документооборота) ситуация иная.

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

Вариант 1. Оперативное решение: Программный пересчет в форме

Если вам необходимо быстро внедрить исправление, можно воспользоваться механизмом ИзменениеИКонтроль для корректировки поведения формы документа. Рассмотрим пример кода, который принудительно перебирает строки табличной части Товары и пересчитывает Цена и Сумма в зависимости от установленного флага ЦенаВключаетНДС.

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


&ИзменениеИКонтроль("ЦенаВключаетНДСПриИзмененииСервер")
Процедура корПриход_ЦенаВключаетНДСПриИзмененииСервер(КэшированныеЗначения)
    // Вставка: Пройдемся циклом по всем товарам и пересчитаем суммы вручную
    Для Каждого СтрокаТовары Из Объект.Товары Цикл 
        Если Объект.ЦенаВключаетНДС Тогда   
            // Если НДС включен, основная сумма в ТЧ должна равняться сумме с НДС
            СтрокаТовары.Сумма = СтрокаТовары.СуммаСНДС;
        Иначе    
            // Если НДС не включен, вычитаем сумму налога
            СтрокаТовары.Сумма = СтрокаТовары.СуммаСНДС - СтрокаТовары.СуммаНДС;
        КонецЕсли;    
        
        // Пересчитываем цену за единицу
        СтрокаТовары.Цена = ?(СтрокаТовары.Количество = 0, 0, СтрокаТовары.Сумма / СтрокаТовары.Количество);   
    КонецЦикла;    
    // Конец вставки

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

Этот метод позволяет «подхватить» изменение флага, даже если документ был заполнен автоматически. Однако помните, что внесение правок непосредственно в процедуры формы — это «костыль», который может потребовать обновления при выходе новых релизов конфигурации.

Вариант 2. Профессиональный подход: Расширение через библиотеку ЭДО

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

Нам необходимо обратить внимание на событие ПриСозданииДокументаПоДаннымЭДО. Реализация в расширении позволяет:

  1. Установить реквизит ЦенаВключаетНДС = Истина непосредственно в объекте документа.
  2. Выполнить пересчет сумм в табличной части по алгоритмам УТ, не дожидаясь открытия формы.
  3. Сохранить документ в базу уже с корректными признаками.

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

Проблема расхождения копеек: математический аспект

Важно понимать, почему разработчики 1С по умолчанию оставляют флаг «Цена без НДС» для ЭДО. Рассмотрим на примере:

Поставщик отгрузил 1000 единиц товара по цене 100 руб. без НДС. Итого 100 000 руб. НДС (20%) — 20 000 руб. Всего — 120 000 руб.

Если мы принудительно включим флаг «Цена включает НДС», система рассчитает цену как 120 000 / 1000 = 120 руб. В данном примере все ровно. Но если сумма с НДС будет иметь дробную часть, которая при делении на количество даст длинный «хвост», то при обратном умножении мы можем получить итоговую сумму 119 999,99 или 120 000,01. Это создаст конфликт с юридически значимым документом поставщика.

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

Нюансы последних релизов (УТ 11.5 и выше)

В современных версиях программ на базе 1С:Предприятие 8.3 внедряются элементы «умного заполнения». Система запоминает действия пользователя. Если вы несколько раз вручную измените настройки заполнения для конкретного контрагента, программа может предложить сохранить эти параметры в «Настройках заполнения по данным поставщика».

Чтобы проверить это, выполните следующие шаги:

  1. Откройте входящий электронный документ.
  2. Перейдите в окно сопоставления номенклатуры.
  3. Найдите значок шестеренки (настройки) и проверьте, доступны ли там опции по умолчанию для цен и налогов, или используйте расширение для редактирования цен в чеках ККМ.

Подведем итог: автоматизация флага Цена включает НДС возможна через программную доработку расширением, но она требует осторожности из-за потенциальных ошибок округления. Для большинства торговых компаний оптимальным является использование штатного механизма формирования розничных цен на основании закупочных, где НДС можно «накручивать» автоматически, не меняя структуру входящего документа от поставщика.

← На главную