Перейти к содержанию

Алгоритмы и принципы работы

Здесь описано, как устроен модуль и откуда он берёт данные заказа. Всё, что модуль подставил, можно поменять в форме отправки: изменения сохраняются в данных модуля для этого заказа, сам заказ и карточки не меняются.

Как устроен модуль

Модуль устанавливается как внешняя обработка (Api1C.epf) и не меняет конфигурацию. При первом запуске он создаёт:

  • дополнительные сведения документов с префиксом (Api1C) — в них хранятся данные доставки заказа;
  • две дополнительные обработки: «Api1C - работа в заказе клиента» и «Api1C - фоновая работа по расписанию».

Фоновая обработка выполняет регламентные задания и содержит служебные команды:

  • «Обновить статусы (Api1C)» — обновляет статусы отправленных заказов каждые 30 минут;
  • «Обновить кэш модуля Api1C для более быстрой работы» — раз в 6–8 часов, с 7 до 23, обновляет справочные данные служб доставки (ПВЗ, тарифы и т. п.);
  • «Настройки Api1C» — открывает форму настроек модуля;
  • ПРО «Отгрузки: документы и подтверждения (Api1C)» — открывает форму «Отгрузки», не выбирая заказы в списке;
  • «Удалить настройки модуля Api1C» — только по просьбе техподдержки, например если доступ к форме настроек потерян.

Длительные операции — обновление статусов и кэша, получение документов в форме «Отгрузки» — идут в фоне, и в это время можно работать в 1С. Особых прав и настроек для этого не нужно: право на открытие внешних обработок и отключение защиты от опасных действий не требуются. Когда обновление статусов закончится, список заказов обновится сам, а результат появится во всплывающем оповещении или, если сообщений много, в отдельном окне.

Форма «Отгрузки» при открытии статусы не обновляет — показывает те, что уже записаны в базе.

Права пользователей ПРО

Как модуль проверяет права, заданные в разделе Права:

  • если у пользователя есть своя строка на вкладке «По пользователям», права его групп не учитываются;
  • права из нескольких групп складываются; учитываются и подгруппы, и группа «Все пользователи»;
  • любое право, кроме «Настройки», даёт и «Просмотр»;
  • если есть права «Расчёт» или «Отправка», но нет «Редактирование», пользователь сможет выполнять действие только при корректных данных;
  • в форме «Отгрузки» кнопки, которые меняют заказы (получение и очистка документов, подтверждение заказов, подписание поручений), доступны только с правом «Отправка»; без него они недоступны, а вызов не с кнопки заканчивается сообщением об отсутствии права;
  • форма «Вызов курьера» открывается с правом «Просмотр», а «Отправить заявку» без права «Отправка» заканчивается сообщением об отсутствии права;
  • изменить и отменить отправку, отправить заказ заново можно только с правом «Отправка» — так же, как отправить заказ;
  • если право «Настройка» не дано никому, настраивать модуль могут все пользователи. Устанавливать и обновлять модуль может только пользователь с полными правами.

Способы подключения служб

К службам доставки модуль подключается двумя способами:

  • Напрямую — модуль работает с API самой службы.
  • Через ApiShip — остальные службы (их больше 40) модуль подключает через сервис-агрегатор ApiShip: запросы к службе идут через него.

Прямое подключение стабильнее и даёт больше возможностей. Поэтому, если служба доступна обоими способами (например, «ПЭК» или «Деловые линии»), новое подключение к ней создаётся напрямую. Исключение — «Л-Пост»: его новые подключения создаются через ApiShip (если ApiShip не используется — напрямую). Какой способ использован, в модуле не видно: у службы одно название, а в списке подключения она одна.

Подключения, созданные раньше другим способом, продолжают работать в пределах лимита. Все подключения, независимо от способа, показаны в таблице раздела «Службы доставки»; для Базовой версии допускается одно подключение к службе, для ПРО — до трёх (оба способа считаются вместе). Если подключений к службе больше лимита (например, раньше были и прямое, и через ApiShip), лишние подключения ApiShip в таблицу модуля не попадут — модуль об этом сообщит; в личном кабинете ApiShip они остаются.

Аккаунт, под которым вы входите в модуль, — это аккаунт ApiShip. Если он у вас уже есть, войдите под ним. Подключения через ApiShip хранятся в аккаунте, поэтому после сброса настроек они вернутся сами, а прямые подключения придётся вводить заново; отключение такого подключения в настройках модуля удаляет его и из аккаунта. Журнал запросов к службам через ApiShip можно открыть в его личном кабинете (см. Как получить логи запросов к службам доставки).

