San Antonio - Интеграция БУС+1С и перенос данных

Введение

  • Магазин продает церковные товары.
    • Среди покупателей есть как физические, так и юридические лица.
  • Мне дан доступ в Битрикс
    • Обновления были установлены: 27.09.2017 22:58:57
    • Закончился срок получения обновлений а далее обновления не планируются
    • Редакция продукта: Малый бизнес
    • Готовое решение: Интернет-магазин (DELUXE) (dw.deluxe)
  • Архивирование:
    • Размер архива: 18.37 ГБ
    • Размер данных: 19.93 ГБ
    • Файлов в архиве: 396'328
    • Время создания резервной копии: 29 мин.
  • Вопросы
    • Размер базы очень большой. В последний раз когда я сталкивался таким большим объемом, мне не удалось восстановить сайт из резервной копии. Нужно разобраться почему такой большой объем и в зависимости от этого решить, что делать с картинками. На сайте картинки очень качественные.
    • Есть множественные свойства

Вот пример товара, который продается в магазине (фотографию немного доработал):

Пример товара, который продается в интернет-магазине

Аудит и техническое задание

Сначала нужно перенести товары из Битрикс в 1С, потом интегрировать 1С с Битрикс таким образом, что бы товары заводились в 1С и попадали в интернет-магазин, а из интернет-магазина шли заказы покупателей в 1С.

Инфоблоки

Список инфоблоков сайта:

Список инфоблоков
  • Товары ID=10
  • Торговые предложение ID=11

Разделы товаров

Разделы товаров выглядят так:

Разделы информационных блоков

Информация по разделам:

  • Разделов всего: 277
    • В том числе активных: 250
    • В том числе пассивных: 27
  • Все внешние кода соответствуют идентификаторам за исключением одного. Надо выяснить, что за этим стоит
  • Все символьные кода заполнены и уникальны
  • Среди активных разделов 22 наименования неуникальны - каждый их них встречается два раза
  • Максимальная длина наименования: 55

Товары

Товары выглядят так:

Элементы информационных блоков

Информация по элементам:

  • Элементов всего: 8'056
    • В том числе активных: 4'370
    • В том числе пассивных: 3'686
  • Среди активных товаров 338 неуникальных наименований - лучше их убрать, но можно и так оставить, тогда надо будет в 1С изменить настройку
  • Максимальная длина наименования: 188. В 1С в типовой длина 100, максимум можно увеличить до 150.
  • Внешний код во-первых непонятно какой, во-вторых там 11 неуникальных значений, поэтому внешний код нужно будет сделать везде равным ID

Торговые предложения

Торговые предложения выглядят так:

Торговые предложения
  • Максимальная длина наименования: 107
  • Среди активных характеристик у одного и того же товара есть одинаковые наименования - это очень плохо. Таких позиций 306
  • Таких предложений, у которых нет товара, нет - это хорошо
  • Все внешние кода уникальные, но они иногда равны идентификатору, иногда нет. Их нужно менять!


Свойства товаров

Вот так выглядят все свойства товаров:

Все свойства товаров
  • Всего свойств:90
    • В том числе активных: 86
    • В том числе пассивных: 4
    • В том числе множенственных: 27
    • В том числе одиночных: 63
  • Сразу возникает вопрос - обоснована ли множественность или нет?
    • В 1С множественных свойств нет, но если надо, то можно доработать.


Вот так выглядят все множественные свойства товаров:

Все множественные свойства товаров


Вот так выглядят все немножественные свойства товаров:

Все немножественные свойства товаров

Свойства торговых предложений

Вот так выглядят все свойства товарных предложений:

Все свойства товарных предложений


Файлики

Файлы выглядят так:

Таблица файлов из Битрикса

Техническое задание

Состав тех-задания

  1. Проанализировать внешние кода сущностей по поводу их модификации или немодификации для интеграции
  2. Проанализировать свойства товаров и торговых предложений по поводу из интеграции
  3. Сделать механизм, который может находить каталоги, которые мешают архивированию
  4. Сделать механизм, который позволяет выгружать большое количество свойст товаров из Битрикса для загрузки их в 1С
  5. Перенести товары, немножественные свойства товаров, торговые предложения, немножественные свойства торговых предложений из Битрикса в 1С.
  6. Сделать так что бытовары, группы товаров, немножественные свойства товаров, немножественные свойства торговых предложений переходили из 1С в Битрикс.
  7. Сделать так что бы заказы введенные в интернет-магазине попадали в 1С вместе с товаром и контрагентом
  8. Сделать так, что бы изменение статуса заказа переходило из 1С в Битрикс и наобоорот.

