Почему в 1С:УПП при печати счета-фактуры сбивается порядок строк и как это исправить?

Программист 1С v8.3 (Обычные формы) Бухгалтерский учет Промышленность, строительство и АПК
← На главную

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

Выясняем причину проблемы

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

Проанализируем ситуацию с технической стороны: при формировании печатной формы программа выполняет запрос к базе данных. В релизах 1.3.219.x и 1.3.220.x в текстах запросов, собирающих данные по табличным частям Товары и ГТД, в некоторых местах была утеряна конструкция УПОРЯДОЧИТЬ ПО. В системе 1С (и в СУБД в целом), если порядок сортировки не указан явно, платформа выдает строки так, как их «удобнее» прочитать оптимизатору базы данных. Чаще всего это происходит по физическому порядку записей или по внутреннему идентификатору ID, что и приводит к перемешиванию строк на листе бумаги.

Рассмотрим решение №1: Официальное обновление

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

  1. Проверим текущую версию конфигурации через меню Справка — О программе.
  2. Если версия ниже 1.3.221.1, необходимо выполнить обновление до актуального релиза.
  3. После обновления проверим печать счета-фактуры: порядок строк должен восстановиться согласно документу-основанию.

Рассмотрим решение №2: Программная правка (для программистов)

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

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

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


|ВЫБРАТЬ
|   ТЧ_Товары.НомерСтроки КАК НомерСтроки,
|   ТЧ_Товары.Номенклатура,
|   ...
|ИЗ
|   Документ.РеализацияТоваровУслуг.Товары КАК ТЧ_Товары
|ГДЕ
|   ТЧ_Товары.Ссылка = &СсылкаНаРеализацию
|
|УПОРЯДОЧИТЬ ПО
|   НомерСтроки

Обратите внимание на сообщение 7 из обсуждения: использование УПОРЯДОЧИТЬ ПО ID, НомерСтроки может не дать нужного результата, если ID — это внутренний уникальный идентификатор строки, который не совпадает с визуальным порядком в табличной части. Для корректного отображения «как в документе» следует использовать только НомерСтроки.

Рассмотрим решение №3: Использование внешней печатной формы

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

  1. Возьмем макет и код процедуры печати из релиза, где сортировка работала корректно (например, до 1.3.212).
  2. Создадим новый объект ВнешняяОбработка и добавим в него необходимые функции для формирования печатной формы счета-фактуры.
  3. В коде формирования таблицы товаров принудительно вызовем метод Сортировать("НомерСтроки"), если данные получаются в виде таблицы значений:

ТаблицаДляПечати = Запрос.Выполнить().Выгрузить();
ТаблицаДляПечати.Сортировать("НомерСтроки Возр");

Затем зарегистрируем обработку через меню Сервис — Дополнительные отчеты и обработки — Дополнительные внешние печатные формы. Теперь при нажатии кнопки «Печать» в документе можно будет выбрать исправленный вариант формы.

Дополнительные нюансы: Группировка строк

Посмотрим на ситуацию, когда в счете-фактуре строк меньше, чем в реализации. Это происходит из-за настройки «Объединять одинаковые позиции». Если эта опция включена, система группирует товары с одинаковым наименованием, ценой и ставкой НДС. В этом случае понятие «номер строки» становится размытым, так как несколько строк с разными номерами превращаются в одну.

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

← На главную