Доработка стандартного модуля обмена от Битрикс для выгрузки произвольных таблиц значений или запросов в Highload-блоки

04.09.24

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Выгрузка любых произвольных запросов и таблиц значений в Hiload блоки Bitrix стандартным обменом.:
.zip 7,84Kb
10
10 Скачать (1 SM) Купить за 1 850 руб.

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

Хочу поделиться с вами простым и универсальным решением - очень простой доработкой стандартного модуля обмена Битрикс, которая позволит выгружать и главное обновлять ЛЮБЫЕ данные в Highload-блоки Битрикс. 

Возможные кейсы

  • выгрузка дополнительных сведений для карт лояльности
  • выгрузка видов цен контрагентов из договоров 
  • выгрузка исключений цен и расширение механизмов ценообразования
  • выгрузка любых регистров сведений или справочников или других результатов запросов
  • выгрузка резервов, остатков, взаиморасчетов и любых других регистров накоплений
  • выгрузка детализаций документооборота для б2б системы
  • выгрузка дополнительный сведений или контента для товаров
  • выгрузка дополнительных механизмов контроля доступа
  • выгрузка вообще любых сведений, сложных запросов из 1с с ключами и без,
  • выгрузка множества таблиц значений в одном обмене с легким добавлений источников.

Реализация

За основу возьмем и переделаем стандартную процедуру модуля Битрикс "Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт.ВыгрузитьПользовательскиеСправочникиXDTO"

Эта процедура выгружает любые пользовательские справочники и их автоматически загружает их Highload-блоки в Битрикс, она наиболее близка к нашим целям.

Главная проблема ее использования для отправки произвольных таблиц - это необходимость xmlid-ключа для каждой строки передаваемых в Битрикс данных, этот ключ нужен для обновления уже существующих данных. А у результатов запросов ключа может не быть или быть сразу несколько.

 
 Идея алгоритма генерация общего ключа для нескольких ключевых полей

 

Врезки

можете сделать ее через расширение или через вставку куска кода

 
 Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт.ФормированиеФайловXMLОбменаДанных

 

Процедура для старых УТ10, КА\ЕРП1.3, БП2 и модулей обмена конфигураций на обычных формах:

 
Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт.ВыгрузитьПользовательскиеЗапросыXDTOКастом

 

Процедура для УНФ 1.6-3.0, УТ11, КА\ЕРП2.5, БП3, модулей обмена конфигураций на управляемых формах:

 
 Б_ПроцедурыИФункцииВыгрузкиДанныхНаСайт.ВыгрузитьПользовательскиеЗапросыXDTOКастом

 