Какое подключение службы используется ПРО

Если у службы несколько подключений (раздел Организации), модуль берёт то, в котором выбрана организация заказа, а если такого нет — подключение «для всех организаций». Если организация выбрана в нескольких подключениях или подключений «для всех организаций» несколько, модуль возьмёт одно из них — одно и то же при расчёте и при отправке.

Служба доставки

Служба нового заказа берётся в таком порядке:

  1. ПРО служба мультиотправки, если заказ в неё входит;
  2. служба из доп. сведения модуля (его заполняет обмен с сайтом; подходит код службы или её название);
  3. значение поля «Перевозчик» (в УНФ — «Служба доставки»), если оно выбрано в разделе Соответствие в 1С одного из подключений;
  4. служба пункта выдачи, если в адресе доставки есть код ПВЗ и пункт найден (см. ПВЗ по коду из адреса заказа).

Если в заказе уже есть служба, пункт по коду ищется только у неё, и служба не меняется. Если службу определить не удалось, поле остаётся пустым, и после расчёта можно сравнить тарифы всех служб. Основная служба (★) в заказ не подставляется: она влияет только на выбор тарифа.

Адрес отправки

  • Отправка от двери («Заберут со склада») — берётся адрес склада из заказа (в УНФ — структурной единицы). Если в заказе указана группа складов (УТ, КА, ERP) — адрес склада из строк товаров заказа: первый найденный, у которого адрес заполнен. По этому адресу считается тариф.
  • Отправка от ПВЗ или терминала («Привезём в терминал») — берётся ПВЗ отправки из подключения службы (какое подключение — см. Какое подключение службы используется): ПРО сначала ПВЗ, указанный для склада заказа, затем общий ПВЗ подключения. Если служба в заказе не выбрана, адрес отправки появится после расчёта и выбора тарифа.

→ Как работать: Адреса складов, ПВЗ отправки

Контакты отправителя

Контакты отправителя модуль берёт в таком порядке:

  1. из подключения службы доставки (раздел Контакты отправителя, ПРО) — если служба в заказе выбрана;
  2. из раздела Отправители настроек модуля;
  3. наименование и ИНН — из карточки организации в 1С, контактное лицо, телефон и e-mail — менеджера заказа.

Если в таблице «Отправители» указано контактное лицо, телефон и e-mail тоже берутся оттуда; без контактного лица они из таблицы не подставляются. Телефон и e-mail из подключения службы берутся каждый сам по себе, даже если контактное лицо в подключении не указано, и заменяют остальные.

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

Адрес доставки

Откуда брать адрес, задаёт настройка «Источник адреса доставки» (раздел Новые заказы): из заказа, адрес доставки клиента, почтовый или фактический адрес клиента. Если заказ пришёл с сайта, адрес лежит в доп. сведении модуля «Адрес доставки».

  • Адрес клиента (доставки, почтовый или фактический) подставляется, только если он проходит проверку по адресному классификатору. Иначе модуль сообщит, что адрес заполнен в произвольном формате.
  • Из заказа — сначала адрес из доп. сведения модуля, если его нет — из заказа. Если в адресе есть код ПВЗ, модуль ищет пункт по коду (см. ниже) и ставит способ получения «В пункт выдачи».
  • Если кода нет, а по умолчанию доставка до двери, адрес принимается, если он разложен по полям и в нём понятен город (или это иностранный адрес). Иначе модуль пробует распознать его через Dadata, если она подключена.
  • Если по умолчанию доставка в пункт выдачи, а кода в адресе нет, адрес из заказа остаётся, если в нём понятен город; пункт выбирают вручную.
  • Если ничего не получилось, адрес остаётся пустым: строка «Куда» в форме отправки отмечена красным, адрес нужно выбрать вручную.

→ Как работать: Ввод и проверка адреса

ПВЗ по коду из адреса заказа

Если заказ пришёл с сайта (Битрикс или другая CMS) и в адресе доставки есть код пункта выдачи в формате «<Адрес>#S<код>» или «<Адрес> # <код>», модуль распознаёт пункт и подставляет его адрес, код и службу доставки. Например: «Магнитогорск, ул. ТРУДА, д. 27 # 1633». Если служба доставки в заказе уже определена (выбрана или подставлена по соответствию служб из настроек), пункт ищется только у неё: служба не меняется, а если у неё пункта с таким кодом нет, пункт не подставляется. Если службы нет, берётся первый найденный пункт с этим кодом — у разных служб коды могут совпасть. Если пункт по коду не найден, адрес нужно ввести вручную.

