В работе со старыми конфигурациями, такими как 1С:Розница 1.0, пользователи часто сталкиваются с ситуацией, когда после закрытия смены и формирования «Отчета о розничных продажах» чеки ККМ остаются в статусе «Пробитый». Это приводит к тому, что на следующий день программа пытается включить эти же чеки в новый отчет, фактически удваивая выручку и создавая хаос в учете. Рассмотрим подробно, почему это происходит и как устранить проблему системно.
В штатном режиме процесс закрытия смены в 1С происходит по следующему алгоритму: программа собирает все проведенные чеки за текущую смену, формирует на их основании сводный документ ОтчетОРозничныхПродажах, а затем запускает транзакцию по изменению статуса этих чеков на «Архивный». Если на любом из этих этапов происходит программный сбой или срабатывает блокировка, транзакция прерывается. В итоге отчет создан, но чеки «висят» как активные.
Прежде чем приступать к программным исправлениям, нам необходимо убедиться, что настройки самой конфигурации заданы верно. В 1С:Розница 1.0 поведение программы при закрытии смены определяется параметрами учета. Проанализируем настройки:
Если этот флаг снят, программа обязана переводить чеки в статус Архивный. Если флаг установлен, чеки должны удаляться. Если не происходит ни того, ни другого — значит, процедура архивации прерывается из-за ошибки в данных или коде.
Одной из неочевидных причин проблемы является наличие дублей в справочнике КассыККМ. Как мы видели в обсуждении, визуально касса в чеке и в обработке закрытия смены может выглядеть одинаково, но иметь разные внутренние идентификаторы (GUID).
Проанализируем ситуацию: если в системе заведены две кассы с названием «Основная касса», и чеки пробиваются по одной, а обработка закрытия смены настроена на другую, запрос просто не увидит документы для обработки. Выясним это, проверив настройки торгового оборудования и текущего рабочего места кассира. Попробуйте перевыбрать кассу в настройках пользователя.
Как показывает практика, чаще всего подобные «глюки», когда запросы не видят данные или документы не записываются, лечатся через конфигуратор. Проанализируем алгоритм действий:
Именно этот метод помог автору темы. Часто внутренние индексы таблиц 1С повреждаются, и стандартный запрос ВЫБРАТЬ... ГДЕ КассаККМ = &КассаККМ возвращает пустой результат, даже если документы физически существуют.
Если автоматическое исправление не помогло, рассмотрим программную часть. Для поиска «зависших» чеков обычно используется запрос. Посмотрим на пример кода, который помогает определить, какие чеки программа считает пригодными для архивации:
ЗапросПоЧекам = Новый Запрос;
ЗапросПоЧекам.Текст = "
|ВЫБРАТЬ
| Док.Ссылка КАК Ссылка
|ИЗ
| Документ.ЧекККМ КАК Док
|ГДЕ
| Док.КассаККМ = &КассаККМ
| И Док.Ссылка.Проведен
| И Док.Ссылка.Дата МЕЖДУ &НачДата И &КонДата
| И НЕ (Док.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Архивный))
| И НЕ (Док.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Аннулированный))
| И НЕ (Док.Ссылка.СтатусЧекаККМ = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Отложенный))
|ДЛЯ ИЗМЕНЕНИЯ Документ.ЧекККМ";
ЗапросПоЧекам.УстановитьПараметр("КассаККМ", НужнаяКасса);
ЗапросПоЧекам.УстановитьПараметр("НачДата", НачалоДня(ДатаСмены));
ЗапросПоЧекам.УстановитьПараметр("КонДата", КонецДня(ДатаСмены));
Результат = ЗапросПоЧекам.Выполнить();
Если этот запрос не возвращает строк, хотя чеки в списке есть, следует поочередно убирать условия в секции ГДЕ. Начните с удаления условия по кассе Док.КассаККМ = &КассаККМ. Если после этого документы появились — значит, проблема в битой ссылке на кассу или в дублировании элементов справочника.
В ситуациях, когда настроен обмен между 1С:Розница и 1С:Управление торговлей, возможны конфликты прав. Выясним причину: если в УТ загружаются отчеты о розничных продажах, она может «присылать» обратно подтверждение или статус, который блокирует изменение чеков в Рознице. Проверьте журнал регистрации на предмет ошибок доступа при попытке записи объектов во время обмена.
Если нам нужно оперативно закрыть смену «здесь и сейчас», а программные методы не срабатывают, воспользуемся Групповой обработкой справочников и документов:
Архивный.Важно: этот метод является «хирургическим». Перед его применением убедитесь, что Отчет о розничных продажах за этот день уже создан вручную или автоматически, иначе вы потеряете данные о продажах в управленческом учете.
Иногда странное поведение программы (например, сообщение «смена уже закрыта», хотя чеки не заархивированы) связано с кешем пользователя. Попробуйте удалить базу из списка запуска 1С и добавить её заново. Это очистит временные файлы, которые могут содержать старые метаданные о состоянии смены и торгового оборудования.
Подводя итог, отметим, что в 90% случаев проблема в Рознице 1.0 решается именно тестированием и исправлением базы данных в конфигураторе, так как старый движок платформы чувствителен к корректности индексов при работе с большими транзакциями в момент закрытия смены.