Новая колонка в макете печатной формы 1С: от конфигуратора до кода
Содержание
Заказчик просит добавить в счёт на оплату колонку «Артикул», а в макете уже девять колонок, и вставить десятую куда попало нельзя: поедут объединённые ячейки, а форма перестанет влезать в А4. Колонка в макете 1С добавляется в конфигураторе: открываете макет, вставляете колонку в нужное место, правите шапку, строку данных и итоги, затем дописываете параметр в модуле, который заполняет форму.
Одной вставкой в табличном документе дело не заканчивается. Если не заполнить параметр в коде, новая колонка останется пустой. Если не продумать ширину и объединения, печатная форма разъедется. Ниже порядок, который не оставляет хвостов.
Прежде чем открывать макет: где он лежит и можно ли его править
Макет печатной формы живёт в дереве конфигурации у объекта, например у документа: Документы → РеализацияТоваровУслуг → Макеты. Общие макеты лежат в ветке Общие → Общие макеты. Откройте конфигуратор от имени пользователя с правами администратора, найдите объект и дважды щёлкните по макету.
Типовая конфигурация стоит на поддержке, и макет в ней закрыт для правки. Есть три пути:
| Способ | Когда подходит | Цена |
|---|---|---|
| Расширение конфигурации | Нужно сохранить обновляемость типовой | Макет копируется в расширение, дальше правите копию |
| Снять макет с поддержки | Конфигурация уже сильно доработана | Макет перестанет обновляться автоматически |
| Внешняя печатная форма | Правка нужна одной базе, менять конфигурацию нельзя | Форму подключают через дополнительные отчёты и обработки |
Для типовых бухгалтерских конфигураций (БП 3.0, ЗУП 3.1, УТ 11) лучше расширение: после обновления релиза ваша колонка не пропадёт. Расширения появились в платформе 8.3.6, так что на любой современной платформе (8.3.2x) способ доступен.
Правьте разработческую копию базы. Если изменили рабочую базу, сначала сделайте выгрузку .dt.
Подготовка: что посмотреть в макете до правки
Откройте макет и включите просмотр имён областей: в меню Таблица найдите пункт, который показывает именованные области. Слева от строк появятся «скобки» с названиями, например Шапка, Строка, Подвал.
Запишите на листе, что видите:
- Какие области есть и как они называются.
- Какие из них содержат колонки с товарами, а какие работают на всю ширину страницы (заголовок, реквизиты, подписи).
- Есть ли в шапке таблицы объединённые ячейки.
- Где стоят параметры. Параметры в ячейке помечены, а в свойствах ячейки у них заполнено поле «Параметр» и тип заполнения.
Раздел про именование областей ниже важен именно потому, что новая колонка обычно затрагивает несколько областей сразу: шапку таблицы, строку данных и подвал с итогами.
Вставка колонки в табличный документ
Колонка в макете вставляется как в обычной таблице. Щёлкните правой кнопкой по номеру колонки сверху (в верхней строке с номерами колонок) и выберите пункт, который вставляет колонку. Если пункта в контекстном меню не видно, посмотрите в главном меню в разделе Таблица: там собраны команды для строк и колонок.
Как поступить с положением:
- ➡️ новая колонка вставляется слева от выделенной, поэтому выделяйте колонку, перед которой нужна новая;
- ➡️ колонка вставляется целиком, на всю высоту макета, включая шапку, подвал и реквизиты над таблицей;
- ➡️ ячейки справа сдвигаются, ширина остальных колонок не меняется.
Последний пункт и есть главная ловушка. Печатная форма, у которой общая ширина уже заполняет лист, после вставки уезжает за правый край. Оцените запас заранее.
Считаем ширину
Область печати А4 в книжной ориентации даёт примерно 190 мм при стандартных полях. Допустим, в счёте колонки по ширине: № 10 мм, наименование 85 мм, количество 20 мм, единица 15 мм, цена 30 мм, сумма 30 мм. Итого 10 + 85 + 20 + 15 + 30 + 30 = 190 мм, запаса нет.
Хотите добавить колонку «Артикул» шириной 25 мм? Заберите их у наименования: 85 − 25 = 60 мм. Сумма вернулась к 190 мм: 10 + 60 + 25 + 20 + 15 + 30 + 30 = 190.
Ширину колонки задают через свойства колонки или командой изменения ширины в контекстном меню. Другой вариант: перейти на альбомную ориентацию. Это настраивается в свойствах макета, там же задаются поля.
Шапка, строка данных, итоги: правим все области
Теперь колонка есть, но она пустая и в каждой области выглядит по-своему. Пройдитесь по областям сверху вниз.
Шапка таблицы
Впишите заголовок «Артикул» в ячейку новой колонки. Скопируйте оформление соседней ячейки шапки: границы, шрифт, выравнивание, цвет фона. Проще всего скопировать соседнюю ячейку целиком и заменить текст.
Если над шапкой есть общая объединённая ячейка (например, «Товары»), проверьте, что она охватывает и новую колонку. Объединение при вставке внутрь диапазона обычно растягивается само, а вставка у края объединения может его не захватить.
Строка данных
Здесь живёт параметр. Выделите ячейку новой колонки в строке данных. Откройте свойства ячейки (клавиша Alt+Enter или команда Свойства в контекстном меню) и на вкладке «Макет» установите заполнение Параметр. В поле текста введите имя параметра, например Артикул.
Имя должно совпадать с тем, что будете писать в коде, вплоть до регистра букв, поэтому не придумывайте длинных названий с пробелами.
Дополнительно настройте:
- 🔹 выравнивание текста по левому краю для строковых данных, по правому для чисел;
- 🔹 перенос по словам, если артикулы длинные;
- 🔹 те же границы, что у соседей.
Подвал и итоги
Если в подвале есть строка «Итого», новая колонка остаётся в ней пустой. Это нормально для текстовой колонки. Для числовой, например «Скидка», внесите параметр или формулу для суммы. Объединённые ячейки подвала («Итого к оплате») должны занимать всю ширину таблицы, поэтому растяните их на новую колонку.
После правки областей посмотрите макет в режиме предварительного просмотра, не закрывая окно: в конфигураторе справа есть переключатель между режимом правки и просмотром.
Имена областей: что нужно, чтобы код нашёл вашу колонку
Код достаёт из макета не отдельные ячейки, а именованные области. Если вы вставляли колонку внутрь уже существующей области, имя сохранится, потому что область растянется на новую ширину. Проверьте вручную: выделите строку данных, выберите команду присвоения имени области (она в меню Таблица → Имена) и посмотрите, под каким именем область числится.
Чаще всего в типовых макетах три области: шапка, строка и подвал. Имена у разработчиков разные, и подглядеть их можно прямо в модуле менеджера объекта: найдите вызов ПолучитьОбласть("…").
Если вы добавляете колонку не внутрь области, а дополнительную область под таблицей (например, строку «Артикулы набора»), её нужно создать:
- Выделите прямоугольник нужных строк на всю ширину макета.
- Присвойте имя через меню
Таблица → Имена. - Используйте это же имя в
ПолучитьОбласть.
Область, у которой выделены не все колонки, при выводе вставится кусочком и сдвинет остальные части формы. Выделяйте строки целиком.
Заполнение новой колонки в модуле
Код печатной формы живёт в модуле менеджера документа или в общем модуле (в БСП это обычно процедура Печать и вызов ПечатьСчета, СформироватьПечатнуюФорму). Найдите место, где выводится строка данных. Типичный фрагмент выглядит так:
Макет = Документы.СчетНаОплату.ПолучитьМакет("Счет");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрокаТЧ Из Выборка Цикл
ОбластьСтрока.Параметры.Номенклатура = СтрокаТЧ.Номенклатура;
ОбластьСтрока.Параметры.Количество = СтрокаТЧ.Количество;
ОбластьСтрока.Параметры.Цена = СтрокаТЧ.Цена;
ОбластьСтрока.Параметры.Сумма = СтрокаТЧ.Сумма;
// новая колонка
ОбластьСтрока.Параметры.Артикул = СтрокаТЧ.Артикул;
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
Главное, чтобы реквизит Артикул попал в выборку. Если данные берёте запросом, добавьте поле в ВЫБРАТЬ и привязку к справочнику номенклатуры:
ВЫБРАТЬ
Товары.Номенклатура КАК Номенклатура,
Товары.Номенклатура.Артикул КАК Артикул,
Товары.Количество КАК Количество
ИЗ
Документ.СчетНаОплату.Товары КАК Товары
ГДЕ
Товары.Ссылка = &Ссылка
Если в справочнике реквизит называется иначе (в типовых конфигурациях он есть, но название проверьте в конфигураторе), подставьте своё имя. Обращение через точку работает, но на больших документах быстрее соединить таблицы явно.
Расширение конфигурации
не позволяет просто дописать строку в чужую процедуру. Пользуйтесь перехватом: в расширении создайте расширяемую процедуру и вставьте нужные строки через &После или &Вместо. Параметр новой колонки при этом заполняется после выполнения штатного кода.
Не правьте типовой модуль без расширения, если конфигурация стоит на поддержке: при следующем обновлении правка попадёт в список конфликтов.
Колонка, которая нужна не всем: условный вывод
Иногда колонка нужна только части пользователей: «Артикул» одним контрагентам, «Скидка» другим. Править один макет под каждый случай не нужно. Есть два рабочих приёма.
Две области вместо одной. Сделайте в макете две строки данных: Строка и СтрокаСАртикулом. Колонка присутствует в обеих, но во второй заполнена параметром. В коде выбираете область по условию:
Если ПечататьАртикул Тогда
ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаСАртикулом");
Иначе
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
КонецЕсли;
Недостаток очевиден: шапка и подвал тоже должны существовать в двух вариантах, иначе колонки не сойдутся. Тут помогает правило: сколько вариантов строки, столько вариантов шапки.
Второй макет. Если отличий много, заведите отдельный макет и в команде печати предложите выбор. Формы будут жить независимо, и правка одной не заденет другую. Минус: любое будущее изменение придётся вносить дважды.
Выбирайте первый приём, когда отличается одна колонка, и второй, когда различаются шапка, подвал и порядок колонок.
Что делать с высотой строки
Длинный артикул или наименование переносится на вторую строку только при включённом переносе по словам. Высота строки при выводе может подогнаться автоматически, если в свойствах строки включена автоподбор высоты. Проверьте это на самой длинной номенклатуре из базы, а не на коротком тестовом примере: форма с красивой «Болт М6» не гарантирует, что «Кабель силовой медный экранированный» поместится.
Для ячеек с числами включите нужный формат: в свойствах ячейки задаётся формат отображения, например два знака после запятой для цены и целое число для количества штучных товаров. Так столбец выглядит ровно, а значения не «прыгают».
Проверка результата и отладка
Печатная форма собирается только при запуске, поэтому после правок запустите 1С в режиме отладки (F5 в конфигураторе) и сформируйте документ. Что проверить:
- Колонка видна, заголовок на месте, граничные линии не рвутся.
- Значения в строках совпадают с карточкой номенклатуры.
- Форма не уехала за поля: проверьте в предварительном просмотре.
- Итоговая строка и подписи растянуты на всю ширину.
- Многостраничный документ: шапка таблицы повторяется на каждой странице, если так задумано.
Если колонка пустая, поставьте точку останова на строке ТабличныйДокумент.Вывести(ОбластьСтрока) и посмотрите значение параметра. Пусто там? Значит, проблема в выборке или в имени реквизита. Значение есть, но в форме пусто? Тогда не совпало имя параметра в ячейке: проверьте регистр и лишние пробелы.
При обращении к несуществующему параметру платформа выдаёт ошибку исполнения, поэтому опечатка в имени в коде заметна сразу, а вот опечатка в имени ячейки молчит.
Если не помогло
- 🔸 Проверьте, не подключён ли к документу другой макет (бывает несколько вариантов формы: проверьте, какой именно открыт пользователем).
- 🔸 Убедитесь, что измененный макет попал в базу: после правки в конфигураторе нажмите
F7(обновление конфигурации базы данных), если работаете в расширении, загрузите его в базу. - 🔸 Закройте форму документа и сформируйте печать заново: старый результат на экране сам не обновится.