Сколько волка не корми, а поросенок вкуснее
В битриксе есть два типа служб доставки: настраиваемые и автоматизированные. В статье будет описано создание обработчика автоматизированной службы доставки.
Все предустановленные обработчики располагаются в папке /bitrix/modules/sale/lang/ru/delivery/ . Свои обработчики следует располагать в папке /bitrix/php_interface/include/sale_delivery/ (этот путь можно изменить в свойствах модуля интернет-магазина).
Обработчик представляет собой класс определенной структуры со строкой подключения обработчика доставки по событию onSaleDeliveryHandlersBuildList .
Класс обработчика доставки должен иметь ряд методов, типы действий которых, описываются в методе Init класса.
1. Init — происходит инициализации основных полей.
2. DBGETSETTINGS — метод считывания значений параметров.
3. DBSETSETTINGS — метод установки значений параметров.
4. GETCONFIG — определение конфигурации настроек (их можно разбить на табы).
5. COMPABILITY — проверка совместимости профилей обработчика с заказом.
6. CALCULATOR — расчет стоимости доставки.
1. SID — Уникальный строковой идентификатор обработчика.
2. NAME — Название обработчика.
3. DESCRIPTION — Текстовое описание обработчика
4. DESCRIPTION_INNER — Внутреннее описание обработчика, отображаемое при конфигурации обработчика в Панели Управления.
5. BASE_CURRENCY — Идентификатор базовой валюты обработчика
6. HANDLER — Путь к файлу обработчика. Нужен для корректного автоматического копирования обработчика (ещё не реализовано). В подавляющем большинстве случаев достаточно значения __FILE__
Также должен быть задан хотя бы один профиль доставки.
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); CModule::IncludeModule("sale"); CModule::IncludeModule("iblock"); Class CDeliveryPlain { /** * Описние обработчика */ function Init() { //настройки return array("SID" => "Plain", // Идентификатор службы доставки "NAME" => "Курьер Красная Пресня", "DESCRIPTION" => "Описание его для клиентов сайта", "DESCRIPTION_INNER" => "Описание для администраторов сайта", "BASE_CURRENCY" => "RUR", "HANDLER" => __FILE__, /* Определение методов */ "DBGETSETTINGS" => array("CDeliveryPlain", "GetSettings"), "DBSETSETTINGS" => array("CDeliveryPlain", "SetSettings"), "GETCONFIG" => array("CDeliveryPlain", "GetConfig"), "COMPABILITY" => array("CDeliveryPlain", "Compability"), "CALCULATOR" => array("CDeliveryPlain", "Calculate"), /* Список профилей */ "PROFILES" => array("all" => array("TITLE" => "Без ограничений", "DESCRIPTION" => "Профиль доставки без каких-либо ограничений", "RESTRICTIONS_WEIGHT" => array(0), "RESTRICTIONS_SUM" => array(0),),)); } /* Установка параметров */ function SetSettings($arSettings) { foreach ($arSettings as $key => $value) { if (strlen($value) > 0) $arSettings[$key] = doubleval($value); else unset($arSettings[$key]); } return serialize($arSettings); } /* Запрос параметров */ function GetSettings($strSettings) { return unserialize($strSettings); } /* Запрос конфигурации службы доставки */ function GetConfig() { $arConfig = array("CONFIG_GROUPS" => array("all" => "Параметры",), "CONFIG" => array("DELIVERY_PRICE" => array(// "TYPE" => "STRING", // "DEFAULT" => "200", // "TITLE" => "Стоимость доставки", // "GROUP" => "all",)),); return $arConfig; } /* Проверка соответствия профиля доставки заказу */ function Compability($arOrder, $arConfig) { return array("all"); } /* Калькуляция стоимости доставки*/ function Calculate($profile, $arConfig, $arOrder, $STEP, $TEMP = false) { // получать стоимость корзины // Выведем актуальную корзину для текущего пользователя $arBasketItems = array(); $dbBasketItems = CSaleBasket::GetList(array("NAME" => "ASC", "ID" => "ASC"), array("FUSER_ID" => CSaleBasket::GetBasketUserID(), "LID" => SITE_ID, "ORDER_ID" => "NULL"), false, false, array("ID", "CALLBACK_FUNC", "MODULE", "PRODUCT_ID", "QUANTITY", "DELAY", "CAN_BUY", "PRICE", "QUANTITY")); while ($arItems = $dbBasketItems->Fetch()) { if (strlen($arItems["CALLBACK_FUNC"]) > 0) { CSaleBasket::UpdatePrice($arItems["ID"], $arItems["CALLBACK_FUNC"], $arItems["MODULE"], $arItems["PRODUCT_ID"], $arItems["QUANTITY"]); $arItems = CSaleBasket::GetByID($arItems["ID"]); } $arBasketItems = $arItems; } // Печатаем массив, содержащий актуальную на текущий момент корзину foreach ($arBasketItems as $num => $item) { $TotalSumArr = $item["PRICE"]*$item["QUANTITY"]; } // сумма всех товаров с учетом количества $TotalSum = array_sum($TotalSumArr); // в зависимости от суммы делать наценку за доставку // от 1500 до 5000 доставка 750руб if($TotalSum >= 1500 && $TotalSum <= 5000) $DeliveryCost = 750; elseif($TotalSum >= 5000) $DeliveryCost = 0; return array("RESULT" => "OK", "VALUE" => $_SESSION["ORDER_DELIVERY_PRICE"], "VALUE" => $DeliveryCost); } } AddEventHandler("sale", "onSaleDeliveryHandlersBuildList", array("CDeliveryPlain", "Init")); ?>
В обрабочике есть код который считает содержимое корзины и в зависимости от цены предлагает разную стоимость доставки.
Мы рассмотрели процесс установки нового компонента оформления заказов. Он несколько дней обкатался на проекте, и пришла пора воспользоваться теми возможностями, ради которых стоило переходить на новую платформу «1С-Битрикс».
Регион доставки - это первый из главных элементов процесса оформления заказа. Допустим, нам нужно использовать автоматическую подстановку названия «Калининград» для увеличения конверсии и уменьшении проблем с оформлением заказов.
Сейчас при первом входе это выглядит вот так:
Клиенты, конечно, могут щелкнуть по кнопке «Калининград», после чего поле заполнится, но многие просто пропускают этот шаг, в результате получая ошибку:
Данную проблему выявил «Вебвизор Метрики». Конечно, после этого клиент уже заполняет всё правильно, но осадок остается, несмотря на то, что во многих магазинах важным критерием является самовывоз (до 80% заказов), а в этом случае правильность заполнения названия города не критична.
Давайте проставим город по умолчанию и посмотрим, сработает ли подстановка. Зайдем в административный раздел магазина, и далее в настройки свойств:
И настраиваем местоположение по умолчанию:
Теперь для проверки оформим заказ:
Отлично, местоположение заполнено и клиенту достаточно нажать «Далее». Теперь заказ будет оформляться с минимальными неудобствами для клиента, а мы максимально увеличим конверсию. Что касается крупных магазинов, то они могут собрать статистику по частоте заказов из тех или иных городов, и сделать кнопки быстрого выбора, как на скриншоте: «Калининград», «Зеленоградск», «Светлогорск».
Можно установить самый популярный город по умолчанию, ведь всегда проще изменить его или уточнить по телефону, чем потерять клиента.
Введем ограничение с привязкой к определенным службам доставки и максимальной сумме чека. Для этого идем в административный интерфейс на вкладку «Ограничения», для конкретного способа оплаты:
В данном случае нужно будет сделать две системы оплаты наличными:
Теперь ограничения по доставкам:
В итоге у нас получается следующее:
Проверим оформление заказа с товарами на сумму менее 10 000 рублей и доставкой курьером:
Всё отлично, требуемая оплата есть, заказ можно оформить.
Проверим с товаром более 10 000 рублей:
Замечательно, наличная оплата отсутствует, можно оформить заказ с оплатой другими способами, не рискуя курьерами и деньгами.
При введении ограничений клиенты не видят «запрещенные» способы оплаты и поэтому не будут ругаться с операторами, которым в противном случае пришлось бы постоянно объяснять, почему ваша компания не повезет оформленный заказ.
Идем в настройки доставок:
В интерфейсе появилась отдельная вкладка с дополнительными услугами, которые будут отображаться в блоке доставок. Поддерживаются услуги трех видов:
Количественная услуга. Создается услуга с ценой за единицу, а клиент может указать, какое количество ему требуется.
Единичная услуга. Самостоятельная услуга, отображается как чек-бокс. По умолчанию не применяется, клиент должен самостоятельно выбрать нужную.
Давайте посмотрим, как настраиваются подобные правила:
Настройки для всех типов услуг очень похожи: есть два блока, которые и управляют основными элементами. В первую очередь нужно задать название и описание услуги. Затем укажите, кто может использовать услугу:
Новый компонент оформления заказа умеет запрашивать различные наборы полей. Чаще всего владельцы магазинов уменьшают количество информации, которую нужно ввести при самовывозе. Пожалуй, в этом случае нам будет достаточно знать:
Привяжем только те «Службы доставки», у которых должно отображаться данное поле. Затем идем в публичный раздел и пробуем оформить заказ. Выбираем самовывоз и видим, что магазин не спрашивает у нас адрес доставки.
Это полезная и долгожданная функциональность. Ведь согласитесь, что не слишком приятно отвечать на вопросы клиентов: «А зачем вам мой адрес, если я собираюсь забрать заказ самостоятельно?». Теперь этого делать не требуется.
В новой версии компонента появилась настройка способа отображения пункта выдачи заказов. Если он единственный в каком-либо городе, то сразу показываем свернутый блок и выводим все его данные с картинкой, или показываем блок развернутым. В первом случае, для отображения карты вам нужно будет войти в блок, а во втором - карта будет сразу отображена.
В предыдущей статье мы рассмотрели процесс установки нового компонента оформления заказов. Он несколько дней обкатался на проекте, и пришла пора воспользоваться теми возможностями, ради которых стоило переходить на новую платформу «1С-Битрикс».
Регион доставки - это первый из главных элементов процесса оформления заказа. Допустим, нам нужно использовать автоматическую подстановку названия «Калининград» для увеличения конверсии и уменьшении проблем с оформлением заказов.
Сейчас при первом входе это выглядит вот так:
Клиенты, конечно, могут щелкнуть по кнопке «Калининград», после чего поле заполнится, но многие просто пропускают этот шаг, в результате получая ошибку:
Данную проблему выявил «Вебвизор Метрики». Конечно, после этого клиент уже заполняет всё правильно, но осадок остается, несмотря на то, что во многих магазинах важным критерием является самовывоз (до 80% заказов), а в этом случае правильность заполнения названия города не критична.
Давайте проставим город по умолчанию и посмотрим, сработает ли подстановка. Зайдем в административный раздел магазина, и далее в настройки свойств:
И настраиваем местоположение по умолчанию:
Теперь для проверки оформим заказ:
Отлично, местоположение заполнено и клиенту достаточно нажать «Далее». Теперь заказ будет оформляться с минимальными неудобствами для клиента, а мы максимально увеличим конверсию. Что касается крупных магазинов, то они могут собрать статистику по частоте заказов из тех или иных городов, и сделать кнопки быстрого выбора, как на скриншоте: «Калининград», «Зеленоградск», «Светлогорск».
Можно установить самый популярный город по умолчанию, ведь всегда проще изменить его или уточнить по телефону, чем потерять клиента.
Введем ограничение с привязкой к определенным службам доставки и максимальной сумме чека. Для этого идем в административный интерфейс на вкладку «Ограничения», для конкретного способа оплаты:
В данном случае нужно будет сделать две системы оплаты наличными:
Теперь ограничения по доставкам:
В итоге у нас получается следующее:
Проверим оформление заказа с товарами на сумму менее 10 000 рублей и доставкой курьером:
Всё отлично, требуемая оплата есть, заказ можно оформить.
Проверим с товаром более 10 000 рублей:
Замечательно, наличная оплата отсутствует, можно оформить заказ с оплатой другими способами, не рискуя курьерами и деньгами.
При введении ограничений клиенты не видят «запрещенные» способы оплаты и поэтому не будут ругаться с операторами, которым в противном случае пришлось бы постоянно объяснять, почему ваша компания не повезет оформленный заказ.
Идем в настройки доставок:
В интерфейсе появилась отдельная вкладка с дополнительными услугами, которые будут отображаться в блоке доставок. Поддерживаются услуги трех видов:
Давайте посмотрим, как настраиваются подобные правила:
Настройки для всех типов услуг очень похожи: есть два блока, которые и управляют основными элементами. В первую очередь нужно задать название и описание услуги. Затем укажите, кто может использовать услугу:
Новый компонент оформления заказа умеет запрашивать различные наборы полей. Чаще всего владельцы магазинов уменьшают количество информации, которую нужно ввести при самовывозе. Пожалуй, в этом случае нам будет достаточно знать:
Привяжем только те «Службы доставки», у которых должно отображаться данное поле. Затем идем в публичный раздел и пробуем оформить заказ. Выбираем самовывоз и видим, что магазин не спрашивает у нас адрес доставки.
Это полезная и долгожданная функциональность. Ведь согласитесь, что не слишком приятно отвечать на вопросы клиентов: «А зачем вам мой адрес, если я собираюсь забрать заказ самостоятельно?». Теперь этого делать не требуется.
В новой версии компонента появилась настройка способа отображения пункта выдачи заказов. Если он единственный в каком-либо городе, то сразу показываем свернутый блок и выводим все его данные с картинкой, или показываем блок развернутым. В первом случае, для отображения карты вам нужно будет войти в блок, а во втором - карта будет сразу отображена.
Давайте реализуем первый вариант:
Если же отображать блок развернутым, то клиент увидит следующую картину:
На этом мы заканчиваем наш небольшой туториал. Мы будем продолжать знакомить вас с особенностями новых версий наших продуктов, следите за нашим блогом.
С ребятами работаем уже 2 года. Отличная команда, отличный подбор программистов.
Практически в любое время суток есть связь с руководителями. Критичные вопросы можно решить даже в 2 часа ночи (для нас как интернет-проекта это очень важно).
Время, когда начинали сотрудничество с Атлантом сейчас вспоминается с легкой ухмылкой. А тогда -
все было очень плохо.
Решили кардинально изменить сайт — старый "снести" и перейти на 1С-Битрикс.
Разработку сайта поручили фрилансеру. Он все сделал, сверстал сайт. Но прямо перед запуском у него случились какие-то трудности, 2 недели мы без связи. О нем ничего плохого сказать не могу, но - факт на лицо. Мы остались с недоработанной копией сайта (более 30 критичных доработок).
Как быть в такой ситуации - понятия не имели. Стали искать среди Золотых партнеров Битрикса, которые могли бы нам помочь в сложившейся ситуации.
Написали порядка сотни запросов.
Ответ от Атланта выделялся среди всех! Стоимость за работы оказалась одной из самых низких. Уверенность придавала пошаговая инструкция, что ребята собираются сделать с сайтом.
В итоге, запустили сайт, работаем с ними и ни разу не пожалели!
В первые 6 месяцев после начала сотрудничества - у нас рост продаж в 2 раза. Ставим любые, даже самые сложные задачи. Все выполняется.
Удобно, что все в одном месте: работы по сайту, 1С, хостинг, seo, дизайн и т.д.
Рекомендуем!
Андрей Рудый (Директор - LEDPremium)
Работаем с компанией Атлант уже два года.
Всегда раскладываем яйца по разным корзинам и работали сразу с несколькими аутсорсерами.
За год перевели на "Атлант" от 20 до 70% выполнения задач по верстке сайта и настройке 1С.
Год за годом удивляемся развитию и прогрессу компании и радуемся за свой удачный выбор.
Уровень программистов стал выше - цены в пределах рынка, реакция руководства моментальная.
Как обычно когда все хорошо даже не знаешь что выделить и нет повода писать отзыв.
Ребята целиком создали наш ресурс www.datakam.ru
От стандартного визуально убожественного Б24 не оставили камня на камне.
Наши маркетологи, в ежемесячных отчетах, показывают мне как руководителю, положительный эффект изменений на сайте и в автоматизации оформления документов. Есть толк. В деньгах. В рублях.
Честно и откровенно рекомендуем этот творческий коллектив как надежного партнера в работе.
Самое смешное что мы никогда не видели никого из руководства и сотрудников в глаза - и при этом удовлетворены качеством и скоростью выполнения задач.
Рекомендуем.
Отвечаем.
Владислав Механцев (технический директор - datakam.ru)
Работаем с Atlant уже более 2х лет, все устраивает: скорость выполнения работ и качество. Бывает, что не хватает программистов или не всегда сходимся в вопросах дизайна, но все вопросы получалось решить более-менее оперативно.
Вполне доволен результатом. Спасибо.
Дмитрий (Зам. ген. директора. - Souz.com)
Модуль имеет функционал автоматического расчета стоимости доставки на основе данных о товаре и адреса доставки.
Для расчета стоимости доставки постовых отправлений используется сервис postcalc.ru. Обратите внимание, что в бесплатном режиме данный сервис имеет ограничение на количество запросов в день. В случае, если вам требуется более 500 запросов в день, вам необходимо перейти на платный тарифный план. Подробную информацию по условиям использования сервиса postcalc.ru вы можете получить перейдя по ссылке .
2. На странице со списком служб доставок нажмите на кнопку "Добавить". В появившемся выпадающем списке выберите тип - "Автоматизированная служба доставки".
3. В открывшейся странице создания новой службы доставки перейдите во вкладку "Настройки обработчика".
4. В поле "Служба доставки" в выпадающем списке выберите пункт "Почта России " и сохраните выбор нажатием кнопки "Применить".
5. После сохранения созданной службы доставки, на странице редактирования появятся дополнительные вкладки:
В данной вкладке содержаться параметры:
При отмеченных опциях "Выводить адрес почты" и "Выводить телефоны почты" будет формироваться переменная $arResult["RESULT"]["TEXT"]. Вы можете вывести данную информацию в публичной части вставив код "echo $arResult["RESULT"]["TEXT"];" в шаблоне компонента, который вы используете для вывода информации о стоимости доставки.
Вкладка "ограничения"
В данной вкладке содержаться настройки стандартного функционала Битрикс, позволяющего ввести ограничения на применение настраиваемой службы доставки.
Обращаем ваше внимание, что для корректных расчетов стоимости отправлений с помощью сервиса postcalc.ru необходима передача данных о весе и оценочной стоимости товаров, входящих в отправление. Удостоверьтесь в панели администрирования вашего сайта, что эти данные внесены корректно для товаров каталога. Также для расчетов необходима информация об адресе доставки отправления, а также об адресе отправителя. Информация об отправителе вносится в административном интерфейсе вашего магазина по адресу Администрирование - Настройки - Настройки Модулей - Интернет магазин. Далее на странице настроек магазина перейдите во вкладку "Адрес магазина". Для корректного расчета стоимости отправлений заполните поле "Индекс".
Возможны следующие варианты получения информации об адресе доставки:
Рекомендуем вам предусмотреть отдельное, обязательное для заполнения поле "Индекс" в форме оформления заказа. В этом случае покупатель должен будет явно указать почтовый индекс, на который требуется выполнить отправку, что позволит избежать возможных ошибок при расчетах стоимости отправления.