Внешняя компонента для работы с MYSQL в формате JSON

25.06.23

Разработка - Разработка внешних компонент

В этой статье я хочу познакомить вас с собственным инструментом для получения данных из базы данных MYSQL, который я активно использовал для своих проектов.

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

Наименование Файл Версия Размер
Внешняя компонента для работы с MYSQL в формате JSON:
.zip 2,17Mb
3
.zip 2,17Mb 3 Скачать

В первую очередь у многих может возникнуть вопрос, зачем вдруг может понабиться «лезть» в базу MYSQL, читать и писать туда данные. Ответ на самом делал довольно простой, дело в том, что MYSQL - это самая популярная база данных, которую используют большинство движков сайтов, да и в целом веб разработчиков, при создании своих проектов. Бывает так, что других способов забрать данные с сайта, кроме как на прямую из базы данных нет. Так как мне приходилось делать интеграции с большим количеством разных сайтов, я пришел к тому, что для этих целей необходимо сделать свое решение для чтения / записи в MYSQL. При этом, хотелось работать с данными в привычном и удобно формате. Поэтому в качестве формата возвращаемых данных я выбрал JSON.

В прошлой статье //infostart.ru/1c/tools/1675452/ я описывал, как с помощью этой компоненты делал загрузку данных из WooCommerce (WordPress), сейчас хочу поделиться самой компонентой, а так же примерами кода для получения и записи данных.

 

Шаг №1. Установка компоненты

 

Компонента c использованием технологии Native API, работает как в 32-х, так и 64-х битной версии платформы. Компонента представляет из себя zip архив MYSQL2JSON.zip, внутри которого лежат следующие файлы:

Самый простой способ установки – это создание общего макета и загрузка данных в него:

  1. Нажимаем кнопку создать
  2. Пишем любое имя макета, например MYSQL2JSON
  3. Загружаем zip архив с компонентой

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

Существуют разные способы установки внешних компонент, не хотелось бы спорить про правильность того или иного способа. Пример:

УстановитьВнешнююКомпоненту("ОбщийМакет.MYSQL2JSON");

Если мы откроем справку по этой процедуре, то там будет следующий текст:

Примечание:

Метод работает только с компонентами, хранящимися в архиве.

Если для конфигурации свойство РежимИспользованияМодальности установлено в НеИспользовать, следует использовать метод НачатьУстановкуВнешнейКомпоненты.

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

 

Шаг №2. Работа с компонентой на встроенном языке

 

Подключаем нашу компоненту

Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.MYSQL2JSON", "AddInNative", ТипВнешнейКомпоненты.Native);
AddInStarter = Новый("AddIn.AddInNative.AddInStarter");

Передаем все необходимые параметры в компоненту для получения данных из MYSQL:

	ЗаписьJson = Новый ЗаписьJson;
	ЗаписьJson.УстановитьСтроку();  
	
	ПараметрыЗапроса = Новый Структура;
	ПараметрыЗапроса.Вставить("Server", ДанныеИнтеграции.Server);
	ПараметрыЗапроса.Вставить("Database",ДанныеИнтеграции.Database);
	ПараметрыЗапроса.Вставить("Username",ДанныеИнтеграции.Username);
	ПараметрыЗапроса.Вставить("Password",ДанныеИнтеграции.Password);
	ПараметрыЗапроса.Вставить("Port",ДанныеИнтеграции.Port); 

	МакетТекстЗапросаЗаказы = ПолучитьМакет("ЗапросЗаказы");
	ТексЗапросаПоЗаказам    = МакетТекстЗапросаЗаказы.ПолучитьТекст();		
	ТексЗапросаПоЗаказам 	= СтрЗаменить(ТексЗапросаПоЗаказам, "XX.XX.XXXX", Формат(ДатаНачала, "ДФ=dd.MM.yyyy"));
	ТексЗапросаПоЗаказам 	= СтрЗаменить(ТексЗапросаПоЗаказам, "YY.YY.YYYY", Формат(ДатаОкончания, "ДФ=dd.MM.yyyy"));
	
	ПараметрыЗапроса.Вставить("SQL", ТексЗапросаПоЗаказам);
	
	ЗаписатьJson(ЗаписьJson,ПараметрыЗапроса); 
	JSONЗаказы = AddInStarter.ЗапуститьФункцию(ЗаписьJson.Закрыть());

ДанныеИнтеграции это структура, куда в ключи «Server», «Database», «Username», «Password», «Port» мы пишем параметры подключения к MYSQL. Это все просто строковые данные. Такой подход позволяет менять параметры подключения к базе в одном месте. Пример: 

	ДанныеИнтеграции = Новый Структура;
	ДанныеИнтеграции.Вставить("Server", "193.107.333.121");
	ДанныеИнтеграции.Вставить("Database", "demo1");
	ДанныеИнтеграции.Вставить("Username", "demo1");
	ДанныеИнтеграции.Вставить("Password", "demo123");
	ДанныеИнтеграции.Вставить("Port", "3306");

 

