Почему при печати документа в 1С 7.7 количество товара разбивается на несколько строк?

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

В работе с конфигурацией «1С:Торговля и Склад 7.7» (редакция 9.2) пользователи часто сталкиваются с ситуацией, когда в экранной форме документа (например, «Реализация ТМЦ») позиция указана одной строкой, но при выводе на печать в формах ТОРГ-12 или «Счет-фактура» она «дробится» на несколько позиций. Разберем подробно, почему это происходит и как привести печатную форму в соответствие с ожиданиями пользователя.

Причина №1: Учет по ГТД и странам происхождения

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

Рассмотрим ситуацию: вы продаете 4 самореза. Однако эти саморезы поступили на склад разными партиями:

При проведении документа система автоматически списывает товар по этим партиям. Когда формируется печатная форма, алгоритм модуля печати обращается к результатам проведения и видит разные номера ГТД. Согласно правилам заполнения документов, программа обязана вывести две отдельные строки, чтобы корректно указать соответствующие номера деклараций для каждой части товара.

Причина №2: Разные цены в партиях и настройки констант

Выясним влияние глобальных настроек системы. В конфигурации существует важная константа, на которую стоит обратить внимание: Константа.СуммыВПечатныхФормахПоУчету. Если она установлена в значение «Да» (или «1»), система при печати будет ориентироваться на данные регистров, а не на табличную часть документа.

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

Причина №3: Программный код и метод Свернуть()

Посмотрим на ситуацию с точки зрения программиста. Печатная форма в 1С 7.7 обычно формируется через создание временного объекта типа ТаблицаЗначений (ТЗ). Перед выводом на печать данные в этой таблице должны группироваться.

Рассмотрим, как работает типичный алгоритм группировки в модуле документа или во внешней печатной форме (.ert). Для объединения одинаковых товаров используется метод Свернуть(). Рассмотрим пример кода:


// Пример формирования ТЗ для печати
ТЗПечать = СоздатьОбъект("ТаблицаЗначений");
ТЗПечать.НоваяКолонка("Товар");
ТЗПечать.НоваяКолонка("Цена");
ТЗПечать.НоваяКолонка("Количество", "Число");
ТЗПечать.НоваяКолонка("ГТД");

// Заполнение данными из документа...
// ...

// Попытка сгруппировать строки
ТЗПечать.Свернуть("Товар, Цена, ГТД", "Количество");

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

Причина №4: Использование внешних печатных форм

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

Рекомендуем проверить:

  1. Откройте каталог базы, перейдите в ExtForms\PrnForms.
  2. Найдите файл, соответствующий вашей печатной форме (например, torg12.ert).
  3. Откройте его в Конфигураторе и изучите функцию Печать().

Если строки двоятся/троятся именно во внешней форме, необходимо проверить список колонок в методе Свернуть().

Как решить проблему: пошаговый план

Разберем алгоритм действий для исправления ситуации:

Шаг 1. Проверка необходимости разбиения. Выясните, является ли товар импортным. Если это счет-фактура и у товара разные ГТД, то разбиение строк — это правильное поведение программы, соответствующее закону. Объединять их вручную — значит нарушать правила ведения учета.

Шаг 2. Проверка констант. Зайдите в меню «Операции» -> «Константы» и найдите Суммы в печатных формах по учету. Попробуйте изменить её значение и посмотреть, как изменится результат печати. Это часто помогает, если в документе стоит одна цена, а в регистрах партий из-за ошибок учета зафиксирована другая.

Шаг 3. Анализ отчета «Остатки ТМЦ». Сформируйте отчет по конкретной позиции, которая дробится. Посмотрите в разрезе партий и цен. Если вы видите «хвосты» с разницей в копейках или разные номера ГТД, причина найдена.

Шаг 4. Корректировка кода (для специалистов). Если требуется объединить строки вопреки наличию разных ГТД (например, во внутренней накладной), необходимо модифицировать алгоритм печати, исключив из группировки уникальные идентификаторы партий:


// Вместо этого:
ТЗ.Свернуть("Номенклатура, Цена, Партия, ГТД", "Количество, Сумма");

// Используйте это:
ТЗ.Свернуть("Номенклатура, Цена", "Количество, Сумма");

Важный момент: помните, что 1С 7.7 крайне чувствительна к точности вычислений. В редких случаях строки не сворачиваются из-за невидимых глазу различий в 10-м знаке после запятой в колонке Цена. В таких случаях перед сворачиванием рекомендуется принудительно округлять значения цен и сумм в таблице значений с помощью цикла ВыбратьСтроки().

Таким образом, мы выяснили, что дробление строк — это чаще всего не ошибка программы, а результат работы механизма партионного учета. Понимая логику работы метода Свернуть() и принципы хранения данных в регистрах 1С 7.7, вы сможете гибко настроить печатные формы под требования вашего бизнеса.

← На главную