Получатель и его контакты

При открытии формы модуль заполняет только пустые поля получателя: наименование и ИНН — из карточки контрагента, контактное лицо, его телефон и e-mail — как описано ниже. Кнопки «Заполнить как:» в строке «Кому» формы отправки перезаполняют получателя целиком.

В «Управлении торговлей», «Комплексной автоматизации» и ERP:

  1. контактное лицо — из документа, а если оно не указано — одно из контактных лиц партнёра;
  2. телефон — мобильный телефон контактного лица, а если его нет — другой телефон контактного лица;
  3. если клиент — физическое лицо, а у получателя нет ни телефона, ни e-mail, телефон, e-mail и имя берутся из карточки партнёра.

В «Управлении нашей фирмой»: если в заказе указано контактное лицо, его телефон и e-mail тоже берутся из заказа. Иначе — основное, а если его нет, другое контактное лицо контрагента; телефон и e-mail — из его карточки, то, чего в карточке нет, остаётся пустым.

Телефон получателя

Телефоны отправителя и получателя модуль приводит к одному виду для всех служб доставки. Если в поле несколько номеров (через запятую, точку с запятой или косую черту), берётся первый; добавочный номер (после доб., # или ext) отбрасывается; остаются цифры и знак + в начале. Российский номер из 11 цифр, начинающийся с 8 или 7, записывается как +7XXXXXXXXXX: например, 8 (916) 123-45-67, доб. 12 станет +79161234567. Номера других стран с + в начале остаются как есть.

Если к телефону нужно добавить что-то ещё (например, добавочный номер), напишите это в «Комментарий для службы доставки» (строка «Ещё» формы отправки).

Дополнительная информация контактного лица

Если в карточке контактного лица заполнено поле «Дополнительная информация», оно попадёт в «Комментарий для службы доставки» (в УТ, КА и ERP):

Габариты: источник и расчёт

Откуда модуль берёт вес и размеры одной единицы товара в «Управлении торговлей», «Комплексной автоматизации» и ERP:

У упаковки каждый размер и вес берутся отдельно: если у размера не указана единица измерения, значение берётся из настроек. В карточке товара в этих конфигурациях есть только длина, площадь и объём, поэтому ширину и высоту модуль вычисляет:

Задано в карточке товара Длина Ширина Высота
объём, площадь и длина длина площадь / длина объём / площадь
объём и площадь √площади √площади объём / площадь
объём и длина длина √(объём / длина) √(объём / длина)
только объём ∛объёма ∛объёма ∛объёма
площадь и длина длина площадь / длина из настроек
только площадь √площади √площади из настроек
только длина длина из настроек из настроек
ничего из настроек из настроек из настроек

Размеры округляются до целых сантиметров, но не меньше 1 см. Площадь и объём учитываются, только если у них указана единица измерения.

В «Управлении нашей фирмой» упаковок нет:

Если в заказе покупателя УНФ заполнены длина, ширина и высота, а место в заказе одно, оно получает эти размеры и вес заказа (если вес не указан — сумму веса товаров) вместо расчёта по товарам. Габариты по умолчанию для всех товаров и для мест важнее размеров заказа.

В упаковках лучше использовать целое количество единиц: дробные количества и объёмы искажают расчёт. Если в настройках включено «Использовать габариты места по умолчанию», каждое место получает эти габариты, габариты товаров для места не используются.

Если у товара нет веса или габаритов ни в базе, ни в настройках, при расчёте мест модуль сообщит, у какого товара чего не хватает, — без них служба посчитает тариф неточно или не примет заказ. Подходы к заполнению (настройки — в разделе Груз и места):

  • Одинаковые грузы — выберите «Габариты по умолчанию действуют для: всех товаров» и задайте габариты. Тогда габариты в базе можно не заполнять.
  • Частично типовые грузы — выберите «…действуют для: товаров с незаполненными габаритами». Реальные размеры задайте только у нетиповых товаров.
  • Контроль габаритов — ту же настройку, но без значений по умолчанию. Если габаритов нет, модуль выдаст ошибку — так заполнение габаритов контролируется.

Как модуль считает габариты места

Габариты места модуль считает методом «кучи»: укладывает товары компактно, не давая одному измерению расти чрезмерно. Поэтому 10 пар лыж не дадут длину места 18 м, а монитор, клавиатура и мышь дадут «куб», близкий к размеру монитора.

Оплата и наложенный платёж

Отметку «Заказ оплачен» в новом заказе ставит настройка «Оплата» (раздел Новые заказы). «Доставка для клиента» заполняется из служебных услуг или ПРО из суммы тарифа с наценкой, если в подключении службы включено «Сумму тарифа оплачивает клиент» (см. Шаг 3. Тариф и параметры). Сумму, изменённую вручную, пересчёт не заменяет: модуль сравнивает её с суммой, которую сам подставил из тарифа, а после повторного открытия заказа - с суммой по тарифу, сохранённому в заказе.

Например, стоимость заказа — 1000 ₽, доставка для клиента — 333 ₽, тариф службы — 150 ₽:

  • клиент платит всё → служба берёт с получателя 1000 + 333 ₽, отправителю возвращают 1183 ₽;
  • отправитель платит всё → клиент платит 0, отправитель — 150 ₽;
  • заказ оплачен, доставка платная → клиент платит 333 ₽;
  • заказ с бесплатной доставкой → клиент платит 1000 ₽, отправитель — 150 ₽.

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

Как считаются сумма заказа, доставка для клиента и наложенный платёж:

Наложенный платёж — это доставка для клиента плюс сумма заказа, если заказ не оплачен. В УНФ к доставке для клиента добавляется ещё поле «Стоимость доставки» заказа — независимо от настройки служебных услуг; если в одну отправку сгруппировано несколько заказов, их стоимости доставки складываются. ПРО Если в подключении службы включено «Сумму тарифа оплачивает клиент», после расчёта «Доставка для клиента» заполняется суммой тарифа с наценкой — и у оплаченного заказа тоже.

Служебные услуги

Служебные услуги — номенклатура, которой в заказах обозначают доставку (например, «Доставка товара»). Их задают в разделе Отправка настроек: включите «Использовать служебные услуги» и добавьте номенклатуру в таблицу. Подойдёт только номенклатура с типом «Услуга».

При отправке модуль ищет эту номенклатуру в товарах заказа. Если нашёл, её сумма вычитается из суммы товаров и передаётся в службу как стоимость доставки для клиента — в накладной она будет в поле «Стоимость доставки». Поддерживается не всеми службами.

У оплаченного заказа клиент доставку уже оплатил: при первом открытии «Доставка для клиента» обнуляется, и наложенным платежом за доставку ничего не берётся. Сумму, которую вы ввели и сохранили вручную, модуль не меняет.

Даты и время

Если в разделе Новые заказы включено «Заполнять даты доставки и отправки автоматически», при открытии формы неотправленного заказа пустые и прошедшие даты заменяются: дата отправки — сегодняшняя (после 18:00 — завтрашняя), дата доставки — на день позже отправки. О каждой замене модуль сообщает. ПРО Пустое время берётся из настройки «Время по умолчанию». Некоторым службам (например, «Деловым линиям») время отправки обязательно — если его нет, модуль подставит с 10 до 18 ч. В остальных случаях время отправки заполняйте, только если точно знаете, что оно нужно.

Какой тариф модуль выбирает сам

После расчёта модуль выбирает тариф так:

  1. тариф по умолчанию из настроек подключения службы — если он есть среди рассчитанных;
  2. самый дешёвый тариф основной службы (со звёздочкой в разделе «Службы доставки» настроек) — это важно, когда служба в заказе не выбрана и расчёт идёт по всем службам;
  3. самый дешёвый тариф среди всех рассчитанных;
  4. если цену не назвала ни одна служба — первый тариф.

Какой вариант сработал, модуль пишет над таблицей тарифов в правой части формы. Тариф, выбранный вручную, остаётся до следующего расчёта: после «Пересчитать» модуль выбирает тариф заново.

Номер заказа в службе доставки

Номер заказа в службе — это номер документа в 1С, а если в заказе заполнен «Номер по данным клиента» (например, заказ пришёл с сайта), — он. Если в разделе Отправка включено «Добавлять дату к номеру заказа», к номеру добавляется дата: 1С каждый год начинает нумерацию заново, и без даты номера в службе начнут повторяться. Выключайте это, только если номера в базе уже уникальны. Номер можно поменять в строке «Ещё» формы отправки.

Если при восстановлении утерянных данных (раздел Обслуживание) нашлись не все заказы, поменяйте настройку «Добавлять дату к номеру заказа», сохраните, запустите восстановление ещё раз и верните настройку.