////infostart.ru/profile/540760/, hands.center  просим при любом копировании сохранять авторство идеи и решения
Процедура ВыгрузитьПользовательскиеЗапросыXDTOКастом(ПараметрыОбмена,МассивДанных, Операция)
	
	лКоличествоСтрок = МассивДанных.Количество();
	КоличествоПакетов = ?(лКоличествоСтрок > 0, МассивДанных[лКоличествоСтрок - 1].Пакет, 0); 
	
	Пакет = КоличествоПакетов + 1;
	
	Б_ОбменССайтомСервер.СообщитьПодробно("Начало выгрузки пакета " + Строка(Пакет) + " пользовательскиих запросов", ПараметрыОбмена);
	
	ПараметрыОбмена.МояФабрикаXDTO 		= СоздатьФабрикуXDTO(ПараметрыОбмена.ФайлСхемы); 
	
	XDTOКоммерческаяИнформацияТип 		= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "КоммерческаяИнформация");  
	XDTOКоммерческаяИнформация 			= Б_ОбменССайтомСервер.ПолучитьXDTOКоммерческаяИнформация(ПараметрыОбмена, XDTOКоммерческаяИнформацияТип);
	
	XDTOПользовательскиеСправочникиТип	= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ПользовательскиеСправочники", Истина, XDTOКоммерческаяИнформацияТип);
	XDTOСправочникТип					= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "Справочник"); 
	
	XDTOЭлементыСправочникаТип	= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЭлементыСправочника", Истина, XDTOСправочникТип);
	XDTOЭлементСправочникаТип	= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЭлементСправочника");
	
	ТипpЗначенийРеквизитов	= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЗначенияРеквизитов", Истина, XDTOЭлементСправочникаТип);
	ТипpЗначенияРеквизита	= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "ЗначениеРеквизита");
	
	XDTOРеквизитыТип		= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "Реквизиты", Истина, XDTOСправочникТип);
	XDTOРеквизитТип			= Б_ОбменССайтомСервер.ПолучениеТипОбъектаXDTO(ПараметрыОбмена,  "Реквизит", Истина, XDTOРеквизитыТип);
	
	//результирующая таблица выгружаемых данных
	ВыгружаемыеСправочники = Новый ТаблицаЗначений;
	ВыгружаемыеСправочники.Колонки.Добавить("Справочник");
	ВыгружаемыеСправочники.Колонки.Добавить("Таблица");
	
	//поля с синонимами _XMLID будут определены как ключи для записи
	//Абсолютно любой запрос, любой сложности  
	ПользовательскиеЗапросы = Новый Запрос;                                

	ПользовательскиеЗапросы.Текст = "ВЫБРАТЬ ПЕРВЫЕ 100
	                                |	Контрагенты.Ссылка КАК Контрагент_XMLID,
	                                |	Контрагенты.Наименование КАК Наименование,
	                                |	Контрагенты.Наименование КАК НаименованиеЛат,
	                                |	Контрагенты.ИНН КАК КонтрагентИНН,
	                                |	Контрагенты.КПП КАК КонтрагентКПП,
	                                |	РасчетыСПокупателями.Договор КАК Договор_XMLID,
	                                |	РасчетыСПокупателями.СуммаОстаток КАК СуммаОстаток,
	                                |	РасчетыСПокупателями.СуммаРегОстаток КАК СуммаОстатокРег
	                                |ИЗ
	                                |	РегистрНакопления.РасчетыСПокупателями.Остатки КАК РасчетыСПокупателями
	                                |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
	                                |		ПО РасчетыСПокупателями.Контрагент = Контрагенты.Ссылка";
	
	

	ТаблицаРезультат = ПользовательскиеЗапросы.Выполнить().Выгрузить();
	
	//Если необходимо делаем постобработку полученных данных
  	Для каждого стр из ТаблицаРезультат цикл   
		//убираем форматирование числа СК
		стр.НаименованиеЛат = СтроковыеФункцииКлиентСервер.СтрокаЛатиницей(стр.Наименование);
	КонецЦикла;

	НСтр = ВыгружаемыеСправочники.Добавить();
    //определяем имя HiLoad блока в битрикс
    //Имя сущности не может заканчиваться на "Table", в то же время в вызовах API этот постфикс добавляется автоматически
	НСтр.Справочник = "DemoCustomerBalances"; 
	НСтр.Таблица = ТаблицаРезультат.Скопировать();
	
	//поля с синонимами _XMLID будут определены как ключи для записи
	//Абсолютно любой запрос, любой сложности  
	ПользовательскиеЗапросы = Новый Запрос;
	ПользовательскиеЗапросы.Текст = "ВЫБРАТЬ  ПЕРВЫЕ 100
	                                |	ЗапасыОстатки.Номенклатура КАК Номенклатура_XMLID,
	                                |	ЗапасыОстатки.Характеристика КАК Характеристика_XMLID,
	                                |	ЗапасыОстатки.СтруктурнаяЕдиница КАК Склад_XMLID,
	                                |	ЗапасыОстатки.СуммаОстаток КАК СуммаОстаток
	                                |ИЗ
	                                |	РегистрНакопления.Запасы.Остатки(, ) КАК ЗапасыОстатки";
	
	
	ТаблицаРезультат = ПользовательскиеЗапросы.Выполнить().Выгрузить();
	
	НСтр = ВыгружаемыеСправочники.Добавить();
    //определяем имя HiLoad блока в битрикс
    //Имя сущности не может заканчиваться на "Table", в то же время в вызовах API этот постфикс добавляется автоматически
	НСтр.Справочник = "DemoGoodsBalances";
	НСтр.Таблица = ТаблицаРезультат.Скопировать();

	//поля с синонимами _XMLID будут определены как ключи для записи
	//Абсолютно любой запрос, любой сложности  
	ПользовательскиеЗапросы = Новый Запрос;
	ПользовательскиеЗапросы.Текст = "ВЫБРАТЬ ПЕРВЫЕ 100
	                                |	РасчетыСКонтрагентамиОбороты.Организация КАК Организация_XMLID,
	                                |	РасчетыСКонтрагентамиОбороты.Контрагент КАК Контрагент_XMLID,
	                                |	РасчетыСКонтрагентамиОбороты.Договор КАК Договор_XMLID,
	                                |	ПРЕДСТАВЛЕНИЕ(РасчетыСКонтрагентамиОбороты.Регистратор) КАК Документ,
	                                |	РасчетыСКонтрагентамиОбороты.СуммаПриход КАК СуммаПриход,
	                                |	РасчетыСКонтрагентамиОбороты.СуммаРасход КАК СуммаРасход
	                                |ИЗ
	                                |	РегистрНакопления.РасчетыСПокупателями.Обороты(, , Регистратор, ) КАК РасчетыСКонтрагентамиОбороты";
	
	
	ТаблицаРезультат = ПользовательскиеЗапросы.Выполнить().Выгрузить();
	
	НСтр = ВыгружаемыеСправочники.Добавить(); 
    //определяем имя HiLoad блока в битрикс
    //Имя сущности не может заканчиваться на "Table", в то же время в вызовах API этот постфикс добавляется автоматически
	НСтр.Справочник = "DemoCustomerDocuments";
	НСтр.Таблица = ТаблицаРезультат.Скопировать();
	

	//поля с синонимами _XMLID будут определены как ключи для записи
	//просто произвольная таблица  
	ТаблицаРезультат = новый ТаблицаЗначений;
	ТаблицаРезультат.Колонки.Добавить("Ключ1__XMLID");
	ТаблицаРезультат.Колонки.Добавить("Ключ2__XMLID");
	ТаблицаРезультат.Колонки.Добавить("Данные");
	Для ключ1 = 1 по 100 цикл 
		Для ключ2 = 1 по 100 цикл 
			стрТаблицаРезультат = ТаблицаРезультат.Добавить();
			стрТаблицаРезультат.Ключ1__XMLID = Строка(ключ1);
			стрТаблицаРезультат.Ключ2__XMLID = Строка(ключ2);
			стрТаблицаРезультат.Данные = ключ1 * ключ2;
		КонецЦикла;
	КонецЦикла;

	НСтр = ВыгружаемыеСправочники.Добавить();
    //определяем имя HiLoad блока в битрикс
    //Имя сущности не может заканчиваться на "Table", в то же время в вызовах API этот постфикс добавляется автоматически
	НСтр.Справочник = "DemoMultiplication";//определяем имя HiLoad блока в битрикс
	НСтр.Таблица = ТаблицаРезультат.Скопировать();
	
	//Обработка и отправка запросов в битрикс
	Итератор = 0;
	XDTOПользовательскиеСправочники		= ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOПользовательскиеСправочникиТип); 
	
	Если (ПараметрыОбмена.ВыгружатьТолькоИзменения И НЕ ПараметрыОбмена.ВыполнятьПолнуюВыгрузкуПринудительно) ИЛИ (ПараметрыОбмена.КоличествоЭлементовСправочникаВПакете <> 0) тогда
		XDTOПользовательскиеСправочники.СодержитТолькоИзменения = XMLСтрока(Истина);
	Иначе
		XDTOПользовательскиеСправочники.СодержитТолькоИзменения = XMLСтрока(Ложь);
	КонецЕсли;
	
	Для каждого ТекСпр из ВыгружаемыеСправочники Цикл
		ТаблицаЗапросов = ТекСпр.Таблица;
		
		лЕстьЭлементыСправочника = Ложь;
		
		XDTOСправочник				= ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOСправочникТип); 
		XDTOСправочник.Ид 			= ТекСпр.Справочник;	
		XDTOСправочник.Наименование = ТекСпр.Справочник;	
		
		лРеквезитыСпр 	= ТаблицаЗапросов.Колонки;
		
		XDTOРеквизитыСправочника	= ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOРеквизитыТип); 
		МассивКолонокСсылок = Новый Массив;
		Для каждого ТекРек из лРеквезитыСпр Цикл 
			
			//собираем названия полей для создания ключей
			Если Найти(ТекРек.Имя,"_XMLID") тогда     
				МассивКолонокСсылок.Добавить(ТекРек.Имя);
			КонецЕсли;
			
			XDTOРеквизитСправочника	= ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOРеквизитТип); 
			
			XDTOРеквизитСправочника.Ид = ТекРек.Имя;
			
			лТипыРеквизита 	= ТекРек.ТипЗначения.Типы();
			XDTOРеквизитСправочника.Наименование = ТекРек.Имя;

			//определяем типы выгружаемых данных
			Если лТипыРеквизита.Количество() > 0 тогда
				
				лТипРеквизита = лТипыРеквизита[0];
				
				Если лТипРеквизита = Тип("Число") тогда
					XDTOРеквизитСправочника.ТипЗначений = "Число";	
				ИначеЕсли лТипРеквизита = Тип("Дата") тогда
					XDTOРеквизитСправочника.ТипЗначений = "Дата";	
				ИначеЕсли лТипРеквизита = Тип("Булево") тогда
					XDTOРеквизитСправочника.ТипЗначений = "Булево";	
				Иначе
					XDTOРеквизитСправочника.ТипЗначений = "Строка";	
				КонецЕсли;  									
			Иначе
				XDTOРеквизитСправочника.ТипЗначений = "Строка";	
			КонецЕсли;
			
			XDTOРеквизитыСправочника.Реквизит.Добавить(XDTOРеквизитСправочника);
		КонецЦикла;
		
		XDTOСправочник.Реквизиты	= XDTOРеквизитыСправочника;
		
		XDTOЭлементыСправочника		= ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЭлементыСправочникаТип); 
		
		// заполняем данные из отправляемых таблиц значений
		Для каждого ТекЭлСпр из ТаблицаЗапросов Цикл 
			
			лЕстьЭлементыСправочника = Истина;
			Итератор = Итератор + 1;
			
			XDTOЭлементСправочника	= ПараметрыОбмена.МояФабрикаXDTO.Создать(XDTOЭлементСправочникаТип); 
			
			//генерируем ключ записи для битрикс
			Наименование = "";
			если МассивКолонокСсылок.Количество() = 0 тогда
				Б_ОбменССайтомСервер.СообщитьПодробно("Выгрузка запроса " + Строка(ТекСпр.Справочник) + " пропущена. Нет ключевой колонки.", ПараметрыОбмена);
				продолжить;
			Иначеесли МассивКолонокСсылок.Количество() = 1 тогда   
				//Если в отправляемой таблице только одна ключевая колонка то мы ее идентификатор отправляем как есть
				КлючЗаписи = XMLСтрока(ТекЭлСпр[МассивКолонокСсылок[0]]);
				Наименование = Строка(ТекЭлСпр[МассивКолонокСсылок[0]]);
			Иначеесли МассивКолонокСсылок.Количество() > 1 тогда
				//Если в отправляемой таблице несколько ключевых колонок то мы генерируем их совокупный идентификатор через md5
				//такой подход позволяем получить один постоянный ключ из нескольких идентификаторов
				Хеш = Новый ХешированиеДанных(ХешФункция.MD5);
				Для каждого КолонкаСсылки из МассивКолонокСсылок цикл
					Хеш.Добавить(XMLСтрока(ТекЭлСпр[КолонкаСсылки]));
					Наименование = Наименование + "#" + СокрЛП(Строка(ТекЭлСпр[КолонкаСсылки]));
				КонецЦикла;
				КлючЗаписи = СтрЗаменить(строка(Хеш.ХешСумма)," ", "");
			КонецЕсли;
			
			XDTOЭлементСправочника.Ид 			= КлючЗаписи;
			//принудительное обновление записей в битрикс пустем передачи в версию дату в формате Unix Timestamp
			XDTOЭлементСправочника.НомерВерсии 	= Формат(Число(ТекущаяДата()-Дата("19700101")),"ЧН=0; ЧГ=0"); 

			
			ЗначенияРеквизитов 		= ПараметрыОбмена.МояФабрикаXDTO.Создать(ТипpЗначенийРеквизитов);
			//Предопределяем наименование
			Б_ОбменССайтомСервер.ДобавитьЗначениеРеквизитаXDTO(ПараметрыОбмена, ЗначенияРеквизитов, ТипpЗначенияРеквизита, "Наименование", Наименование);
			
			Для каждого ТекРек из лРеквезитыСпр Цикл
				лЗначРек 	= ТекЭлСпр[ТекРек.Имя];
				Если ЗначениеЗаполнено(лЗначРек) тогда
					Если МассивКолонокСсылок.Найти(ТекРек.Имя) <> Неопределено тогда     
						лЗначВХМЛ = XMLСтрока(лЗначРек);
					Иначе
						лЗначВХМЛ = Строка(лЗначРек);
					КонецЕсли;
					Б_ОбменССайтомСервер.ДобавитьЗначениеРеквизитаXDTO(ПараметрыОбмена, ЗначенияРеквизитов, ТипpЗначенияРеквизита, ТекРек.Имя, лЗначВХМЛ);
				Иначе
					Б_ОбменССайтомСервер.ДобавитьЗначениеРеквизитаXDTO(ПараметрыОбмена, ЗначенияРеквизитов, ТипpЗначенияРеквизита, ТекРек.Имя, "");
				КонецЕсли;
				
			КонецЦикла;
			
			XDTOЭлементСправочника.ЗначенияРеквизитов = ЗначенияРеквизитов; 
			XDTOЭлементыСправочника.ЭлементСправочника.Добавить(XDTOЭлементСправочника);	
		КонецЦикла;
		
		Если лЕстьЭлементыСправочника тогда
			XDTOСправочник.ЭлементыСправочника = XDTOЭлементыСправочника;
			
			XDTOПользовательскиеСправочники.Справочник.Добавить(XDTOСправочник);
		КонецЕсли;
		
	КонецЦикла;
	
	XDTOКоммерческаяИнформация.ПользовательскиеСправочники = XDTOПользовательскиеСправочники; 
	
	ИмяКаталога = Б_ОбщиеПроцедурыИФункцииСервер.ПолучитьПутьДляПлатформы(ПараметрыОбмена.ПлатформаWindows, ПараметрыОбмена.КаталогНаДиске + "\references\" +  Строка(Пакет)); 
	
	Успешно = ЗаписьИОтправкаXMLДанныхНаСайт(ПараметрыОбмена, XDTOКоммерческаяИнформация, ИмяКаталога, "references", "reference", Пакет);		
	
	Если Успешно  Или НЕ ПараметрыОбмена.ВыгружатьНаСайт тогда
		Б_ОбменССайтомСервер.СообщитьПодробно("Выгрузка пакета " + Строка(Пакет) + " пользовательскиих запросов завершена. Выгружено " + Строка(Итератор) + " элементов.", ПараметрыОбмена);
	Иначе
		Б_ОбменССайтомСервер.СообщитьПодробно("Выгрузка пакета " + Строка(Пакет) + " пользовательскиих запросов НЕ завершена или завершена с ошибками. НЕ Выгружено " + Строка(Итератор) + " элементов.", ПараметрыОбмена);
	КонецЕсли;

КонецПроцедуры 
////infostart.ru/profile/540760/, hands.center  просим при любом копировании сохранять авторство идеи и решения

 

 

Результаты

При обмене вы увидите сообщения о создание новых справочников Highload с их идентификатором  в Битрикс

 
 часть лога обмена

После обмена вы увидите в вашем Битрикс новые Highload-блоки с указанными вами именами.

 
 скрины из админки Битрикс

 

с интересом почитаю ваши комментарии )

 

