Почему в новой печатной форме счета-фактуры 981 на каждом листе дублируется ИГК и как это исправить?

Программист 1С v7.7 Бухгалтерский учет Торговля и дистрибуция
← На главную

При переходе на новые печатные формы счетов-фактур в соответствии с Постановлением Правительства РФ № 981 от 19.08.2017 г. многие пользователи и разработчики решений на платформе 1С:Предприятие 7.7 (особенно в конфигурациях «Торговля и Склад 9.2» и «Бухгалтерский учет 4.5») столкнулись с неприятным визуальным багом. На каждом листе многостраничного документа в самом верху страницы поверх или внутри шапки таблицы начал принудительно пропечатываться Идентификатор государственного контракта (ИГК) либо пустая строка, предназначенная для него.

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

В чем суть и техническая причина проблемы?

С вступлением в силу Постановления № 981 в форму счета-фактуры была официально добавлена новая строка — строка 8 «Идентификатор государственного контракта, договора (соглашения)». Это нововведение раздвинуло шапку документа (область «Заголовок») по вертикали на одну строку.

Для того чтобы при печати многостраничных документов пользователю не приходилось гадать, какая колонка за что отвечает, на каждом новом листе должна дублироваться только шапка самой таблицы (строка с названиями колонок и строка с их номерами: 1, 1а, 2, 3 и так далее). В платформе 1С:Предприятие 7.7 за это поведение отвечает специальный метод табличного документа:

ИсхТабл.ПовторятьПриПечатиСтроки(Начало, Конец);

Давайте проанализируем, как работает этот метод и где именно разработчики допустили ошибку:

  1. В старой печатной форме (до изменений 2017 года) шапка таблицы занимала определенный диапазон строк на листе, например, с 17-й по 19-ю строку. Программный вызов ИсхТабл.ПовторятьПриПечатиСтроки(17, 19); отрабатывал корректно: система дублировала только эти три строчки на каждом новом листе.
  2. В новой печатной форме после добавления строки «Идентификатор государственного контракта» (ИГК) весь макет сместился вниз. Шапка таблицы сдвинулась и стала занимать строки с 18-й по 20-ю (или с 19-й по 21-ю в зависимости от конкретного релиза конфигурации или кастомизации макета).
  3. В кодовой части внешней обработки (или общего модуля) параметры метода ПовторятьПриПечатиСтроки() остались прежними либо были изменены неверно. В результате программа продолжала давать указание принтеру дублировать на каждой новой странице старый диапазон строк (например, с 17-й по 19-ю). Из-за этого смещения в область повторения попала нижняя часть заголовка документа, содержащая строку ИГК.

Посмотрим на пример кода, который вызывает эту ошибку:


// Ошибочный код, перекочевавший из старой версии печатной формы
ИсхТабл.ПовторятьПриПечатиСтроки(17, 19);

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

Пошаговая инструкция по исправлению бага в Конфигураторе

Для устранения проблемы нам понадобится запустить систему в режиме «Конфигуратор» и внести небольшие изменения во внешнюю печатную форму счета-фактуры. Обычно такие формы хранятся в каталоге вашей информационной базы по пути \ExtForms\PrnForms\ и имеют расширение .ert (например, inv981.ert или factur981.ert).

Шаг 1. Открытие файла печатной формы

Запустите Конфигуратор 1С 7.7. Перейдите в главное меню Файл -> Открыть. В открывшемся диалоговом окне перейдите в папку вашей базы данных, найдите каталог ExtForms, далее перейдите в PrnForms и выберите файл внешней обработки счета-фактуры. Нажмите кнопку «Открыть».

Шаг 2. Визуальное определение номеров строк в Таблице

После открытия файла обработки перед вами появится окно структуры. Перейдите на вкладку «Таблица» (это макет печатной формы).

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

Обратите внимание на вертикальную линейку с номерами строк в левой части экрана. Нам нужно четко определить номер первой строки шапки таблицы и номер последней строки (строки с цифрами колонок). Запишите или запомните эти номера. В большинстве стандартных макетов после обновления по Постановлению 981 эти строки занимают диапазон с 18 по 20 или с 19 по 21.

Шаг 3. Редактирование программного кода в Модуле

Теперь перейдите на вкладку «Модуль» внешней обработки. Чтобы быстро найти нужный участок кода, воспользуйтесь поиском. Нажмите комбинацию клавиш Ctrl + F и введите поисковый запрос:

ПовторятьПриПечатиСтроки

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


// В старых или некорректно обновленных формах:
ИсхТабл.ПовторятьПриПечатиСтроки(17, 19);

Или в некоторых версиях:

Таб.ПовторятьПриПечатиСтроки(17, 19);

Наша задача — заменить эти статические числа на те, которые мы определили на Шаге 2. Если в вашем макете шапка таблицы фактически занимает строки с 18 по 20, то мы изменяем параметры вызова функции следующим образом:


// Корректный вариант для обновленного макета
ИсхТабл.ПовторятьПриПечатиСтроки(18, 20);

Важное примечание: Обратите внимание, что вызов метода ПовторятьПриПечатиСтроки в модуле может встречаться несколько раз (например, отдельно для печати обычного счета-фактуры и отдельно для корректировочного документа, либо в разных ветках условий). Обязательно воспользуйтесь поиском по всему тексту модуля (кнопка «Искать далее» или клавиша F3) и замените параметры во всех найденных местах.

Шаг 4. Дополнительная проверка структуры макета

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

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

Шаг 5. Сохранение и тестирование

После внесения правок сохраните изменения в файле обработки (нажмите Ctrl + S или иконку дискеты на панели инструментов). Перейдите в режим «1С:Предприятие», откройте документ «Счет-фактура выданный», содержащий большое количество позиций номенклатуры (чтобы печатная форма гарантированно разбилась на 2 и более листов), и отправьте его на предварительный просмотр.

Убедитесь, что:

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

← На главную