Все тексты запросов я обычно храню в макетах, запросы написаны на языке SQL, в примере видно, что не которые данные в тексте запроса, типа «XX.XX.XXXX» я заменяю на дату, чтобы в запросе делать отборов заказов с определенной даты. Про тексты запросов я подробно говорил вот в этой статье: //infostart.ru/1c/tools/1675452/

Ну самое главное, в переменную «JSONЗаказы» мы получаем JSON со всеми данными, которые мы получили с помощь SQL запроса.

Ну вот таким не хитрым способом мы преобразовываем JSON в соответствие, которым будет очень удобно работать:

	Попытка
		ЧтениеJSONЗаказы = Новый ЧтениеJSON;
		ЧтениеJSONЗаказы.УстановитьСтроку(JSONЗаказы);
		ТаблицаЗаказов = ПрочитатьJSON(ЧтениеJSONЗаказы,Истина);
		ЧтениеJSONЗаказы.Закрыть();
	Исключение		
		Возврат Неопределено;
	КонецПопытки;

Напоследок, приведу пример кода, по работе со структурой данных по заказу:

	Если ТаблицаЗаказов.Получить("error") = "Нет данных" Тогда 
		Возврат Неопределено;
	ИначеЕсли ТипЗнч(ТаблицаЗаказов.Получить("data")) = Тип("Массив") Тогда 
		Для Каждого СтрокаЗаказа Из ТаблицаЗаказов["data"] Цикл 
			СтруктураЗаказа = Новый Структура;
			
			НомерЗаказа = СтрокаЗаказа["order_id"];
			РезультатПоиска = Документы.ЗаказПокупателя.НайтиПоРеквизиту("НомерНаСайте", НомерЗаказа);
			
			Если Не ЗначениеЗаполнено(РезультатПоиска) Тогда 
				Клиент1С = "";
				
				СтруктураЗаказа.Вставить("ИД", НомерЗаказа);
				СтруктураЗаказа.Вставить("ДатаЗаказа", СтрокаЗаказа["date_created"]);
				//Код по созданию струкруты заказа, перечислять все поля не имеет смысла
				//Добавление структуры в массив заказов
				МассивЗаказов.Добавить(СтруктураЗаказа);		
			КонецЕсли;
		КонецЦикла;	
	КонецЕсли;	

Если нет данных, то в ключ «error» будет записано значение «нет данных», ну а если все хорошо и действительно есть что загружать, в ключ «data» попадет массив данными о заказах, которых мы хотим получить из базы данных.

 

Шаг №3. Запись данных в MYSQL

 

В прошлом разделе мы подробно рассмотрели, как «читать» данные из MYSQL. Но помимо команды SELECT, внешняя компонента позволяет еще и записывать данные в базу:

	Результат = ПодключитьВнешнююКомпоненту("ОбщийМакет.MYSQL2JSON", "AddInNative", ТипВнешнейКомпоненты.Native);
	AddInStarter = Новый("AddIn.AddInNative.AddInStarter");

	ЗаписьJson = Новый ЗаписьJson;
	ЗаписьJson.УстановитьСтроку();

	ПараметрыЗапроса = Новый Структура;
	ПараметрыЗапроса.Вставить("Server", ДанныеИнтеграции.Server);
	ПараметрыЗапроса.Вставить("Database",ДанныеИнтеграции.Database);
	ПараметрыЗапроса.Вставить("Username",ДанныеИнтеграции.Username);
	ПараметрыЗапроса.Вставить("Password",ДанныеИнтеграции.Password);
	ПараметрыЗапроса.Вставить("Port",ДанныеИнтеграции.Port); 
	ПараметрыЗапроса.Вставить("Mode","2"); // не обязательный, 1-Select, 2-Update,Insert,Delete

	МакетТекстЗапросаОстаток = ПолучитьМакет("ЗапросОстаток");
	ТексЗапросаПоОстаткам 	 = МакетТекстЗапросаОстаток.ПолучитьТекст();		
	ТексЗапросаПоОстаткам 	 = СтрЗаменить(ТексЗапросаПоОстаткам, "значение2", Формат(Остаток, "ЧРД=.; ЧГ="));
	ТексЗапросаПоОстаткам 	 = СтрЗаменить(ТексЗапросаПоОстаткам, "МОЙ_КОД_1С", КодТовара);
	
	ПараметрыЗапроса.Вставить("SQL", ТексЗапросаПоОстаткам);
	
	ЗаписатьJson(ЗаписьJson,ПараметрыЗапроса); 
	JSONОстатки = AddInStarter.ЗапуститьФункцию(ЗаписьJson.Закрыть());

 

Как мы видим, для записи данных в структуру, которую мы передаем во внешнюю компонент добавить ключ «Mode». При это для команд изменения данных в БД значение ключа должно быть «2».

 

Ответы на вопросы:

 

1) На каком языке программирования был «написана» внешняя компонента?

Ответ: Внешняя компонента написана на Delphi

2) На каких релизах проводилось тестирование? 

