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