Как организовать привязку покупателей к маршрутам доставки и агентов в 1С

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

В дистрибьюторских и оптово-розничных компаниях часто возникает ситуация, когда один и тот же контрагент обслуживается несколькими торговыми агентами, отгружается с разных складов или может попадать в различные рейсы доставки в зависимости от дня недели. Попытка добавить простое поле Маршрут в карточку контрагента или в документ заказа быстро заходит в тупик: операторам не хватает данных для правильного выбора, а автоматическая загрузка заявок от агентов порождает коллизии. Разберем, как правильно спроектировать подсистему маршрутизации в 1С, избежать типичных ошибок и автоматизировать распределение заказов.

Разделение понятий: коммерческий маршрут и логистический рейс

Главная архитектурная ошибка при проектировании учета доставки — смешивание маршрута торгового представителя и маршрута автомобиля службы доставки. Проанализируем ключевые различия этих процессов:

  1. Коммерческий маршрут торгового агента. Это график посещения торговых точек представителем компании для сбора заказов, контроля выкладки и сверки взаиморасчетов. Он жестко привязан к сотруднику (агенту), дню недели и географической последовательности обхода.
  2. Логистический маршрут доставки. Это фактический рейс транспортного средства, который формируется по уже собранным заказам. Он зависит от расположения склада отгрузки, весогабаритных характеристик товара, грузоподъемности автомобиля и дорожной ситуации. При этом один автомобиль может везти заказы, собранные пятью разными агентами.

Если привязать реквизит Маршрут непосредственно в документ ЗаказПокупателя, при любой поломке машины или перераспределении логистом рейса придется редактировать и перепроводить коммерческие заказы. Это приводит к лишним транзакционным блокировкам базы данных и искажению истории заказов. Заказ покупателя должен хранить только пункт разгрузки, желаемый интервал времени и склад отгрузки.

Организация структуры данных: справочник пунктов доставки и зоны обслуживания

Рассмотрим структуру справочников и регистров, позволяющую гибко настраивать обслуживание клиентов без дублирования информации. Контрагент может иметь юридический адрес, но доставка всегда осуществляется в конкретную географическую точку. Поэтому базовой сущностью является точка выгрузки.

Разберем по шагам создание необходимых объектов конфигурации:

  1. Справочник «Пункты доставки» (или «Точки доставки»). Подчиняется справочнику Контрагенты. Содержит реквизиты: фактический адрес, географические координаты (широта и долгота), временное окно приемки груза, контактное лицо на точке и ссылку на логистическую зону (участок).
  2. Справочник «Зоны доставки» (или «Участки маршрута»). Представляет собой атомарную единицу логистического деления (например, район города, поселок, микрорайон). За каждым пунктом доставки жестко закрепляется одна зона.
  3. Регистр сведений «Матрица обслуживания торговыми агентами». Независимый периодический регистр со следующей структурой:
    1. Измерения: ТочкаДоставки, ДеньНедели, ОптоваяБаза (или Подразделение).
    2. Ресурсы: ТорговыйПредставитель, ПорядокОбхода.

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

Схема работы с динамическими маршрутными листами

Вместо жестко зафиксированных списков контрагентов в рейсе наиболее эффективна схема динамического планирования доставки. Посмотрим, как строится рабочий процесс:

  1. Сбор потребностей. В течение дня в базу 1С поступают документы ЗаказПокупателя. В каждом заказе заполнены реквизиты Контрагент, ПунктДоставки, а также рассчитаны общий вес и объем заказанных позиций.
  2. АРМ логиста по распределению доставок. Специальная обработка выбирает все неотгруженные заказы на выбранную дату доставки и группирует их по полю ПунктДоставки.Зона. Логист видит суммарный тоннаж и кубатуру по каждому сектору.
  3. Формирование документа «Маршрутный лист». Логист распределяет зоны или отдельные заказы по доступным автомобилям с учетом грузоподъемности. В документ МаршрутныйЛист добавляются строки с заказами, назначаются водитель, экспедитор и автомобиль.
  4. Складская комплектация и отгрузка. На основании утвержденного маршрутного листа формируются сводные ведомости сборки и документы РеализацияТоваровУслуг.

