При редактировании печатных форм часто возникает желание прямо в макете добавить вычисляемое выражение, например, разницу между суммами или процент торговой наценки. Разберем, как именно платформа 1С:Предприятие обрабатывает квадратные скобки в макетах и какими способами можно вывести нужный расчет в печатную форму.
Выясним причину, по которой конструкция вида [розничнаясумма - сумма] не дает ожидаемого результата. В ячейках табличного документа с типом заполнения Шаблон отсутствует математический вычислитель или интерпретатор выражений (в отличие от ячеек в Microsoft Excel или таблиц 1С 7.7).
Любая подстрока, заключенная в квадратные скобки [...], воспринимается платформой исключительно как единый строковый идентификатор параметра. Знаки арифметических операций (плюс, минус, умножение, деление) и пробелы не распознаются как команды вычисления. Платформа пытается найти в процедуре печати параметр со строгим именем "розничнаясумма - сумма". Так как разработчики такой параметр не объявляли, ячейка остается пустой.
Если написать параметры раздельно, например [розничнаясумма] - [сумма], платформа подставит значения каждого параметра отдельно через дефис, и в печатной форме получится обычная текстовая строка: 1000 - 600.
Рассмотрим базовый механизм вывода вычисляемых показателей. Чтобы вывести результат математического действия, ячейку макета необходимо настроить как параметр или использовать шаблон с единственным параметром, а само вычисление перенести в код модуля.
Разберем по шагам порядок действий:
[Разница]).Разница.
ОбластьСтрока.Параметры.Разница = ДанныеСтроки.РозничнаяСумма - ДанныеСтроки.Сумма;
ТабличныйДокумент.Вывести(ОбластьСтрока);
Если задача заключается в том, чтобы доработать типовую накладную без снятия конфигурации с поддержки, наилучшим решением является расширение конфигурации. Проанализируем реализацию этого подхода:
&Вместо или &ИзменениеИКонтроль переопределяем процедуру печати, добавляя расчет значения перед выводом строки.При таком подходе типовая конфигурация поставщика остается на полной поддержке и обновляется в штатном режиме без конфликтов.
Посмотрим на вариант, когда изменение структуры метаданных и подключение расширений нежелательны. Для типовых конфигураций на базе Библиотеки стандартных подсистем (БСП) оптимально создать внешнюю печатную форму:
СведенияОВнешнейОбработке и процедуру Печать.Рассмотрим еще один прием, когда расчет выполняется уже после того, как типовой алгоритм сформировал табличный документ. Если печатная форма формируется программно, можно обойти результирующий табличный документ:
ТабличныйДокумент.
Для НомерСтроки = НомерПервойСтроки По НомерПоследнейСтроки Цикл
ЯчейкаРозничная = ТабДок.Область(НомерСтроки, КолонкаРозничная);
ЯчейкаБазовая = ТабДок.Область(НомерСтроки, КолонкаБазовая);
// Получаем числовые значения и записываем разницу
Разница = ЯчейкаРозничная.Значение - ЯчейкаБазовая.Значение;
ТабДок.Область(НомерСтроки, КолонкаНаценка).Текст = Формат(Разница, "ЧДЦ=2");
КонецЦикла;
Этот способ позволяет не переписывать сложный типовой запрос выборки данных печатной формы, а лишь дополнить готовый отчет вычисляемыми полями.