Каталог решений - Возврат товаров, проданных в прошлых кассовых сменах, через Чек ККМ на возврат

Возврат товаров, проданных в прошлых кассовых сменах, через Чек ККМ на возврат

Возврат товаров, проданных в прошлых кассовых сменах, через Чек ККМ на возврат

В наличии

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

Категория:

Описание

В Управлении торговлей 11.4 разработчики зачем-то сделали возможность делать "ЧекККМ на возврат" для Чеков ККМ сделанных прошлыми датами.
Причем чек на возврат создается и печатается, но потом при закрытии смены формируется "Отчет о розничных продажах", который ставит отрицательное количество по возвращенным позициям.
Это в свою очередь ведет к тому, что с включенным контролем остатков этот "Отчет о розничных продажах" не проводится.

Использовать напрямую стандартный механизм (Возврат товаров от клиента > Расходный кассовый ордер) бухгалтерия отказалась, так как в интерфейсе кассира много документов не выведено. А бухгалтерия старается по минимуму обучать кассиров. Хотят, чтобы даже ребенок мог за 20 минут научиться.

Поэтому сделал функционал, который с одной стороны не позволит кассиру создать Чек ККМ на возврат для товаров, проданных в прошлых сменах, а с другой стороны запустит правильный алгоритм формирования возврата.

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

Итак:
1. Из формы документа ЧекККМ ОформлениеВозвратаДеньВДень добавить в расширение процедуру ОформитьВозврат с директивой "Вместо". В итоге в модуле этой формы в расширении будет следующий код:
 

&НаКлиенте
Процедура расш_ОформитьВозвратВместо(Команда)
    Если ПодобраноПозиций = 0 Тогда
        Возврат;
    КонецЕсли;
    
    ЧекККМ = Неопределено;
    Для Каждого СтрокаТЧ Из ТаблицаТоваров Цикл
        Если СтрокаТЧ.Выбран Тогда
            ЧекККМ = СтрокаТЧ.ЧекККМ;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("Товары", АдресВоВременномХранилище(ВладелецФормы.УникальныйИдентификатор));
    ПараметрыОткрытия.Вставить("ЧекККМ", ЧекККМ);
    
    ДатаЧека = НачалоДня(ТекущаяДата());
    Если ЧекККМ <> Неопределено Тогда
        ДатаЧека = ПолучитьЗначениеНаСервере(ЧекККМ, "Дата");
    КонецЕсли;
    
    Если НачалоДня(ДатаЧека) = НачалоДня(ТекущаяДата()) Тогда
        ОткрытьФорму("Документ.ЧекККМВозврат.Форма.ФормаДокументаРМК", Новый Структура("Основание", ПараметрыОткрытия), ВладелецФормы);
    Иначе
        ОткрытьФорму("Документ.ВозвратТоваровОтКлиента.Форма.ФормаДокумента", Новый Структура("Основание", ПараметрыОткрытия), ВладелецФормы);
    КонецЕсли;
    
    Закрыть();
КонецПроцедуры

&НаСервере
Функция ПолучитьЗначениеНаСервере(Объект, Реквизит)
    Возврат Объект[Реквизит];
КонецФункции

*Для работы кода необходимо ещё добавить в расширение форму документа ВозвратТоваровОтКлиента "ФормаДокумента"

По факту тут из нового кода — это анализ даты чека и вызов в зависимости от даты разных документов

2. Добавить процедуру ОбработкаЗаполнения модуля документа ВозвратТоваровОтКлиента в расширение с директивой "Перед"

&Перед("ОбработкаЗаполнения")
Процедура расш_ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);
    
    Если ТипДанныхЗаполнения = Тип("Структура") Тогда
        Если ДанныеЗаполнения.Свойство("Товары") Тогда
            ЗаполнитьДокументНаОснованииЧекаККМ(ДанныеЗаполнения.ЧекККМ);
            ЗаполненНаОснованииДокумента = Истина;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

 

has been added to your cart:
Оформление заказа