Работа с печатными формами в системе 1С:Предприятие часто требует индивидуального подхода, так как стандартные отчеты не всегда покрывают специфические потребности бизнеса. Одной из самых распространенных задач при доработке конфигураций является необходимость вывести дополнительную информацию в табличную часть документа. Это может быть новая графа с расчетным коэффициентом, комментарий к товару или итоговая строка с особыми условиями оплаты.

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

В данной статье мы детально разберем алгоритм действий для платформ версии 8.3 и выше. Вы узнаете, как правильно редактировать внешний макет, как обращаться к областям макета в коде и как корректно формировать новые строки динамически. Рассмотрим нюансы работы с ТабличныйДокумент и особенности вывода данных в разных форматах, таких как PDF или Excel.

Анализ структуры существующего макета

Прежде чем вносить какие-либо изменения, необходимо понять, как устроена текущая печатная форма. В большинстве типовых конфигураций, таких как 1С:Бухгалтерия или 1С:Управление торговлей, макеты хранятся непосредственно в модуле объекта или во внешних обработках. Откройте форму документа в режиме конфигуратора и найдите кнопку печати.

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

Важно определить тип макета. Это может быть макет компоновки данных (СКД) или обычный табличный макет. Для добавления простой строки чаще всего работают именно с табличными макетами, где структура жестко задана ячейками. Табличный макет позволяет явно указывать координаты ячеек и объединять их, что дает полный контроль над внешним видом.

⚠️ Внимание: Перед началом редактирования обязательно создайте резервную копию конфигурации или выгрузите объект в файл. Ошибки в макете могут привести к невозможности печати документов во всей базе.

Если макет внешний, найдите соответствующий файл на диске или в хранилище конфигурации. Если встроенный, дважды кликните по нему в дереве метаданных. Вы увидите сетку ячеек, где некоторые области выделены цветом. Эти области называются именованными областями и служат шаблонами для строк.

Редактирование макета и создание новой области

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

Выделите строку, которую вы хотите продублировать или изменить. Скопируйте её содержимое в новую строку ниже или в свободную область макета. Теперь этой новой области необходимо присвоить уникальное имя. Имена областей в 1С начинаются с символа решетки #.

  • 📐 Выделите диапазон ячеек новой строки в конструкторе макетов.
  • 🏷️ В свойствах области задайте имя, например #СтрокаДополнительная.
  • 🔗 Убедитесь, что поля в ячейках соответствуют именам параметров, которые вы планируете передавать из кода.
  • 💾 Сохраните изменения в макете и закройте редактор.

Именование областей — критически важный этап. Если вы забудете добавить символ # в начале имени, система не распознает это как именованную область, и код не сможет к ней обратиться. Также следите за тем, чтобы имена не дублировались внутри одного макета, иначе возникнет конфликт при выборе шаблона.

Внутри ячеек новой строки вы можете использовать параметры вывода в фигурных скобках, например {НаименованиеТовара}. Однако, если строка служебная (например, "Итого с НДС"), там могут быть статичные значения. Параметры макета позволяют подставлять переменные значения прямо в текст ячейки без дополнительного программирования логики замещения.

Модификация программного кода обработки печати

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

В начале процедуры происходит получение объекта макета. Вам нужно добавить логику выбора новой области. Для этого используется метод Область объекта макета. Вы должны получить ссылку на вашу newly created область #СтрокаДополнительная.

Макет = ПолучитМакет("ОсновнойМакет");

ОбластьДанных = Макет.Область("СтрокаТовара");

ОбластьДоп = Макет.Область("СтрокаДополнительная");

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

Обратите внимание на порядок вывода. Если новая строка должна идти после каждой основной строки товаров, вызов Вывести делается внутри цикла. Если это итоговая строка в конце документа, то вызов выносится за пределы цикла обхода товаров. Логика вывода определяет последовательность строк в итоговом документе.

⚠️ Внимание: Интерфейс и методы работы с макетами могут незначительно отличаться в разных версиях платформы 1С. Всегда сверяйтесь с синтаксическим помощником вашей конкретной версии конфигуратора.

📊 Какой тип макета вы используете чаще всего?
Табличный макет
Макет СКД
Внешняя обработка
HTML-шаблон

Работа с параметрами и заполнение ячеек

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

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

Параметр в макете Тип данных Источник значения Пример значения
{НомерСтроки} Число Счетчик цикла 1, 2, 3...
{Наименование} Строка Справочник.Номенклатура "Товар А"
{Сумма} Число Регистр накопления 1500.00
{СтавкаНДС} Строка Константа или поле "20%"

В коде это выглядит как присваивание значений полям структуры. Например: Параметры.Наименование = ТекущаяСтрока.Товар;. После заполнения структуры вызывается метод Макет.Вывести(Область, Параметры). Если параметры не передать, в ячейках останутся имена полей в фигурных скобках или пустота.

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

Как передать картинку в макет?

Для вывода изображения в печатную форму необходимо использовать тип значения "Картинка". Поместите файл картинки в параметр макета программно: Параметры.Логотип = Картинка.Файл("ПутьКФайлу");. В макете в ячейке укажите {Логотип}.

Особенности вывода итоговых и служебных строк

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

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

  • 💰 Инициализируйте переменную ИтогоСумма = 0; до начала цикла.
  • ➕ Внутри цикла прибавляйте стоимость строки: ИтогоСумма = ИтогоСумма + СуммаСтроки;.
  • 🏁 После цикла получите область #Итого и заполните её общей суммой.
  • 🖨️ Выведите итоговую область в конец табличного документа.

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

💡

Используйте метод ТабличныйДокумент.АвтоМасштаб() после формирования всех строк, чтобы содержимое гарантированно поместилось на лист формата А4 без ручного подбора шрифтов.

Тестирование и отладка печатной формы

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

Частая проблема — несовпадение имен областей. Убедитесь, что в коде вы обращаетесь к области именно так, как она названа в макете, учитывая символ #. Также проверьте, что область не перекрыта другими объектами в конструкторе макетов.

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

⚠️ Внимание: При выгрузке в PDF шрифты могут заменяться на стандартные, если они не встроены или не установлены на сервере. Проверяйте итоговый файл именно в формате, который будет использоваться клиентами.

☑️ Проверка новой строки в печати

Выполнено: 0 / 5

Часто задаваемые вопросы (FAQ)

Почему новая строка появляется в макете, но не выводится при печати?

Скорее всего, вы создали область в макете, но забыли добавить код её вызова в процедуре печати. Проверьте, есть ли строка Макет.Вывести(Область) в нужном месте алгоритма. Также убедитесь, что условие, при котором вызывается эта строка, выполняется.

Как сделать, чтобы строка выводилась только если есть скидка?

Оберните код вывода области в условный оператор Если. Например: Если Скидка > 0 Тогда ... ВывестиОбласть ... КонецЕсли;. Это позволит динамически скрывать или показывать строку в зависимости от данных документа.

Можно ли изменить цвет шрифта в новой строке программно?

Да, это возможно. Перед выводом области используйте методы оформления ячеек объекта ТабличныйДокумент. Например, ТабДок.Область(ИмяОбласти).Шрифт.Цвет = Цвет.Красный;. Однако проще задать стиль сразу в макете через свойства ячеек.

Что делать, если текст не помещается в ячейку новой строки?

В свойствах ячейки макета включите опцию "Многострочный текст" и "Автоподбор высоты". Это позволит ячейке расширяться вниз при увеличении объема текста, не нарушая структуру соседних ячеек.

💡

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