Что делать, если в закрытой смене не заархивированы чеки и не сформирован отчет о розничных продажах?

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

В процессе работы с конфигурацией 1С:Розница 2.3, особенно в условиях использования распределенных информационных баз (РИБ), технические специалисты часто сталкиваются с ситуацией, когда кассовая смена формально закрыта, но документы ЧекККМ не перешли в статус «Архивный» и не попали в Отчет о розничных продажах. Это приводит к тому, что выручка не отражается в кассе магазина, а товары не списываются со склада. Проанализируем причины этой проблемы и разберем по шагам методы ее решения.

Выясним причину сбоя

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

Для системы 1С это критично. Механизм закрытия смены ищет документы ЧекККМ, привязанные именно к текущему рабочему месту. Если идентификаторы не совпадают, программа попросту «не видит» эти чеки как объекты, подлежащие архивации и включению в отчет текущей смены. В результате смена в фискальном регистраторе закрывается (Z-отчет снят), документ Кассовая смена в базе получает статус «Закрыта», но Отчет о розничных продажах остается пустым или вовсе не создается.

Способ 1: Использование обработки «Групповое изменение реквизитов»

Это наиболее эффективный метод для администраторов, не требующий написания программного кода. Посмотрим на алгоритм действий. Главная проблема заключается в том, что 1С запрещает редактировать документ ЧекККМ, если он уже имеет статус Пробит. Чтобы обойти это ограничение, выполним следующие шаги:

  1. Откроем обработку Групповое изменение реквизитов (находится в разделе Администрирование — Обслуживание — Корректировка данных).
  2. В поле «Изменять» выберем объект ЧекККМ.
  3. Настроим отбор: выберем чеки по конкретной дате и, что самое важное, по конкретной кассовой смене, которая оказалась проблемной.
  4. Перейдем в «Дополнительные параметры» (кнопка в нижней части формы или в меню «Еще»).
  5. Важный момент: установим флажок «Режим записи: Запись с установкой режима ОбменДанными.Загрузка = Истина». Этот режим отключает стандартные проверки в коде конфигурации, позволяя нам менять статус даже у пробитых фискальных документов.
  6. В списке реквизитов найдем поле Статус и установим значение Архивный.
  7. Найдем поле Отчет о розничных продажах и укажем ссылку на предварительно созданный вручную пустой документ отчета.
  8. Нажмем кнопку «Изменить реквизиты».

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

Способ 2: Программное решение через внешний скрипт

Если количество чеков велико или требуется более тонкая настройка, рассмотрим программный подход. Мы можем написать небольшую внешнюю обработку или воспользоваться консолью кода. Разберем пример кода, который принудительно архивирует чеки:


// Выбираем все чеки по конкретной кассовой смене
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	ЧекККМ.Ссылка КАК Ссылка
    |ИЗ
    |	Документ.ЧекККМ КАК ЧекККМ
    |ГДЕ
    |	ЧекККМ.КассоваяСмена = &КассоваяСмена
    |	И ЧекККМ.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Пробит)";

Запрос.УстановитьПараметр("КассоваяСмена", СсылкаНаПроблемнуюСмену);
Результат = Запрос.Выполнить().Выбрать();

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

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

Способ 3: Восстановление связи рабочего места

Проанализируем еще один вариант решения. Если проблема была вызвана именно удалением рабочего места, можно попытаться временно восстановить «старое» окружение. Выясним имя компьютера, под которым работала касса в проблемный день. Если изменить имя текущего компьютера на старое (в настройках Windows) и зайти в 1С, система может идентифицировать его как то самое «удаленное» рабочее место.

В этом случае при попытке повторного формирования Отчета о розничных продажах из обработки Закрытие кассовой смены, алгоритмы 1С могут успешно подхватить «брошенные» чеки, так как идентификатор рабочего места совпадет с тем, что записан в чеках.

Важные нюансы работы в РИБ

Если ваша база является частью Распределенной информационной базы (РИБ), крайне важно выполнять все манипуляции по исправлению статусов чеков строго в периферийном узле (непосредственно в магазине). Рассмотрим, почему это так:

Подведем итоги

Ситуация с неархивированными чеками не является поводом для штрафных санкций к персоналу, так как это системная ошибка, вызванная перенастройкой оборудования. Основным инструментом решения является использование свойства ОбменДанными.Загрузка = Истина, которое позволяет корректировать реквизиты документов в обход жестких проверок бизнес-логики 1С. После того как мы проставим чекам статус Архивный и привяжем их к документу Отчет о розничных продажах, остатки товаров и денежные средства в системе придут в соответствие с фактическими данными.

← На главную