При переходе на новые печатные формы счетов-фактур в соответствии с Постановлением Правительства РФ № 981 от 19.08.2017 г. многие пользователи и разработчики решений на платформе 1С:Предприятие 7.7 (особенно в конфигурациях «Торговля и Склад 9.2» и «Бухгалтерский учет 4.5») столкнулись с неприятным визуальным багом. На каждом листе многостраничного документа в самом верху страницы поверх или внутри шапки таблицы начал принудительно пропечатываться Идентификатор государственного контракта (ИГК) либо пустая строка, предназначенная для него.
В этой статье мы подробно разберем технические причины возникновения данного поведения системы, проанализируем взаимосвязь макета таблицы и программного кода, а также предоставим пошаговую инструкцию по самостоятельному исправлению этого недочета во внешней печатной форме.
С вступлением в силу Постановления № 981 в форму счета-фактуры была официально добавлена новая строка — строка 8 «Идентификатор государственного контракта, договора (соглашения)». Это нововведение раздвинуло шапку документа (область «Заголовок») по вертикали на одну строку.
Для того чтобы при печати многостраничных документов пользователю не приходилось гадать, какая колонка за что отвечает, на каждом новом листе должна дублироваться только шапка самой таблицы (строка с названиями колонок и строка с их номерами: 1, 1а, 2, 3 и так далее). В платформе 1С:Предприятие 7.7 за это поведение отвечает специальный метод табличного документа:
ИсхТабл.ПовторятьПриПечатиСтроки(Начало, Конец);
Давайте проанализируем, как работает этот метод и где именно разработчики допустили ошибку:
ИсхТабл.ПовторятьПриПечатиСтроки(17, 19); отрабатывал корректно: система дублировала только эти три строчки на каждом новом листе.ПовторятьПриПечатиСтроки() остались прежними либо были изменены неверно. В результате программа продолжала давать указание принтеру дублировать на каждой новой странице старый диапазон строк (например, с 17-й по 19-ю). Из-за этого смещения в область повторения попала нижняя часть заголовка документа, содержащая строку ИГК.Посмотрим на пример кода, который вызывает эту ошибку:
// Ошибочный код, перекочевавший из старой версии печатной формы
ИсхТабл.ПовторятьПриПечатиСтроки(17, 19);
Для исправления ситуации нам необходимо скоординировать номера строк в визуальном макете таблицы и параметры вызова этого метода в программном модуле. Ниже приведено пошаговое руководство, как это сделать.
Для устранения проблемы нам понадобится запустить систему в режиме «Конфигуратор» и внести небольшие изменения во внешнюю печатную форму счета-фактуры. Обычно такие формы хранятся в каталоге вашей информационной базы по пути \ExtForms\PrnForms\ и имеют расширение .ert (например, inv981.ert или factur981.ert).
Запустите Конфигуратор 1С 7.7. Перейдите в главное меню Файл -> Открыть. В открывшемся диалоговом окне перейдите в папку вашей базы данных, найдите каталог ExtForms, далее перейдите в PrnForms и выберите файл внешней обработки счета-фактуры. Нажмите кнопку «Открыть».
После открытия файла обработки перед вами появится окно структуры. Перейдите на вкладку «Таблица» (это макет печатной формы).
Нам необходимо визуально найти шапку таблицы счета-фактуры. Это строки, содержащие заголовки: «Наименование товара (описание выполненных работ, оказанных услуг)...», «Код вида товара», «Единица измерения» и т.д., а также строка непосредственно под ними, где выведены номера колонок: «1, 1а, 2, 3, 4...».
Обратите внимание на вертикальную линейку с номерами строк в левой части экрана. Нам нужно четко определить номер первой строки шапки таблицы и номер последней строки (строки с цифрами колонок). Запишите или запомните эти номера. В большинстве стандартных макетов после обновления по Постановлению 981 эти строки занимают диапазон с 18 по 20 или с 19 по 21.
Теперь перейдите на вкладку «Модуль» внешней обработки. Чтобы быстро найти нужный участок кода, воспользуйтесь поиском. Нажмите комбинацию клавиш Ctrl + F и введите поисковый запрос:
ПовторятьПриПечатиСтроки
Программа позиционирует курсор на строке кода, отвечающей за фиксацию шапки при выводе на печать. Скорее всего, вы увидите следующую конструкцию:
// В старых или некорректно обновленных формах:
ИсхТабл.ПовторятьПриПечатиСтроки(17, 19);
Или в некоторых версиях:
Таб.ПовторятьПриПечатиСтроки(17, 19);
Наша задача — заменить эти статические числа на те, которые мы определили на Шаге 2. Если в вашем макете шапка таблицы фактически занимает строки с 18 по 20, то мы изменяем параметры вызова функции следующим образом:
// Корректный вариант для обновленного макета
ИсхТабл.ПовторятьПриПечатиСтроки(18, 20);
Важное примечание: Обратите внимание, что вызов метода ПовторятьПриПечатиСтроки в модуле может встречаться несколько раз (например, отдельно для печати обычного счета-фактуры и отдельно для корректировочного документа, либо в разных ветках условий). Обязательно воспользуйтесь поиском по всему тексту модуля (кнопка «Искать далее» или клавиша F3) и замените параметры во всех найденных местах.
Если после изменения номеров строк шапка все равно съезжает или ИГК продолжает частично задевать область печати, обратите внимание на структуру строк между блоком «Заголовок» и самой таблицей. Рекомендуется настроить макет так, чтобы между блоком заголовка документа и шапкой таблицы присутствовала хотя бы одна пустая строка-разделитель, которая не входит в диапазон повторяющихся строк.
Это исключит наложение областей при печати на стыках страниц и гарантирует, что визуальный разрыв между табличной частью и шапкой на последующих листах будет выглядеть эстетично.
После внесения правок сохраните изменения в файле обработки (нажмите Ctrl + S или иконку дискеты на панели инструментов). Перейдите в режим «1С:Предприятие», откройте документ «Счет-фактура выданный», содержащий большое количество позиций номенклатуры (чтобы печатная форма гарантированно разбилась на 2 и более листов), и отправьте его на предварительный просмотр.
Убедитесь, что:
Таким образом, простым сопоставлением индексов строк в макете и коде модуля мы полностью устранили классический баг печатной формы 981.