Обмен с сайтом 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 "";}
}	

 

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

См. также

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

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

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

18000 руб.

19.12.2023    1797    14    6    

11

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

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

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

36000 руб.

03.08.2020    16043    13    18    

13

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

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

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

12000 руб.

18.03.2019    31812    117    101    

65

Интеграция 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    18084    10    15    

16

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

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

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

9600 руб.

19.10.2018    52487    220    101    

112

SALE! 33%

«Мониторинг цен» – сервис для отслеживания цен конкурентов на ведущих маркетплейсах России

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

Сервис помогает отслеживать цены на ведущих маркетплейсах России только для одного региона – Москва и Московская область. Выполняйте анализ и контролируйте цены Ваших конкурентов сразу в системе 1С.

2400 1608 руб.

29.05.2023    6934    26    41    

15

Выгрузка для АВИТО

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

Выгрузка товаров услуг из 1С для сайта "Авито" раздел "Автозагрузка" выполнена в виде обработки. Обработка подходит для конфигураций УТ, УНФ и Розница. Данная обработка позволяет создавать шаблон с объявлениями для "Авито" - "Автозагрузка".

4200 руб.

07.06.2022    15837    43    56    

38
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 в каком то параметре расширения будет сброшена - и все ок
Оставьте свое сообщение