К статье
Практический материал

Документы и Печать · 12 мин

Как вставить формулу в макет 1С

Как вставить формулу в макет 1С: параметры ячеек, шаблоны с квадратными скобками, вычисляемые поля и типичные ошибки при формировании печатных форм.

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

Макет табличного документа хранится в конфигурации (или во внешней обработке) и заполняется программно. Сам по себе макет не «считает» как Excel — вычисления либо выполняются в коде перед выводом, либо описываются в тексте ячейки как шаблон. Понимание этого различия избавляет от главной ошибки новичков — попытки написать формулу вида =A1+B1, которая в табличном документе 1С не работает.

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

Какие «формулы» вообще существуют в макете 1С

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

Первый — параметр: ячейка целиком заменяется значением, которое код передаёт через Область.Параметры.ИмяПараметра = Значение. Второй — шаблон: в тексте ячейки пишутся подстановки в квадратных скобках, например Товар: [Номенклатура], количество: [Количество], и метод Область.Параметры.Заполнить() заменяет их фактическими данными. Третий — выражение, вычисляемое в коде до вывода: сумма, итог, форматированная строка.

Отдельно стоит упомянуть макеты типа «Схема компоновки данных» — там формулы задаются как выражения вычисляемых полей в настройках СКД. Это другой механизм, и он рассмотрен ниже отдельным разделом.

Подготовка макета: где задаётся формула

Откройте конфигуратор, найдите нужный макет (Общие → Макеты, либо макет в составе объекта) и откройте его двойным щелчком. Макет откроется как табличный документ с разметкой областей.

Чтобы ячейка принимала значение или шаблон, выделите её и откройте палитру свойств (правый клик → «Свойства»). Ключевые свойства:

  • Заполнение — «Текст» (обычная надпись), «Параметр» (ячейка-параметр) или «Шаблон» (текст с подстановками);
  • Параметр — имя параметра, доступно при заполнении «Параметр»;
  • Текст — содержимое ячейки; для шаблона сюда пишется строка с именами в квадратных скобках.

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

Способ 1. Параметр ячейки — простейшая подстановка

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

Порядок настройки: выделите ячейку, в свойствах установите «Заполнение» = «Параметр», в поле «Параметр» укажите имя, например НомерДокумента. Текст ячейки при этом можно оставить пустым — он будет заменён значением.

В коде формирования печатной формы параметр заполняется так:

Макет = ПолучитьМакет("МакетСчета");

ОбластьШапка = Макет.ПолучитьОбласть("Шапка");

ОбластьШапка.Параметры.НомерДокумента = НомерДок;

ОбластьШапка.Параметры.ДатаДокумента = Формат(ДатаДок, "ДЛФ=D");

ТабДок.Вывести(ОбластьШапка);

Если нужно передать сразу несколько значений из структуры или строки выборки, используйте метод Заполнить: ОбластьШапка.Параметры.Заполнить(ВыборкаШапка) — параметры с совпадающими именами заполнятся автоматически.

Способ 2. Шаблон — подстановка внутри текста

Шаблон нужен, когда значения встраиваются внутрь предложения: «Счёт № [Номер] от [Дата]», «Итого: [СуммаИтого] руб.». Писать такое конкатенацией параметров по ячейкам неудобно — шаблон решает задачу одной ячейкой.

Настройка: у ячейки установите «Заполнение» = «Шаблон», а в свойство «Текст» впишите строку с подстановками в квадратных скобках: Счёт № [НомерДокумента] от [ДатаДокумента]. Каждое имя в скобках — это параметр, который заполняется из кода точно так же, как и обычный параметр.

ОбластьШапка.Параметры.НомерДокумента = НомерДок;

ОбластьШапка.Параметры.ДатаДокумента = Формат(ДатаДок, "ДЛФ=D");

ТабДок.Вывести(ОбластьШапка);

Важный нюанс: в шаблоне нельзя писать произвольные выражения вроде [Количество * Цена] — подстановка работает только по имени параметра. Если нужно произведение, вычислите его в коде и передайте как отдельный параметр Сумма.

Типичные ошибки
01
Написать в шаблоне выражение [Количество * Цена] — подстановка не сработает, в квадратных скобках допустимо только имя параметра
02
Опечатка в имени параметра между макетом и кодом — при выводе возникает ошибка «Параметр не найден» или значение остаётся пустым
03
Забыть сменить заполнение ячейки с «Текст» на «Шаблон» — в печатной форме выводятся квадратные скобки как обычный текст
04
Передать в параметр значение типа Дата без форматирования — на печати получается строка с временем 00:00:00

Способ 3. Вычисления в коде перед выводом области

Любая арифметика — суммы, итоги, проценты, НДС — выполняется во встроенном языке до того, как область попадёт в табличный документ. Макет получает уже готовый результат.

Типовой пример — строка табличной части с суммой и накопительный итог:

ИтогоСумма = 0;

Для Каждого СтрокаТовара Из Товары Цикл

СуммаСтроки = СтрокаТовара.Количество * СтрокаТовара.Цена;

ИтогоСумма = ИтогоСумма + СуммаСтроки;

ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);

