Обмен с сайтом Bitrix Событие окончания выгрузки xml пакетов OnCompleteCatalogImport1C

07.12.20

Интеграция - Сайты и интернет-магазины

Активация недокументированного события Bitrix - завершения обмена xml пакетами для штатной выгрузки (Обмен с сайтом). 1С 8.3 УТ 11.4.

Скачать исходный код

Наименование Файл Версия Размер
1С Обмен с сайтом Bitrix Событие окончания выгрузки xml пакетов OnCompleteCatalogImport1C:
.cfe 7,88Kb
6
.cfe 7,88Kb 6 Скачать

Всем привет ))

Задача

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

(нам удобнее обработать весь каталог сразу а не ловить каждое изменение данных как рекомендуют специалисты )

Инструменты

  1. Штатная выгрузка 1С (обмен с сайтом) – *используем по умолчанию
  2. Обработка от Битрикс – Обмен с интернет магазином

Проблема

Обмен и там и там идет xml пакетами, 1С отправляет, Bitrix принимает

по документации, для обмена, у Bitrix существует два события

  • OnBeforeCatalogImport1C - перед началом обработки xml пакета
  • OnSuccessCatalogImport1C - по окончанию обработки xml пакета

Если для запуска своего скрипта использовать событие OnSuccessCatalogImport1C – оно за выгрузку сработает несколько раз (например)

  1. Для штатной выгрузки 1С – 2 раза (товары+торговые предложения)
  2. Для выгрузки Bitrix ~ 6 раз (товары+торговые предложения+цены+остатки и т.д.)

Как отловить окончание всей выгрузки – непонятно

Поиск…

Которое вызывается get запросом вида

https://example.ru/bitrix/admin/1c_exchange.php?type=catalog&mode=complete&sessid=ID_Сессии

  • в конфигураторе по поиску кода оказалось что строка mode=complete ПРИСУТСТВУЕТ в модуле Битрикса
  • при выгрузке на сайт через модуль Битрикса – выяснилось что данное событие СРАБАТЫВАЕТ на сайте

Решение (да простит меня Битрикс)

  1. Делаем расширение конфигурации типа адаптация
  2. Из основной конфигурации добавляем в расширение ОбщийМодуль/ОбменССайтом
  3. Используем запуск по окончании основной функции
  4. Формируем в модуле расширения GET запрос к сайту для активации  OnCompleteCatalogImport1C

 

 
Со стороны 1С 
&После("ДобавитьПараметрыПротоколаОбменаВСтруктуру")
// Процедура - добавляет в структуру параметры http запросов
Процедура CatalogImport1C_ДобавитьПараметрыПротоколаОбменаВСтруктуру(СтруктураПараметров)
	СтруктураПараметров.Вставить("ПараметрЗапросаHTTP_ДеактивацияДанныхПоДате"	, "&mode=deactivate");
	СтруктураПараметров.Вставить("ПараметрЗапросаHTTP_ОкончаниеВыгрузкиТоваров"	, "&mode=complete");
//	Сообщить("обновлена СтруктураПараметров");
КонецПроцедуры	

&После("ВыполнитьОбменССайтом")
// Процедура - Выполняет запуск обмена с сайтом.
//
// Параметры:
//  Параметры - Структура - настройки и данные для обмена.
//  РезультатОбмена - Структура - результат обмена товарами и заказами.
//  ТаблицаИнформации - ТаблицаЗначений - таблица, хранящая лог обмена.
//
Процедура CatalogImport1C_ВыполнитьОбменССайтом(Параметры, РезультатОбмена, ТаблицаИнформации) Экспорт
	Если Параметры.ВыгружатьНаСайт Тогда  //проверка на выгрузку на сайт или в локальный каталог
		ТипСоединения = "catalog";
		ОтветСервера = "";
		Соединение = Неопределено;
		ОписаниеОшибки = "";

		НастройкиПодключения = Параметры.НастройкиПодключения;

		АдресДляРаботы = НастройкиПодключения.АдресСкрипта + "?type=" + ТипСоединения; 
		Успешно = ВыполнитьАвторизациюДляСоединения(Соединение, НастройкиПодключения, 
												ОтветСервера, ОписаниеОшибки,
												ТипСоединения);
		Если НЕ Успешно Тогда
