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

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

При разработке внешних печатных форм и доработке печатных механизмов часто возникает задача изменить текстовые данные или реквизиты (например, ИНН, КПП, должности или ФИО ответственных) уже после того, как результирующий табличный документ сформирован типовой функцией. Рассмотрим подробнее, почему стандартный подход работы с параметрами здесь не сработает и какими способами можно подменить значения в готовой печатной форме.

Принципиальное отличие макета от сформированного табличного документа

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

Свойство Параметры существует исключительно у объектов типа ОбластьТабличногоДокумента, полученных из исходного **макета** (например, через Макет.ПолучитьОбласть("Шапка")). В момент, когда область выводится в итоговый ТабличныйДокумент с помощью методов Вывести() или Присоединить(), происходят следующие изменения:

  1. Значения параметров вычисляются и подставляются в соответствующие ячейки.
  2. Все связи с именами параметров теряются.
  3. В результирующем табличном документе остаётся лишь статический текст или готовые значения ячеек.

Попытка вызвать код вида ТабличныйДокумент.Область("Шапка").Параметры.ИННПродавца = "..." приведет к ошибке, так как у области итогового документа нет свойства Параметры.

Способ 1. Поиск и замена текста с помощью метода НайтиТекст

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

Рассмотрим пример кода, в котором выполняется поиск исходного текста (например, старого КПП или типовой должности) и замена его на новое значение:


// Ищем ячейку с текстом, который требуется заменить
ОбластьЯчейки = ТабличныйДокумент.НайтиТекст("КПП 770101001");

Если ОбластьЯчейки <> Неопределено Тогда
    // Заменяем текст в найденной ячейке
    ОбластьЯчейки.Текст = "КПП 779901001";
КонецЕсли;

Разберем важные нюансы при работе со свойствами ячейки:

  1. Если у ячейки свойство СодержитЗначение имеет значение Ложь, меняем свойство Текст.
  2. Если свойство СодержитЗначение равно Истина (например, в ячейке хранятся данные определенного типа), подмену следует выполнять через свойство Значение.

Способ 2. Обращение к ячейке по имени области или координатам

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

Для обращения к конкретной ячейке или диапазону по координатам формата **R1C1:R2C2** используется метод Область():


// Получение ячейки по координатам (строка 5, колонка 3)
Ячейка = ТабличныйДокумент.Область("R5C3");
Ячейка.Текст = "Иванов И.И.";

// Альтернативный вариант синтаксиса по номерам строк и колонок
Ячейка = ТабличныйДокумент.Область(5, 3, 5, 3);
Ячейка.Текст = "Иванов И.И.";

Важное предупреждение: обращение по жестким координатам (номерам строк и колонок) не рекомендуется использовать для типовых печатных форм (например, УПД или Счета-фактуры). При обновлении конфигурации или изменении законодательных форм структура строк может измениться, что приведет к подмене данных в неверных ячейках.

Альтернативные архитектурные решения

Модификация уже сформированного табличного документа «постфактум» часто является костыльным решением. Чтобы сделать код надежным и отчуждаемым, проанализируем альтернативные подходы:

  1. Перехват алгоритма через Расширение конфигурации: Вместо модификации выведенных ячеек во внешней печатной форме, вызов процедур печати можно перехватить с помощью расширения (аннотации &Вместо или &После). Это позволяет подменить макет или алгоритм заполнения параметров до момента вывода области.
  2. Подмена данных в структурах БСП: При использовании Библиотеки Стандартных Подсистем (БСП) перед вызовом функции печати можно подменить данные в объекте или параметрах печати, из которых типовой механизм забирает КПП, ИНН и ответственных лиц.
← На главную