ОбластьСтрока.Параметры.Сумма = СуммаСтроки;

ТабДок.Вывести(ОбластьСтрока);

КонецЦикла;

ОбластьИтог = Макет.ПолучитьОбласть("Итог");

ОбластьИтог.Параметры.ИтогоСумма = ИтогоСумма;

ТабДок.Вывести(ОбластьИтог);

Такой подход даёт полный контроль: можно округлять, проверять деление на ноль, форматировать числа. Для форматирования используйте функцию Формат() — например, Формат(СуммаСтроки, "ЧДЦ=2") выведет сумму с двумя знаками после запятой. Альтернатива — задать формат прямо в свойствах ячейки макета (свойство «Формат»), тогда код остаётся чище.

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

Вычисляемые поля в макете СКД

Если печатная форма или отчёт строится на схеме компоновки данных, «формулы» добавляются как вычисляемые поля. В схеме компоновки перейдите на закладку «Вычисляемые поля», добавьте поле, укажите путь к данным (имя), заголовок и выражение — например, Количество * Цена.

В выражениях вычисляемых полей доступны арифметические операции, функции языка выражений СКД (Сумма() в ресурсах, ЕстьNull(), строковые функции) и обращения к полям набора данных. После добавления поле можно вывести в настройках отчёта как обычную колонку.

Этот способ предпочтительнее вычислений в коде, когда отчёт должен пересчитываться при изменении настроек пользователем: группировках, отборах, итогах. СКД сама агрегирует вычисляемые поля по группировкам, если поле добавлено в ресурсы.

Сравнение способов

Параметр ячейки

Одно значение в одну ячейку: номер, дата, итог. Ограничение — ячейка заменяется целиком, встроить значение в середину текста нельзя

Шаблон

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

Вычисление в коде

Любая логика: итоги, НДС, условия. Ограничение — результат не пересчитывается при изменении данных без повторного формирования

Вычисляемое поле СКД

Отчёты с группировками и пользовательскими настройками. Ограничение — работает только в схеме компоновки, не в макете табличного документа

Как проверить результат и отладить макет

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

Если параметр не заполняется, проверьте в конфигураторе по цепочке: имя области в коде совпадает с именем области в макете; у ячейки правильное заполнение («Параметр» или «Шаблон»); имя параметра в свойствах ячейки совпадает с именем в коде. Быстрый способ локализовать проблему — временно вывести значение через Сообщить() перед выводом области.

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

Контрольные точки

Как проверить результат

Значение параметра на печатной форме
Норма

В ячейке выведено актуальное значение из документа

Тревожный признак

Ячейка пустая или содержит исходный текст макета — проверьте заполнение и имя параметра

Шаблон со скобками
Норма

Все подстановки [Имя] заменены значениями

Тревожный признак

Квадратные скобки видны в тексте — заполнение ячейки осталось «Текст» или параметр не передан

Итоговые суммы
Норма

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

Тревожный признак

Итог не сходится — проверьте накопление в цикле и округление

Ограничения и меры предосторожности

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

Перед правкой макета сохраните копию: экспортируйте макет в файл (Файл → Сохранить копию в табличном документе) или скопируйте исходный макет под другим именем. Откатить неудачное изменение в конфигураторе без копии бывает затруднительно.

Ещё одно ограничение: табличный документ не пересчитывает зависимые ячейки. Если пользователь вручную отредактирует сформированную печатную форму, итоги не изменятся — в отличие от Excel. Для интерактивных расчётов табличный документ не предназначен.

Итог

Что важно запомнить

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

Частые вопросы

Можно ли написать в ячейке макета формулу вида =A1+B1, как в Excel?

Нет. Табличный документ 1С не содержит механизма пересчёта ячеек. Сумму нужно вычислить в коде и передать в ячейку через параметр, либо использовать вычисляемое поле, если макет построен на СКД.

Почему в печатной форме видны квадратные скобки с именем параметра?

У ячейки свойство «Заполнение» осталось в значении «Текст», поэтому [ИмяПараметра] воспринимается как обычная надпись. Установите заполнение «Шаблон» — и подстановки начнут заменяться значениями.

Как вывести в шаблоне произведение количества на цену?

Напрямую в шаблоне выражения не вычисляются — в квадратных скобках допустимо только имя параметра. Посчитайте произведение в коде: Сумма = Количество * Цена; — и передайте его отдельным параметром Сумма, который вставьте в текст шаблона.

Что делать, если при выводе возникает ошибка «Параметр не найден»?

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

Как округлить сумму до двух знаков в печатной форме?

Два способа: задать строку формата ЧДЦ=2 в свойстве «Формат» ячейки макета — тогда код не меняется; либо отформатировать значение в коде функцией Формат(Сумма, "ЧДЦ=2") перед передачей в параметр. Первый вариант удобнее при последующих правках представления.

Чем внешняя печатная форма лучше правки типового макета?

Внешняя печатная форма — это отдельная обработка со своим макетом и кодом, подключаемая к конфигурации без изменения типовых объектов. Она не конфликтует с обновлениями конфигурации и легко откатывается — достаточно отключить обработку.