Как почистить справочник Штрихкоды упаковок и товаров и ускорить работу 1С:Розница в РИБ

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

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

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

Почему возникают блокировки при сканировании маркировки?

Проанализируем ситуацию: в файловых базах 1С используется механизм Table Lock (блокировка всей таблицы). Чтобы объективно оценить масштаб проблемы, полезно выполнить удобное добавление ключевых операций в профиль производительности (APDEX). Когда выполняется любая запись в справочник (например, при загрузке данных через РИБ или при попытке системы обновить статус кода маркировки), блокируется вся таблица Штрихкоды упаковок и товаров. Если в этот же момент кассир сканирует марку, система пытается найти ее в базе или создать новую запись, но натыкается на блокировку, установленную процессом обмена.

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

Способ 1. Использование типовой обработки очистки

Мало кто знает, что в современных релизах 1С на базе БСП уже заложены механизмы борьбы с этой проблемой. Разберем, как найти и использовать встроенный инструмент очистки.

Найдем через «Функции для технического специалиста» (ранее «Все функции») обработку ОчисткаУстаревшихКодовМаркировки. Этот инструмент позволяет:

  1. Проанализировать базу на наличие кодов, которые уже были реализованы или списаны, используя запрос остатков из системы «Честный знак» — для этого подойдёт обработка сверки и списания кодов маркировки.
  2. Удалить записи, на которые нет активных ссылок в актуальных документах, предварительно выполнив запрос списка кодов маркировки и списание.
  3. Настроить автоматическое регламентное задание, которое будет «подчищать» хвосты в ночное время.

Важно помнить: в 1С:Розница 2.3 записи справочника Штрихкоды упаковок и товаров могут быть связаны с документами Чек ККМ и Отчет о розничных продажах. Типовое удаление не сработает, если ссылка на код есть в документе. Однако для молочной продукции с коротким сроком годности хранение марок месячной давности не имеет практического смысла.

Способ 2. Программная очистка справочника

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


Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |	Штрихкоды.Ссылка КАК Ссылка
    |ИЗ
    |	Справочник.ШтрихкодыУпаковокТоваров КАК Штрихкоды
    |ГДЕ
    |	Штрихкоды.ДатаСоздания < &ДатаОтсечки";

Запрос.УстановитьПараметр("ДатаОтсечки", ДобавитьМесяц(ТекущаяДата(), -2));
Результат = Запрос.Выполнить().Выбрать();

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

После пометки на удаление необходимо запустить стандартную процедуру Удаление помеченных объектов — ускоряет этот процесс обработка безопасного удаления объектов с контролем ссылок. Если система отказывается удалять из-за ссылок в чеках, можно воспользоваться «хитрым» методом: вместо удаления элемента — очищать только строковое значение самого кода маркировки в реквизитах элемента, оставляя саму «пустышку» справочника. Это позволит сохранить целостность ссылок, но значительно облегчит поиск по индексам (так как пустые или короткие строки индексируются быстрее).

Способ 3. Оптимизация РИБ и регламента обменов

Как мы выяснили, основной виновник блокировок — фоновый обмен данными. Чтобы минимизировать влияние обмена на работу кассы, проанализируем следующие рекомендации:

  1. Изменение расписания: Настройте синхронизацию таким образом, чтобы она не запускалась в часы пиковой нагрузки. Оптимально — полная синхронизация ночью и короткие сессии обмена (только чеки) в течение дня.
  2. Частота сеансов: Как ни парадоксально, иногда помогает увеличение частоты обменов. Если обмен идет каждые 5-10 минут, объем данных в одном пакете невелик, и транзакция записи проходит за секунды, не успевая вызвать ошибку блокировки у кассира.
  3. Фильтрация данных: В настройках узла РИБ можно ограничить передачу справочника Штрихкоды упаковок и товаров. Зачем магазину №20 знать о штрихкодах упаковок, проданных в магазине №1? Настройте фильтры по подразделениям, чтобы в локальные файловые базы улетала только необходимая информация.

Обслуживание файловой базы после очистки

Просто удалить записи недостаточно. Файловая база 1Cv8.1CD устроена так, что при удалении данных физический размер файла не уменьшается — на месте удаленных записей остаются «дырки». Это приводит к фрагментации данных и не дает прироста скорости. Выясним, что нужно сделать после массовой чистки:

1. Тестирование и исправление (ТиИ): Обязательно запустите конфигуратор и выберите пункт Сжатие таблиц. Только после этой процедуры файловая база реально уменьшится в объеме, а индексы будут перестроены оптимальным образом.

2. Дефрагментация диска: Поскольку SSD чувствительны к свободному месту, убедитесь, что после сжатия базы на диске достаточно пространства для маневров операционной системы.

Технологический апгрейд: PostgreSQL на слабом железе

Если чистка помогает ненадолго, стоит рассмотреть переход с файлового режима на клиент-серверный. Даже на слабом железе (типа Celeron J1900 с 4 Гб ОЗУ) связка Linux (Debian/Ubuntu) + PostgreSQL + Сервер 1С (64-бит) может работать стабильнее файловой базы.

Почему это помогает? PostgreSQL поддерживает блокировку на уровне строк (Row Lock). Когда один процесс записывает новые штрихкоды, кассир может спокойно читать другие строки той же таблицы без возникновения конфликтов. На 4 Гб оперативной памяти такая связка потребует тщательной настройки shared_buffers и max_connections, но она полностью решит проблему «тормозов» при сканировании.

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

← На главную