Отложенный чек без движений в УТ 11
Клиент обратился с заданием отключить движения отложенных чеков (как с резервированием товара, так и без). Они ему мешают в отчете по продажам.
Я открыл УТ и обнаружил, что чек невозможно провести или отменить проведение:

Я немного озадачился — разработку веду на рабочей базе, как проверить работу чека, ведь нельзя же его провести даже.
Однако вспомнил про универсальный редактор объектов — обработку «1cAdmin». В ней открыл пробитый чек и провел.

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

Сначала я решил установить признак Записывать у всех наборов записей в Ложь:

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

Потом поправил ошибку, сначала провел чек в обычном статусе Пробит, получил такие движения:

Но когда поменял статус чека на «Отложенный», у меня все равно остались движения:

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

В итоге код расширения для модуля ПроведениеСерверУТ получился таким:
&Вместо("ЗаписатьНаборыЗаписей") Процедура дор_ЗаписатьНаборыЗаписей(Объект) //Для чека отложенного выключаем все Записывать Если Метаданные.НайтиПоТипу(ТипЗнч(Объект)) = Метаданные.Документы.ЧекККМ И (Объект.Статус = Перечисления.СтатусыЧековККМ.Отложен ИЛИ Объект.Статус = Перечисления.СтатусыЧековККМ.ТоварЗарезервирован) И Объект.Проведен Тогда Для Каждого Движение Из Объект.Движения Цикл //Движение.Записывать = ложь; //Так не работает Движение.Очистить(); КонецЦикла; КонецЕсли; ПродолжитьВызов(Объект); КонецПроцедуры
Время план: 0.7 час. Среда: 11.4.13.46.

Свежие комментарии