Почему при закрытии кассовой смены в 1С удаляются отложенные чеки и как это изменить?

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

Многие пользователи при работе с конфигурацией 1С:Розница сталкиваются с тем, что отложенные чеки исчезают после выполнения процедуры закрытия кассовой смены. Это происходит без предупреждений, и информация о них становится недоступной. Давайте разберемся, почему так происходит, где «зарыта» эта логика и как мы можем повлиять на поведение системы.

Анализ причины автоматического удаления чеков

Суть проблемы заключается в том, что разработчики типовых конфигураций (таких как 1С:Розница версий 2.2 и выше) заложили в алгоритм закрытия смены процедуру принудительной очистки рабочего места кассира. Это сделано для того, чтобы гарантировать чистоту данных при формировании Отчета о розничных продажах и избежать накопления некорректных или устаревших транзакций в базе данных.

Логика работы системы настроена так, что при успешном прохождении процедуры закрытия кассы вызывается обработка, которая находит все документы со статусом «Отложенный чек» и помечает их на удаление или физически удаляет. Это происходит на серверной стороне, что делает невозможным предотвращение процесса через стандартные настройки пользователя.

Разбор программного кода

Если вы являетесь администратором или разработчиком, вы можете найти этот механизм в модулях вашей конфигурации. В обработке закрытия кассовой смены (часто это процедура ОбработатьДокументыККМСервер) содержится блок кода, отвечающий за удаление отложенных документов. Рассмотрим пример такого кода:


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

Анализируя этот фрагмент, мы видим, что система принудительно переводит документ в состояние пометки на удаление, а затем вызывает метод Удалить(). Для изменения логики необходимо модифицировать этот код, исключив вызов удаления или добавив условие, при котором чеки будут оставаться в базе.

Варианты решения проблемы

Рассмотрим несколько стратегий, которые мы можем применить для решения данной задачи:

  1. Модификация конфигурации. Вы можете закомментировать строки, отвечающие за удаление в процедуре ОбработатьДокументыККМСервер. Однако, будьте осторожны: это приведет к накоплению «висячих» документов. Вам потребуется разработать дополнительный регламент очистки, чтобы база не разрасталась до критических размеров.
  2. Использование альтернативных документов. Если цель «откладывания» чека — продажа товара в долг, учет личных покупок сотрудников или разукомплектация, рассмотрите использование документов Заказ покупателя или Реализация товаров и услуг. Эти объекты не удаляются автоматически при закрытии смены и корректно учитываются в складских остатках.
  3. Внешняя обработка. Для базовых версий, где прямое редактирование кода затруднено, можно использовать внешнюю обработку перед закрытием смены. Она может находить все отложенные чеки, переносить их данные в текстовый файл или промежуточный регистр, а после закрытия смены — восстанавливать их при необходимости.

Важные замечания

Прежде чем приступать к изменениям, помните следующее:

Подводя итог, можно сказать, что принудительное удаление — это «зашитая» в типовой релиз логика. Если настройки программы не предоставляют возможности отключить этот процесс, единственным надежным путем остается профессиональная доработка модуля закрытия смены или изменение бизнес-процесса использования отложенных чеков. Для выполнения операций в интерфейсе без изменения программного кода внедряется платформа для создания программных роботов RPA.

← На главную