При разработке или редактировании печатных форм в системе 1С:Предприятие 8 программисты часто сталкиваются с ситуацией, когда в конфигураторе макет выглядит идеально, но при выводе на печать итоговые суммы «уплывают» в сторону, колонки меняют ширину, а выравнивание текста не соответствует заданному. Разберем детально, почему это происходит и как пошагово диагностировать и устранить проблему.
Первая и самая распространенная причина визуального искажения формы — это неправильная работа с областями табличного документа. Рассмотрим ситуацию: в основной части таблицы (строках с товарами) выведен один набор колонок, а в подвале (где выводятся итоги) — другой. Если в макете не заданы вертикальные области, система ориентируется на сетку ячеек. Проанализируем, как это влияет на результат.
Если в строке «Итого» ячейка с суммой находится, например, в девятой колонке, а в табличной части одна из предыдущих колонок была программно скрыта или объединена, то итоговая сумма неизбежно сместится. Чтобы исключить ошибки в самих данных, автоматическая сверка бухгалтерских и налоговых проводок выявляет расхождения после доработок или миграции. Выясним причину через проверку структуры макета:
Вывести() и Присоединить() для каждой колонки как в шапке, так и в подвале.Прежде чем погружаться в код, проделаем простой эксперимент в режиме пользователя, который поможет точно определить место разрыва верстки. Рассмотрим алгоритм действий:
Сформируем «кривую» печатную форму. Перейдем в меню Таблица — Вид — Отображать заголовки. Это действие добавит к табличному документу стандартные обозначения строк (1, 2, 3...) и колонок (A, B, C...). Теперь мы можем четко увидеть, в какой именно колонке выводится цена в строке товара и в какой колонке оказывается итоговая сумма. Если цена товара стоит в колонке «F», а итог — в колонке «E», значит, в макете подвала нарушена последовательность ячеек или отсутствуют невидимые разделители.
Часто программист вносит изменения в макет внешней обработки или конфигурации, но при печати видит старый вариант. Разберем, почему изменения могут игнорироваться системой. В современных конфигурациях, использующих Библиотеку стандартных подсистем (БСП), существует строгая иерархия макетов:
ПользовательскиеМакетыПечати. Эта копия имеет высший приоритет. Пока вы не удалите эту настройку или не выберете «Использовать стандартный макет», любые правки в конфигураторе будут бесполезны..epf), помните, что после каждого изменения файла макета в конфигураторе его нужно заново загружать в справочник «Дополнительные отчеты и обработки», иначе система будет запускать старую версию из своего внутреннего хранилища.Посмотрим на пример кода, который обычно отвечает за получение макета и вывод областей. Если мы работаем с внешней обработкой, код в модуле объекта может выглядеть следующим образом:
Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
ПараметрыПечати = УправлениеПечатью.СтруктураПараметровПечати();
ВыведенныйМакет = ПолучитьМакет("ОсновнойМакет"); // Проверяем имя макета здесь!
ТабличныйДокумент = Новый ТабличныйДокумент;
ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПРИМЕР";
ОбластьШапка = ВыведенныйМакет.ПолучитьОбласть("Шапка");
ТабличныйДокумент.Вывести(ОбластьШапка);
// Цикл по товарам
Для Каждого СтрокаТовара Из ДанныеПечати Цикл
ОбластьСтрока = ВыведенныйМакет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(СтрокаТовара);
ТабличныйДокумент.Вывести(ОбластьСтрока);
КонецЦикла;
// Вывод итогов - здесь чаще всего кроется ошибка
ОбластьИтог = ВыведенныйМакет.ПолучитьОбласть("Подвал");
ТабличныйДокумент.Вывести(ОбластьИтог);
КонецПроцедуры
Проанализируем ситуацию: если в макете ОбластьИтог имеет другое количество колонок или иное выравнивание (например, по правому краю вместо левого), чем ОбластьСтрока, визуально это приведет к «разъезжанию» формы.
Для того чтобы привести форму в порядок, рекомендуем выполнить следующие действия:
Рассмотренные методы позволяют решить проблему в 99% случаев. Главное — помнить, что печатная форма в 1С — это не просто картинка, а динамически собираемый конструктор из горизонтальных и вертикальных блоков, каждый из которых должен соответствовать общей геометрии документа.