Чек-лист тех-задания

  1. Изменяем свойство товара в 1С, изменение переходит в Битрикс

Магазин не копируется ☹

Поскольку к моменту интеграции магазин уже давно работает, то нужно обязательно сделать копию и тесты проводить только на копии. К сожалению я не смог скопировать магазин штатными средствами. Количество товаров всего 8'000 и элементов около 2'000, а архив базы занимает около 20Гб. Это ненормально. Нужно найти каталоги или каталог, который дает такой большой объем. Можно конечно на рабочем сайте почистить кеш, но менеджер сказала, что она пробовала разные плагины для уменьшения фотографий, поэтому вполне возможно что объем делают какие-нибудь безхозные фотографии, которых там очень много и они очень качественные.

Список всех файлов с их размерами можно получить с помощью одного FTP-запроса. На OpenCart'е у меня такое делать получается. Но поскольку в Битриксе очень много каталогов и файлов, то один FTP-запрос не успевает получить эти данные. Поэтому я сделаю так: c помощью PHP-скрипта получу все каталоги магазина.

Скрипт прошел. Получился файлик размером 18'095'282 байт, состоящий из 264'571 строк.

Содержимое файлика получилось такое:

...

/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-nastolnaya-15-l-40x44-sm
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-nastolnaya-15-l-40x44-sm/08
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-nastolnaya-15-l-40x44-sm/6f
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-nastolnaya-15-l-40x44-sm/b6
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-nastolnaya-15-l-40x44-sm/ba
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-nastolnaya-15-l-40x44-sm/db
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-nastolnaya-15-l-40x44-sm/df
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-s-kranom-75-l
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-s-kranom-75-l/11
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-s-kranom-75-l/21
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-s-kranom-75-l/79
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-s-kranom-75-l/93
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kresheniya-mladentsev-s-kranom-75-l/b6
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kreshheniya-iz-medi-s-serebreniem-2
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kreshheniya-iz-medi-s-serebreniem-2/23
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kreshheniya-iz-medi-s-serebreniem-2/99
/var/www/bitrix/bitrix/cache/kupit/kupel-dlya-kreshheniya-iz-medi-s-serebreniem-2/b6
  
...  

По каждому каталогу делаю ftp-запрос и получаю количество и размер файликов, которые непосредственно распологаются в этой директории

Размеры и количество файлов в каталоге

Потом перевожу этот список каталогов в справочник и вычисляю программным образом объем файлов в каждого каталога, которые лежат не только непосредственно в этом каталоге, но и во всех нижелажащих каталогах. Потом отсортировал этот список в порядке убывания объема файлов и получил на первых строках каталоги, которые формируют максимальный объем. Потом при копировании сайта убрал эти каталоги в и результате объем архива магазина получился около 2ГБ против 20Гб, которые получаеются при копировании всего магазина. Процесс архивации теперь занимает около 2-х минут против 30-ти минут при архивировании всего магазина. Но при архивировании в архив не попадают картинки, которые в принципе не очень нужны при интеграции.

Переговоры 19-05-2018

В результате переговоров договорились о следующем:

  1. Переносить будут только одиночные свойства, множественные свойства пойдут по другому договору. Перенос множественных свойств - это серъезная доработка штатной интеграции.
  2. Перед доработкой 1С:УТ нужно будет ее обновить до последнего релиза
  3. Павел сказал, что если надо скопировать весь магазин, то нужно будет дать команду администратору. Я это понял, но мне нужна возможность оперативной архивации, а архивирование каждой копии ждать по полчаса, потом копирование на мой компьютер минут 40 и тратить 20 гб - это не оптимально. Копия магазина должна стоить в моей виртуальное машине потому, что у меня на компьютере много инструментов есть для контроля и отладки разных нюансов интеграции.

Долгоиграющий скрипт

