Полная принудительная выгрузка
Основным режимом работы модуля 1С для обмена с сайтом является обмен, при котором инициатором является 1С. Это работает следующим образом. В базе 1С настраивается профиль обмена, в котором указываются настройки и периодичность обмена. Модуль 1С с заданной периодичностью или по кнопке выгружает товарный каталог на сайт, цены, остатки и загружает заказы покупателей.
Выгрузка/загрузка из 1С возможна напрямую на сайт, на FTP-сервер или в каталог на диске. Для каждой операции обмена (выгрузка информации по товарам, цен, остатков, картинок, заказов и т.д.) можно создать отдельную настройку. А также выгружать на сайт только изменения. Это обеспечивает минимальную нагрузку и высокую скорость выполнения обмена.
Обмен через веб-сервис 1С
Модуль 1С для обмена с сайтом является функциональным решением, которое предоставляет API разработчику сайта. Это дополнительный вариант обмена, инициатором которого является сайт. С заданной периодичность сайт обращается к 1С и получает информацию по товарам, изменения заказов, статусы и т.д. При появлении на сайте нового заказа покупателя он сразу отправляет его в 1С и таким образом менеджеры получают новые заказы в онлайн-режиме. Это обеспечивает высокую скорость обработки заказа, за счет того, что заказы попадают в 1С сразу не дожидаясь сеанса обмена.
И более того, к модулю прилагаются php-шаблоны кода обращения к функциям веб-сервиса. Таким образом разработчику сайта остается только адаптировать их к конкретному сайту и написать обработку результата с учетом его специфики.
Вы разработали интернет-магазин на битриксе. Во время разработки вы создали все нужные свойства и заполнили каталог демо-товарами.
Осталось только загрузить реальный каталог из 1С — это означает, что впереди еще много работы. Придется добиться, чтобы все нужные данные выгружались вообще и выгружались в нужное место. Иначе придется подгонять проект под структуру данных из 1С.
Вопрос интеграции поднимается на каждом более-менее крупном интернет-магазине. Часто разработчикам, не только начинающим, трудно понять, как работает механизм обмена. Полезная информация разбросана по интернету, будет удобно собрать её в одном месте.
Цели статьи
- Коротко изложить основные возможности обмена и его алгоритм работы;
- Дать ссылки на официальные и прочие полезные источники;
- Ответить на частые вопросы;
- Прояснить, с чего начать интеграцию и как ее успешно завершить.
Стандартный обмен между 1С-Битрикс и 1С
В битриксе есть встроенный функционал для обмена с 1С, благодаря чему любой обмен должен настраиваться в пару кликов.
Однако, для этого 1С должна быть “чистой” типовой конфигурации. На деле каждая первая 1С “нетиповая”, то есть модифицирована так или иначе.
Как таковой обмен и правда настраивается быстро и несложно, только часто (почти всегда) на этом дело не заканчивается, так как из 1С выгружаются не все данные или выгружаются не туда (в том числе из-за модификаций в 1С).
Что умеет штатный механизм обмена
- Импорт каталога товаров из 1С на сайт;
- Экспорт каталога товаров с сайта в 1С;
- Экспорт заказов с сайта в 1С;
- Импорт заказов из 1С на сайт;
- Импорт справочников (highload-инфоблоков) из 1С на сайт.
Информация о товарах передается на сайт в следующих файлах
- import.xml - товары, группы (разделы инфоблока), типы цен, склады, свойства товаров и единицах измерения;
- offers.xml - торговые предложения (ТП) товаров и их свойствах;
- prices.xml - цены ТП;
- rests.xml - остатки ТП;
- references.xml - пользовательские справочники (HL-инфоблоки).
Файлы import.xml и offers.xml содержат описания свойств, типов цен, и прочую информацию, которая относится в равной степени ко всем товарам/ТП.
Если каталог большой, в целях оптимизации, описания выгружаются в отдельных “заголовочных” файлах. Это такие же файлы import.xml и offers.xml, только не содержат ничего кроме описаний. В таком случае заголовочные файлы обрабатываются только в самом начале обмена.
Информация о заказах передается на сайт в следующих файлах
- documents.xml - документы (заказы);
- contragents.xml - контрагенты (пользователи-покупатели).
Куда на сайт загружаются файлы выгрузки
В папку /upload/1c_catalog/. Перед каждым обменом эта папка очищается. То есть в этой папке всегда находятся файлы последнего обмена.
Можно включить " режим отладки” обмена — отключить перезапись файлов в папке 1c_catalog. Таким образом можно отключить удаление файлов выгрузки после завершения обмена.
Для этого нужно объявить константу в файле dbconn.php:
// Включает "режим отладки” для обмена с 1С, // отключает перезапись файлов в папке 1c_catalog // Что бы сохранялись все файлы после выгрузки. define("BX_CATALOG_IMPORT_1C_PRESERVE", true);
Теперь вместо удаления папка будет переименовываться, к ней будет добавляться числовой идентификатор.
Чем больше число у папки, тем новее эта папка.
Однако, самая новая папка всегда будет без чисел, и только со следующим обменом она будет переименована.
Важно помнить, что с включенным режимом отладки очень быстро идет расход места на диске. Поэтому после отладки следует отключить лог и удалить все лишние папки обмена.
Что нужно для обмена на стороне сайта
- редакция битрикса “Малый бизнес” или “Бизнес”
- создать пользователя и группу “Обмен с 1С” для обмена, настроить права
- разрешить группе выполнять выгрузку товаров/заказов (в настройках параметров)
- разрешить группе доступ на чтение папки /bitrix/admin/
Что нужно для обмена на стороне 1С
- настроить адрес сайта и пользователя сайта из группы “Обмен с 1С”
- настроить параметры выгрузки на стороне 1С (зависят от версии УТ)
Структура каталога в 1С и на сайте
Что делать если структура каталога в 1С не совпадает со структурой на сайте?
В 1С можно задать какие товары и разделы выгружать.
Часто в 1С товары хранятся не так, как они будут выводиться на сайте, поэтому можно на стороне 1С настроить виртуальный каталог для выгрузи на сайт: создать нужную структуру разделов и разложить по ним товары.
Так же можно задать условия отбора товара (не все товары нужны на сайте) для выгрузки на сайт и свойства (в 1С много св-в, не все нужны на сайте).
Виды выгрузок из 1С
Полная выгрузка
Происходит при выгрузке данных на сайт в первый раз, или при ручном запуске.
- Выгружаются все товары.
- Картинки выгружаются только у новых или измененных товаров.
Краткая выгрузка
Происходит часто, между полными, содержит только изменения по ценам и остаткам.
Полная принудительная выгрузка
Тоже самое, что и полная выгрузка, только выгружаются картинки абсолютно всех товаров, в обязательном порядке.
Обычно используется только при отладке обмена.
С чего начать интеграцию c 1C
Если вы делаете новый сайт и планируете интеграцию с 1С в дальнейшем, то первым следует установить битрикс и сделать тестовый обмен. Вот, что это даст:
- Будет создан тип иблока;
- Будет создан иблок;
- Будут созданы св-ва и справочники;
- Будут созданы разделы каталога;
- Будут созданы элементы каталога;
- Будут созданы торговые предложения.
Все это вместе поможет понять, какие данные у вас уже есть и где их искать. Сразу будет понятно, чего не хватает, а что выгрузилось совсем не так, как хотелось бы.
Как завершить интеграцию
Сопоставить структуры данных на сайте со структурой в 1С — вот главная цель интеграции.
Чтобы успешно завершить интеграцию, когда у вас уже есть полностью работающий проект, с актуальными данными, то нужно добиться, чтобы выгрузка из 1С проиcходила:
- В существующий инфоблок;
- В существующие св-ва;
- В существующие разделы инфоблока;
- В существующие товары и торговые предложения;
- В существующие типы цен.
Все эти задачи решаются путем настройки одинаковых идентификаторов (XML_ID), то есть у вас должны совпадать все внешние коды на сайте с внешними кодами из 1С.
Уже, наверное, 2 месяца как делаю новым клиентам интеграции 1С-Битрикс и 1С Предприятия на новой версии модули обмена. Сразу хочу отметить, что новая версия обмена – офигенная, небо и земля по сравнению с тем, что было раньше. Но мелкие острые камушки – попадаются, нужно пройти по ним, ободрав пятки, прежде чем окунуться в это море удовольствия.
Моя основная проблема с новым модулем интеграции состояла в том, что мне было лень на него переходить – за время существования старого модуля обмена, мы серьезно доразвили его для наших клиентов, допилили функционал на стороне 1С, вынесли все во внешние обработки, на стороне Битрикс запили свой модуль и почивали на лаврах. Когда приходил новый клиент, я просто находила похожий кейс, и мы дорабатывали какие-то неизбежно существующие особенности, будучи уверенными, что все пойдет, как надо.
Когда Битриксоиды выпустили новый модуль, некоторое время я присматривалась к нему, но не хотела внедрять – опасалась.
А потом летом случилось страшное - в какой-то момент мои шустрые сотрудники закончили все проекты и 3 дня сидели без дела. Дело то я им, конечно, нашла – обновили наши модули в маркете, но страх повторения этого апокалипсиса – остался. В тот момент я придумала акцию «интеграция в подарок» за покупку у меня лицензии на Битрикс Бизнес или за заключение со мной договора техподдержки на год. Акцию публиковала в разделе партнерских акций на сайте Битрикса, и она выстрелила – до сих пор слышу эхо.
Прикол был в том, что в период действия акции ею воспользовались всего 2 клиента, но потом еще долгое время клиенты приходили ко мне и говорили, что видели акцию и, хотя не успели ею воспользоваться, – решили все равно обратиться ко мне. В итоге в июле и августе на наши плечи свалилось порядка 10 интеграций. Большинство кейсов были типовыми и скучными, однако попались и интересные сложные задачи.
Передо мной встал сложный выбор – интегрировать новых сложных клиентов своим старым способом или внедрять им новый модуль обмена. К слову, новый модуль обмена на 80% покрывает те задачки, к-е раньше мы допиливали клиентам, как нестандартные. Посмотрела я на него и на наши обработки и подумала, что развивать свой модуль на стороне 1с, пытаясь угнаться за Битриксоидами – будет не выгодно. К тому же я вступила во взаимовыгодное партнерство с фирмой, к-я предоставляет 1С Предприятие в качестве «аренды приложения» и я хотела максимально упростить наше взаимодействие и конфигурирование 1с-ки клиентов.
Этот же фактор заставил меня глубже разобраться в коде конфигурации 1С УТ, и я, как обычно, переосмыслила все на новом уровне. (Кстати, у меня в команде теперь есть совершенно отдельный человечек, который занимается исключительно начальными настройками 1С УТ под разные особенности учета и документооборота).
Итак я начала внедрять новый модуль обмена, устанавливая клиентам 1С Предприятие 8.3.5, 1С УТ 11.1.6, накатывала на 1С УТ свежую версию Битриксовского дополнения, и брали свежий на момент начала работ Битрикс. Кстати, версия Битрикс была один из камушков. С него и начну.
1) Соответствие версий обмена на стороне 1С Битрикс и на стороне 1С Предприятия
Не припомню конкретных дат, когда это произошло, но в переходный период выхода новых модулей обмена на стороне Битрикс и на стороне 1С Предприятия у нас с некоторыми клиентами сложилась ситуация, когда Битрикс был обновлен до самой последней версии, а сторона 1С обновлена не была, и в связи с изменением протокола обмена – этот обмен не пошел. Помню свою панику, я даже кинулась копировать старый модуль обмена на стороне Битрикс в свое простанство имен и использовать его, но Битриксоиды, к счастью, предусмотрели решение на этот случай. На стороне Битрикс нужно ввести команды:
Настройки -> Инструменты - > Команда PHP строка
COption::SetOptionString("catalog", "DEFAULT_SKIP_SOURCE_CHECK", "Y" ;
COption::SetOptionString("sale", "secure_1c_exchange", "N" ;
И включится поддержка старой версии протокола.
2) Экспорт в 1С большого объема товаров
На одном из проектов мне нужно было выгрузить с сайта в 1С порядка 40 000 номенклатурынх позиций с картинками. Обработка «Помощник импорта» выполняла эту операцию ужасно долго – больше суток, что было непреемлемо для меня, и я переписала в ней некоторые места – вынесла запросы к базе из цикла. Об этом . Битриксоиды обещали оптимизировать обработку в обновлениях.
3) Обратный импорт и дерево групп
На проекте того же самого клиента, когда мы стали делать интеграцию в обратную сторону у нас сложилась очень специфичная ситуация.
Изначально структура каталога была создана на сайте – не на битриксовском сайте, а на другом старом сайте заказчика на OpenCart. Залили каталог в Битрикс. (используя, кстати, наш модуль импорта из yml и модуль экспорта в yml из опенкарт, к-й я написла на базе одного из бесплатных и дарю теперь тем, кто покупает мой модуль импорта из yml в Битрикс и хочет забрать товары из магазина на OpenCart)
Залили каталог в 1С – все получилось просто отлично – группам товаров был присвоен код, к-й соответствовал внешнему коду разделов XML_ID на стороне Битрикс. Договорились с заказчиком, что далее наполняем каталог и редактируем его структуру на стороне 1С. Выполнили обратный импорт каталога, чтобы убедиться, что все ок, настроили обмен ценами и остатками, протестировали. Затем заказчик сказал, что структура каталога на сайте и в 1С – будет разной. В новом модуле обмена – можно настраивать дерево групп – и такая задача теперь вообще не проблема. Однако выяснился интересный факт – это скорее фича, а не баг, но она меня сильно смутила по-началу. Когда я на стороне 1С настроила дерево групп, я думала, что после обмена они – группы, к-е уже были импортированны на сайт до настройки дерева – возьмут и сами в соответствии с этим деревом перестроятся. Однако начали создаваться новые группы с новыми XML_ID. И это пришлось учесть.
4) Мелкие неприятности на стороне 1С
Трем клиентам внедряли 1С УТ с нуля (+ интегрировали с Битрикс конечно же). Кейсы были идентичными, и делали фактически параллельно. Я сделала одному клиенту, протестила и посадила помощницу все сделать точно так же на 2х других проектах. Начинаю тестировать – на 2х других проектах не работают стандартные отчеты. Вылетает ошибка
Индексируемые поля должны присутствовать в списке выборки
<>Сегменты.Номенклатура
Начинаю внутренне закипать и перебирать в уме все известные мне бранные выражения. Вслух молчу – проверяю. Вроде все одинаково. Разница оказалась в версиях платформы. Там, где все работало ок, версия стояла 8.3.5.1068, а там, где вылетала ошибка – стояла версия платформы 8.3.5.1119, конфигурация стояла одна и та же 1С УТ 11.1.6.26 Проблему решило включение режима совместимости с версией 8.3.4 А при установке дополнения я его обычно совсем выключала - а надо было, видимо, ставить 8.3.4 Хотя на более низких версиях платформы - в частности на 8.3.5.1068 все было ок с отключенным режимом совместимости, а я уже думала, что съем кого-нибудь.
5) Соответствия служб доставок и контрагентов – грузоперевозчиков
Эта задача у нас была неплохо и удобно решена на старом модуле , но к новому модулю старое решение не подходило совсем. На новом модуле я решила задачу с минимальной модификацией модуля обмена заказами, а именно процедуры "СоздатьОбновитьЗаказ".
Дописала там, где шло заполнение свойств заказа, возможно, не очень оптимально.
СпособДоставки = ПолучитьЗначениеРеквизитаДокумента(ДокументXML.ЗначенияРеквизитов, "Способ доставки";); АдресДоставик= ПолучитьЗначениеРеквизитаДокумента(ДокументXML.ЗначенияРеквизитов, "Адрес доставки";); //Получаем соответсвия доставок из наших доп настроек: |
А дополнительные настройки - оставила во внешней обработке - так же, как описывала раньше.
6) Корректная передача валюты в заказах
Делая одному из клиентов обмен заказами, столкнулась с такой проблемой: Обмен сам-по себе - проходит нормально, но затем заказу, пришедшему с сайта не удается изменить статус - выдавало ошибку
"Значение поля Валюта не может быть пустым"
В типовых соглашениях о продажах, используемом при обмене - валюта была указана RUB.
На сайте, вроде как, была указана такая же валюта в настройках валют.
Но в заказах, пришедших с сайта валюта была не заполнена.
Оказалось, нужно было указать валюту еще и в настройках интеграции на стороне сайта:
к сожалению, не было возможности протестировать это на мультивалютных магазинах.
7) Отбор номенклатуры по свойству товара
У одного из клиентов стояла 1С УТ 10.3.29.1, накатила на нее соответсвующий модуль обмена. При выгрузке номенклатуры из 1С на сайт нужно было сделать, чтобы выгружались только те товары, у которых определенное пользовательское свойство равно определенному значению. Сначала думала, что для этой цели можно использовать настройки отбора.
Оказалось, что нет.
Этот отбор не для отбора товаров, а общий отбор свойств. Т.е. будут выгружены только те свойства, которые в этом отборе(независимо от доп. настроек свойств).
Но в 1С УТ 10.3 в модуле менеджера объекта плана обмена "Б_ОбменССайтом" есть процедура "НастроитьПостроительТоваров ". В ней я и подправила пакет запросов, связанный с выборкой товаров для того, чтобы решить свою задачу.
Картинки торговых предложений
Очень интересный случай - оставлю на закуску - напишу в следующий раз, как я по-новому реализовала на новом модуле свой старый кейс для магазинов одежды, где учет ведется по характеристикам – цвету и размеру.
Модуль обмена данными предназначен для интеграции системы «Первая Форма» с различными решениями на базе платформы «1С:Предприятие» 8.2 и выше.
Гибкое универсальное решение автоматизирует сквозные бизнес-процессы, когда одна часть действий персонала (контроль сроков, проверка, согласование) выполняется и контролируется инструментами «Первой Формы», а другая ─ выполняется в среде 1С (проводка оплат, учет, планирование).
Модуль позволяет автоматически осуществлять обмен данными между системами, например, переносить справочники, заводить договоры, и автоматически обновлять их при изменении данных в одной из систем. Любой элемент 1С может быть синхронизирован с «Первой Формой». Обе интегрируемые системы полностью сохраняют свой основной функционал.
Решение позволяет значительно оптимизировать работу, избежать двойного ввода и дублирования информации. При этом переход бизнес-процесса через границу систем максимально прозрачен для пользователя.
Список контрагентов в «1С».
Список контрагентов в «Первой Форме».
Контрагент в «1С».
Контрагент в «Первой Форме».
Примеры решений
- Перенос справочников, таких как Номенклатура или Контрагенты из 1С в «Первую Форму» с последующим автообновлением этих элементов в «Первой Форме» при изменении в 1С;
- Автоматическое создание договора в 1С после согласования в «Первой Форме» со всеми его параметрами;
- Постановка задачи на ответственного менеджера по факту отгрузки товара, зафиксированного в 1С на предоставление в бухгалтерию оригиналов товарно-транспортных накладных;
- Перенос кадровых документов типа приказов, заявок на отпуск, выплат вне оклада в 1С после согласования а «Первой Форме».
Возможности
- Миграция данных. Передача данных (справочников, документов, полей и т.д.) между системами с последующей синхронизацией;
- Сквозные бизнес-процессы. Передача управления бизнес-процессами между двумя системами;
- Интеграция кадровой информации. Перенос данных о пользователях (учетные данные, оргструктура);
- Интеграция интерфейсов. Перемещение между системами «в один клик».
Выгоды
- Бизнес-процесс может быть инициирован в любой системе без дополнительной перенастройки;
- Допускает подключение к любым (типовым и не типовым) конфигурациям 1С;
- Не требует доработки 1С (в том числе снятия с поддержки типовых конфигураций 1С);
- Настраивается без программирования.
Обеспечивается плавный перенос информации, без разрывов в бизнес процессах;
Информация
- Модуль является отдельной подсистемой программного продукта «Первая Форма». Лицензируется отдельно: лицензия приобретается один раз на организацию;
- Дальнейшая настройка и поддержка модуля может производиться клиентом самостоятельно.
При установке модуля клиенту бесплатно однократно предоставляются услуги по первичной настройке. Дополнительно могут быть предоставлены услуги консультанта для настройки сценария обмена данными в соответствие с бизнес-процессами;
Технические особенности
- Обмен данными реализован на базе веб-сервисов;
- Модуль может быть подключен к любой (не обязательно типовой) конфигурации 1С:Предприятие 8.2 и выше;
- Вся настройка сценариев обмена данными выполняется полностью из интерфейса администратора «Первой Формы» и может быть выполнена ИТ-специалистом компании. Использование Конфигуратора 1С не требуется.
Дистрибутива модуля распакуйте архив и запустите setup.exe
.
Запустите 1С: Зарплата и управление персоналом (1С-ЗУП) в режиме Конфигуратор . Обратите внимание, что установка модуля возможна только для версии конфигурации не ниже 2.5.9.2. Следуйте детальным пошаговым инструкциям, входящим в установочный комплект.
В результате в меню Сервис (в полном интерфейсе) должны появиться соответствующие пункты.
В случае, если версия конфигурации ниже, чем требуемая, либо в ходе установки возникли какие-либо неполадки, проконсультируйтесь со специалистами 1С.
Настройка интеграции
Настройка обмена с корпоративным порталом
Откройте 1С: Зарплата и управление персоналом. В меню Сервис - Обмен данными с корпоративным порталом выберите пункт Настроить обмен данными с корпоративным порталом .
Выберите Создать новую настройку обмена
. Откроется интерфейс первичной настройки обмена с корпоративным порталом.
- Выберите Выгрузка на сайт , для того, чтобы данные были отправлены непосредственно на корпоративный портал, без создания промежуточных файлов выгрузки.
- Используйте Выгрузка в каталог только в случае каких-либо неполадок: отсутствие соединения с Интернетом, ошибки при передаче и т.п. В этом случае в административной части "1С-Битрикс: Корпоративный портал" потребуется импортировать сгенерированные таким способом данные.
- В поле Адрес сайта введите полный URL, по которому доступен корпоративный портал, включая http:// и номер порта, если он отличается от 80, а также путь к PHP скрипту, осуществляющему прием данных и их обработку. По умолчанию это /bitrix/admin/1c_intranet.php .
- В полях Пользователь и Пароль укажите авторизационную информацию учетной записи на корпоративном портале, которая имеет права на прием данных из 1С. Для настройки такой учетной записи в административной части корпортала зайдите в раздел Настройки - Пользователи - Импорт пользователей и выберите опцию Импортировать из 1С: Зарплата и управление персоналом .
- Если доступ по протоколу HTTP к корпорталу из 1С возможен только через прокси-сервер, отметьте опцию Использовать прокси-сервер и укажите его параметры.
Нажмите кнопку Проверить
, чтобы убедиться, что соединение с корпоративным порталом успешно устанавливается.
На следующем шаге вы можете детализировать данные, которые будут переданы в корпортал. Если вы хотите, чтобы были выгружены все стандартные данные в полном объеме, оставьте настройки по умолчанию.
В обратном случае в поле Укажите отбор для выгрузки отметьте и (или) добавьте объекты и критерии отбора, необходимые для решения поставленной задачи.
Опция Выгружать картинки означает что на корпортал будут выгружены фотографии сотрудников, если они были указаны в 1С.
Будьте внимательны! Именно на этом шаге совершается максимальное количество ошибок неопытными пользователями, в результате чего обмен не работает или работает некорректно.
Укажите режим обмена данными. Мы рекомендуем использовать опцию Выгружать только измененные данные , так как в этом случае при каждом следующем сеансе обмена будут выгружена только новая и обновленная с момента предыдущего сеанса обмена информация. Это ускоряет обмен и снижает нагрузку на 1С и корпортал.
Все изменения в объектах регистрируются в соответствующем Узле обмена данными , который и требуется указать в одноименном поле.
Вы можете полностью автоматизировать процесс обмена, если укажите Выполнять обмен данными периодически . и укажите необходимое расписание обмена, которое можно настроить очень детально.
Таким образом, 1С самостоятельно в указанные интервалы будет устанавливать соединение с сайтом и выполнять передачу данных.
Нажмите кнопку Готово , настройка обмена завершена.
Наши настройки были сохранены в отдельный профиль. Можно создавать множество различных профилей с различными настройками. Это позволяет максимально гибко реализовывать обмен и решать самые сложные интеграционные задачи.
Обмен можно выполнить вручную, кнопкой Выполнить обмен или дождаться времени автоматического запуска процедуры.
Всю статистику по результатам обмена можно посмотреть в Мониторе обмена данными, где будут визуализированы все успешные и неуспешные попытки, включая множество справочной информации.