См. также

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 2.3. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер).

22440 руб.

19.12.2023    5911    40    11    

37

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

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

36000 руб.

03.08.2020    18348    20    22    

18

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

Склад Вашего магазина онлайн в Telegram. С картинками, ценами, описанием и характеристиками. Используйте Telegram как торговую площадку и увеличивайте продажи.

54000 руб.

10.09.2024    968    2    4    

3

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

Готовое интеграционное решение для оплаты покупок Долями в 1C:Розница 3.0. Реализовано в виде расширения. Интеграция сервиса dolyame.ru для приема платежей в рассрочку. Поддерживает работу от разных юридических лиц. Работа: в составе РИБ, отдельно от РИБ, тонкий, толстый клиент, web-клиент (через интернет-браузер). Интегрировано в Чек ККМ, Рабочее место кассира (РМК)

24000 руб.

02.11.2024    679    2    0    

2

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

Интеграция 1С и Битрикс 24. Разработка имеет двухстороннюю синхронизацию 1С и Bitrix24 задачами. Решение позволяет создавать пользователя в 1С из Битрикс24 и наоборот. Данная разработка технически подходит под все основные конфигурации линейки продуктов 1С:Предприятие 8.3 (платформа начиная с 8.3.23): 1С:Управление торговлей, 1С:Управление Нашей фирмой 3, 1С:Комплексная автоматизация 2, Объединенное решение: Модуль 1С:CRM 3 (3.0.21.3) +1С:ERP Управление предприятием 2. При приобретении предоставляется 1 месяц бесплатных обновлений разработки. Доступна демо-версия продукта с подключением Вашего Битрикс24

7200 руб.

04.05.2021    20556    13    19    

18

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

Программа позволяет одним кликом настроить сбор цен ваших конкурентов или дилеров в интернете. Автоматически собирает данные результата поиска Яндекса (вам не придется вручную добавлять каждый сайт, за которым нужно следить). Обновление цен происходит по заданному вами расписанию автоматически. Можете легко отслеживать позиции вашего сайта в Яндексе по ключевым словам и фразам. Этот инструмент даст вам лучшее понимание того, как ваша SEO-стратегия влияет на видимость вашего сайта в поисковой выдаче, и поможет вам улучшить контент и структуру сайта для повышения его позиций. Функция доступна во всех тарифах.

19950 руб.

23.09.2019    31257    8    12    

31
Оставьте свое сообщение