Вот пример товара, который продается в магазине (фотографию немного доработал):
Сначала нужно перенести товары из Битрикс в 1С, потом интегрировать 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-ти минут при архивировании всего магазина. Но при архивировании в архив не попадают картинки, которые в принципе не очень нужны при интеграции.
В результате переговоров договорились о следующем:
Активных товаров около 4'000. У каждого товара около 90 свойств. Всего значений свойств получается около 360'000. Для одного запроса черех Bitrix Framework API это очень много, тем более, что речь идет о значениях свойств. В Битрикс API нет отдельного класса для работы со значениями свойств, поэтому приходится работать через класс «CIBlockElement». Это значит, что внутри запроса делается очень много операторов «JOIN». Я пробовал разными способами запускать PHP-скрипт выгрузки значений свойств - с рабочего сервера, с моей копии, но ни один на сработал, потомучто серверу не хватает время его выполнить. Поэтому я сделал выгрузку из Битрикса с помощью 1С следующим образом.
Сначала получил список всех товаров, упорядоченный по ID:
Потом разбил этот список на несколько групп таким образом, что бы в каждой группе было 100 уникальных ID и запускал из 1С скрипт, расположенный в Битриксе с помощью GET-запроса. В этом запросе передавался диапазон ID через GET-параметры.
В результате с сайта были получены значения свойств товаров, которые распределились среди 43-х json-файликов.
Вот так выглядит список разделов и элементов в Битриксе - это откуда брали данные:
Вот так выглядит список групп и товаров в 1С - это куда перенесли данные
Вот так выглядят торговые предложения в Битриксе - это отсюда брали данные
Вот так выглядят соответствующие характеристи товара в 1С - это сюда добавляли данные
Вот так выглядят товары с артикулами, которые загружены прямо из справочника "Номенклатура"
Дополнительные реквизиты товаров в 1С - это свойства элементов в Битриксе. Я перенес только списочные, числовые и строковые свойства, которые не являются множественными. Другие свойства Битрикса не имеют аналогов в 1С. Что с ними делать - это нужно решать отдельно. Перенос множественных свойств требует серъезной доработки штатного механизма интеграции, но если он нужен, то я без проблем сделаю.
Вот так выглядят дополнительные реквизиты товаров в 1С, которые пришли из Битрикса:
Вот так выглядят значения дополнительных реквизитов в карточке товара в 1С
Вот так выглядят свойства того же самого товара в Битриксе:
Вот так выглядят дополнительные реквизиты характеристик товаров в 1С:
Вот так выглядят цены, которые пришли из Битрикса в 1С:
Вот так выглядят заказы, которые пришли из Битрикса в 1С:
Для того, что бы протестировать была сделана копия рабочего сайта. Полную выгрузку на рабочий сайт делать нельзя, потому что, вдруг там что-то не так, тогда могут стереться данные. На стороне 1С в справочник «Номенклатура» и «Характеристики» были добавлены поля «Дата ввода» и «Дата редактирования» и далее заполнены с помощью следующей обработки:
Схема потоков данных выглядит так:
Поскольку в рабочем Битриксе данные все время добавляются и редактируются, то можно их и использовать для теста новых и редактируемых данных.
Добавляем данные из рабочего Битрикса в рабочую 1С, обновляем там поля «Дата ввода» и "Дата редактирования". С помощью обработки, которая показана ниже снимаем регистрацию изменений с групп, товаров и характеристик. Потом берем данные из копии Битрикса и выделяем те данные в рабочей 1С, которых нет в копии Битрикса.
С помощью этой обработки можно сделать следующие манипуляции в рабочей 1С:
В этом видео показывается, что неможно протестировать интеграцию, из-за того, что копия сделана некорректно
В этом видео показывается следующее:
В этом видео показывается следующее:
В этом видео показывается следующее:
В этом видео показывается следующее: