В процессе работы с розничными продажами в программе «1С:Управление торговлей 11» (УТ 11) база данных неизбежно наполняется огромным количеством документов ЧекККМ. Со временем это начинает сказываться на производительности системы: отчеты формируются дольше, а размер базы растет. Для оптимизации работы предусмотрен механизм архивации — есть готовый универсальный инструмент для сжатия и обрезки баз данных. Однако часто пользователи сталкиваются с ситуацией, когда стандартная обработка или регламентное задание не переводят чеки в статус «Архивный». Рассмотрим подробно, как работает этот механизм, какие условия должны быть соблюдены и как устранить возникающие ошибки.
Прежде чем переходить к активным действиям, проанализируем, что именно происходит в системе при архивации. Важно понимать, что архивация чека — это не просто изменение его визуального статуса в списке. Основная цель процесса — очистка движений по регистрам накопления (поможет обработка массовой очистки движений документов и перепроведения) (удаление движений документов).
Когда кассир пробивает чек, документ делает записи в регистрах (например, списывает товары со склада, фиксирует выручку). В конце смены создается сводный документ ОтчетОРозничныхПродажах (ОРП), который дублирует эти движения в суммарном виде. Чтобы данные не задваивались и база «облегчилась», чеки должны быть заархивированы. После этого их движения удаляются, а за учет остатков и прибыли начинает отвечать только ОРП. Если чеки не архивируются, мы получаем ситуацию, когда данные в регистрах фактически присутствуют в двойном объеме.
Выясним главную причину, по которой чеки могут игнорировать запуск обработки архивации. Система жестко контролирует последовательность документов. Чеки не могут стать архивными, пока они не «попали» в проведенный ОтчетОРозничныхПродажах.
Проверим цепочку действий:
ОтчетОРозничныхПродажах за нужный период по конкретной кассе ККМ.Если ОРП не создан или не проведен, статус чеков не изменится. Программа считает такие чеки «оперативными», то есть единственными источниками информации о продажах за смену.
Рассмотрим ситуацию, когда условия соблюдены (ОРП есть и проведен), но при запуске архивации система выдает ошибку Ошибка при вызове метода контекста (Записать) (что бывает при сбоях настроек ОФД) или в Журнале регистрации фиксируется отмена транзакции. Разберем основные причины такого поведения.
1. Ошибки заполнения данных в ОРП. Проанализируем содержимое документа ОтчетОРозничныхПродажах — для этого подойдёт исправление ошибок в регистрах и документах 1С. Часто проблема кроется в некорректном заполнении табличных частей, которые не всегда видны на первый взгляд. Например, в табличной части «Оплата подарочными сертификатами» может быть добавлена пустая строка без указания самого сертификата или суммы. При попытке архивации система пытается пересчитать связи, натыкается на незаполненные реквизиты и прерывает операцию.
2. Дата запрета изменения данных. Проверим настройки в разделе «НСИ и администрирование» — «Поддержка и обслуживание» — «Дата запрета изменения». Если вы пытаетесь заархивировать чеки за прошлый месяц, а дата запрета установлена на конец этого месяца, система заблокирует любую попытку записи объекта ЧекККМ (так как архивация меняет его реквизиты и удаляет движения). На время проведения архивации дату запрета необходимо либо снять, либо временно сдвинуть назад.
Если регламентное задание не срабатывает, попробуем выполнить операцию «точечно» для конкретной смены. Это поможет локализовать ошибку, если она касается только одного документа.
КассоваяСмена и откроем его.Если при нажатии на эту кнопку возникает ошибка, 1С выведет подробное описание (например, укажет на нехватку прав или конфликт блокировок). Это более информативно, чем запуск общего регламентного задания.
Разберем еще один важный нюанс: почему даже после успешной архивации чеки остаются в базе? Важно разделять архивацию (очистку движений) и удаление (физическую очистку справочника/документа из БД).
Посмотрим на настройки программы:
Количество дней хранения заархивированных чеков. Если там стоит значение «0» или очень большое число, чеки будут храниться вечно, даже имея статус архивных.УдалениеЧековККМ. Именно оно отвечает за то, чтобы пометить архивные чеки на удаление по истечении срока хранения.Помните, что регламентное задание только ставит пометку на удаление. Чтобы физически стереть данные и уменьшить размер базы, необходимо запустить стандартную обработку Удаление помеченных объектов.
В современных релизах конфигурации процесс стал более автоматизированным. Рассмотрим, как настроить систему так, чтобы не возвращаться к этому вопросу вручную. В настройках розничных продаж можно установить флаг Архивировать чеки ККМ при закрытии смены. В этом случае при формировании Отчета о розничных продажах система сразу попытается очистить движения чеков.
Для контроля процесса программно можно использовать следующий алгоритм (в контексте фонового задания):
ВыборкаСмен = Документы.КассоваяСмена.Выбрать(ДатаНачала, ДатаОкончания);
Пока ВыборкаСмен.Следующий() Цикл
Если ВыборкаСмен.Статус = Перечисления.СтатусыКассовыхСмен.Закрыта Тогда
// Вызов процедуры из общего модуля РозничныеПродажи
РозничныеПродажи.ЗаархивироватьЧекиККМ(ВыборкаСмен.Ссылка);
КонецЕсли;
КонецЦикла;
Подведем итог нашему исследованию. Если чеки ККМ не архивируются:
Своевременная архивация позволит вам поддерживать базу в «здоровом» состоянии и избегать проблем с производительностью при росте объема розничных операций.