При работе в высоконагруженных розничных точках база данных 1С:Розница быстро накапливает огромный объем информации. Например, при интенсивности в 10–12 тысяч чеков в день за несколько месяцев база может вырасти до критических размеров (5 Гб и более), что существенно замедляет работу интерфейса кассира (РМК), поиск товаров и проведение документов. В таких ситуациях целесообразно рассмотреть использование программы как «легкого» фронт-офиса, где хранятся только актуальные данные, а старые документы регулярно удаляются.
Разберем подробно механизм организации ежедневной свертки, который позволяет поддерживать базу в компактном состоянии, сохраняя при этом актуальные остатки и возможность работы кассира без задержек.
Рассмотрим схему, при которой в базе фронт-офиса хранятся документы только за последние 60 дней. Этого периода обычно достаточно для оперативной работы и оформления возвратов. Основная идея заключается в замене «тяжелых» документов прошлых периодов (чеков и отчетов о розничных продажах) на агрегированные движения в документах типа КорректировкаРегистров.
Проанализируем пошагово процесс реализации этой задачи:
КорректировкаРегистров. В нем создаются движения по всем необходимым регистрам (товары на складах, денежные средства, расчеты с покупателями). Это будет нашей точкой отсчета.ПоступлениеТоваров за последние 2 месяца лучше оставить для контроля. Продажи в текущем периоде проводятся штатно через ЧекККМ и ОтчетОРозничныхПродажах.КорректировкаРегистров, который отвечает за начальные остатки.ЧекККМ и ОтчетОРозничныхПродажах.Помимо очистки данных, для эффективной работы фронт-офиса необходимо доработать само РМК. Проанализируем ключевые изменения, которые помогут ускорить обслуживание покупателей в условиях большой номенклатуры:
Во-первых, следует отказаться от использования динамических списков при подборе товаров, если количество характеристик и остатков велико. Выясним причину: динамические списки генерируют сложные SQL-запросы, которые могут «подтормаживать» при поиске. Лучше использовать упрощенные формы подбора с прямым запросом к остаткам.
Во-вторых, настроим следующие функции в интерфейсе:
РКО при проведении операции внесения денежных средств.Одной из главных сложностей при ежедневной свертке является оформление возврата товара, купленного более 60 дней назад. Поскольку исходный чек удален, штатный механизм 1С:Розница не сможет найти основание для заполнения цен и скидок.
Рассмотрим варианты решения этой проблемы:
Вариант А: Хранение «мини-копий» чеков. Вместо полного удаления документа, можно записывать ключевые данные (артикул, цена, примененная скидка, номер чека, дата) в отдельный компактный РегистрСведений. При попытке сделать возврат система будет искать данные не в документах, а в этом регистре. Это позволит сохранить функциональность возврата без «засорения» базы тяжелыми объектами.
Вариант Б: Синхронизация с бэк-офисом. Если в магазине есть устойчивая связь с центральной базой (например, Управление торговлей), можно реализовать HTTP-запрос к бэк-офису для получения данных по старому чеку в момент оформления возврата.
Важно понимать, что программное удаление объектов в 1С (особенно в файловом варианте) не приводит к немедленному уменьшению размера файла базы данных 1Cv8.1CD. Проанализируем необходимые регламентные действия:
Для файловой базы необходимо регулярно выполнять процедуру «Сжатие таблиц» через конфигуратор (Тестирование и исправление) или использовать утилиту chdbfl.exe. Если база работает на MS SQL Server или PostgreSQL, после массового удаления документов обязательно нужно выполнить команду SHRINKDATABASE (или аналогичную для вашей СУБД) и пересчитать статистику индексов.
Посмотрим на пример кода, который может быть частью обработки по очистке старых движений:
// Пример программного удаления документов и корректировки итогов
Процедура ОчиститьСтарыеЧеки(ДатаСреза)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Чеки.Ссылка КАК Ссылка
|ИЗ
| Документ.ЧекККМ КАК Чеки
|ГДЕ
| Чеки.Дата < &ДатаСреза";
Запрос.УстановитьПараметр("ДатаСреза", ДатаСреза);
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
// Здесь должна быть логика переноса движений в документ корректировки
// ...
Попытка
ОбъектЧека = Результат.Ссылка.ПолучитьОбъект();
ОбъектЧека.УстановитьПометкуУдаления(Истина);
ОбъектЧека.Удалить(); // Непосредственное удаление
Исключение
ЗаписьЖурналаРегистрации("Ошибка удаления чека", УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
КонецПроцедуры
При использовании распределенных информационных баз (РИБ) существует риск удалить документ на кассе до того, как он успеет выгрузиться в бэк-офис. Выясним, как этого избежать.
Перед удалением документа необходимо проверять статус его миграции. В правилах очистки следует добавить условие: удалять только те документы, которые помечены как «успешно переданные» в центральный узел. Это гарантирует, что данные для аналитики и бухгалтерского учета в бэк-офисе останутся в целостности.
Резюме: Перевод 1С:Розница в режим фронт-офиса с ежедневной сверткой превращает систему в аналог профессиональных POS-систем (таких как Frontol), сохраняя при этом гибкость платформы 1С для доработок под конкретные нужды бизнеса (бонусные программы, планы продаж и т.д.). Основное внимание при реализации стоит уделить сохранению данных для возвратов и контролю успешности обмена данными.