//			ДобавитьОписаниеОшибки(ОписаниеОшибки, НСтр("ru = 'Выгрузка на сайт не выполнена.'"));
			Сообщить("авторизация на сайте не выполнена");
		КонецЕсли;
	
		КукиИмя				= СтрПолучитьСтроку(ОтветСервера, 2);
		КукиЗначение		= СтрПолучитьСтроку(ОтветСервера, 3);
		ЗаголовкиЗапросов	= Новый Соответствие;
		ЗаголовкиЗапросов.Вставить("Cookie", КукиИмя + "=" + КукиЗначение);
		
		ПараметрыЗапроса = АдресДляРаботы + НастройкиПодключения.ПараметрЗапросаHTTP_ОкончаниеВыгрузкиТоваров;
		Если Параметры.ИспользоватьИдентификаторСессии Тогда
			ПараметрыЗапроса = ПараметрыЗапроса + "&sessid=" + НастройкиПодключения.ИдентификаторСессии;
		КонецЕсли;
	
		Сообщить("Запрос сайту Bitrix:" + Символы.ПС + ПараметрыЗапроса);
		ОтветСервера = ПолучитьДанныеССервера(
			Соединение,
			ОписаниеОшибки,
			ПараметрыЗапроса,
			ЗаголовкиЗапросов);
	
		Если ОтветСервера = Неопределено Тогда 
//			ДобавитьОписаниеОшибки(ОписаниеОшибки, НСтр("ru = 'Выгрузка на сайт не выполнена.'"));
			Сообщить("Bitrix не ответил на запрос");
		Иначе
			Сообщить("Ответ сайта Bitrix:" + Символы.ПС + ОтветСервера);   
		КонецЕсли;
	
		Сообщить(Формат(ТекущаяДата(), "ггггММддЧЧммсс")+ " Обмен xml пакетами с сайтом завершен");
	КонецЕсли;

КонецПроцедуры

 

 
 Со стороны Битрикса

 В файле sftp://хххххх/хххххх.ru/bitrix/php_interface/init.php или в инклюде к этому файлу ловим события и запускаем свой скрипт

/***********************************************************************************
	записать в лог файл на диске
	$var - переменная
	$filename - имя файла
	$path - путь относительно корня *по умолчанию
		/_logs/bx/					- каталог для системных ошибок 
		/_logs/log_debug/ 			- просто каталог для отладки скриптов
		/_logs/log_import_from_1C/ 	- каталог для отладки скриптов мипорта
***********************************************************************************/
function cl_print_w ($var, $filename="", $path = "/_logs/log_import_from_1C/")
{
//	$pr = date("Y-m-d H:i:s");
	$pr = date("H:i:s");
	 	 
    if ($filename=="" or empty($filename)){
      \Bitrix\Main\Diag\Debug::writeToFile($pr.$var,
      "",
      $path.date("Y-m-d H_00")." cadmarket.log");
    }
    else {
      \Bitrix\Main\Diag\Debug::writeToFile($pr.$var,
      "",
      $path.date("Y-m-d H_00")." cadmarket ".$filename.".log");
    }	
}


//СОБЫТИЯ при импорте из 1С

// регистрируем обработчик
AddEventHandler("catalog", "OnBeforeCatalogImport1C",   Array("EventClass", "ric_OnBeforeCatalogImport1C"));
AddEventHandler("catalog", "OnSuccessCatalogImport1C",  Array("EventClass", "ric_OnSuccessCatalogImport1C"));
AddEventHandler("catalog", "OnCompleteCatalogImport1C", Array("EventClass", "ric_OnCompleteCatalogImport1C"));

class EventClass{
  function ric_OnBeforeCatalogImport1C($arPropertyValues, $ABS_FILE_NAME){
    $msg = "Перед загрузкой пакета XML";
    cl_print_w("-On- BeforeCatalogImport1C : ".$msg. 
               "\n".$ABS_FILE_NAME.	 
               "\n----------------------------------------------------------------------------------------------------------------------",
               "ImportFrom1C"			
              );
    return "";}					   
		
  function ric_OnSuccessCatalogImport1C($arPropertyValues, $ABS_FILE_NAME){
    $msg = "После загрузки пакета XML"; 
    cl_print_w("-On- SuccessCatalogImport1C : ".$msg.
               "\n".$ABS_FILE_NAME.	 
               "\n----------------------------------------------------------------------------------------------------------------------",
               "ImportFrom1C"			
               );
    return "";}

