По традиции, прежде чем начать, небольшое предисловие. Ознакомление с 1 частью цикла статей не обязательно, но рекомендуется. Ещё разок акцентирую внимание на том, что это НЕ инструкция! Инструкцию можно найти тут на офф сайте.
В комментариях под предыдущей статьёй писали о том, что сейчас уже есть новый модуль интеграции “1C:Бэкофис 2.0” (открытая бета). Он включает в себя функционал модуля интеграции, модуля Бэкофис и ещё кучу всего сверху. Поковырялся в нем поглубже и хотел бы поделиться мнением для тех, кому интересно.
Основные положения всё те же, что и в первой части:
- Рассматривать будем общую ситуацию полной интеграции, то есть с обменом (происходящим в обе стороны);
- Рассматриваем всё без привязки к конкретной конфигурации (в обмене товарами отличий между конфигурациями почти нет);
- Рассматриваем ТИПОВОЙ модуль (без изменений) и, соответственно, конфигурации, им поддерживаемые (УТ, УНФ и БП) тоже типовые;
- Битрикс24 может быть как коробочный, так и облачный (учтите - в облачном теперь доступен обмен только на максимальном тарифе).
С предисловиями все. Погнали!
Обмен товарами
Ну а теперь по делу. Общий принцип обмена товарами у модуля довольно простой. Сначала выгружаются все сопутствующие товарам сущности (группы, единицы измерения и свойства), а затем грузятся сами товары. Поэтому для начала рассмотрим пару общих моментов и выгрузку связанных сущностей, а затем непосредственно нюансы самой выгрузки товаров.
Оглавление:
1. Внутренние идентификаторы
Про эту штуку стоило бы написать в первой статье, но она связана больше с технической стороной вопроса, поэтому решил вынести ее сюда. Если вкратце, то под “Внутренними идентификаторами” понимаются УИДы элементов из 1С. То есть при выгрузке из 1С в Битрикс передаются не только основные данные объекта, но и его УИД.
Не путайте УИД в 1С и ID в Битриксе - это разные вещи. ID в Битриксе - это просто числовой идентификатор (пример: 84 или 99465), а УИД - это 36-ти буквенно-символьный идентификатор, представляющий из себя уникальную ссылку на элемент в рамках одной таблицы данных в 1С (пример: bbc39b8e-a98a-4061-896e-fca62db4f443). Так вот 1С передает именно УИД, и помещается он в поле “XML_ID” в Битриксе.
Как вы заметили, у товара в поле УИДа их два через "#". Это связано с нюансом обмена номенклатурой с характеристиками - об этом я расскажу в разделах про загрузку и выгрузку.
Сделано это в основном для упрощения и ускорения выгрузки - Битриксу проще по этим УИДам искать элемент при получении данных из 1С, а 1С в свою очередь не нужно делать лишних запросов к базе, например, чтобы найти номенклатуру, для её обновления при загрузке.
Я привел в пример номенклатуру, но используется такая логика почти везде. Общий порядок поиска объектов при загрузке в 1С следующий (есть исключения):
- Проверка наличия объекта по ID;
- Проверка наличия объекта в таблице по УИДу;
- Поиск другими способами (зависят от объекта и настроек);
- Создание нового объекта.
При любом из вариантов нахождения/создания объекта, в регистр соответствий идентификаторов сохраняется соответствие Объект = ID.
Собственно, почему же это важно? Если у вас уже был настроен обмен из 1С, и вы решили перекинуть его на другую базу (в нашем случае это был переезд обмена с УНФ на обмен с БП, между которыми была синхронизация), то возможно пересечение УИДов. То есть вы прекращаете обмен с одной базой и начинаете с другой. И объекты при выгрузке из Битрикса могут быть связаны с неверными объектами в 1С как раз таки по УИДу. В нашем случае это был справочник контрагентов, но это возможно с любой из сущностей, участвующих в обмене. Таких случаев может быть не так много, но число растёт с ростом количества данных.
И всё вышесказанное - это ещё одна из причин, почему обмен с несколькими базами 1С невозможен (о чём писал в предыдущей статье). Из-за УИДов сопоставление данных может быть некорректным.
Да, я знаю что УИД по природе свой должен быть уникальным и по логике не должен пересекаться с объектами из другой базы, но моя практика показала, что "и палка раз в год стреляет". Подробнее познакомиться с УИДами, их природой и "с чем их едят" можно в отличной статье "Как формируется GUID?" за авторством Николая Кузнецова.
2. Ставки НДС
Выгрузка ставок НДС из 1С в Битрикс24 не происходит - расходимся!..
Ну а если серьёзно, то выгрузка и правда не происходит. Для того чтобы корректно сопоставить ставки НДС, нужно создать их руками на стороне Битрикс24, затем в настройках модуля прогрузить их ID в 1С и сопоставить с имеющимися. Стандартно всегда есть ставки “Без НДС” и “18%”. Думаю, это ухищрение, на которое пошли разработчики из-за уникальности налоговых систем в странах помимо России (Битрикс есть и там) и разнообразной реализации системы ставок в разных конфигурациях 1С.
3. Группы товаров
Раздел, логика работы которому (как я думаю) досталась от обмена с сайтом на Битриксе. А логика, собственно, простая. Есть два варианта выгрузки групп товаров:
- Иерархия как в 1С;
- Своя иерархия.
Идентификация происходит по внутреннему УИДу 1С (про УИДы читайте выше). И первый важный нюанс связан как раз таки со способом идентификации. Не важно, какой из вариантов выгрузки групп вы используете (в случае своей иерархии группы тоже хранятся в справочнике, просто в отдельном), уникальность записей в Битрикс24 при выгрузке определяется УИДом элемента справочника из 1С. В связи с этим и тем фактом, что пересозданный в 1С объект имеет уже другой УИД, могут возникнуть дубли. Я имею в виду ситуацию, когда вы удалили группу в 1С, а затем решили, что она вам всё-таки нужна, и создали новую с таким же именем. В этом случае в Битриксе будет создана новая группа с таким же именем (старая при этом автоматически не удаляется). Этот, казалось бы, очевидный момент, вытекает из того, что Битрикс не обрабатывает пометку на удаление и удаление групп в 1С. В обратную сторону, понятное дело, это тем более не работает.
Ещё один интересный момент: в коде модуля предусмотрено обновление групп из Битрикс в 1С, но оно не работает. Связано это с тем, что в Битрикс не происходит событие регистрации изменения в группе товаров.
Продолжаем “бомбить” занимательными фактами. В этот раз факт крайне полезен, если вам нужно (не важно, по какой причине) перевыгрузить группу каких-либо товаров из 1С в Битрикс. Просто заходите в изменение этой группы товаров (как элемента справочника) и перезаписываете его (просто без изменений “Записать и закрыть”). При этом все подчиненные группы, а также все номенклатурные позиции, входящие в эти группы, ставятся к выгрузке как изменённые.
Теперь давайте поговорим отдельно про каждый вариант выгрузки.
3.1. Иерархия как в 1С. Про выгрузку групп товаров аналогично иерархии в 1С сказать особо нечего. Чтобы выгрузка осуществлялась в этом варианте, достаточно не указывать “Дерево групп” в соответствующем реквизите в настройках. Грузятся группы ровно так, как есть в 1С. При изменении в 1С, изменения подгружаются в Битрикс24.
Стоит отметить лишь один момент, связанный с первоначальной выгрузкой. Если вы настраиваете модуль с нуля и будете производить полную выгрузку - проблемы нет. Группы выгрузятся непосредственно перед выгрузкой самой номенклатуры. А вот если вы не планируете делать полную выгрузку или переключились с выгрузки своей иерархии на 1Сную, то группы автоматически не выгрузятся. Чтобы новая иерархия групп выгрузилась в Битрикс, нужно будет пройтись по каждой группе в 1С и перезаписать её, чтобы она встала на выгрузку. Достаточно это сделать для групп верхней иерархии. Все нижние группы встанут к выгрузке автоматически (почему - писал выше).
3.2. Своя иерархия. Теперь касаемо выгрузки по собственной иерархии или, как её называют в модуле, “Пользовательские группы товаров”. Этот вариант позволяет сделать в Битриксе собственную иерархию товаров, отличную от 1С, и распределить номенклатуру по этим группам как вздумается. Можно даже для каждой номенклатуры указать отдельную папку в Битрикс24, даже если в 1С они расположены в одной папке.
В этом варианте всё также стоит помнить о том, что пересоздание группы ведет к повторной выгрузке группы в Битрикс. А случайно пересоздать группу проще простого, ведь предупреждений при удалении нет (в отличии от групп в справочнике номенклатуры). Поэтому будьте осторожны при редактировании иерархии.
Ещё момент, связанный с распределением групп и товаров по группам Битрикса. Сама обработка не даст вам распределить группу или номенклатуру в несколько папок сразу, хотя практически этого можно добиться (случайно, костылями или кодом). Так вот в этом случае ничего не сломается. При выгрузке обработка будет сыпать оповещениями в журнал (на которые стоит обратить внимание и пофиксить сей момент), но выгружать будет в первую попавшуюся по настройкам группу.
При любом варианте настроек возможны случаи, когда программа не смогла определить группу товаров для выгрузки номенклатуры или группа с таким ID в Битрикс24 отсутствует. Тогда товар будет выгружен в корневой каталог.
4. Отборы при выгрузке
Про этот раздел сказать нечего. Стандартная настройка отборов, как в любой другой выгрузке или отчете - гибкая и удобная.
Занятный факт связан с тем, что в оф. документации сказано (раздел “Синхронизация товаров”), что ограничивать выгрузку можно также с использованием настроек групп товаров (предыдущий раздел), но это не так. Как уже было сказано выше, если при выгрузке товар не смог определиться с группой или такой группы не существует, то он спокойно будет выгружен и попадет в корневой каталог.
5. Цены, остатки и картинки
Касательно цен и остатков самым основным моментом (который больше всего расстраивает заказчиков) является то, что в Битриксе есть только одна цена и один остаток. Они соответствуют тому виду цен и тому складу, что вы указали в настройках интеграции.
То есть в Битриксе не предусмотрено вывод нескольких складов и использование нескольких видов цен. То, к чему все так привыкли в 1С, в Битрикс “не завезли”. Но не сделано это по понятным причинам. Ведь Битрикс24 - это, в первую очередь, CRM система и корп. портал. Строить управленческий или складской учет в Битриксе - на мой взгляд, гиблое дело. Никому не советую.
Если в Битрикс24 вам нужны несколько видов цен и остатков только в качестве информации, то, с использованием типового модуля, это можно решить ТОЛЬКО через доп. реквизиты (подробнее про них читай ниже). Озадачиваете программистов, чтобы они написали обработку по заполнению доп. реквизитов номенклатуры данными по разным видам цен и остаткам на разных складах, и будет вам счастье. Это решит проблемы отображения цен и остатков в Битриксе, НО, повторюсь, это только для информации. Если вам нужно, чтобы в сделках и счетах при выборе товара подтягивалась цена не из основной цены товара, то всё становится сложнее. Решается только силами спецов по Битриксу и только на коробочной версии. Возможно, есть способы реализовать и в облачной версии, но у нас прецедентов не было.
Картинки - они просто грузятся. Основная картинка выгружается как основная, остальные - как прочие.
ВНЕЗАПНО! Пока писал статью, Битриксоиды провели конференцию с анонсами (23.11.2021 запись трансляции) и сообщили, что теперь в Битрикс24 есть складской учет (почти что полноценный). Не совсем понимаю, зачем дублировать урезанную версию складского функционала из 1С, но в целом выглядит интересно. Ждём, когда ее обкатают, сделают доступной через запросы к API, и можно будет выводить остатки по складам не через свойства товаров.
6. Единицы измерения
Если вы обратите внимание на настройки обмена, то там нет никаких упоминаний единиц измерения, но при этом в обмене они участвуют. Ведь какая может быть номенклатура без единиц измерения?! С ними всё неоднозначно, и чтобы не “прогореть”, надо быть осторожным.
Во-первых, идентификация единиц измерения происходит в Битриксе, как и везде, по ID, НО только при выгрузке из 1С. Проверка по международному коду (не путать с международной аббревиатурой. “6” - это код, а “MTR” - аббревиатура) происходит, но только с целью предотвращения дублей при выгрузке. А вот при загрузке в 1С из Битрикса, всё с точностью до наоборот. Сначала проверяется единица измерения по международному коду, а уже потом происходит проверка сопоставления по ID.
Во-вторых, наименования и сокращения перепутаны. Я не совсем понимаю логику, которой руководствовались разработчики, но при обмене полное наименование в 1С становится условным обозначением в Б24, и наименование (в 1С сокращённое) становится полным наименование в Битриксе.
В связи со всем вышеперечисленным могу дать следующие рекомендации:
- После проведения полной выгрузки поправьте наименования и полное наименование в 1С и выгрузите изменения в Битрикс. При этом при выгрузке модуль наверняка пожалуется, что не может выгрузить штуки и метры, потому что в Битриксе эти единицы измерения присутствуют по стандарту. Для них просто руками укажите сопоставление в регистре сопоставлений;
- Если же полная выгрузка не планируется, то просто сопоставьте штуки и метры в регистре, а затем перезапишите все элементы основного классификатора единиц измерения, которыми вы пользуетесь, чтобы они встали к выгрузке в Битрикс;
- Не добавляйте и не изменяйте единицы на стороне Битрикса.
- Если нужно добавить новую единицу измерения, то добавляйте в 1С.
7. Свойства товаров (пользовательские поля)
Тут как и с единицами измерения - настроек просто не предусмотрено. При этом “все” доп. реквизиты из 1С будут выгружены в Битрикс, а “все” свойства товаров из Битрикса попадут в 1С.
Все я написал в кавычках неспроста. Дело в том, что в модуле предусмотрен обмен доп. реквизитами 1С и пользовательскими полями в Битрикс для всех основных сущностей (товары, компании и контакты, сделки и счета), но только определенных типов. А если быть точным, для выгрузки доступны поля с типами:
- Строка (Строка и URL в Б24);
- Число (Число и Деньги в Б24);
- Булево;
- Дата (Дата и Дата/Время в Б24);
- Дополнительное значение (Список в Б24);
- Сотрудник или Пользователь в зависимости от конфигурации (Сотрудник в Б24).
Все остальные типы реквизитов не поддерживаются и при обмене пропускаются.
При этом, говоря про выгрузку доп. реквизитов из 1С, стоит понимать, что грузятся как “Дополнительные реквизиты”, так и “Дополнительные сведения”, но я для удобства буду писать просто доп. сведения. Модуль без проблем понимает, что это одинаковые по сути и разные по местам хранения реквизиты. А вот при загрузке созданных в Битриксе свойств, они всегда помещаются в “Дополнительные реквизиты”.
Для большинства сущностей при формировании настроек обмена (то есть при первоначальной настройке и при первом обмене) создаются так называемые “служебные” или “предопределенные” свойства. Служат они в основном для хранения, как понятно из названия, служебной информации, используемой при обмене или расширяющей функционал. Часть из них даже не выгружается в Битрикс.
Для номенклатуры (для сделок, компаний и прочих - такие реквизиты я рассмотрю в соответствующих частях цикла статей) таких свойств всего три:
- Вид номенклатуры
- Артикул
- Остаток
Думаю, из названий понятно, для чего они служат. Стоит только уточнить, что вид номенклатуры выгружается просто как списочный реквизит.
Ещё есть нюанс с числовыми и денежными полями. Помните тот самый пример с выгрузкой нескольких вариантов цен для информации в Битрикс? Так вот, при создании числового доп. реквизита в 1С (для хранения цены) в Битрикс он также попадёт как числовой реквизит. Но у Битрикса какие-то сложности с хранением именно цен в таких реквизитах. Проявляется это в том, что иногда при отправке числового значения с дробной частью в Битриксе оно просто обнуляется. Предполагаю, что это связано с тем, что при округлении или конвертации в формат хранения (в документации указано, что хранят они его в виде числа с плавающей точкой по стандарту IEEE 754) что-то идёт не так. Поэтому для случая с ценовыми реквизитами советую создавать их на стороне Битрикса с типом “Деньги”, а в 1С он уже попадет как числовой. Или можно просто сопоставить реквизиты в Б24 и 1С вручную.
8. Выгрузка товаров
Итак, непосредственно выгрузка самих товаров (номенклатуры). Большая часть подготовительных и сопутствующих действий происходит до начала непосредственной выгрузки товаров, о чём и написано выше. Но и в самой выгрузке есть нюансы. В основном они связаны с тем, включено ли у вас ведение номенклатуры по характеристикам в 1С или нет. Честно сказать, случай с характеристиками в практике был всего один, но даже на нём удалось словить вал шишек.
Первое и самое странное (на мой взгляд). В Битрикс из 1С номенклатура с характеристиками грузится как несколько позиций, по количеству характеристик. Каждый товар в Битриксе будет иметь наименование “[Наименование номенклатуры] :: [Наименование характеристики]”. При этом свойства у таких товаров будут как из доп. реквизитов номенклатуры, так и из доп. реквизитов характеристик. И самое интересное, что в Битриксе есть так называемые “Вариации товаров”, что по сути равно характеристикам, но модуль не умеет их загружать. Ну или Битрикс мог бы при загрузке сам распределять товары с характеристиками по вариациям, опираясь на внешний идентификатор (который, к слову, у таких товаров выглядит как УИДНоменклатуры#УИДХарактеристики), но почему-то так не делает.
Даже нет возможности как-то доработать выгрузку, с использованием REST API. В документации просто нет упоминаний про вариации товаров. Но можно привлечь опытных интеграторов Битрикса, и они сделают распределение скриптами на стороне Битрикса, и выглядеть будет вот так:
В остальном выгрузка самих товаров больше ничем не примечательна. Валюта, цена, НДС, группа, единица измерения, картинки и свойства, выгружаются без особых приключений. Если для одного из важных полей (по типу НДС или единиц измерения) при выгрузке не удалось определить значение или такового нет в Битриксе, то будет просто присвоено значение по умолчанию.
Ах да, и ещё один важный момент. В Битриксе у вас нет различий между товаром и услугой. Совсем нет. Всё, что у вас есть для определения - это вид номенклатуры (предопределённое / служебное свойство см. выше). По нему можно ориентироваться, что это за номенклатура - товар или услуга.
9. Загрузка товаров
Честно сказать, я бы не рекомендовал загружать номенклатуру из Битрикса. Да и изменения грузить тоже не стоит. Причин тому две:
- Сложность и комплексность номенклатуры в 1С. Номенклатура может быть с характеристиками, сериями и бог весть с чем ещё (всё зависит от конфигурации). Да, заполнение номенклатуры по виду номенклатуры никто не отменял и это решает большую часть проблем с заполнением реквизитов. Да и разработчики постарались в коде сделать всё грамотно относительно характеристик. Но согласитесь, ведь никому не нужны бухгалтера, ворчащие о том, что у них попереименовывалась номенклатура и сбросились настройки счетов. Или начальник производства, у которого куда-то съехали все спецификации по номенклатуре;
- Скудность настроек для загрузки. По сути у вас есть только выбор того, можно ли обновлять номенклатуру в 1С, при изменении в Битриксе и…. да и всё. Больше ничего и нет. Ни отборов (отборы от выгрузки не работают при загрузке), ни выбора загрузки картинок. Благо хоть распределение по иерархии работает так, как указано в настройках загрузки.
В общем если решитесь на такие эксперименты, то вот вам несколько нюансов, чтоб "сгладить углы":
- Помните про внешние идентификаторы. При загрузке модуль в первую очередь будет искать номенклатуру и характеристику именно по ним, а уже во вторую очередь по соответствиям ID Битрикса, записанным в регистре идентификаторов;
- Все товары будут загружаться как товары (простите за тавтологию). Разграничений на услуги и товары, как я уже писал выше, в Битриксе нет. Решается это выбором правильного вида номенклатуры (лучше сделать это поле обязательным) в Битриксе, а при загрузке 1С по виду определит, товар это или услуга;
- В Битриксе нет ограничения на длину наименования номенклатуры, тогда как в 1С она равна 150-ти (а иногда и вовсе 100) символам. Будьте готовы к обрезанным наимено…….
10. Резюме
Что ж, вроде бы я ничего не упустил из того, о чем хотел написать. Подводных камней не много, но они есть. Помните об идентификаторах, правильно настраивайте выгрузку и старайтесь не загружать товары из Битрикса, а вводить их в 1С, и всё у вас будет работать как надо.
Надеюсь, что хотя бы часть описанного выше будет полезна. В дальнейшем так же подробно рассмотрю обмен контактами и компаниями, а затем счетами и сделками. Там будет ещё больше нюансов, связанных с конкретными конфигурациями.
Здоровая критика, исправления и дополнения приветствуются. ВНИМАНИЕ! Спасибо за внимание! =3