Как программно изменить имя параметра в макете 1С

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

При разработке универсальных отчетов или сложных печатных форм программисты 1С часто сталкиваются с ситуацией, когда имена полей в результате запроса не совпадают с именами параметров, заданными в макете (Spreadsheet Document). Традиционный подход заставляет нас либо переписывать запрос, используя псевдонимы КАК, либо вручную обходить коллекцию параметров, что увеличивает объем кода. Однако существует способ сделать это элегантнее — программно изменить само имя параметра в ячейке макета перед его заполнением.

В этой статье мы подробно разберем, как реализовать этот механизм, рассмотрим технические нюансы работы с объектом ОбластьЯчеекТабличногоДокумента и выясним, в каких случаях этот метод действительно эффективен.

Основа решения: свойство Параметр

Многие разработчики привыкли воспринимать макет как статичную структуру, где параметры жестко заданы на этапе проектирования. На самом деле, каждая ячейка или область ячеек в 1С является объектом, свойства которого доступны для изменения во время выполнения программного кода. Ключевым свойством для нашей задачи является свойство Параметр объекта ОбластьЯчеекТабличногоДокумента.

Рассмотрим ситуацию: у нас есть область строки, в которой ячейка имеет имя параметра Парам1. Мы хотим изменить его на Артикул, чтобы метод Заполнить() автоматически подтянул данные из выборки запроса, где поле называется именно так. Для этого достаточно обратиться к конкретной ячейке и перезаписать её имя.

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

Пошаговый алгоритм реализации

Давайте разберем по шагам, как программно переименовать параметры в динамическом цикле. Представим, что мы формируем таблицу, где колонки заранее неизвестны.

1. Получение области макета. Сначала мы получаем нужную нам строку или ячейку из исходного макета.

2. Доступ к конкретной ячейке. Мы можем обратиться к ячейке по её координатам внутри области.

3. Изменение имени. Присваиваем новое строковое значение свойству Параметр.

Проанализируем пример кода:


// Получаем макет и нужную область
Макет = ПолучитьМакет("МойМакет");
ОбластьСтроки = Макет.ПолучитьОбласть("Строка");

// Допустим, нам нужно переименовать параметр в первой колонке (R1C1 в рамках области)
// Убедимся, что тип заполнения установлен правильно
Ячейка = ОбластьСтроки.Область(1, 1, 1, 1);
Ячейка.ТипЗаполнения = ТипЗаполненияТабличногоДокумента.Параметр;
Ячейка.Параметр = "НовоеИмяИзЗапроса";

// Теперь метод Заполнить() увидит новое имя
ОбластьСтроки.Параметры.Заполнить(ВыборкаЗапроса);

Массовое переименование параметров в цикле

В универсальных отчетах часто требуется заменить стандартные заглушки (например, Парам1, Парам2, Парам3) на реальные имена полей из схемы компоновки или динамического текста запроса. Рассмотрим ситуацию, когда мы перебираем колонки таблицы значений и хотим «подложить» их имена в макет.

Выясним, как сделать это для целой строки:


Для Ном = 1 По СписокНужныхИмен.Количество() Цикл
    ТекущееИмя = СписокНужныхИмен[Ном-1].Значение;
    
    // Обращаемся к ячейке по индексу колонки
    Ячейка = ОбластьСтроки.Область(1, Ном);
    
    // Устанавливаем признак параметра
    Ячейка.ТипЗаполнения = ТипЗаполненияТабличногоДокумента.Параметр;
    
    // Назначаем имя параметра
    Ячейка.Параметр = ТекущееИмя;
КонецЦикла;

// После подготовки области заполняем её данными из структуры или выборки
ОбластьСтроки.Параметры.Заполнить(ДанныеСтроки);
ТабДок.Вывести(ОбластьСтроки);

Работа с типами заполнения: Параметр vs Шаблон

Необходимо четко разделять, как платформа 1С обрабатывает ячейки. Проанализируем различия:

  1. Параметр: Содержимое ячейки полностью заменяется значением. Свойство Параметр определяет ключ, по которому данные ищутся в структуре. Программная замена этого ключа работает идеально через свойство .Параметр.
  2. Шаблон: Позволяет комбинировать статичный текст и переменные, например: "Остаток: [Количество] шт.". Здесь свойство .Параметр не используется напрямую для управления именами внутри квадратных скобок. Если вам нужно программно изменить "Количество" на "ОстатокНаСкладе" внутри шаблона, вам придется работать напрямую со свойством .Текст, используя строковые функции типа СтрЗаменить().

Когда стоит использовать этот подход?

Хотя возможность программного переименования существует, важно понимать её уместность. Рассмотрим ситуации:

Полезно:

Не рекомендуется:

Альтернативный метод: Использование структуры-посредника

Если ваша задача — сопоставить разные имена полей запроса и макета, часто более «чистым» решением с точки зрения архитектуры 1С является использование промежуточной структуры. Вместо того чтобы менять макет, мы меняем данные.

Посмотрим на пример такого подхода:


ДанныеДляЗаполнения = Новый Структура;
ДанныеДляЗаполнения.Вставить("Парам1", Выборка.Артикул);
ДанныеДляЗаполнения.Вставить("Парам2", Выборка.Номенклатура);

ОбластьСтроки.Параметры.Заполнить(ДанныеДляЗаполнения);

Этот метод не требует изменения свойств ячеек макета и работает быстрее, так как не вызывает пересчета структуры табличного документа в памяти. Однако он требует ручного сопоставления полей, что не всегда удобно в универсальных решениях.

Заключение

Мы выяснили, что программно изменить имя параметра в макете 1С возможно и технически это реализуется через свойство Параметр объекта ОбластьЯчеекТабличногоДокумента. Этот инструмент дает разработчику гибкость при создании динамических печатных форм, позволяя буквально «на лету» перенастраивать макет под структуру входящих данных. Главное — помнить про правильную установку ТипЗаполнения и использовать этот метод там, где он действительно дает преимущество в лаконичности кода.

← На главную