В дистрибьюторских и оптово-розничных компаниях часто возникает ситуация, когда один и тот же контрагент обслуживается несколькими торговыми агентами, отгружается с разных складов или может попадать в различные рейсы доставки в зависимости от дня недели. Попытка добавить простое поле Маршрут в карточку контрагента или в документ заказа быстро заходит в тупик: операторам не хватает данных для правильного выбора, а автоматическая загрузка заявок от агентов порождает коллизии. Разберем, как правильно спроектировать подсистему маршрутизации в 1С, избежать типичных ошибок и автоматизировать распределение заказов.
Главная архитектурная ошибка при проектировании учета доставки — смешивание маршрута торгового представителя и маршрута автомобиля службы доставки. Проанализируем ключевые различия этих процессов:
Если привязать реквизит Маршрут непосредственно в документ ЗаказПокупателя, при любой поломке машины или перераспределении логистом рейса придется редактировать и перепроводить коммерческие заказы. Это приводит к лишним транзакционным блокировкам базы данных и искажению истории заказов. Заказ покупателя должен хранить только пункт разгрузки, желаемый интервал времени и склад отгрузки.
Рассмотрим структуру справочников и регистров, позволяющую гибко настраивать обслуживание клиентов без дублирования информации. Контрагент может иметь юридический адрес, но доставка всегда осуществляется в конкретную географическую точку. Поэтому базовой сущностью является точка выгрузки.
Разберем по шагам создание необходимых объектов конфигурации:
Контрагенты. Содержит реквизиты: фактический адрес, географические координаты (широта и долгота), временное окно приемки груза, контактное лицо на точке и ссылку на логистическую зону (участок).ТочкаДоставки, ДеньНедели, ОптоваяБаза (или Подразделение).ТорговыйПредставитель, ПорядокОбхода.Такая связка гарантирует: когда мобильное приложение агента выгружает заявку, система однозначно идентифицирует агента и точку доставки, не требуя от оператора ручного ввода маршрута.
Вместо жестко зафиксированных списков контрагентов в рейсе наиболее эффективна схема динамического планирования доставки. Посмотрим, как строится рабочий процесс:
ЗаказПокупателя. В каждом заказе заполнены реквизиты Контрагент, ПунктДоставки, а также рассчитаны общий вес и объем заказанных позиций.ПунктДоставки.Зона. Логист видит суммарный тоннаж и кубатуру по каждому сектору.МаршрутныйЛист добавляются строки с заказами, назначаются водитель, экспедитор и автомобиль.РеализацияТоваровУслуг.Рассмотрим пример запроса на встроенном языке 1С, который может использоваться в автоматизированном рабочем месте логиста для группировки заказов по зонам доставки и расчета весогабаритных характеристик:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Заказ.Ссылка КАК ЗаказПокупателя,
| Заказ.Контрагент КАК Контрагент,
| Заказ.ПунктДоставки КАК ПунктДоставки,
| Заказ.ПунктДоставки.Зона КАК ЗонаДоставки,
| Заказ.ПунктДоставки.Адрес КАК АдресДоставки,
| ВЫРАЗИТЬ(Заказ.СуммаДокумента КАК ЧИСЛО(15, 2)) КАК СуммаЗаказа,
| ЕСТЬNULL(ВложенныйЗапрос.ВесЗаказа, 0) КАК ВесИтого,
| ЕСТЬNULL(ВложенныйЗапрос.ОбъемЗаказа, 0) КАК ОбъемИтого
|ИЗ
| Документ.ЗаказПокупателя КАК Заказ
| ЛЕВОЕ СОЕДИНЕНИЕ (
| ВЫБРАТЬ
| Состав.Ссылка КАК Ссылка,
| СУММА(Состав.Количество * Состав.Номенклатура.Вес) КАК ВесЗаказа,
| СУММА(Состав.Количество * Состав.Номенклатура.Объем) КАК ОбъемЗаказа
| ИЗ
| Документ.ЗаказПокупателя.Товары КАК Состав
| СГРУППИРОВАТЬ ПО
| Состав.Ссылка
| ) КАК ВложенныйЗапрос
| ПО Заказ.Ссылка = ВложенныйЗапрос.Ссылка
|ГДЕ
| Заказ.Проведен = ИСТИНА
| И Заказ.ДатаОтгрузки = &ПараметрДатаДоставки
| И Заказ.Ссылка НЕ В (
| ВЫБРАТЬ
| СоставМаршрута.Заказ
| ИЗ
| Документ.МаршрутныйЛист.Заказы КАК СоставМаршрута
| ГДЕ
| СоставМаршрута.Ссылка.Проведен = ИСТИНА
| )
|УПОРЯДОЧИТЬ ПО
| ЗонаДоставки,
| Контрагент";
Запрос.УстановитьПараметр("ПараметрДатаДоставки", НачалоДня(ТекущаяДатаДоставки));
Результат = Запрос.Выполнить().Выгрузить();
В приведенном алгоритме мы соединяем коммерческий заказ с реквизитами пункта доставки, рассчитываем суммарный вес и объем по номенклатурным позициям и сразу исключаем заказы, которые уже включены в ранее проведенные документы МаршрутныйЛист.
При масштабировании логистической подсистемы важно понимать границы возможностей платформы 1С:
МаршрутныйЛист рационально использовать внешние сервисы маршрутизации. База 1С через HTTPСоединение передает координаты пунктов доставки, временные окна и вес груза на внешний сервер (например, OSRM, VROOM или картографические API), а обратно получает уже готовую последовательность посещения адресов с рассчитанным километражем.Использование связки из справочника точек доставки, зонирования территорий и документа МаршрутныйЛист полностью решает проблему неоднозначности маршрутов, исключает рутинные ошибки операторов и обеспечивает прозрачное разделение труда торговых агентов и службы логистики.