В высоконагруженных интернет-магазинах, работающих по схеме кросс-докинга (товары под заказ), стандартные механизмы 1С:Управление торговлей 11.5 часто становятся «узким горлышком». Рассмотрим ситуацию: ежедневно поступают сотни заказов, товар принимается и должен быть мгновенно распределен. Однако на практике склад простаивает часами, ожидая формирования расходных ордеров, а менеджеры вручную переключают статусы в каждом заказе. Разберем, как автоматизировать эти процессы и ускорить работу системы в десятки раз.
Первая проблема, с которой мы сталкиваемся — необходимость вручную менять статус в строках заказа на «Отгрузить» после поступления товара. В типовой конфигурации УТ 11.5 этот процесс можно и нужно автоматизировать. Проанализируем, какие инструменты для этого подходят лучше всего.
Рассмотрим механизм «Распределения запасов». В системе существует регламентное задание, которое может автоматически распределять поступивший товар по заказам согласно приоритетам. Однако для мгновенной реакции лучше использовать расширение, которое будет срабатывать в момент проведения документа ПриобретениеТоваровУслуг. Выясним причину, почему ручной метод неэффективен: менеджер тратит время на поиск строк, которые уже «пришли», хотя система уже располагает этими данными в регистре РаспределениеЗапасов.
Разберем алгоритм автоматизации:
ЗапасыИПотребности и, если свободный остаток покрывает потребность по конкретному ЗаказуКлиента, программно менять ВариантОбеспечения на Отгрузить.Важно помнить, что статус «Отгрузить» — это лишь команда для склада. Чтобы склад увидел распоряжение, должны быть созданы складские документы.
Ситуация, когда один ордер создается 7–10 секунд, недопустима при потоке в 500+ клиентов. Проанализируем основные причины такой медлительности 1С:
Во-первых, транзакционные блокировки. При создании ордера система выполняет множество проверок: контроль остатков, проверку статусов, соответствие распоряжению. Если вы запускаете процесс пакетно, 1С пытается провести документы последовательно. Каждый следующий документ ждет, пока завершится запись движений по регистрам предыдущего.
Во-вторых, неоптимальный код поиска данных. Как часто бывает, «штатные кодеры» пишут запросы, которые ищут данные в табличных частях документов (ЗаказКлиента.Товары), вместо того чтобы обращаться к индексированным регистрам накопления. Поиск по строкам документов — это прямой путь к деградации производительности.
Рассмотрим пример того, как НЕ НУЖНО делать (поиск по ТЧ):
// Плохой пример: медленный поиск
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ * ИЗ Документ.ЗаказКлиента.Товары ГДЕ Номенклатура = &Номенклатура";
Вместо этого необходимо использовать остатки из регистров:
// Правильный пример: использование регистров с индексами
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Остатки.ЗаказКлиента ИЗ РегистрНакопления.ЗапасыИПотребности.Остатки(&МоментВремени, ) КАК Остатки";
Чтобы сократить время ожидания с 2 часов до 15 минут, мы должны заставить сервер работать параллельно. Разберем, как это реализовать. Вместо одного процесса, создающего все 500 ордеров, создадим диспетчер, который разделит список заказов на «пачки» (например, по 50 штук) и запустит их обработку в разных фоновых заданиях.
Посмотрим на пример логики запуска фоновых потоков:
ПараметрыЗадания = Новый Структура("СписокЗаказов", ТекущаяПачка);
ФоновыеЗадания.Выполнить("МойМодульСервер.СоздатьОрдераПоСписку", ПараметрыЗадания);
При таком подходе нагрузка распределяется по ядрам процессора сервера, и транзакционные ожидания минимизируются, так как потоки работают с разными группами данных.
Проанализируем ситуацию на складе: кладовщики ждут, пока распечатаются бумажки или появятся ордера в ТСД. Мы можем изменить бизнес-процесс:
Это концепция WMS (Warehouse Management System). В УТ 11.5 можно реализовать её элементы, не покупая отдельную систему, если правильно настроить рабочие места кладовщиков.
Рассмотрим еще несколько важных моментов, которые замедляют систему:
1. RLS (Record Level Security). Если у пользователя склада настроены ограничения прав на уровне записей (например, «видеть только свои заказы»), 1С будет добавлять сложные условия в каждый запрос при создании документа. Это может замедлить процесс в 2–3 раза. Решение: выполняйте процедуру создания ордеров в привилегированном модуле на стороне сервера.
2. Избыточные подписки на события. Проверьте, сколько расширений «цепляется» за проведение ордера. Часто там сидят механизмы отправки SMS, уведомлений в Telegram или пересчета каких-то аналитик. Все эти действия нужно выносить в очередь заданий, чтобы они не тормозили запись основного документа.
3. Индексация уникальных ID. Если вы используете ID строки поставщика для связи, убедитесь, что этот ID хранится в индексируемом дополнительном реквизите или измерении регистра. Без индекса поиск соответствия между «приходом» и «заказом» будет заставлять сервер перебирать миллионы строк (Full Scan), что и дает те самые 7 секунд на документ.
Для решения проблемы медленной отгрузки мы рекомендуем:
Выяснив истинную причину задержек — будь то блокировки базы данных или неоптимальный код — вы сможете обеспечить бесперебойную работу склада даже при кратном росте заказов.