Контекст
При получении от эмитента коды маркировки записываются в базе 1С в регистр сведений ПулКодовМаркировкиСУЗ регламентным заданием «Отправка и получение данных ИС МП».
Параллельно задание «БИТ.МДТ. Обработка очереди эмиссии по заказам» заполняет регистры битмдт_ItemIDs и битмдт_MarkEvents.
Мобильное приложение получает коды для печати из регистра КодыМаркировкиЗаданийНаПроизводство, который заполняется заданием «БИТ.МДТ. Проведение заданий на участок» и затем копируется на устройства.
Коды резервируются в разрезе заданий, устройств и назначений (например, для печати кодов вложений и агрегатов с одной станции).
Если принтеры не поддерживают определённые символы, часть кодов отбрасывается — для Yeacode потери достигают 25% от заказанных кодов.
Регламентное задание резервирует коды по принципу FIFO, с учётом настройки «Максимум дней с эмиссии кода для резервирования в задание».
Таким образом, при наличии незарезервированных пулов резервирование может пройти без ожидания новых кодов от «Честного ЗНАКа».
Свободные коды появляются:
- из-за увеличения количества кодов в заказе на эмиссию (настройка «Коэффициент увеличения числа кодов в заказе на эмиссию»);
- при отмене заданий, что освобождает нераспечатанные коды.
На практике пользователи формируют задания с запасом, поэтому чаще всего коды из локального пула становятся недостаточны и система ждёт эмиссию новых.
Проблема
- Большая задержка между проведением задания и появлением кодов на панели оператора.
- Высокая нагрузка на сервер 1С и СУБД.
- Раздутый размер базы данных.
Причины:
- Тяжёлые запросы при поиске свободных кодов в больших пулах
- Дублирование данных при копировании кодов между регистрами
- Асинхронная работа резервирования и эмиссии — иногда происходит запаздывание или холостая работа
Решение
- Перейти на модель «заказ-под-заказ» при резервировании кодов. Для экстренных случаев разработать подсистему поддержания страхового запаса кодов.
- Отбрасывать неподходящие коды уже на этапе записи в ПулКодовМаркировкиСУЗ
- Хранить не полный набор кодов, а блоки кодов в новом регистре битмдт_БлокиКодовЗаданийНаПроизводство, с разделением по назначению и устройствам.
- Наполнять его заданием «Обработка очереди эмиссии по заказам»
- Проведение задания проверяет только достаточность кодов и при необходимости создаёт новые заказы на эмиссию
- Мобильные устройства продолжают работать с той же таблицей, но данные теперь формируются «на лету».
- Для ускорения добавить в битмдт_MarkIDs реквизиты КодМаркировки и ХешСуммаКодаМаркировки.
- Нужны для эффективного соединения с ПулКодовМаркировкиСУЗ.
- Минусы:
- При обновлении потребуется реструктуризация в пределах часа
- Возможен рост таблицы на ~50%, но это не самая большая таблица в БД, а большой РС КодыМаркировкиЗаданийНаПроизводство можно удалить.
- Наполнение — обработчиком обновления, работающим с конца (несколько суток для крупных клиентов).
Будут описаны отдельно
- Переходные сценарии (старые заказы, незавершённое резервирование)
- Работа с виртуальной агрегацией
- Работа с КИТУ (повторное использование приведет к фрагментации блоков)