Разработка и Конфигурация · 9 мин
Как получить имя параметра табличного документа в 1С
Как получить имя параметра табличного документа 1С: методы НайтиТекст, Параметры, обход областей, работа с макетом и типовые ошибки разработчиков.
Табличный документ в 1С — это не просто «таблица для печати», а структурированный объект с областями, параметрами и расшифровкой. Когда нужно программно разобрать готовый табличный документ (например, чтобы найти заполненные параметры, проверить шаблон или построить универсальный механизм печати), разработчик сталкивается с вопросом: как получить имя параметра конкретной области или ячейки.
Ключевой момент: параметр существует только в ячейках, у которых свойство ТипЯчейки установлено в значение Параметр (или Шаблон, где параметры встроены в текст). У обычных текстовых ячеек свойства «Параметр» нет, и попытка обратиться к нему вызовет ошибку. Поэтому задача сводится к обходу областей табличного документа, проверке типа ячейки и чтению имени параметра.
Ниже разобраны рабочие способы: чтение параметра конкретной области, полный обход документа, работа с макетом до вывода, а также типовые ошибки и ограничения платформы.
Где хранится имя параметра и как устроена область
Каждая ячейка табличного документа — это объект ОбластьЯчеекТабличногоДокумента. У неё есть набор свойств: Текст, ТипЯчейки, Параметр, Расшифровка, Имя и другие. Свойство Параметр содержит именно имя параметра — строку, которую задали в макете при редактировании ячейки (например, «Номенклатура», «ДатаДокумента», «СуммаПрописью»).
Важно не путать имя параметра со значением параметра. Имя — это идентификатор в шаблоне, а значение подставляется через коллекцию ТабличныйДокумент.Параметры или через Область.Параметры.ИмяПараметра = Значение до вывода. После того как область выведена в результирующий документ, параметр обычно уже заменён значением, и тип ячейки становится «Текст» — имени параметра в ней больше нет.
Как получить имя параметра конкретной области
Если область известна (получена методом Область() или НайтиТекст()), имя параметра читается напрямую, но только после проверки типа ячейки:
Область = ТабДок.Область("R2C3");
Если Область.ТипЯчейки = ТипЯчейкиТабличногоДокумента.Параметр Тогда
ИмяПараметра = Область.Параметр;
Сообщить("Имя параметра: " + ИмяПараметра);
ИначеЕсли Область.ТипЯчейки = ТипЯчейкиТабличногоДокумента.Шаблон Тогда
// Параметры встроены в текст шаблона
Сообщить("Ячейка-шаблон: " + Область.Текст);
Иначе
Сообщить("Ячейка не содержит параметра");
КонецЕсли;
Если обратиться к Область.Параметр у ячейки с типом «Текст», платформа выдаст ошибку «Поле объекта не обнаружено» или вернёт неопределённое поведение в зависимости от контекста. Проверка типа — обязательный шаг, а не формальность.
Как перебрать все параметры табличного документа
Универсальный способ — обход всех ячеек в цикле по номерам строк и колонок. Границы документа дают методы ВысотаТаблицы и ШиринаТаблицы:
Для НомерСтроки = 1 По ТабДок.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По ТабДок.ШиринаТаблицы Цикл
Область = ТабДок.Область(НомерСтроки, НомерКолонки,
НомерСтроки, НомерКолонки);
Если Область.ТипЯчейки = ТипЯчейкиТабличногоДокумента.Параметр Тогда
Сообщить("Строка " + НомерСтроки + ", колонка "
+ НомерКолонки + ": параметр «" + Область.Параметр + "»");
КонецЕсли;
КонецЦикла;
КонецЦикла;
Такой обход удобен для диагностики макета: можно сверить фактический список параметров с тем, что заполняет код, и найти незаполненные или лишние параметры. Учтите, что на больших документах (тысячи строк) полный перебор занимает заметное время — ограничивайте диапазон, если структура документа известна.
- 1Получите табличный документ или макет (ПолучитьМакет / загрузка из файла)
- 2Определите границы: ВысотаТаблицы и ШиринаТаблицы
- 3Переберите ячейки в двойном цикле по строкам и колонкам
- 4Для каждой ячейки проверьте ТипЯчейки = Параметр
- 5Прочитайте Область.Параметр и сохраните имя в массив или таблицу значений
- 6Сверьте найденные имена с ожидаемым списком параметров
Работа с параметрами на уровне макета до вывода
На практике чаще нужно не «читать» готовый документ, а заполнить параметры макета. Коллекция Параметры области макета позволяет устанавливать значения по имени: ОбластьМакета.Параметры.Номенклатура = СтрокаТовара.Наименование. Проверить, существует ли параметр с таким именем, можно через попытку обращения или через перебор ячеек макета описанным выше способом.
Отдельный сценарий — ячейки с типом «Шаблон». В них текст содержит вставки вида [ИмяПараметра], и единого свойства «Параметр» у такой ячейки нет. Чтобы извлечь имена параметров из шаблона, нужно разобрать строку Область.Текст регулярным выражением или поиском подстрок между квадратными скобками. Значения таким параметрам по-прежнему задаются через Параметры.ИмяПараметра.
Альтернативные способы и их ограничения
Метод НайтиТекст() ищет по тексту ячейки, а не по имени параметра, поэтому для готового документа он не поможет. Однако его можно применить к макету, если искать фрагмент текста шаблона. Метод возвращает область, у которой дальше проверяется ТипЯчейки и читается Параметр.
Именованные области макета (секции) доступны через Макет.ПолучитьОбласть("ИмяОбласти") — это способ адресовать нужный фрагмент без перебора всего документа. Но внутри полученной области параметры всё равно извлекаются перебором ячеек.
Сравнение вариантов
Универсально, находит все параметры. Медленно на больших документах, требует проверки ТипЯчейки
Быстро и просто, но нужно заранее знать адрес ячейки (R2C3) или имя области
Единственный надёжный способ для готовых печатных форм, где параметры уже заменены значениями
Подходит для ячеек типа Шаблон с вставками [Имя], требует парсинга строки
Типичные ошибки и как их избежать
Самая частая ошибка — обращение к свойству Параметр у ячейки с типом «Текст», что приводит к исключению. Вторая — попытка найти параметры в уже выведенном табличном документе: там остались только значения, и имена параметров безвозвратно потеряны, если не сохранён исходный макет.
Третья группа ошибок связана с объединёнными ячейками: метод Область() с координатами внутри объединённого диапазона может вернуть не ту ячейку, которую ожидает разработчик. Для объединённых областей читайте свойства левой верхней ячейки диапазона. Также помните, что имена параметров регистронезависимы, но лучше выдерживать единый стиль написания, чтобы не путаться при отладке.
Как проверить результат
После реализации обхода убедитесь, что список найденных имён совпадает с параметрами, заданными в макете в конфигураторе. Откройте макет, выделите ячейку и посмотрите свойство «Параметр» в палитре свойств — оно должно точно совпадать со строкой, которую вернул код.
Для контроля заполнения удобно вывести в цикле пары «имя параметра — значение» до вывода области в документ. Если значение пустое, а параметр обязателен для печатной формы, это повод проверить источник данных, а не механизм чтения имён.
Что важно запомнить
Имя параметра читается через Область.Параметр только у ячеек с типом Параметр и только до вывода документа. Для полного списка параметров перебирайте ячейки макета в цикле, для шаблонов разбирайте текст ячейки.
Частые вопросы
Можно ли получить имя параметра из уже сформированной печатной формы?
Нет. При выводе области параметры заменяются значениями, и тип ячейки меняется на «Текст». Имена параметров сохраняются только в макете, поэтому анализировать нужно макет, а не результирующий документ.
Чем отличается свойство Параметр от коллекции Параметры?
Свойство Область.Параметр — это имя параметра конкретной ячейки (строка). Коллекция Параметры у табличного документа или области макета служит для установки значений параметров по имени перед выводом.
Как получить параметры из ячейки с типом «Шаблон»?
У такой ячейки нет единого свойства «Параметр». Нужно прочитать Область.Текст и извлечь из строки вставки вида [ИмяПараметра] — поиском подстроки или регулярным выражением.
Почему Область.Параметр выдаёт ошибку?
Свойство доступно только для ячеек с типом «Параметр». Проверьте Область.ТипЯчейки перед обращением. Также ошибка возможна, если область получена некорректно — например, по координатам внутри объединённого диапазона.
Можно ли найти параметр по имени, не перебирая все ячейки?
Штатного метода поиска по имени параметра нет. Варианты: заранее знать адрес ячейки, использовать именованные области макета или выполнить перебор с ограничением диапазона строк и колонок.
Работает ли этот подход на управляемых формах и на сервере?
Да. Перебор ячеек и чтение свойств табличного документа доступны и на сервере, и на толстом клиенте. На тонком клиенте возможности ограничены — серьёзную обработку табличных документов выполняйте в серверных процедурах.