Активных товаров около 4'000. У каждого товара около 90 свойств. Всего значений свойств получается около 360'000. Для одного запроса черех Bitrix Framework API это очень много, тем более, что речь идет о значениях свойств. В Битрикс API нет отдельного класса для работы со значениями свойств, поэтому приходится работать через класс «CIBlockElement». Это значит, что внутри запроса делается очень много операторов «JOIN». Я пробовал разными способами запускать PHP-скрипт выгрузки значений свойств - с рабочего сервера, с моей копии, но ни один на сработал, потомучто серверу не хватает время его выполнить. Поэтому я сделал выгрузку из Битрикса с помощью 1С следующим образом.

Сначала получил список всех товаров, упорядоченный по ID:

Список товаров, упорядоченный по ID


Потом разбил этот список на несколько групп таким образом, что бы в каждой группе было 100 уникальных ID и запускал из 1С скрипт, расположенный в Битриксе с помощью GET-запроса. В этом запросе передавался диапазон ID через GET-параметры.

Список запускаемых скриптов с разными GET-параметрами


В результате с сайта были получены значения свойств товаров, которые распределились среди 43-х json-файликов.

JSON-файлики, в которых распологаются значения свойств товаров


Результат

Группы и элементы

Вот так выглядит список разделов и элементов в Битриксе - это откуда брали данные:

Cписок разделов и элементов в Битриксе


Вот так выглядит список групп и товаров в 1С - это куда перенесли данные

Cписок групп и товаров в 1С


Характеристики товаров

Вот так выглядят торговые предложения в Битриксе - это отсюда брали данные

Торговые предложения в Битриксе


Вот так выглядят соответствующие характеристи товара в 1С - это сюда добавляли данные

Характеристи товара в 1С

Артикулы товаров в 1С

Вот так выглядят товары с артикулами, которые загружены прямо из справочника "Номенклатура"

Товары с артикулами

Дополнительные реквизиты товаров в 1С

Дополнительные реквизиты товаров в 1С - это свойства элементов в Битриксе. Я перенес только списочные, числовые и строковые свойства, которые не являются множественными. Другие свойства Битрикса не имеют аналогов в 1С. Что с ними делать - это нужно решать отдельно. Перенос множественных свойств требует серъезной доработки штатного механизма интеграции, но если он нужен, то я без проблем сделаю.

Вот так выглядят дополнительные реквизиты товаров в 1С, которые пришли из Битрикса:

Дополнительные реквизиты товаров в 1С

Вот так выглядят значения дополнительных реквизитов в карточке товара в 1С

Значения дополнительных реквизитов в карточке товара в 1С

Вот так выглядят свойства того же самого товара в Битриксе:

Свойства товара в Битриксе

Дополнительные реквизиты характеристик в1С

Вот так выглядят дополнительные реквизиты характеристик товаров в 1С:

Дополнительные реквизиты характеристик товаров в 1С

Цены, которые пришли в 1С из Битрикса

Вот так выглядят цены, которые пришли из Битрикса в 1С:

Цены, которые пришли в 1С из Битрикса

Заказы, которые пришли в 1С из Битрикса

Вот так выглядят заказы, которые пришли из Битрикса в 1С:

Заказы, которые пришли в 1С из Битрикса

Тестирование результата

Для того, что бы протестировать была сделана копия рабочего сайта. Полную выгрузку на рабочий сайт делать нельзя, потому что, вдруг там что-то не так, тогда могут стереться данные. На стороне 1С в справочник «Номенклатура» и «Характеристики» были добавлены поля «Дата ввода» и «Дата редактирования» и далее заполнены с помощью следующей обработки:

Заполнение полей 'Дата ввода' и 'Дата редактирования' в 1С

Схема потоков данных выглядит так:

Схема потоков данных при тестировании

Поскольку в рабочем Битриксе данные все время добавляются и редактируются, то можно их и использовать для теста новых и редактируемых данных.

Добавляем данные из рабочего Битрикса в рабочую 1С, обновляем там поля «Дата ввода» и "Дата редактирования". С помощью обработки, которая показана ниже снимаем регистрацию изменений с групп, товаров и характеристик. Потом берем данные из копии Битрикса и выделяем те данные в рабочей 1С, которых нет в копии Битрикса.