Ответ: Тестирование проводилось на релизах: 8.3.17.2306 (X32/x64), 8.3.21.1302 (X32/x64) 

обмен с интернет-магазином интеграция сайтом MYSQL внешняя компонента

См. также

Внешняя компонента печати PDF (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет печатать PDF файлы непосредственно из 1С, не используя при этом сторонних программ. Прекрасно работает на сервере, тонком клиенте и веб-клиенте. Основана на проекте PDFium из состава проекта Chromium/Chrome

1500 руб.

17.09.2018    35420    109    127    

112

Внешняя компонента для сканирования (замена TWAIN-компоненты БСП) (Native Win 32/64)

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Внешняя компонента позволяет работать c TWAIN-совместимым оборудованием (сканерами, камерами) . Полностью совместима со стандартной TWAIN-компонентой из БСП и может применяться как ее замена без изменения вызовов, при этом может работать с 64-разрядной платформой, а так же имеет расширенную функциональность, например, сохранение результата непосредственно в PDF без использования сторонних утилит. Прекрасно работает на сервере, тонком клиенте и веб-клиенте (проверена работа в браузерах Google Chrome, Mozilla Firefox и Microsoft Internet Explorer).

2400 руб.

12.05.2020    26532    132    99    

84

GGraphics - внешняя компонента для работы с картинками jpg (jpeg), png, bmp, gif, tif

Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Позволяет автоматизировать работу с картинками. С помощью компоненты можно измерять размер изображений, поворачивать их, наносить водяные знаки, конвертировать из одного формата в другой. Будет очень полезна для интернет-магазинов и всех, кому постоянно требуется работать с различными графическими форматами. Выполнена по технологии NativeAPI. Работает с форматами: jpg (jpeg), png, bmp, gif, tif

3600 руб.

02.09.2010    76218    71    255    

189

Внешняя компонента для подключения 1С к телефонии Asterisk

Разработка внешних компонент Телефония, SIP Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Внешняя компонента выполнена по технологии Native API для 1С 8.х, обеспечивает доступ к программным АТС Asterisk (FreePBX, Elastix) через AMI интерфейс. Через него можно управлять многими функциями Asterisk (определение номеров, перевод звонков, набор телефона и т. д.)

2400 руб.

04.05.2018    45288    117    66    

61

QR-код с логотипом компании (обычная и управляемая форма)

Разработка внешних компонент Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Как известно, стремление сделать свою рекламную продукцию запоминающейся и выделяющейся — верный путь к успеху. Сегодня, мы поговорим с вами о том, что можно сделать с обычным черно-белым QR-кодом, чтобы он стал более живым и привлекательным. Если вам не терпится попробовать сделать QR-код с логотипом компании, то эта обработка для вас!

2400 руб.

22.06.2016    30921    4    4    

8

Внешняя компонента 1С и С++. Продолжаем разговор.

Разработка внешних компонент Платформа 1С v8.3 Бесплатно (free)

А давайте запилим 8.3.26 до релиза, или оповещение с сервера...

19.02.2024    4281    starik-2005    28    

53

Внешние компоненты 1С и язык C++

Разработка внешних компонент Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Некоторые практические аспекты создания внешних компонент на языке С++ для платформы 1С 8.3++.

26.01.2024    5049    starik-2005    32    

40

Внешняя компонента для работы с Apach Kafka

Инструментарий разработчика Разработка внешних компонент Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример взаимодействия 1С с Apach Kafka посредством внешней компоненты, разработанной на основе официальной библиотеки librdkafka (the Apache Kafka C/C++ client library).

22.11.2023    3068    65    ivan1703    26    

41
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. sinichenko_alex 179 26.06.23 05:37 Сейчас в теме
До сих пор до конца непонятно (уже вторая статья), в целом написано для каких целей используется компонента, но вопрос зачем столько времени было изобретать велосипед когда есть внешние источники данных которые гораздо лучше справляются со всеми этими задачами в 1С?
3. markbraer 33 26.06.23 07:53 Сейчас в теме
(1)была необходимость. Так как использовалось в тиражных решениях и нужно было, чтобы загрузка работала при любых условиях.
4. sinichenko_alex 179 26.06.23 07:54 Сейчас в теме
(3) если глубоко вдуматься, то в тиражных тоже можно использовать подход с внешними источниками данных. При этом подход с внешними источниками еще и кроссплатформенность автоматом даёт.
5. markbraer 33 26.06.23 08:03 Сейчас в теме
(4) их не получится встроить во внешюю обработку)) То есть такой вариант для продажи готового модуля не подходит
6. sinichenko_alex 179 26.06.23 08:04 Сейчас в теме
(5) Теперь понял. Вопрос во внешней обработке - ключевой :) Да. Там согласен, нет возможности использовать внешние источники данных. Изначально я думал, что речь о целой конфигурации. Вопрос снят. Спасибо за ответы.
2. akela2014 6 26.06.23 06:25 Сейчас в теме
Странный подход. Можно через mysql коннектор все запросы делать и результат уже как угодно обрабатывать.
Оставьте свое сообщение