Табличный макет печатной формы в конфигураторе 1С 8.3: от пустого листа до вывода из кода
Содержание
Чтобы добавить таблицу в макет 1С, создайте у объекта макет типа «Табличный документ» (вкладка Макеты → Добавить), нарисуйте в нём шапку и одну строку таблицы, задайте рамки и параметры ячеек, а затем дайте этим строкам имена через Таблица → Имена → Назначить имя. Сама таблица собирается при печати: код берёт именованную строку из макета и выводит её столько раз, сколько строк в документе.
Отсюда главное отличие от Excel. В макете не рисуют таблицу на все 50 позиций накладной. Рисуют одну строку-образец, а размножает её код. Механизм общий для платформы 8.3 и одинаков для Бухгалтерии, ЗУП, УТ и собственных конфигураций: меняется только объект, к которому привязан макет.
Где создать макет под таблицу в конфигураторе
Макет живёт либо внутри конкретного объекта, либо в общих макетах. Выбор зависит от того, кто будет его печатать.
| Где создать | Когда выбирают | Как получить из кода |
|---|---|---|
| Макет документа или справочника | Печатная форма одного объекта: накладная, акт, карточка | Документы.ИмяДокумента.ПолучитьМакет("Имя") |
| Макет обработки или отчёта | Внешняя печатная форма, своя обработка | ПолучитьМакет("Имя") в модуле объекта обработки |
| Общий макет | Бланк нужен нескольким объектам | ПолучитьОбщийМакет("Имя") |
Порядок для макета объекта:
- Откройте конфигурацию:
Конфигурация → Открыть конфигурацию. - В дереве найдите нужный документ или обработку, откройте окно редактирования объекта.
- Перейдите на вкладку
Макетыи нажмитеДобавить. - В конструкторе макета укажите имя латиницей или кириллицей без пробелов, например
ПФ_MXL_Накладная, и типТабличный документ. - Нажмите
Готово— откроется пустой лист с сеткой.
Для общего макета путь короче: в дереве конфигурации раскройте Общие → Общие макеты, щёлкните правой кнопкой и выберите Добавить.
Если бланк уже есть в Excel, откройте файл .xls в конфигураторе через Файл → Открыть, выделите ячейки и вставьте их в макет. Рамки, шрифты и ширины колонок обычно переносятся, после этого остаётся расставить параметры и имена областей.
Конфигурация должна быть снята с поддержки или поддержка должна разрешать изменения. Если объект типовой и закрыт, сначала прочитайте раздел про расширения ниже: править типовой макет напрямую — плохая идея.
Как вставить таблицу в макет: колонки, строки и рамки
Пустой макет — это лист с ячейками, как в табличном редакторе. Отдельной команды «вставить таблицу» нет: таблицу рисуют из ячеек.
Разметка колонок
Сначала решите, сколько колонок будет в таблице и какая у них ширина. Для накладной типичный набор такой:
- 🔢 № — узкая колонка, 4–5 символов;
- 📦 Товар — самая широкая, 35–45 символов;
- 📏 Количество и единица — по 8–10;
- 💰 Цена и сумма — по 12–14.
Ширину меняют перетаскиванием границы в заголовке колонки. Точное значение задают в свойствах колонки: выделите заголовок колонки и нажмите Alt+Enter, откроется палитра свойств с полем ширины.
Широкую колонку «Товар» удобнее сделать из нескольких узких, объединённых в строке. Тогда в шапке документа над таблицей можно разбить ту же ширину на другие поля без ломки сетки.
Строки таблицы
Для табличной части нужны минимум две строки макета:
- Шапка таблицы — названия колонок: «№», «Товар», «Кол-во», «Цена», «Сумма».
- Строка таблицы — одна строка с ячейками под значения.
Часто добавляют третью — подвал с итогом «Всего» и суммой прописью. Строки вставляют через контекстное меню заголовка строки или переносят выделение мышью.
Рамки
Выделите шапку и строку таблицы целиком, затем в палитре свойств (Alt+Enter) задайте линии границ: слева, сверху, справа и снизу. Для шапки обычно ставят сплошную линию потолще, для строк — тонкую. На панели редактора есть и кнопка рамок с готовыми вариантами: все границы, внешняя рамка, без рамки.
Рамку задают каждой строке-образцу отдельно, включая подвал — иначе после вывода таблица окажется без нижней линии или без боковых границ у итога.
Объединение ячеек и оформление шапки таблицы
Объединение нужно в двух местах: в широких колонках и в многоуровневой шапке, где над «Количество» и «Сумма» стоит общий заголовок «Отгружено».
Как объединить:
- Выделите прямоугольник ячеек.
- Выберите
Таблица → Объединитьили кнопку объединения на панели редактора. - Чтобы разбить обратно, выделите объединённую ячейку и выполните ту же команду ещё раз.
Что настроить в свойствах ячейки:
- 🔤 Шрифт — для шапки полужирный, размер 8–9; для строк обычный 8.
- ↔️ Горизонтальное положение — текст влево, числа вправо, номер по центру.
- ↕️ Вертикальное положение — по центру для шапки из двух строк.
- 📐 Размещение текста —
Переносить, если название товара может быть длинным. Иначе текст обрежется или уедет в соседнюю ячейку. - 🔢 Формат — для сумм
ЧДЦ=2, тогда 1500 выведется как1 500,00.
Объединяйте ячейки только внутри одной области. Если объединённая ячейка залезает одновременно на шапку таблицы и на строку-образец, при выводе областей по отдельности оформление развалится, а сама ячейка разрежется по границе области.
Высоту строки с переносом текста фиксировать не нужно. Если у строки не задана жёсткая высота, табличный документ растянет её под длинное наименование при выводе.
Параметры и шаблоны в ячейках табличного макета
Ячейка макета может содержать три вида заполнения. Это свойство Заполнение в палитре свойств.
| Заполнение | Что в ячейке | Пример |
|---|---|---|
| Текст | Постоянная надпись | «Наименование товара» |
| Параметр | Значение подставляется из кода целиком | Параметр Номенклатура |
| Шаблон | Текст со вставками в квадратных скобках | Накладная № [Номер] от [Дата] |
Для строки таблицы почти всегда выбирают Параметр. В поле Параметр пишут имя, по которому код обратится к ячейке: НомерСтроки, Номенклатура, Количество, Цена, Сумма.
Удобно называть параметры так же, как реквизиты табличной части документа. Тогда строку заполняет одна команда Параметры.Заполнить(СтрокаТЧ), без присвоения каждого поля вручную.
Шаблон уместен в шапке документа, где надпись и данные идут в одной ячейке. Частая ошибка: текст [Номер] набран в ячейке с заполнением Текст — тогда он так и напечатается со скобками.
Свойство Расшифровка ячейки задаёт параметр, по которому пользователь сможет открыть документ или товар двойным щелчком в готовой печатной форме. Для строки товаров туда кладут ссылку на номенклатуру.
Именованные области: как код находит таблицу в макете
Без имён код не отличит шапку от строки. Имя области — то, что связывает рисунок макета с программой.
Как назначить имя
- Выделите заголовки строк, которые входят в область: например, две строки шапки таблицы.
- Выберите
Таблица → Имена → Назначить имя. - Введите имя:
ШапкаТаблицы. Пробелы недопустимы. - Повторите для
Шапка,Строка,Подвал.
Имя появится слева от заголовков строк. Выделять нужно именно строки целиком, через их заголовки, а не диапазон ячеек: тогда область охватит всю ширину листа.
Вывод таблицы из кода
Пример функции для модуля менеджера документа. Она собирает печатную форму накладной с табличной частью Товары:
Функция ПечатьНакладной(ДокументСсылка) Экспорт
ТабДок = Новый ТабличныйДокумент;
ТабДок.КлючПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Накладная";
Макет = Документы.РасходнаяНакладная.ПолучитьМакет("ПФ_MXL_Накладная");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаблицы");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапка.Параметры.Номер = ДокументСсылка.Номер;
ОбластьШапка.Параметры.Дата = Формат(ДокументСсылка.Дата, "ДЛФ=D");
ТабДок.Вывести(ОбластьШапка);
ТабДок.Вывести(ОбластьШапкаТаблицы);
Для Каждого СтрокаТЧ Из ДокументСсылка.Товары Цикл
ОбластьСтрока.Параметры.Заполнить(СтрокаТЧ);
ОбластьСтрока.Параметры.Расшифровка = СтрокаТЧ.Номенклатура;
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
ОбластьПодвал.Параметры.Итого = ДокументСсылка.Товары.Итог("Сумма");
ТабДок.Вывести(ОбластьПодвал);
Возврат ТабДок;
КонецФункции
Заполнить(СтрокаТЧ) подставит все параметры, чьи имена совпали с колонками табличной части, включая НомерСтроки. Параметры, которым пары не нашлось, останутся пустыми, ошибки не будет.
Последняя строка цикла предполагает, что в свойстве Расшифровка ячейки «Товар» указан параметр Расшифровка. Если расшифровка не нужна, строку уберите.
Для реальной печатной формы данные лучше получить одним запросом, а не обращаться к реквизитам через точку от ссылки: на документе в 300 строк разница в скорости заметна.
Чтобы показать результат пользователю, на клиенте вызывают ТабДок.Показать() или передают документ в общую процедуру печати конфигурации, если она на БСП.
Таблица с переменным числом колонок
Иногда заранее неизвестно, сколько колонок будет: размеры одежды, месяцы периода, склады. Тогда имена дают не только строкам, но и колонкам.
- Выделите заголовки колонок с повторяемой колонкой и назначьте имя, например
Размер. - Колонки с наименованием товара назовите
Товар. - Строки по-прежнему называются
ШапкаТаблицыиСтрока.
Область на пересечении получают через вертикальную черту, а выводят вправо методом Присоединить:
ОбластьТовар = Макет.ПолучитьОбласть("Строка|Товар");
ОбластьРазмер = Макет.ПолучитьОбласть("Строка|Размер");
ОбластьТовар.Параметры.Номенклатура = СтрокаДанных.Номенклатура;
ТабДок.Вывести(ОбластьТовар);
Для Каждого Размер Из СписокРазмеров Цикл
ОбластьРазмер.Параметры.Количество = КоличествоПоРазмеру(СтрокаДанных, Размер);
ТабДок.Присоединить(ОбластьРазмер);
КонецЦикла;
Вывести начинает новую строку, Присоединить дописывает область справа от последней выведенной. Шапку таблицы собирают так же: сначала ШапкаТаблицы|Товар, затем в цикле ШапкаТаблицы|Размер.
Функцию КоличествоПоРазмеру вы пишете под свои данные: обычно это поиск в таблице значений, полученной запросом.
Поля страницы, ориентация и перенос шапки на новый лист
Настройки печати, сделанные в самом макете, не переносятся в новый табличный документ при выводе областей. Поля и ориентацию задают в коде, сразу после создания ТабДок:
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ТабДок.ПолеСлева = 10;
ТабДок.ПолеСправа = 10;
ТабДок.ПолеСверху = 10;
ТабДок.ПолеСнизу = 10;
ТабДок.АвтоМасштаб = Истина;
Поля задаются в миллиметрах. АвтоМасштаб подгоняет ширину таблицы под ширину листа: если сумма колонок шире страницы, форма уменьшится, а не разрежется на два листа по вертикали.
КлючПараметровПечати из примера выше запоминает настройки, которые пользователь сам поменял в окне параметров страницы. В следующий раз форма откроется с ними. Ключ должен быть уникальным для каждой печатной формы.
Повтор шапки таблицы на каждом листе
Длинная накладная уйдёт на второй лист, и без шапки читать её неудобно. Самый надёжный способ — проверять перед выводом строки, поместится ли она вместе с подвалом:
МассивПроверки = Новый Массив;
МассивПроверки.Добавить(ОбластьСтрока);
Если Не ТабДок.ПроверитьВывод(МассивПроверки) Тогда
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ОбластьШапкаТаблицы);
КонецЕсли;
ТабДок.Вывести(ОбластьСтрока);
Этот фрагмент ставят внутрь цикла вместо простого ТабДок.Вывести(ОбластьСтрока). Чтобы подвал не остался один на последней странице, перед его выводом сделайте такую же проверку для пары «последняя строка + подвал».
Результат проверяйте не в макете, а в готовой форме через Файл → Предварительный просмотр: разрывы страниц видны только там.
Если макет типовой: расширение и пользовательский режим
В типовых конфигурациях на поддержке прямую правку макета лучше не делать: при обновлении придётся сравнивать и объединять изменения вручную. Есть два безопасных пути.
Изменение в пользовательском режиме. В конфигурациях на БСП, например в Бухгалтерии 3.0, откройте Администрирование → Печатные формы, отчеты и обработки → Макеты печатных форм. Найдите макет, откройте его на редактирование, добавьте колонку или поменяйте оформление. Изменённый макет хранится в базе отдельно и переживает обновление конфигурации
.
Ограничение этого пути: имена областей и параметров трогать нельзя. Код типовой формы ищет их по старым именам, и новая колонка с параметром, которого код не знает, останется пустой.
Расширение конфигурации
. Если нужна новая колонка с данными, которых нет в типовом коде, делают расширение: заимствуют объект, добавляют в расширение свой макет с таблицей и свою процедуру печати. Расширения появились в платформе 8.3.6. Загрузка файла .cfe и применение изменений — отдельные шаги: после загрузки расширение нужно обновить в базе.
Внешняя печатная форма. Третий вариант для БСП — внешняя обработка с макетом, подключённая через Дополнительные отчеты и обработки в разделе Администрирование. Конфигурацию при этом не меняют вообще.
Ошибки при выводе таблицы из макета
Большинство проблем видно сразу при первой печати. Найдите свой симптом:
Отдельно про изменения макета, которые «не видны». Если вы поправили макет, а печать выводит старый вид, проверьте два места. Первое: изменения конфигурации не сохранены в базу (F7 — обновить конфигурацию базы данных). Второе: в конфигурации на БСП для этой формы уже есть изменённый пользовательский макет, и он имеет приоритет. Его сбрасывают в списке Макеты печатных форм командой возврата к стандартному макету.