  function ric_OnCompleteCatalogImport1C(){
    $msg = "После загрузки всех XML пакетов. Старт";
    cl_print_w("-On- CompleteCatalogImport1C : ".$msg. 
               "\n----------------------------------------------------------------------------------------------------------------------",
               "ImportFrom1C"			
               );
	echo nl2br(date("H:i:s")." ".$msg."\n");                    // оставьте эту строчку если хотите увидеть это в ответе для 1С

    $startImportCatalogTimer = microtime(true); 				// начало измерения импорта каталога
//  $ret=fn_SetAfterImport();   //скрипт обработки каталога
    $stopImportCatalogTimer = microtime(true); 					// конец измерения импорта каталога

    $msg = "После загрузки всех XML пакетов. Стоп";
	echo nl2br(date("H:i:s")." ".$msg."\n");                    // оставьте эту строчку если хотите увидеть это в ответе для 1С
    cl_print_w("-On- CompleteCatalogImport1C : ".$msg.
               "\nЗатрачено время: ".($stopImportCatalogTimer - $startImportCatalogTimer)." сек.".					   
               "\n----------------------------------------------------------------------------------------------------------------------",
               "ImportFrom1C"
               );
    return "";}
}	

 

Расширение ОбменССайтом Битрикс Событие Полная выгрузка Адаптация

См. также

API-интеграция 1С с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress для УТ11, КА2, ERP2, УНФ, БП3, Розница, УТ10, УПП1.3

Сайты и интернет-магазины Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Беларусь Россия Управленческий учет Платные (руб)

Модуль для интеграции с маркетплейсами ОЗОН, WildBerries, Я.Маркет, СберМегаМаркет, Стройландия, Леруа Мерлен, Hoff, AliExpress. При помощи расширения поддерживаются следующие методы: обмен остатками товаров, обмен ценами, обработка заказов, печать стикеров, загрузка отчетов комиссионеров по API (в том числе Я.Маркет). Подходит для конфигураций Беларуси. Поддержка искусственного интелекта GigaChat

59990 руб.

05.09.2023    8314    126    74    

78

Интеграция Альфа Авто 5 / Альфа Авто 6 и AUTOCRM / Инфотек

Сайты и интернет-магазины WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    15936    13    18    

13

Оплата покупок "Долями" в 1С:Розница 2.3 (для работы с сервисом dolyame.ru)

Сайты и интернет-магазины Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Россия Платные (руб)

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку.

18000 руб.

19.12.2023    1546    12    3    

10

Обмен данными с сайтом. БП 3.0

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Обмен данными с сайтом на платформе 1С:Битрикс (и подобными) для 1С: Бухгалтерия предприятия 3.0.

12000 руб.

18.03.2019    31528    111    100    

64

Интеграция 1С — Битрикс24. Обмен задачами

Сайты и интернет-магазины Интеграция WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Управленческий учет Платные (руб)

Интеграция 1С и Битрикс24. Разработка имеет двухстороннюю синхронизацию 1С и Битрикс24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (8.3.18.1289). При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

5040 руб.

04.05.2021    17896    6    15    

12

Универсальный парсер интернет-магазинов

Оптовая торговля Розничная торговля Сайты и интернет-магазины Платформа 1С v8.3 Управляемые формы 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

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

9600 руб.

19.10.2018    52202    220    99    

111
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ef1 19 07.12.20 13:55 Сейчас в теме
Спасибо, за оценки ))
но самое смешное оказалось в том что наш хостер обновил версию PHP до 7.2 с копейками
и выгрузка 5к позиций тормознулась с 10 до 30 минут....
думали что виноват параметр php_value mbstring.func_overload 0 из .htaccess
(до этого был в 2 ке, но Битрикс для обновлений требует 0)
короче практически смирившись с неизбежными тормозами
(причем логирование железа сервера 1С и хостера - показывало что машины не нагружены)
выложив сюда публикацию и посмотрев на время из логов
оказалось
что у хостера время выставлено на ЧАС НАЗАД!!!, кто бы мог подумать ))
т.е. сервер 1С посылал все свои запросы в ПРОШЛОЕ ))

помог короче сам себе ))
2. ef1 19 10.12.20 14:31 Сейчас в теме
добавил проверку выгрузки на сайт или локально
Если Параметры.ВыгружатьНаСайт Тогда  //проверка на выгрузку на сайт или в локальный каталог

расширение не менял (код в тексте темы)
3. ef1 19 10.01.22 13:20 Сейчас в теме
при переходе на УТ 11.5 будет сообщение -...расширение - On complete catalog import1C ...не поддерживает язык - RU... (или что то в этом духе)

в конфигураторе встаньте на расширение - нажмите проверить, и в окне сообщений - исправить, при этом ссылка на RU в каком то параметре расширения будет сброшена - и все ок
Оставьте свое сообщение