Как добавить вывод итоговой суммы по колонке в табличную часть 1С без изменения конфигурации?

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

Часто в работе программиста или опытного пользователя возникает ситуация, когда необходимо добавить функционал в типовую конфигурацию (например, расчет итогов по колонке в документе «Авизо по МПЗ»), но при этом вносить изменения в саму конфигурацию категорически запрещено. Это может быть связано с политикой безопасности компании, необходимостью сохранения «поддержки» или особенностями обмена данными между филиалами. Рассмотрим подробно, как решить задачу добавления итогов, используя два современных механизма платформы «1С:Предприятие 8.3»: расширения конфигурации и внешние обработки.

Метод 1. Использование встроенного механизма «Изменить форму»

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

  1. Откроем нужный документ и нажмем кнопку «Ещё» в верхней части формы, затем выберем пункт «Изменить форму».
  2. В открывшемся дереве элементов найдем нашу таблицу (например, Товары или МПЗ).
  3. В правой части окна свойств найдем флажок «Подвал» и установим его.
  4. Развернем состав колонок таблицы и выберем числовую колонку, по которой нужен итог.
  5. Проверим свойство «Роль текста подвала». Если там доступно значение Итог, выберем его.

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

Метод 2. Расширение конфигурации: автоматический итог в подвале

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

Для реализации нам необходимо создать расширение, добавить в него форму документа и использовать обработчик события ПриСозданииНаСервере или ПриЧтенииНаСервере. Выясним, какой код нам понадобится:


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

Проанализируем этот код. Свойство ПутьКДаннымПодвала использует встроенный агрегат Итог[ИмяКолонки], который работает на уровне платформы для всех табличных частей. Это решение эффективно, так как не требует ручного пересчета строк при каждом изменении данных — 1С сделает это сама.

Важный нюанс по поводу обмена данными: Если ваша организация обменивается данными с головным офисом, помните, что расширение, изменяющее только визуальные свойства элементов формы, не влияет на структуру таблиц базы данных (SQL) и не создает конфликтов при выгрузке/загрузке данных в формате XML. Однако само наличие расширения будет видно в списке Администрирование — Расширения.

Метод 3. Внешняя обработка: расчет по требованию

Если использование расширений также нежелательно (например, вы хотите «скрыть» доработки от системного администратора), можно воспользоваться механизмом внешних обработок с видом «Заполнение объекта». Этот метод добавит кнопку в меню «Заполнение» или «Отчеты» документа.

Сначала подготовим функцию регистрации обработки. Рассмотрим структуру функции СведенияОВнешнейОбработке:


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

Далее, в модуле формы внешней обработки (или в модуле объекта, в зависимости от типа команды), мы опишем алгоритм расчета. Посмотрим на пример кода, который считывает данные из формы документа и выводит результат пользователю:


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

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

Выбор оптимального решения

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

  1. Расширение — идеально, если важен комфорт пользователя (сумма видна всегда). Подходит, если программист головного офиса не проверяет список установленных расширений.
  2. Внешняя обработка — самый безопасный и «невидимый» вариант. Не вносит изменений в интерфейс на постоянной основе. Отлично работает в условиях жестких ограничений на модификацию базы.
  3. Механизм «Изменить форму» — стоит попробовать в первую очередь. Если он сработает, то никакое программирование не потребуется вовсе.

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

← На главную