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

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

При доработке печатных форм в конфигурациях 1С, например, при настройке УПД в Управление торговлей 10.3, часто возникает ситуация, когда печатная форма уже сформирована типовым методом, но нам необходимо добавить в неё дополнительные данные, например, ФИО ответственного или строку 5(б) в счет-фактуру (есть готовая внешняя печатная форма УПД с графой 5б). Если вы попытаетесь обратиться к параметрам области так же, как это делается при создании макета, система выдаст ошибку, так как коллекция Параметры в результирующем документе недоступна.

Почему не получается обратиться к параметрам напрямую?

Разберемся в механике работы платформы 1С. Когда вы формируете печатную форму, вы используете макет, где ячейки имеют тип заполнения Параметр или Шаблон. Однако в момент, когда метод Вывести() или Присоединить() завершает свою работу и документ готов к выводу на экран, платформа 1С производит «рендеринг»: она вычисляет все выражения и заменяет параметры на статический текст. В результате этой операции объекты параметров исчезают, и внутри результирующего ТабличныйДокумент остаются только текстовые значения. Поэтому обращение к Область.Параметры становится невозможным.

Способ 1: Обращение к ячейке по координатам

Раз параметры недоступны, мы можем работать с документом как с сеткой координат. У нас есть объект ТабличныйДокумент, который обладает свойствами ВысотаТаблицы и ШиринаТаблицы. Мы можем программно «дотянуться» до нужной нам ячейки, указав её номер строки и номер колонки.

Посмотрим на пример кода, как можно изменить текст в ячейке, зная её расположение:


// Предположим, мы знаем, что подпись находится в 45 строке и 5 колонке
ТабДокумент.Область(45, 5).Текст = "Владыка Пупкин";

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

Способ 2: Использование метода НайтиТекст

Если позиции ячеек могут меняться (например, при разном количестве товаров в табличной части), жестко заданные координаты (45, 5) использовать опасно. В таких ситуациях мы рекомендуем использовать метод НайтиТекст — это поможет, если нужна автоматическая подстановка печатей и подписей в формы. Рассмотрим, как это реализовать на практике:

  1. Найдем статичную метку в макете, например, ячейку с текстом «Ответственный:».
  2. Получим координаты этой области.
  3. Сместимся относительно найденной ячейки вправо на одну колонку и запишем туда нужное ФИО — для этого есть внешняя печатная форма УПД с ответственными.

ОбластьПоиска = ТабДокумент.НайтиТекст("Ответственный:", , , , Истина);
Если ОбластьПоиска <> Неопределено Тогда
    // Сдвигаемся в соседнюю ячейку (по горизонтали на 1)
    ТабДокумент.Область(ОбластьПоиска.Верх, ОбластьПоиска.Лево + 1).Текст = "Владыка Пупкин";
КонецЕсли;

Способ 3: Использование именованных ячеек в макете

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

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


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

Важные замечания по работе с документом

При модификации готового ТабличныйДокумент всегда учитывайте несколько нюансов:

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

← На главную