Как вывести математическое выражение и расчет в печатную форму в 1С

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

При разработке простых обработок и печатных форм начинающие разработчики часто сталкиваются с задачей: необходимо не просто рассчитать результат вычисления, но и красиво вывести полное математическое выражение (например, вида 3 * 3 / 3 = 3) в табличный документ. Разберем по шагам, как правильно настроить макет, заполнить параметры и отобразить печатную форму пользователю, а также проанализируем типичные ошибки при работе с элементами управления формы.

Анализ логики формы и исправление ошибок

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

  1. Некорректная обработка выхода при ошибке: в стандартном обработчике нажатия кнопки Кнопка1Нажатие(Элемент) системная переменная Отказ отсутствует. Присвоение Отказ = Истина ни к чему не приведет, и выполнение кода продолжилось бы, если бы не ветка Иначе. Если требуется прервать выполнение процедуры, необходимо использовать оператор Возврат.
  2. Обращение к элементам управления вместо реквизитов: чтение данных напрямую через ЭлементыФормы.ПолеВвода.Значение не гарантирует правильный числовой тип, если в свойствах полей не настроена строгая типизация. Надежнее создать у обработки реквизиты с типом Число, связать их с полями ввода через свойство «Данные» и обращаться непосредственно к реквизитам.

Скорректируем логику проверки деления на ноль и расчета:


Процедура Кнопка1Нажатие(Элемент)
    
    Если ПолеВвода3 = 0 Тогда
        Сообщить("Делить на 0 нельзя!");
        Возврат;
    КонецЕсли;
    
    РезультатРасчета = ПолеВвода1 * ПолеВвода2 / ПолеВвода3;
    Надпись1 = РезультатРасчета;
    
КонецПроцедуры

Способ 1. Использование ячейки макета с типом «Параметр»

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

Разберем порядок действий в конфигураторе:

  1. Открываем или создаем макет обработки с типом Табличный документ (например, с именем Макет).
  2. Выделяем одну или несколько строк и создаем именованную область через меню Таблица — Имена — Назначить имя, назвав ее Печать.
  3. В нужной ячейке области указываем имя параметра, например ПредставлениеУравнения.
  4. В окне свойств этой ячейки (палитра свойств) находим свойство Заполнение и меняем значение с Текст на Параметр.

Теперь напишем программный код формирования печатной формы. Чтобы числа в выражении выглядели аккуратно и платформа не добавляла неразрывные пробелы в триадах (например, 1 000 вместо 1000), применим функцию Формат() с параметром ЧГ=0. Если результат деления может содержать дробную часть, ограничим разрядность параметром ЧДЦ=2 или функцией Окр().


Процедура ПечатьМакета()
    
    Если ПолеВвода3 = 0 Тогда
        Сообщить("Печать невозможна: деление на ноль!");
        Возврат;
    КонецЕсли;
    
    Результат = Окр(ПолеВвода1 * ПолеВвода2 / ПолеВвода3, 2);
    
    // Формируем текстовое представление выражения
    Строка1 = Формат(ПолеВвода1, "ЧГ=0");
    Строка2 = Формат(ПолеВвода2, "ЧГ=0");
    Строка3 = Формат(ПолеВвода3, "ЧГ=0");
    СтрокаРезультат = Формат(Результат, "ЧГ=0; ЧДЦ=2");
    
    ТекстВыражения = Строка1 + " * " + Строка2 + " / " + Строка3 + " = " + СтрокаРезультат;
    
    // Инициализируем табличный документ и макет
    ТабДокумент = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    ОбластьПечать = Макет.ПолучитьОбласть("Печать");
    
    // Заполняем параметр области
    ОбластьПечать.Параметры.ПредставлениеУравнения = ТекстВыражения;
    
    // Выводим заполненную область в документ и отображаем его
    ТабДокумент.Вывести(ОбластьПечать);
    ТабДокумент.Показать("Печать выражения");
    
КонецПроцедуры

Способ 2. Использование свойства ячейки «Шаблон»

Рассмотрим более удобный способ, который позволяет избежать ручной склейки строк в коде конфигурации. Платформа 1С поддерживает режим заполнения ячейки Шаблон.

Разберем по шагам, как это реализовать:

  1. В макете внутри области Печать выбираем нужную ячейку.
  2. В палитре свойств ячейки в поле Заполнение выбираем значение Шаблон.
  3. В тексте ячейки пишем выражение с именами параметров в квадратных скобках: [Число1] * [Число2] / [Число3] = [Результат].

Теперь каждый параметр доступен в коде как отдельное свойство коллекции Параметры соответствующей области. Напишем код вывода:


Процедура ПечатьШаблоном()
    
    Если ПолеВвода3 = 0 Тогда
        Сообщить("Делить на 0 нельзя");
        Возврат;
    КонецЕсли;
    
    ТабДокумент = Новый ТабличныйДокумент;
    Макет = ПолучитьМакет("Макет");
    ОбластьПечать = Макет.ПолучитьОбласть("Печать");
    
    // Заполняем параметры напрямую в макет
    ОбластьПечать.Параметры.Число1 = Формат(ПолеВвода1, "ЧГ=0");
    ОбластьПечать.Параметры.Число2 = Формат(ПолеВвода2, "ЧГ=0");
    ОбластьПечать.Параметры.Число3 = Формат(ПолеВвода3, "ЧГ=0");
    ОбластьПечать.Параметры.Результат = Формат(ПолеВвода1 * ПолеВвода2 / ПолеВвода3, "ЧГ=0; ЧДЦ=2");
    
    ТабДокумент.Вывести(ОбластьПечать);
    ТабДокумент.Показать("Результат расчета");
    
КонецПроцедуры

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

Вывод табличного документа на форму обработки

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

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

ЭлементыФормы.ПолеТабличногоДокумента1.Очистить();
ЭлементыФормы.ПолеТабличногоДокумента1.Вывести(ОбластьПечать);

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

← На главную