Как вывести общую сумму табличной части в поле документа 1С?

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

При разработке управляемых форм в 1С часто возникает задача: отобразить итоговую сумму по табличной части в отдельном поле над ней — для этого есть обработка вывода итогов веса и объема в заказ. Многие начинающие разработчики сталкиваются с трудностями при выборе события, в котором нужно производить расчет. Давайте разберем, как правильно реализовать этот функционал, учитывая особенности архитектуры 1С:Предприятия.

Способ 1: Декларативный (без программирования)

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

  1. Откройте форму документа в Конфигураторе или используйте дружелюбный интерфейс итогов в диалоге табличных частей.
  2. Выберите элемент формы, который отвечает за отображение итоговой суммы.
  3. В палитре свойств найдите поле ПутьКДанным.
  4. Вместо простого выбора реквизита объекта, вы можете указать выражение (если это предусмотрено версией платформы) или воспользоваться возможностями автоматического подсчета итогов в табличных частях — для этой задачи подойдёт автоматический пересчет итоговых показателей в документе.

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

Способ 2: Программный расчет через обработчик «ПриИзменении»

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

Разберем пример кода, который нужно поместить в обработчик события ПриИзменении для колонок табличной части (например, для Количество, Цена):


&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
    // Рассчитываем сумму текущей строки
    ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
    ТекущиеДанные.Сумма = ТекущиеДанные.Количество * ТекущиеДанные.Цена;
    
    // Пересчитываем итоговую сумму документа
    Объект.СуммаДокумента = Объект.Товары.Итог("Сумма");
КонецПроцедуры

Почему это работает: Мы используем встроенный метод Итог(), который суммирует значения указанной колонки по всем строкам табличной части Товары. Вызов этого кода в обработчике изменения строки гарантирует, что итоговая сумма на форме всегда будет актуальной.

Способ 3: Расчет в модуле объекта («ПередЗаписью»)

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

Рассмотрим, как это реализовать:


Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    // Метод Итог доступен и в модуле объекта
    СуммаДокумента = Товары.Итог("Сумма");
КонецПроцедуры

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

Важные советы при разработке

Изучая 1С, всегда стремитесь понять, почему код не срабатывает. В данном случае ошибка заключалась в том, что автор пытался повесить логику пересчета на событие изменения самой суммы, хотя инициатором изменений всегда выступает содержимое табличной части. Анализируйте состав событий формы, и ваши программы станут надежнее! В этом поможет набор инструментов разработчика с консолью кода и запросов.

← На главную