Недавно возникла необходимость интеграции с СДЭК по протоколу 2.0. Поиски готового решения ни к чему не привели. В двух словах, все, что стоит внимания, либо старое, либо с закрытым кодом. Это повергло меня в печаль и побудило сделать эту публикацию по СДЭК. Надеюсь, она кому-то поможет не заниматься изобретением велосипеда, как пришлось это делать мне. При реализации использовалась документация: https://api-docs.cdek.ru/29923926.html
Приступая к работе, кроме поддержки необходимого набора функций, я ставил перед собой три конкретные цели:
1. Обеспечить максимально полную диагностику ошибок процесса. Чтобы минимизировать количество ситуаций, когда отправление не регистрируется и непонятно, почему.
2. Обеспечить максимально удобный и быстрый доступ к данным, необходимым для регистрации отправления. Чтобы не приходилось делать миллион кликов для того, чтобы добраться до нужного места. В идеале - все на одном экране. Это касается, прежде всего, адреса с обеих сторон, весогабаритов и телефона получателя.
3. Обойтись без изменения конфигурации. В идеале - должно работать на большинстве типовых конфигураций.
Очень старался этих целей достигнуть. Чем закончились мои старания - судить вам.
Решение состоит из двух частей. Первая часть - небольшое расширение с модулем и парой регистров. Нужно было где-то хранить статусы отправлений и параметры тарифов. Вторая часть - обработка с примерами использования функций модуля с максимальной эффективностью. Получилась вещь вполне рабочая на типовой конфигурации и при условии, что надо работать только с СДЭК.
На универсальность, в плане работы с разными перевозчиками, данное решение не претендует. Однако, на то и существуют напильники, чтобы допиливать.
Остановлюсь на вопросах, связанных с возможной кастомизацией данного решения, чуть подробнее:
1. В обработке, на вкладке "Партнер СДЭК", выбирается (создается) партнер. Для партнера создаются дополнительные свойства. Заполняются параметры подключения. После сохранения программа считает, что это СДЭК. Далее идет работа с теми документами, где соответствующим образом заполнен реквизит "ПеревозчикПартнер". Выбрать накладные для перевозки можно в обработке на вкладке "Выбор реализации".
2. В качестве документа для отправки используется "РеализацияТоваровУслуг". Для него создаются дополнительные свойства для хранения УИДов, ссылок и сообщений СДЭК. Кто-то отправляет заказ. Кто то делает свой специализированный документ передачи. Кто то еще чего то придумывает. Тут полная свобода. Напильник в руки. Для грамотного программиста переделка несложная.
3. В качестве адреса получателя используется реквизит документа "АдресДоставки".
4. В качестве телефона получателя используется телефон партнера из контактной информации.
5. В качестве адреса отправителя используется адрес реквизита документа "Склад" (из контактной информации).
6. Вес и габариты хранятся в создаваемых дополнительных свойствах номенклатуры. Кто то пользуется штатным механизмом упаковок, кто-то создает реквизиты в справочнике номенклатуры. В общем тут поступаем как в предыдущем пункте. Модуль структурирован. Все функции подробно описаны. Будет несложно переделать базовый запрос и соответствующие процедуры.
7. Веса и габариты хранятся и вводятся сразу в граммах и сантиметрах - как необходимо для СДЭК. Интерактивных средств ввода данных достаточно для демонстрации возможностей решения. В реальной жизни можно допилить то, в каких единицах вводить и хранить данные, и то как они будут попадать в базу.
8. Список документов для регламентного обновления статусов пока реализован упрощенно. Берутся накладные за последние несколько месяцев. Это может быть накладно. Когда (при каком статусе) свойства документа надо прекращать обновлять каждый может решить сам и допилить по вкусу. Обращаю на это внимание на случай если тест будет проходить на демо-базе со старыми накладными. Они регзаданием обновляться не будут. Освежите дату или жмите кнопку.
9. Следует иметь в виду что обработка, в основном, контролирует заполненность данных, необходимых для регистрации отправки. Полноценная валидация во многих случаях не выполняется. При таком раскладе информацию о причинах отказа в регистрации надо читать в окне комментария к статусу отправки.
Реализованные полезные функции:
1. Само собой, авторизация. Для экономии трафика реализовано хранение токена во внешних настройках. Пример использования в обработке. Если токен рабочий, то повторно он запрашиваться не будет. При "протухании" токен автоматически обновляется.
2. Калькулятор доступных тарифов. Используется в функции автоматического выбора тарифа и в обработке для выбора тарифов из списка. В запросе калькулятора используются почтовые индексы. Поэтому так важно использовать "правильные" адреса, а не произвольный набор слов, как любят делать некоторые. Индекс выцепляется из адреса путем обращения к JSON строке или из первых шести символов представления адреса (если это цифры).
3. Регистрация отправления с автоматическим или ручным выбором тарифа. Автоматически выбирается тариф нужного типа из доступных для данного отправления, с минимальной стоимостью и содержащийся в регистре выбранных тарифов. Если тариф заполнен руками, то автоматического выбора не будет.
4. Запрос информации по заказу и регистрация статусов отправления. По кнопке в обработке или в фоне. Та же самая обработка может быть запущена по регламенту.
5. Заказ штрихкодов для мест отправления и квитанций к заказу. Получение ссылки на файл штрихкодов (квитанции). Получение, сохранение и открытие файла штрихкодов (квитанции).
Также в модуле реализовано опционально (в обработке не используется):
6. Регистрация договоренности о доставке. Опционально. Работоспособная отправка пакета есть, но надо делать свойства. Практическая ценность сомнительна, т.к. работники СДЭК все равно перезванивают перед доставкой. Поэтому доводить до ума и усложнять интерфейс не стал.
7. Регистрация отправления с регистрацией договоренности о доставке. См. предыдущий пункт.
Порядок использования:
1. Зарегистрировать расширение. Обязательно снять галку "Безопасный режим".
2. Зарегистрировать дополнительную обработку с запуском по регламенту.
3. Запустить обработку в интерактивном режиме. Все необходимые для работы дополнительные свойства и минимальный набор записей в регистре выбранных тарифов будут автоматически созданы при первом запуске (интерактивно или в фоне).
4. На вкладке "Партнер СДЭК" создать и (или) выбрать партнера, ввести параметры подключения и сохранить.
5. На вкладке "Тарифы" ввести и настроить (при необходимости) нужные тарифы. На старте туда уже будут автоматически внесены тарифы для интернет-магазина - 138 и 139.
6. Двойным щелчком выбрать накладные для работы на вкладке "Выбор реализаций".
7. Далее, собственно, проделать операции по взаимодействию с СДЭК на вкладке "Отправка". Кое-что можно сделать из списка. Двойным щелчком по строке списка открывается форма отправления, где можно просмотреть и изменить все данные и проделать все операции. На вкладке смотрите на информационное окно вверху. Там будет диагностика и инструкции.
Сам выполнил эти инструкции на чистой демобазе КА 2.5.4.402. Проблем не встретил. В любом случае, при любых непонятках, если чего напутал с файлами или какой другой визит-эффект или вопрос - пишите. Поправлю или объясню. Смотрю регулярно. Реагирую быстро.
Ну вот и все. Чтобы снять оставшиеся вопросы - немного картинок: