В процессе автоматизации бизнес-процессов в 1С часто возникает необходимость доработки механизма ввода на основании. Одна из распространенных задач — корректная передача цен из документа КоммерческоеПредложениеКлиенту в ЗаказКлиента, особенно когда требуется учитывать НДС. Рассмотрим детально, как реализовать этот процесс и почему возникают «лишние» копейки в расчетах.
Для того чтобы цена с НДС корректно попадала в табличную часть Товары нового документа, необходимо скорректировать запрос в расширении конфигурации. В процедуре Расш7_ЗаполнитьДокументНаОснованииКоммерческогоПредложенияКлиенту обратите внимание на пакет запроса, отвечающий за заполнение табличной части. Вместо стандартного получения поля Цена нам необходимо явно указать получение цены с НДС.
Измените строку в запросе на следующую:
| КоммерческоеПредложениеКлиентуТовары.ЦенаСНДС КАК Цена,
Таким образом, мы подменяем значение, передаваемое в колонку Цена объекта ЗаказКлиента, на значение из ЦенаСНДС исходного документа.
После внесения изменений в запрос многие сталкиваются с тем, что система начинает «накручивать» НДС сверху на перенесенную цену. Это происходит из-за того, что в 1С логика расчета суммы напрямую зависит от реквизита шапки ЦенаВключаетНДС. Если этот флаг не установлен, система считает, что цена указана без НДС, и прибавляет налог автоматически.
Чтобы этого избежать, необходимо программно установить этот флаг в значение Истина при заполнении документа. Это позволит системе корректно интерпретировать перенесенную цену как уже содержащую налог.
Пример кода, который следует добавить в процедуру заполнения после загрузки данных из выборки шапки:
// Устанавливаем флаг в значение Истина, так как мы передаем уже рассчитанную цену с НДС
ЭтотОбъект.ЦенаВключаетНДС = Истина;
Даже при правильной настройке передачи данных, иногда возникают расхождения в копейках. Это связано с тем, что операции умножения цены (которая может иметь дробную часть) на количество приводят к накоплению погрешностей вычислений с плавающей точкой.
Рассмотрим, как минимизировать эти ошибки:
Цена скрыто число с микроскопической дробной частью (например, 409.002). Всегда используйте отладчик, чтобы увидеть реальное значение переменной.Окр(): При выполнении промежуточных расчетов всегда округляйте результат. Рекомендуется использовать режим округления РежимОкругления.Окр15как20 (банковское округление), который является стандартом для финансовых расчетов в 1С.ЦенаСНДС - Цена. Лучше всего использовать встроенные серверные методы конфигурации, такие как СкидкиНаценкиСервер.РассчитатьПоЗаказуКлиента, которые учитывают все нюансы налогообложения и правила округления, заложенные разработчиками типового решения.Если вы столкнулись с ситуацией, когда данные «не сходятся», выполните следующие действия:
Товары.ТаблицаТовары до того, как они попадут в документ.Окр(Значение, 2) непосредственно перед присвоением значения в реквизит строки документа.Помните, что грамотное использование типовых механизмов 1С — это залог отсутствия проблем с бухгалтерской и управленческой отчетностью. Если цена передается из документа КП, который уже был рассчитан системой, старайтесь не пересчитывать её заново, а принимать как константу.