Почему в печатной форме 1С съезжают колонки и неправильно отображается цена

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

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

Анализ структуры макета и вертикальных областей

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

Если в строке «Итого» ячейка с суммой находится, например, в девятой колонке, а в табличной части одна из предыдущих колонок была программно скрыта или объединена, то итоговая сумма неизбежно сместится. Чтобы исключить ошибки в самих данных, автоматическая сверка бухгалтерских и налоговых проводок выявляет расхождения после доработок или миграции. Выясним причину через проверку структуры макета:

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

Диагностика в режиме Предприятия

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

Сформируем «кривую» печатную форму. Перейдем в меню Таблица — Вид — Отображать заголовки. Это действие добавит к табличному документу стандартные обозначения строк (1, 2, 3...) и колонок (A, B, C...). Теперь мы можем четко увидеть, в какой именно колонке выводится цена в строке товара и в какой колонке оказывается итоговая сумма. Если цена товара стоит в колонке «F», а итог — в колонке «E», значит, в макете подвала нарушена последовательность ячеек или отсутствуют невидимые разделители.

Проблема «не того макета» и приоритеты БСП

Часто программист вносит изменения в макет внешней обработки или конфигурации, но при печати видит старый вариант. Разберем, почему изменения могут игнорироваться системой. В современных конфигурациях, использующих Библиотеку стандартных подсистем (БСП), существует строгая иерархия макетов:

  1. Пользовательские макеты: Если пользователь хоть раз редактировал макет через интерфейс (Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм), система сохраняет его копию в регистре сведений ПользовательскиеМакетыПечати. Эта копия имеет высший приоритет. Пока вы не удалите эту настройку или не выберете «Использовать стандартный макет», любые правки в конфигураторе будут бесполезны.
  2. Внешние печатные формы: Если используется внешняя обработка (.epf), помните, что после каждого изменения файла макета в конфигураторе его нужно заново загружать в справочник «Дополнительные отчеты и обработки», иначе система будет запускать старую версию из своего внутреннего хранилища.
  3. Расширения: Проверьте, не подменяется ли макет в одном из активных расширений конфигурации.

Программное формирование печатной формы

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


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    
    ПараметрыПечати = УправлениеПечатью.СтруктураПараметровПечати();
    ВыведенныйМакет = ПолучитьМакет("ОсновнойМакет"); // Проверяем имя макета здесь!
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПРИМЕР";
    
    ОбластьШапка = ВыведенныйМакет.ПолучитьОбласть("Шапка");
    ТабличныйДокумент.Вывести(ОбластьШапка);
    
    // Цикл по товарам
    Для Каждого СтрокаТовара Из ДанныеПечати Цикл
        ОбластьСтрока = ВыведенныйМакет.ПолучитьОбласть("Строка");
        ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
        ТабличныйДокумент.Вывести(ОбластьСтрока);
    КонецЦикла;
    
    // Вывод итогов - здесь чаще всего кроется ошибка
    ОбластьИтог = ВыведенныйМакет.ПолучитьОбласть("Подвал");
    ТабличныйДокумент.Вывести(ОбластьИтог);
    
КонецПроцедуры

Проанализируем ситуацию: если в макете ОбластьИтог имеет другое количество колонок или иное выравнивание (например, по правому краю вместо левого), чем ОбластьСтрока, визуально это приведет к «разъезжанию» формы.

Практические советы по исправлению

Для того чтобы привести форму в порядок, рекомендуем выполнить следующие действия:

Рассмотренные методы позволяют решить проблему в 99% случаев. Главное — помнить, что печатная форма в 1С — это не просто картинка, а динамически собираемый конструктор из горизонтальных и вертикальных блоков, каждый из которых должен соответствовать общей геометрии документа.

← На главную