Для обмена документами (заказами) в форме настроек параметров обмена должны быть выполнены основные настройки узла и отмечена опция Активировать обмен документами на закладке Режим обмена данными.
Окно настройки обмена документами открывается по кнопке Настроить и имеет следующий вид:
На вкладке Основные настройки указывается, как документы должны выгружаться с сайта, с какими параметрами загружаться на сайт:
Настройки выгружаемых документов:
- С помощью поля Точка актуальности выгрузки заказов указывается дата, начиная с которой и по текущий момент заказы будут выгружаться на сайт.
- В поле Количество заказов в пакете указывается, сколько заказов будет в одном пакете данных.
- При отмеченной опции Выгружать офлайн документы будут выгружены все заказы, в том числе и те, которые не были созданы на сайте.
Настройки загружаемых документов:
- Если отмечена опция Не редактировать документы, то при повторной выгрузке документов с сайта документы в 1С не будут обновлены.
- При отмеченной опции Если у документа есть скидка, то в документ она попадает как ручная скидка скидка из заказа на сайте в 1С попадает как ручная. В противном случае скидка не выгружается, а только итоговая цена с учетом скидки.
- По кнопке Настроить реквизиты загружаемых в 1С документов открывается окно, в котором выполняется настройка соответствий загружаемых документов о заказах в 1С. При создании узла обмена соответствия загружаемых полей заполняются по умолчанию.
Чтобы настроить реквизиты для конкретного документа выберите его в списке и нажмите Настроить соответствия реквизитов. Отобразятся все доступные реквизиты для шапки документа, для которых можно указать какие поля откуда заполняются. Так, в соответствующих полях необходимо задать организацию, выбрать типовое соглашение, указать менеджера, подразделение и склад, которые будут подставляются в новые или отредактированные документы, пришедшие с сайта.
Настройка соответствий табличной части документа выполняется аналогично: для выбранной табличной части следует нажать Настроить соответствия реквизитов и задать необходимые значения для реквизитов.
- На вкладке Заказы устанавливается соответствие статусов заказов на сайте и в 1С а так же задаются условия отбора заказов.
- На вкладке Оплаты вы можете активировать выгрузку/загрузку оплат, а так же задать условия отбора.
- На вкладке Отгрузки вы можете активировать выгрузку/загрузку отгрузок, а так же задать условия отбора.
На закладке Настройки загрузки контрагентов указываются настройки для контрагентов, которых нет в 1С, но они могут прийти вместе с заказами:
Содержание
Выполнение обмена документами
Автоматический обмен заказами осуществляется в соответствии с настройками автообмена. Для ручного запуска процесса обмена необходимо:
- в форме создания/редактирования настройки обмена нажать кнопку Выполнить обмен данными:
либо в форме списка настроек обмена выбрать нужный узел и нажать пункт Выполнить обмен данными в меню кнопки Синхронизация данных:
Для просмотра выгруженных с сайта заказов в 1С следует воспользоваться пунктом меню Продажи > Заказы клиентов . Просмотр выгруженных с сайта отгрузок осуществляется на странице Продажи > Документы продаж . Просмотр выгруженных с сайта оплат осуществляется на страницах Казначейство > Приходные кассовые ордера , Казначейство > Безналичные платежи и Казначейство > Эквайринговые операции .
Для обмена документами Под документами в 1С понимаются: оплаты, отгрузки, заказы. В зависимости от версии и конфигурации 1С:
— Заказы могут называться "Заказ покупателя", "Заказ клиента" и др.
— Отгрузками могут считаться "Расходная накладная", "Реализация товаров и услуг" и др.
— Операции оплат могут быть "Наличными", "Безналичными", "Эквайринговыми" и др.
в форме настроек параметров обмена должны быть выполнены основные настройки узла и отмечена опция Активировать раздела Обмен документами на закладке Режим обмена данными.
Окно настройки обмена документами открывается по кнопке Настроить и имеет следующий вид:
На вкладке Общие указывается, как документы должны выгружаться с сайта, с какими параметрами загружаться на сайт:
Настройки выгружаемых документов
- С помощью поля Точка актуальности выгрузки заказов указывается дата, начиная с которой и по текущий момент заказы будут выгружаться на сайт.
- В поле Количество контейнеров в пакете указывается, сколько контейнеров документов будет в одном пакете данных.
- При отмеченной опции Выгружать оффлайн заказы и отгрузки будут выгружены все заказы, в том числе и те, которые не были созданы на сайте.
Настройки загружаемых документов
- Если отмечена опция Не редактировать документы, то при повторной выгрузке документов с сайта документы в 1С не будут обновлены.
- При отмеченной опции Если у документа есть скидка, то в документ она попадает как ручная скидка скидка из заказа на сайте в 1С попадает как ручная. В противном случае скидка не выгружается, а только итоговая цена с учетом скидки.
- По кнопке Настроить реквизиты загружаемых в 1С документов открывается окно, где можно указать, какие реквизиты документов и чем заполняются. Например, какая организация должна подставляться в документах.
В левой верхней таблице отображены все загружаемые документы. В таблице можно указать:
- Какая дата документа подставляется: дата на момент загрузки документа в 1С или же дата создания документа на сайте.
- Откуда берется номер документа: подставляется автоматически из 1С или приходит с сайта.
- Режим записи документа: записывать/проводить оперативно/проводить не оперативно.
- Действия с отмененными документами: помечать на удаление/отменять проведение/ничего не делать. Если на документ есть ссылки, то документ не будет отменен.
В правой верхней таблице отображаются все реквизиты указанного документа. Для того, чтобы реквизиты документа отобразились в таблице, необходимо нажать на кнопку Настроить соответствия реквизитов, которая находится над верхней левой таблицей.
Тип данных при заполнении реквизитов может быть следующий:
- Из поля XML. Если выбран этот тип, то значение будет найдено по алгоритму, указанному в колонке «Значение». Как правило, алгоритмы реализованы на основании данных XML. При указании этого типа в колонке «Значение» появляется предопределенный список значений алгоритмов.
- Фиксированное значение. Если выбран этот тип, то в реквизит документа будет подставляться указанное фиксированное значение. При указании этого типа данных тип значения фиксированного значения определяется автоматически.
- Из дополнительных свойств документа (по наименованию). При указании этого типа значение реквизита будет искаться по следующему алгоритму:
- Просматривается профиль обмена и определяется, есть ли свойство документа с таким наименованием, которое указывается в колонке «Значение».
В левой нижней таблице отображены все заполняемые табличные части указанного документа (добавление новых табличных частей пока отключено). В колонке «Поле XML» указывается наименование подчиненного элемента, из которого берутся данные. Если значение не заполнено – будет создана всего одна строка.
В правой нижней таблице отображаются все реквизиты указанной табличной части документа. Для того, чтобы реквизиты документа отобразились в таблице, необходимо нажать на кнопку Настроить соответствия реквизитов, которая находится над нижней левой таблицей.
Заполняются реквизиты так же, как и реквизиты документа, с единственным отличием, что у табличной части больше предопределенных алгоритмов.
Как Настроить загружаемых контрагентов в документах описано в отдельном уроке.
Загрузка новых товаров в 1С по данным из документов
- В поле Группа для новой номенклатуры задается группа, куда будут попадать товары, созданные модулем 1С по данным с сайта.
Постоянные данные для физических лиц
В полях Контрагент и Соглашение задаются подставляемые данные о физическом лице, если заказ на сайте сделан физическим лицом.
На вкладке Заказы можно:
- Настроить соответствия статусов заказов — устанавливается связь между статусом заказа на сайте и свойством заказа в 1С. При изменении значения свойства будет меняться и значение на сайте.
- Настроить соответствия служб доставки заказов — устанавливается связь между службой доставки на сайте и свойством заказа в 1С. Служба доставки указывается только один раз. Служба доставки проставляется только в отгрузке. То есть пока из 1С не выгрузится новая отгрузка – служба доставки не установится.
- Указать отборы, которые влияют на выгружаемые из 1С заказы. То есть можно дополнительно указать, по каким критериям выгружаются заказы на сайт.
- В поле Причина отмены заказа указать причину, которая будет подставляться в заказ, когда он отменяется на сайте.
На вкладке Оплаты указываются следующие настройки:
- Если стоит флажок Загружать оплаты, то оплаты, пришедшие с сайта, будут загружены в 1С. По нажатию кнопки Ограничение загрузки оплат по видам можно настроить, какие виды оплат будут загружаться (например, только эквайринг).
- Если стоит флажок Принудительно проводить оплаты если он оплачены на сайте, то в 1С документ оплаты будет проведен, если заказ оплатили на сайте.
- Если стоит флажок Выгружать оплаты, то будут выгружены оплаты на сайт. В этом случае также необходимо будет Настроить соответствия платежных систем.
- Можно указать отборы, которые влияют на выгружаемые из 1С оплаты. То есть дополнительно указать, по каким критериям выгружаются оплаты на сайт.
На вкладке Отгрузки указываются следующие настройки:
- Если стоит флажок Загружать отгрузки, то отгрузки, пришедшие с сайта, будут загружены в 1С.
- Если стоит флажок Принудительно проводить отгрузки если он отгружены на сайте, то если заказ отгрузили на сайте – в 1С документ отгрузки будет проведен.
- Если стоит флажок Выгружать отгрузки, то будут выгружены отгрузки на сайт.
Можно указать отборы, которые влияют на выгружаемые из 1С отгрузки. Т.е. можно дополнительно указать, по каким критериям выгружаются отгрузки на сайт.
Можно установить связь между службой доставки на сайте со свойством отгрузки в 1С. При установке в новой отгрузке службы доставки, она также установится в отгрузке на сайте.
Выполнение обмена документами
Автоматический обмен заказами осуществляется в соответствии с настройками автообмена. Для ручного запуска процесса обмена необходимо:
- в форме создания/редактирования настройки обмена нажать кнопку Выполнить обмен данными:
- либо в форме списка настроек обмена выбрать нужный узел и нажать пункт Выполнить обмен данными в меню кнопки Синхронизация данных:
Для просмотра выгруженных с сайта заказов в 1С следует воспользоваться пунктом меню Продажи > Заказы клиентов . Просмотр выгруженных с сайта отгрузок осуществляется на странице Продажи > Документы продаж .
Просмотр выгруженных с сайта оплат осуществляется на страницах Казначейство > Приходные кассовые ордера , Казначейство > Безналичные платежи и Казначейство > Эквайринговые операции .
Прошлый пост вдохновил меня написать более подробную заметку про обмен Битрикса с 1С. С первого взгляда кажется, что это очень сложный процесс, но с многолетним опытом понимаешь, что это не просто сложно: это еще и вообще полное г(кхе-кхе). Попробую описать словами этот процесс. Добро пожаловать в ад описание обмена с 1с.
Инициатором любого обмена является 1С, сайт не загружает ничего в 1С, сайт только принимает запросы и отдаёт результат. По умолчанию, 1С обращается к скрипту /bitrix/admin/1c_exchange.php. Этот путь указывается в настройках обмена в самой 1С. Из коробки в этом файле включается файл /bitrix/modules/sale/admin/1c_exchange.php. Если открыть файл, то видим там подключение нескольких компонентов в зависимости от $_GET["type"]. В общем случае интересуют два из них:
bitrix:sale.export.1c — экспорт заказов.
bitrix:catalog.import.1c -импорт каталога.
Экспорт заказов в 1С
Обмен заказами начинается с авторизации с помощью логина и пароля, который указали в настройках обмена. После авторизации сайт выдает ID сессии, URL: /bitrix/admin/1c_exchange.php?type=sale&mode=checkauth .
После получения ID сессии идёт инициализация обмена, URL: /bitrix/admin/1c_exchange.php?type=sale&mode=init&sess >. На этом этапе сайт отдаёт настройки обмена со стороны сайта.
Для получения списка заказов запрашивается URL /bitrix/admin/1c_exchange.php?type=sale&mode=query&sess >. Выгружаются заказы с полями EXTERNAL_ORDER = "N", UPDATED_1C = "N" и обновившиеся после последней успешной выгрузки в 1С (это проверяется по времени из свойства "last_export_time_committed_/bitrix/admin/1c_excha" модуля sale).
Флаг EXTERNAL_ORDER указывает, что заказ создан в 1С и его выгрузка в 1С не требуется.
Флаг UPDATED_1C после успешного импорта из 1С на сайте устанавливается в "Y" и такие заказы не участвуют в дальнейших экспортах до их обновления на сайте. Во время обновлений заказов на сайте UPDATED_1C устанавливается в "N".
После обработки заказов 1С для завершения обмена запрашивает URL /bitrix/admin/1c_exchange.php?type=sale&mode=success&sess >. При этом в свойство "last_export_time_committed_/bitrix/admin/1c_excha" модуля sale записывается время запроса списка заказов (НЕ текущее время, т.к. с момента запроса заказов до их обработки могли добавиться заказы и они попадут в следующую выгрузку с сайта).
Модификация
В экспорте заказов участвуют файл /bitrix/admin/1c_exchange.php , компонент bitrix:sale.export.1c и класс CSaleExport . Какие-либо события здесь отсутствуют, поэтому для модификации этого процесса нужно заменить компонент на свой, создать класс-наследник CSaleExport и заменить вызовы в компоненте на него. В последних версиях Битрикс этот класс стал относительно читабельным, в старых там была просто простыня из php и "xml".
Отключение проверки источника запроса
С версии 15.5 добавлена дополнительная проверка и если вызвать просто /bitrix/admin/1c_exchange.php?type=sale&mode=query , то получим ошибку "failure Ошибка проверки источника запроса. Обновите модуль обмена". Если нет желания возиться с sessid, то можно отключить проверку источника запроса, для этого нужно выполнить:
Импорт товаров из 1С
Импорт начинается с авторизации, посылается запрос на /bitrix/admin/1c_exchange.php?type=catalog&mode=checkauth с передачей логина и пароля, который указали в настройках обмена. После авторизации сайт выдает ID сессии.
Далее идёт инициализация обмена, URL /bitrix/admin/1c_exchange.php?type=catalog&mode=init&sess >. На этом этапе в сессии инициализируется массив данных обмена $_SESSION["BX_CML2_IMPORT"] и сайт отдаёт параметры обмена: возможность использования zip, лимит размера файла и т.д. Также на этом этапе очищается папка для файлов выгрузки. Скорее всего, это будет папка /upload/1c_catalog/. Для отладки можно включить сохранение старых файлов обмена, тогда при новом обмене старые данные будут перемещаться в отдельные папки: 1c_catalog0, 1c_catalog1 и т.д.. Для сохранения данных нужно объявить константу в dbconn.php:
После этого 1С начинает подготовку данных и далее посылает их POST-запросом на сайт частями, URL: /bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=ИМЯ_ФАЙЛА.zip&sess >. Запрос продолжается, пока файлы не будут переданы полностью.
1С передает на сайт xml-файлы с данными товаров и предложений, а также картинки. В случае если сайт разрешил использовать zip, то 1С передает все файлы одним архивом. Тогда следующий шаг начинается с его распаковки.
В выгрузке могут участвовать xml-файлы:
- import.xml — товары, разделы, типы цен, склады, свойства товаров и единицы измерения;
- offers.xml — торговые предложения товаров и их свойства;
- prices.xml — цены торговых предложений(в новых версиях);
- rests.xml — остатки торговых предложений(в новых версиях);
- references.xml — пользовательские справочники (highload-инфоблоки, в новых версиях).
Картинки загружаются в папку import_files.
Далее начинаются шаги импорта, URL: /bitrix/admin/1c_exchange.php?type=catalog&mode=import&filename=ИМЯ_ФАЙЛА_ВЫГРУЗКИ.xml , где ИМЯ_ФАЙЛА_ВЫГРУЗКИ — import.xml, offers.xml и т.д. Обработка файла завершается, когда сайт отдаёт слово "success". За обработку файла выгрузки отвечают классы CIBlockXMLFile (/bitrix/modules/iblock/classes/mysql/cml2.php) и CIBlockCMLImport (/bitrix/modules/iblock/classes/general/cml2.php).
Обработка файла состоит из нескольких шагов (информация будет дополняться):
Очистка временной таблицы (таблица b_xml_tree);
Метод CIBlockXMLFile::DropTemporaryTables(). Обычный drop таблицы b_xml_tree.
Создание временной таблицы;
Метод CIBlockXMLFile::CreateTemporaryTables(). Здесь создается таблица b_xml_tree. Можно, кстати, задать storage engine этой таблицы, равно как и всех создаваемые битриксом, с помощью определения константы MYSQL_TABLE_TYPE.
Чтение файла во временную таблицу;
Некоторые шаги могут выполняться за несколько запросов, порциями по несколько секунд (это время настраивается параметров "Интервал одного шага в секундах" в настройках интеграции с 1С в админке Битрикса).
Модификация
На шаге 10, т.е. по окончании обработки файла выгрузки (NB: одного файла, например, товаров или предложений) вызывается событие OnSuccessCatalogImport1C модуля catalog. Аргументы обработчика — параметры компонента обмена и путь к файлу выгрузки.
Также для изменения процесса обмена можно использовать обычные события, например, OnBeforeIBlockElementUpdate или OnBeforeProductAdd. В обработчике, чтобы определить, что событие вызвано именно во время обмена с 1С, я использую такое костыльное условие:
Ну и, если ничего нельзя решить событиями, всегда можно полностью изменить процесс обмена, скопировав и изменив файл /bitrix/admin/1c_exchange.php , компонент bitrix:catalog.import.1c и класс CIBlockCMLImport .
Отключение проверки источника запроса
Как и в случае с выгрузкой товаров, при импорте товаров есть проверка источника запроса. Можно отключить её следующим кодом:
Статья будет дополняться по мере появления новой информации и вдохновения.