Новая колонка в макете печатной формы 1С: от конфигуратора до кода

· 9 мин

Содержание

Заказчик просит добавить в счёт на оплату колонку «Артикул», а в макете уже девять колонок, и вставить десятую куда попало нельзя: поедут объединённые ячейки, а форма перестанет влезать в А4. Колонка в макете 1С добавляется в конфигураторе: открываете макет, вставляете колонку в нужное место, правите шапку, строку данных и итоги, затем дописываете параметр в модуле, который заполняет форму.

Одной вставкой в табличном документе дело не заканчивается. Если не заполнить параметр в коде, новая колонка останется пустой. Если не продумать ширину и объединения, печатная форма разъедется. Ниже порядок, который не оставляет хвостов.

Прежде чем открывать макет: где он лежит и можно ли его править

Макет печатной формы живёт в дереве конфигурации у объекта, например у документа: Документы → РеализацияТоваровУслуг → Макеты. Общие макеты лежат в ветке Общие → Общие макеты. Откройте конфигуратор от имени пользователя с правами администратора, найдите объект и дважды щёлкните по макету.

Типовая конфигурация стоит на поддержке, и макет в ней закрыт для правки. Есть три пути:

СпособКогда подходитЦена
Расширение конфигурацииНужно сохранить обновляемость типовойМакет копируется в расширение, дальше правите копию
Снять макет с поддержкиКонфигурация уже сильно доработанаМакет перестанет обновляться автоматически
Внешняя печатная формаПравка нужна одной базе, менять конфигурацию нельзяФорму подключают через дополнительные отчёты и обработки

Для типовых бухгалтерских конфигураций (БП 3.0, ЗУП 3.1, УТ 11) лучше расширение: после обновления релиза ваша колонка не пропадёт. Расширения появились в платформе 8.3.6, так что на любой современной платформе (8.3.2x) способ доступен.

Правьте разработческую копию базы. Если изменили рабочую базу, сначала сделайте выгрузку .dt.

Подготовка: что посмотреть в макете до правки

Откройте макет и включите просмотр имён областей: в меню Таблица найдите пункт, который показывает именованные области. Слева от строк появятся «скобки» с названиями, например Шапка, Строка, Подвал.

Запишите на листе, что видите:

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

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

Вставка колонки в табличный документ

Колонка в макете вставляется как в обычной таблице. Щёлкните правой кнопкой по номеру колонки сверху (в верхней строке с номерами колонок) и выберите пункт, который вставляет колонку. Если пункта в контекстном меню не видно, посмотрите в главном меню в разделе Таблица: там собраны команды для строк и колонок.

Как поступить с положением:

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

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

Считаем ширину

Область печати А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 или команда Свойства в контекстном меню) и на вкладке «Макет» установите заполнение Параметр. В поле текста введите имя параметра, например Артикул.

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

Дополнительно настройте:

  • 🔹 выравнивание текста по левому краю для строковых данных, по правому для чисел;
  • 🔹 перенос по словам, если артикулы длинные;
  • 🔹 те же границы, что у соседей.

Подвал и итоги

Если в подвале есть строка «Итого», новая колонка остаётся в ней пустой. Это нормально для текстовой колонки. Для числовой, например «Скидка», внесите параметр или формулу для суммы. Объединённые ячейки подвала («Итого к оплате») должны занимать всю ширину таблицы, поэтому растяните их на новую колонку.

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

Имена областей: что нужно, чтобы код нашёл вашу колонку

Код достаёт из макета не отдельные ячейки, а именованные области. Если вы вставляли колонку внутрь уже существующей области, имя сохранится, потому что область растянется на новую ширину. Проверьте вручную: выделите строку данных, выберите команду присвоения имени области (она в меню Таблица → Имена) и посмотрите, под каким именем область числится.

Чаще всего в типовых макетах три области: шапка, строка и подвал. Имена у разработчиков разные, и подглядеть их можно прямо в модуле менеджера объекта: найдите вызов ПолучитьОбласть("…").

Если вы добавляете колонку не внутрь области, а дополнительную область под таблицей (например, строку «Артикулы набора»), её нужно создать:

  1. Выделите прямоугольник нужных строк на всю ширину макета.
  2. Присвойте имя через меню Таблица → Имена.
  3. Используйте это же имя в ПолучитьОбласть.

Область, у которой выделены не все колонки, при выводе вставится кусочком и сдвинет остальные части формы. Выделяйте строки целиком.

Заполнение новой колонки в модуле

Код печатной формы живёт в модуле менеджера документа или в общем модуле (в БСП это обычно процедура Печать и вызов ПечатьСчета, СформироватьПечатнуюФорму). Найдите место, где выводится строка данных. Типичный фрагмент выглядит так:

Макет = Документы.СчетНаОплату.ПолучитьМакет("Счет");
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");

Для Каждого СтрокаТЧ Из Выборка Цикл
    ОбластьСтрока.Параметры.Номенклатура = СтрокаТЧ.Номенклатура;
    ОбластьСтрока.Параметры.Количество   = СтрокаТЧ.Количество;
    ОбластьСтрока.Параметры.Цена         = СтрокаТЧ.Цена;
    ОбластьСтрока.Параметры.Сумма        = СтрокаТЧ.Сумма;
    // новая колонка
    ОбластьСтрока.Параметры.Артикул      = СтрокаТЧ.Артикул;
    ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;

