Почему при создании заказа поставщику в 1С:УТ 11 «слетают» суммы и скидки в заказе клиента?

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

Коллеги, довольно часто при работе с механизмом обеспечения потребностей в УТ 11 возникают ситуации, когда автоматическое поведение системы вступает в конфликт с ожиданиями пользователей. Разберем, почему разбиение строки в Заказе клиента привязывается к заказу поставщику и почему это влияет на итоговые суммы и скидки.

Понимание типового механизма обеспечения потребностей

В 1С:Управление торговлей 11 существует развитый механизм обеспечения потребностей. Когда вы создаете Заказ клиента и указываете для товара вариант обеспечения К обеспечению или Обеспечивать обособленно, система помечает этот товар как требующий закупки. В момент, когда вы создаете Заказ поставщику, система автоматически пытается сопоставить потребности. Разбиение одной строки на две — это штатная работа алгоритмов 1С, направленная на разделение товаров «в наличии» и товаров «под заказ».

Почему же «слетают» суммы? Причин несколько:

  1. Пересчет автоматических скидок: Если в вашей системе настроены скидки, зависящие от количества (например, Скидка за объем), то при разбиении строки количество в каждой из них уменьшается. Условие применения скидки может перестать выполняться, что приведет к пересчету всей суммы заказа.
  2. Приоритеты и правила применения: Разбиение строки вызывает процедуру пересчета сумм и налогов для каждой строки отдельно. Если у вас используются сложные схемы совместного применения скидок, алгоритм срабатывает заново для каждой позиции, что может дать иной результат, чем при расчете одной строкой.
  3. Вмешательство сторонних обработок: В УТ 11 любой код, меняющий табличную часть документа, должен корректно взаимодействовать с типовыми процедурами пересчета (РассчитатьСуммуТабличнойЧасти и аналогичными). Если ваша обработка вносит изменения «в лоб», не вызывая типовые методы, это гарантированно приведет к рассинхронизации данных.

Как провести диагностику проблемы

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

  1. Использование отладчика: Установите точку останова в процедуре ПриИзменении для колонок Количество и Номенклатура в табличной части Товары. Проследите, какие процедуры вызываются после того, как ваша обработка разбивает строку. Важно понять, вызывается ли типовой расчет цен и скидок после завершения работы обработки.
  2. Анализ скидок: В Заказе клиента воспользуйтесь кнопкой Скидки -> Открыть скидки. Это позволит увидеть, какие именно автоматические скидки были применены к строке. Если скидка «пропадает» после разбиения, значит, параметры строки перестали соответствовать условиям маркетинговой акции.
  3. Типовая кнопка «Разбить строку»: Сравните результат работы вашей обработки с результатом работы типовой кнопки Разбить строку в интерфейсе документа. Если при ручном разбиении суммы считаются верно, а через обработку нет — проблема кроется исключительно в вашем коде, который не вызывает корректные процедуры пересчета 1С.

Рекомендации по исправлению

Если пользователь настаивает на том, что строки не должны разбиваться или суммы не должны меняться, необходимо понимать риски. Управленческий учет в УТ 11 требует четкой привязки строк заказа к вариантам обеспечения. Попытка «сломать» это поведение приведет к ошибкам в отчетах по остаткам и доступности товаров.

Вместо попыток запретить разбиение, рекомендуем:

  1. Проверить условия скидок: Возможно, стоит пересмотреть условия предоставления скидок, сделав их менее чувствительными к разбиению строк (например, зафиксировать сумму скидки или изменить порог количества).
  2. Использовать типовые механизмы: Вместо написания собственной обработки, обучите пользователей работе с типовым Рабочим местом менеджера по продажам или Формированием заказов по потребностям.
  3. Корректный вызов процедур: Если доработка необходима, убедитесь, что после любых манипуляций с ТабличнаяЧасть вы вызываете методы пересчета:

// Примерный вызов типового пересчета после программного разбиения строк
// Важно: всегда используйте методы объектной модели, а не прямое присвоение
ДокументОбъект.РассчитатьСуммуТабличнойЧасти("Товары", СтрокаТабличнойЧасти);
ДокументОбъект.РассчитатьСкидкиНаценкиТабличнойЧасти("Товары", СтрокаТабличнойЧасти);

Помните, что УТ 11 — это сложная система, и любое вмешательство в логику проведения документов должно быть обосновано. Прежде всего, разберитесь с настройками автоматических скидок — в большинстве случаев проблема «слетания» сумм кроется именно в их неправильной настройке относительно условий применения.

← На главную