Пример алгоритма выборки заказов по зонам для маршрутизации

Рассмотрим пример запроса на встроенном языке 1С, который может использоваться в автоматизированном рабочем месте логиста для группировки заказов по зонам доставки и расчета весогабаритных характеристик:


Запрос = Новый Запрос;
Запрос.Текст = 
	"ВЫБРАТЬ
	|	Заказ.Ссылка КАК ЗаказПокупателя,
	|	Заказ.Контрагент КАК Контрагент,
	|	Заказ.ПунктДоставки КАК ПунктДоставки,
	|	Заказ.ПунктДоставки.Зона КАК ЗонаДоставки,
	|	Заказ.ПунктДоставки.Адрес КАК АдресДоставки,
	|	ВЫРАЗИТЬ(Заказ.СуммаДокумента КАК ЧИСЛО(15, 2)) КАК СуммаЗаказа,
	|	ЕСТЬNULL(ВложенныйЗапрос.ВесЗаказа, 0) КАК ВесИтого,
	|	ЕСТЬNULL(ВложенныйЗапрос.ОбъемЗаказа, 0) КАК ОбъемИтого
	|ИЗ
	|	Документ.ЗаказПокупателя КАК Заказ
	|	ЛЕВОЕ СОЕДИНЕНИЕ (
	|		ВЫБРАТЬ
	|			Состав.Ссылка КАК Ссылка,
	|			СУММА(Состав.Количество * Состав.Номенклатура.Вес) КАК ВесЗаказа,
	|			СУММА(Состав.Количество * Состав.Номенклатура.Объем) КАК ОбъемЗаказа
	|		ИЗ
	|			Документ.ЗаказПокупателя.Товары КАК Состав
	|		СГРУППИРОВАТЬ ПО
	|			Состав.Ссылка
	|	) КАК ВложенныйЗапрос
	|	ПО Заказ.Ссылка = ВложенныйЗапрос.Ссылка
	|ГДЕ
	|	Заказ.Проведен = ИСТИНА
	|	И Заказ.ДатаОтгрузки = &ПараметрДатаДоставки
	|	И Заказ.Ссылка НЕ В (
	|		ВЫБРАТЬ
	|			СоставМаршрута.Заказ
	|		ИЗ
	|			Документ.МаршрутныйЛист.Заказы КАК СоставМаршрута
	|		ГДЕ
	|			СоставМаршрута.Ссылка.Проведен = ИСТИНА
	|	)
	|УПОРЯДОЧИТЬ ПО
	|	ЗонаДоставки,
	|	Контрагент";

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

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

Ограничения платформы 1С и внешняя оптимизация

При масштабировании логистической подсистемы важно понимать границы возможностей платформы 1С:

  1. Сложность математических расчетов (VRP). Задача расчета оптимального пути объезда (Vehicle Routing Problem) является NP-трудной. Встроенный язык 1С не предназначен для тяжелых итерационных вычислений на графах. Попытка рассчитать оптимальный маршрут для автопарка из десятков машин встроенными средствами приведет к длительному зависанию пользовательского интерфейса.
  2. Отсутствие дорожного графа. В платформе 1С отсутствуют встроенные карты дорог с учетом знаков, скоростных ограничений, одностороннего движения и мостов. Расчет расстояний по прямой (по координатам широты и долготы) дает систематическую погрешность до 30–50%.
  3. Интеграция с внешними сервисами. Для автоматического упорядочивания точек внутри документа МаршрутныйЛист рационально использовать внешние сервисы маршрутизации. База 1С через HTTPСоединение передает координаты пунктов доставки, временные окна и вес груза на внешний сервер (например, OSRM, VROOM или картографические API), а обратно получает уже готовую последовательность посещения адресов с рассчитанным километражем.

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

← На главную