Главное, чтобы реквизит Артикул попал в выборку. Если данные берёте запросом, добавьте поле в ВЫБРАТЬ и привязку к справочнику номенклатуры:

ВЫБРАТЬ
    Товары.Номенклатура КАК Номенклатура,
    Товары.Номенклатура.Артикул КАК Артикул,
    Товары.Количество КАК Количество
ИЗ
    Документ.СчетНаОплату.Товары КАК Товары
ГДЕ
    Товары.Ссылка = &Ссылка

Если в справочнике реквизит называется иначе (в типовых конфигурациях он есть, но название проверьте в конфигураторе), подставьте своё имя. Обращение через точку работает, но на больших документах быстрее соединить таблицы явно.

Расширение конфигурации не позволяет просто дописать строку в чужую процедуру. Пользуйтесь перехватом: в расширении создайте расширяемую процедуру и вставьте нужные строки через &После или &Вместо. Параметр новой колонки при этом заполняется после выполнения штатного кода.

Не правьте типовой модуль без расширения, если конфигурация стоит на поддержке: при следующем обновлении правка попадёт в список конфликтов.

Колонка, которая нужна не всем: условный вывод

Иногда колонка нужна только части пользователей: «Артикул» одним контрагентам, «Скидка» другим. Править один макет под каждый случай не нужно. Есть два рабочих приёма.

Две области вместо одной. Сделайте в макете две строки данных: Строка и СтрокаСАртикулом. Колонка присутствует в обеих, но во второй заполнена параметром. В коде выбираете область по условию:

Если ПечататьАртикул Тогда
    ОбластьСтрока = Макет.ПолучитьОбласть("СтрокаСАртикулом");
Иначе
    ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
КонецЕсли;

Недостаток очевиден: шапка и подвал тоже должны существовать в двух вариантах, иначе колонки не сойдутся. Тут помогает правило: сколько вариантов строки, столько вариантов шапки.

Второй макет. Если отличий много, заведите отдельный макет и в команде печати предложите выбор. Формы будут жить независимо, и правка одной не заденет другую. Минус: любое будущее изменение придётся вносить дважды.

Выбирайте первый приём, когда отличается одна колонка, и второй, когда различаются шапка, подвал и порядок колонок.

Что делать с высотой строки

Длинный артикул или наименование переносится на вторую строку только при включённом переносе по словам. Высота строки при выводе может подогнаться автоматически, если в свойствах строки включена автоподбор высоты. Проверьте это на самой длинной номенклатуре из базы, а не на коротком тестовом примере: форма с красивой «Болт М6» не гарантирует, что «Кабель силовой медный экранированный» поместится.

Для ячеек с числами включите нужный формат: в свойствах ячейки задаётся формат отображения, например два знака после запятой для цены и целое число для количества штучных товаров. Так столбец выглядит ровно, а значения не «прыгают».

Проверка результата и отладка

Печатная форма собирается только при запуске, поэтому после правок запустите 1С в режиме отладки (F5 в конфигураторе) и сформируйте документ. Что проверить:

  1. Колонка видна, заголовок на месте, граничные линии не рвутся.
  2. Значения в строках совпадают с карточкой номенклатуры.
  3. Форма не уехала за поля: проверьте в предварительном просмотре.
  4. Итоговая строка и подписи растянуты на всю ширину.
  5. Многостраничный документ: шапка таблицы повторяется на каждой странице, если так задумано.

Если колонка пустая, поставьте точку останова на строке ТабличныйДокумент.Вывести(ОбластьСтрока) и посмотрите значение параметра. Пусто там? Значит, проблема в выборке или в имени реквизита. Значение есть, но в форме пусто? Тогда не совпало имя параметра в ячейке: проверьте регистр и лишние пробелы.

При обращении к несуществующему параметру платформа выдаёт ошибку исполнения, поэтому опечатка в имени в коде заметна сразу, а вот опечатка в имени ячейки молчит.

Если не помогло

  • 🔸 Проверьте, не подключён ли к документу другой макет (бывает несколько вариантов формы: проверьте, какой именно открыт пользователем).
  • 🔸 Убедитесь, что измененный макет попал в базу: после правки в конфигураторе нажмите F7 (обновление конфигурации базы данных), если работаете в расширении, загрузите его в базу.
  • 🔸 Закройте форму документа и сформируйте печать заново: старый результат на экране сам не обновится.
Перед передачей изменения в рабочую базу
Выполнено: 0 / 6

Частые вопросы

Можно ли добавить колонку без программирования?
Только если параметр можно заполнить уже существующими данными. Для нового поля нужен хотя бы небольшой фрагмент кода, который передаёт значение в область.
Почему колонка вставилась, а форма не помещается на лист?
Вставка не уменьшает остальные колонки. Пересчитайте ширину, сузьте самую широкую колонку (обычно наименование) или поверните страницу в альбомную.
Как добавить колонку в макет, который открывается только на чтение?
Макет принадлежит конфигурации на поддержке. Используйте расширение: скопируйте макет туда, внесите правки и загрузите расширение в базу.
Нужно ли менять макет для всех печатных форм сразу?
Нет, макеты независимы. Колонка в счёте не появится в накладной, пока вы не сделаете то же самое во втором макете.
Что делать, если реквизита в справочнике нет?
Добавьте реквизит в справочник, заполните его для номенклатуры и только потом подключайте к запросу. Расширение позволяет добавить реквизит к типовому справочнику без правки типовой конфигурации.