С помощью этой обработки можно сделать следующие манипуляции в рабочей 1С:

  • Снять регистрацию изменений со всех групп, товаров и характеристик;
  • Выделить те группы, товары и характеристики, которых нет в копии Битрикса;
  • Выделить те группы, товары и характеристики, у которых наименование отлично от копии Битрикса;
  • Сделать регистрацию изменений выделенных групп, товаров и характеристик;
  • Разделить данные, которые есть в рабочей 1С, но нет в копии Битрикса на две группы - данные добавлены в 1С и данные добавлены в Битриксе.
Манипуляции с регистрацией изменений

Видео #1. Рабочая 1С и копия рабочиго БУС

В этом видео показывается, что неможно протестировать интеграцию, из-за того, что копия сделана некорректно


Видео #2. Рабочая 1С и рабочий Битрикс → Единоразовый перенос групп, товаров и характеристик без свойств из БУС в 1С

В этом видео показывается следующее:

  • Группы
    • Все новые группы, заведенные после последней синхронизации, попадают в рабочую 1С
    • Все изменения в наименовании групп, сделанные после последней синхронизации, попадают в рабочую 1С
    • Все изменения в структуре групп, сделанные после последней синхронизации, попадают в рабочую 1С
    • Все изменения полей групп «Дата ввода» и «Дата изменения», сделанные после последней синхронизации, попадают в рабочую 1С
  • Товары
    • Все новые товары, заведенные после последней синхронизации, попадают в рабочую 1С
    • Артикулы новых товаров, заведенных после последней синхронизации, попадают в рабочую 1С
    • Все изменения в наименовании товаров, сделанные после последней синхронизации, попадают в рабочую 1С
    • Все изменения в артикулах товаров, сделанные после последней синхронизации, попадают в рабочую 1С
    • Все изменения в родителях групп, сделанные после последней синхронизации, попадают в рабочую 1С
    • Все изменения полей товаров «Дата ввода» и «Дата изменения», сделанные после последней синхронизации, попадают в рабочую 1С
  • Характеристики
    • Все новые характеристики, заведенные после последней синхронизации, попадают в рабочую 1С
    • Все изменения в наименовании характеристик, сделанные после последней синхронизации, попадают в рабочую 1С
    • Все изменения полей характеристик «Дата ввода» и «Дата изменения», сделанные после последней синхронизации, попадают в рабочую 1С

Видео #3. Рабочая 1С и рабочий Битрикс → Единоразовый перенос свойств товаров и характеристик из БУС в 1С

В этом видео показывается следующее:

Видео #4. Рабочая 1С и рабочий Битрикс → Регулярный перенос заказов из БУС в 1С

В этом видео показывается следующее:

  • Новые заказы, заведенные в рабочем Битриксе попадают в 1С

Видео #5. Рабочая 1С и копия Битрикс

В этом видео показывается следующее:

  • Группы
  • Товары
  • Характеристики

Чек-лист

  • Группы товаров
    1. Добавляем новую группу в 1С → Новая группа появляется в БУС
    2. Изменяем у произвольной группы наименование → Наименование изменяется в БУС
    3. Изменяем у произвольной группы родителя → Родитель изменяется в БУС
  • Товары
    1. Добавляем новый товар в 1С → Новый товар появляется в БУС
    2. Изменяем у произвольного товара наименование → Наименование изменяется в БУС
    3. Изменяем у произвольного товара родителя → Родитель изменяется в БУС
  • Характеристики
    1. Добавляем новую характеристику в 1С → Новая характеристика появляется в 1С
    2. Изменяем у произвольной характеристики наименование → Наименование изменяется в БУС
  • Свойства товаров
    • Изменяем какое-либо свойство товара → это изменение переходит в БУС
  • Свойства характеристик
    • Изменяем какое-либо свойство характеристики → это изменение переходит в БУС
  • Заказы
    • Заводим новый заказ в БУС, он появляется в 1С

Обратная связь

Инструкция Согласитесь с политикой конфиденциальности, подтвердите, что Вы не робот и нажмите кнопку «Отправить». Если Вы отправите форму на web-сервер без подтверждения «Я не робот», тогда web-сервер ничего делать не будет.