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

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

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

Метод 1. Добавление реквизитов в документ (Рекомендуемый подход)

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

Преимущества этого метода:

  1. Сохранность данных: Введенные значения сохранятся в базе данных, а не пропадут после закрытия окна печати.
  2. Простота реализации: Расчеты производятся стандартными средствами в модуле объекта или менеджера.
  3. Типизация: Платформа сама проконтролирует, чтобы в числовое поле не ввели текст.

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

Метод 2. Реализация интерактивного расчета в Табличном документе

Если же задача стоит принципиально — считать «на лету» в самой форме, нам потребуется использовать механизм ПолеТабличногоДокумента, размещенный на управляемой форме. Рассмотрим, как превратить статичную таблицу в калькулятор.

Шаг 1. Настройка прав доступа к ячейкам

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


// Устанавливаем доступность редактирования для всего документа
ТабличныйДокумент.ТолькоПросмотр = Ложь;

// Разрешаем редактирование конкретной области (например, ячейки для ввода)
ОбластьВвода = ТабличныйДокумент.Область("R5C3"); // Пример координат
ОбластьВвода.Защита = Ложь;

Шаг 2. Обработка изменения данных

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

Проанализируем алгоритм обработки:

  1. Пользователь меняет значение в ячейке и нажимает Enter.
  2. Срабатывает триггер события.
  3. Программа считывает значения из именованных областей, выполняет математическую операцию и записывает результат в ячейку «Итог».

Пример кода обработчика:


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

Метод 3. Использование именованных областей вместо координат

Разберем важный нюанс: использование прямых адресов ячеек типа R1C1 крайне ненадежно. Если макет печатной формы изменится (добавится строка или колонка), ваш код начнет считывать не те данные. Поэтому всегда назначайте ячейкам Имена в конфигураторе (свойство «Имя» в палитре свойств ячейки).

Выясним причину, почему это лучше: при обращении ТабличныйДокумент.Область("ИмяЯчейки") 1С найдет нужную область, где бы она ни находилась после переформирования макета. Это делает решение гибким и устойчивым к правкам дизайна формы.

Метод 4. Расчет через механизм расшифровки

Если автоматический расчет при каждом нажатии клавиши кажется избыточным, рассмотрим вариант с расшифровкой. Мы можем настроить ячейку так, чтобы при двойном клике по ней открывалось модальное окно или диалог ввода значения.

Как это работает:

  1. В макете для ячейки заполняется параметр Расшифровка.
  2. В модуле формы описывается процедура ОбработкаРасшифровки.
  3. Внутри процедуры вызывается ПоказатьВводЧисла().
  4. Полученное число записывается в ячейку, и инициируется пересчет связанных полей.

Ограничения и важные замечания

Проанализируем ситуации, когда данные подходы могут не сработать:

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

← На главную