При работе в конфигурации 1С:Управление торговлей 10.3 (начиная с версий 10.3.4x и выше) пользователи часто сталкиваются с особенностью печати фискальных чеков из документа Приходный кассовый ордер (ПКО). Если ПКО оформляется как предоплата, в печатной форме чека количество любого товара принудительно меняется на «1», единица измерения становится «Платеж», а цена приравнивается к общей сумме строки. Разберемся, почему это происходит, как реализовано в коде и почему не стоит пытаться это «исправлять».
Для того чтобы понять логику программы, проанализируем общий модуль ФорматноЛогическийКонтрольКлиентСервер. Именно в нем сосредоточена логика подготовки данных перед отправкой на драйвер ККТ. Основная работа выполняется в процедуре ПривестиДанныеКТребуемомуФормату.
Рассмотрим фрагмент кода, который определяет, является ли текущая операция передачей товара или простым приемом денежных средств:
ИначеЕсли ПозицияЧека.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.Аванс")
ИЛИ ПозицияЧека.ПризнакСпособаРасчета = ПредопределенноеЗначение("Перечисление.ПризнакиСпособаРасчета.ПредоплатаПолная") Тогда
БезПередачиТовара = Истина;
Если условие выполняется (выбран признак «Аванс» или «Предоплата»), переменная БезПередачиТовара принимает значение Истина. Далее по коду система жестко модифицирует структуру ПозицияЧека, игнорируя фактические данные из табличной части документа:
Если БезПередачиТовара Тогда
Если ПозицияЧека.Свойство("ЕдиницаИзмерения") Тогда
ПозицияЧека.ЕдиницаИзмерения = "Платеж";
КонецЕсли;
Если ПозицияЧека.Свойство("Количество") Тогда
ПозицияЧека.Количество = 1;
КонецЕсли;
Если ПозицияЧека.Свойство("Цена") Тогда
ПозицияЧека.Цена = ПозицияЧека.Сумма;
КонецЕсли;
ПозицияЧека.Вставить("ПризнакПредметаРасчета", ПредопределенноеЗначение("Перечисление.ПризнакиПредметаРасчета.ПлатежВыплата"));
ИсправленыОсновныеПараметры = Истина;
КонецЕсли;
Проанализируем ситуацию: даже если в вашем счете указано «Кабель 5 метров по 20 рублей», при печати чека из ПКО программа преобразует это в «Кабель 1 Платеж по 100 рублей». Это выглядит странно для пользователя, но имеет под собой четкое законодательное обоснование.
Выясним причину такого поведения системы. Согласно требованиям 54-ФЗ и форматам фискальных данных (ФФД 1.05 и выше), существует жесткое разделение между моментом оплаты и моментом передачи товара.
Разберем по шагам, как должна выглядеть цепочка документов в «1С:Управление торговлей 10.3», чтобы учет был корректным:
Шаг 1: Прием денег (ПКО). Пробивается первый чек. В нем указывается признак «Предоплата», количество «1», единица измерения «Платеж». Это фиксирует в налоговой факт получения вами аванса.
Шаг 2: Отгрузка товара (Реализация товаров и услуг). В момент передачи товара покупателю вы обязаны пробить второй чек из документа реализации. Именно в этом втором чеке будут указаны реальные 5 метров кабеля, правильная цена и количество. В качестве способа оплаты в этом чеке будет указано «Зачет аванса» (сумма наличных или безналичных при этом будет равна нулю, так как деньги были получены ранее).
Важно отметить, что современные драйверы онлайн-касс (например, АТОЛ или Штрих-М) выполняют внутреннюю проверку данных. Если попытаться передать на кассу признак предмета расчета Платеж, но при этом указать количество, отличное от единицы, драйвер вернет ошибку «Некорректный параметр» или «Ошибка ФЛК».
Разработчики 1С добавили код в модуль ФорматноЛогическийКонтрольКлиентСервер именно для того, чтобы обеспечить совместимость со всеми типами оборудования и гарантировать, что чек будет пробит без ошибок драйвера.
Проанализируем последствия ручного вмешательства в данный механизм. Если вы решите закомментировать этот «кусман» кода (как выразились сами разработчики 1С в комментариях), вы столкнетесь со следующими проблемами:
Резюме: Описанное поведение является штатным и соответствует методологии работы с онлайн-кассами. Если вам необходимо видеть в чеке точное количество товара, это должно происходить в момент его фактической передачи (второй чек), а при предоплате единицей расчета всегда выступает сам денежный перевод.