Почему при печати чека из ПКО количество всегда равно 1 и как это исправить

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

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

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

Разбор логики работы документов в 1С:УТ 11

Для начала проанализируем ситуацию с точки зрения разделения документов в системе 1С на «финансовые» и «товарные». Документ Приходный кассовый ордер является чисто финансовым. Его главная задача — зафиксировать поступление денежных средств в кассу предприятия. На момент создания ПКО на основании заказа клиента товар еще может быть не отгружен.

Рассмотрим стандартную цепочку: Заказ клиента — ПКО — Реализация товаров и услуг. В этом случае, когда мы пробиваем чек из ПКО, 1С классифицирует эту операцию как «Предоплата». Согласно алгоритмам в старых релизах УТ 11.4 (как в случае автора темы), система часто сворачивает все позиции заказа в один объект расчета с типом Платеж. Для такого объекта количество по определению равно 1, а цена равна общей сумме платежа.

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

Решение №1: Смена документа-основания для печати чека

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

Разберем этот процесс по шагам:

  1. Оформите документ Заказ клиента.
  2. На основании заказа создайте документ Реализация товаров и услуг.
  3. В документе реализации перейдите к печати чека.

При печати чека из реализации 1С передает в ККТ признак способа расчета Полный расчет. В этом случае в XML-пакет, отправляемый на драйвер ККТ, попадает полный перечень номенклатуры с правильными значениями в полях Количество, Цена и Сумма. В итоге вы получите чек, где каждая позиция будет расписана отдельно.

Решение №2: Использование признака «Разбивать строку предоплаты по номенклатуре»

В более современных релизах (начиная с УТ 11.4.13 и выше) фирма 1С доработала механизм печати чеков на аванс и предоплату. Рассмотрим, как можно настроить систему, чтобы даже в ПКО выводились товары.

Проанализируем настройки договора или настроек кассы ККМ. В некоторых конфигурациях появилась опция «Разбивать строку предоплаты по номенклатуре». Если этот флаг установлен, то при формировании чека из ПКО система попытается программно распределить сумму оплаты по всем позициям заказа-основания. В этом случае в кассовый аппарат будет передан массив товаров, а не одна строка «Платеж».

Решение №3: Настройка формата логического контроля (ФЛК)

Выясним причину, по которой настройки драйвера могут влиять на результат. В параметрах кассы в 1С есть настройка «Способ форматно-логического контроля». Рассмотрим два основных варианта:

Посмотрим на пример того, как система формирует данные для драйвера. Если в коде стоит жесткое ограничение на тип предмета расчета, исправить это можно только через расширение или правку модуля МенеджерОборудованияВызовСервера.

Технические подробности для программистов

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

Для ПКО код часто выглядит упрощенно:


// Пример упрощенной логики в старых релизах
СтрокаЧека = ТоварныйСостав.Добавить();
СтрокаЧека.Наименование = "Оплата от покупателя";
СтрокаЧека.Количество = 1;
СтрокаЧека.Цена = СуммаДокумента;
СтрокаЧека.Сумма = СуммаДокумента;
СтрокаЧека.ПризнакСпособаРасчета = Перечисления.ПризнакиСпособовРасчетаПрограммы.Предоплата;

Чтобы изменить это поведение, необходимо перехватить формирование этой таблицы и заполнить её данными из табличной части Товары документа-основания (Заказа). Однако стоит помнить о законе 54-ФЗ: если вы пробиваете чек с полным перечнем товаров из ПКО (как предоплату), то при последующей отгрузке (Реализации) вам по закону необходимо будет пробить второй чек с признаком Полный расчет и указанием способа оплаты Зачетом аванса.

Резюме: какой путь выбрать?

Рассмотрим подробнее выводы:

1. Для розничных продаж: Если оплата и отгрузка происходят одновременно, используйте Чек ККМ. Там всегда печатается правильное количество и номенклатура.
2. Для оптовых продаж с немедленной отгрузкой: Пробивайте чек из документа Реализация товаров и услуг. Это решит проблему с количеством «1» без внесения изменений в код.
3. Для авансов: Если вам принципиально видеть товары в чеке на аванс, обновите конфигурацию до версии 11.5 или используйте расширение, которое переопределяет формирование XML-пакета для ККТ, заполняя ТоварныйСостав на основе Заказа.

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

← На главную