Как добавить поле «Сумма со скидкой» в документы «Заказ клиента» и «Реализация товаров и услуг» в 1С:УТ 11.5

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

В процессе работы с конфигурацией 1С:Управление торговлей 11.5 пользователи часто сталкиваются с необходимостью видеть детализированную информацию о расчетах в табличной части документов. Одним из самых частых вопросов является добавление колонки «Сумма со скидкой». На первый взгляд задача кажется простой, но она требует понимания архитектуры метаданных 1С и механизмов работы торговых скидок.

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

Анализируем стандартную логику 1С:УТ 11

Прежде чем приступать к программированию, давайте разберем логику, заложенную разработчиками фирмы «1С» в современные конфигурации на базе ERP-платформы (УТ 11, КА 2, ERP). В отличие от старых версий (например, УТ 10.3), где поля могли называться иначе, в УТ 11.5 действует следующее правило для табличных частей Товары:

  1. Поле Цена — это цена за единицу товара (может быть как до скидки, так и после, в зависимости от настроек).
  2. Поле Сумма — это итоговая сумма по строке, которая уже учитывает все примененные ручные и автоматические скидки.

Формула расчета в типовом решении выглядит так: Сумма = (Цена * Количество) - СуммаСкидки. Таким образом, поле, которое пользователи называют «Сумма со скидкой», уже присутствует в системе — это стандартная колонка Сумма. Если вы видите, что сумма в строке равна простому произведению цены на количество, это означает, что скидки просто не были рассчитаны или функционал скидок отключен в настройках.

Способ 1: Настройка функциональных опций

Проанализируем ситуацию: если в документе вообще нет упоминаний о скидках, скорее всего, они отключены на уровне всей базы. Выясним, как это исправить без участия программиста:

  1. Перейдем в раздел НСИ и администрирование.
  2. Выберем пункт Настройка НСИ и разделов -> Продажи.
  3. Развернем группу Скидки (наценки).
  4. Проверим наличие флагов на пунктах Ручные скидки в продажах и Автоматические скидки в продажах.

После включения этих опций в документах «Заказ клиента» и «Реализация товаров и услуг» появятся соответствующие колонки и механизмы расчета. Теперь при нажатии кнопки Цены и скидки -> Рассчитать скидки (наценки) поле Сумма будет автоматически пересчитано с учетом всех условий.

Способ 2: Настройка видимости полей через «Изменить форму»

Если функционал скидок включен, но в табличной части нужные колонки не отображаются, воспользуемся механизмом настройки интерфейса. Это решение подходит для пользователей и аналитиков.

Разберем шаги по настройке формы:

  1. Откроем документ (например, Заказ клиента).
  2. В правом верхнем углу нажмем кнопку ЕЩЕ и выберем пункт Изменить форму.
  3. В дереве элементов формы найдем группу Страницы -> Товары -> ТоварыТаблица.
  4. Убедимся, что установлены галочки напротив полей Сумма, Сумма ручной скидки и Сумма автом. скидки.
  5. Нажмем ОК.

Иногда пользователям нужно видеть именно Сумму БЕЗ скидки (базовую стоимость), чтобы сравнивать ее с итоговой. В типовой конфигурации такое поле в явном виде в таблице часто отсутствует, и его приходится добавлять программно.

Способ 3: Добавление поля через расширение конфигурации

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

Рассмотрим два варианта реализации в расширении:

Вариант А: Добавление реквизита в таблицу (хранение в БД)

Этот метод используется, если нам нужно хранить значение в базе данных. Мы добавляем новый реквизит в табличную часть Товары документа в расширении. Назовем его пр_СуммаСоСкидкой.

Вариант Б: Добавление только элемента формы (расчет на лету)

Проанализируем более «легкий» способ. Мы можем добавить на форму колонку, которая не связана с данными объекта, и вычислять ее значение программно при открытии или изменении строки.

Пример кода в модуле формы для расчета значения:


&НаКлиенте
Процедура пр_ТоварыПриИзменении(Элемент)
    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    Если ТекущаяСтрока <> Неопределено Тогда
        // Рассчитываем значение динамически
        ТекущаяСтрока.пр_СуммаСоСкидкой = ТекущаяСтрока.Сумма; 
        // Или если нужно СуммаБезСкидки:
        // ТекущаяСтрока.пр_СуммаБезСкидки = ТекущаяСтрока.Цена * ТекущаяСтрока.Количество;
    КонецЕсли;
КонецПроцедуры

Важно помнить, что в УТ 11.5 расчеты часто выносятся в общие модули (например, ОбработкаТабличнойЧастиТоварыКлиент). Чтобы ваше новое поле обновлялось корректно при любом изменении цены или количества, рекомендуется использовать перехват (Hook) основных процедур расчета через аннотацию &После.


&После("РассчитатьСуммуТабличнойЧасти")
Процедура пр_РассчитатьСуммуТабличнойЧасти(ТабличнаяЧасть, ИмяТЧ)
    Для Каждого СтрокаТЧ Из ТабличнаяЧасть Цикл
        СтрокаТЧ.пр_СуммаСоСкидкой = СтрокаТЧ.Сумма;
    КонецЦикла;
КонецПроцедуры

Способ 4: Использование внешних печатных форм и отчетов

Если поле «Сумма со скидкой» требуется только для предоставления клиенту или для внутреннего анализа (а не для редактирования в реальном времени), рассмотрим альтернативный вариант — создание внешней печатной формы или отчета.

Это позволит избежать изменения структуры данных. В макете печатной формы мы можем создать произвольные колонки и прописать для них любые формулы. Например, в запросе для печатной формы можно рассчитать:

ВЫРАЗИТЬ(Товары.Цена * Товары.Количество КАК ЧИСЛО(15, 2)) КАК СуммаБезСкидки

И выводить это рядом с итоговой суммой.

Резюме и рекомендации

Подведем итог нашему анализу:

Таким образом, задача добавления поля «Сумма со скидкой» решается либо правильной настройкой прав и опций системы, либо небольшим вмешательством в логику формы через механизм расширений.

← На главную