Внешняя компонента для работы с 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 внешняя компонента

См. также

Медиадисплей. Рекламный информационный монитор для покупателя.

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

Монитор покупателя может отображать текущую покупку на кассовом месте, показывать видеорекламу, баннеры, во время простоя разворачивать рекламу на весь экран. Можно использовать в качестве графического меню-борда в кафе и видеовывески. Управление выводом на телевизор через hdmi-приставку на базе Windows или Android. В качестве устройства отображения можно использовать Android-планшеты, фоторамки с Android, монитор любого Windows-компьютера, доступного по сети. Настраивается ЛЮБОЙ ДИЗАЙН экрана!

16800 руб.

30.05.2017    52378    34    69    

43

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

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

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

1500 руб.

17.09.2018    35379    108    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    26498    132    99    

84

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

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

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

2400 руб.

04.05.2018    45262    117    66    

61

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

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

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

3600 руб.

02.09.2010    76154    71    255    

188

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

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

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

2400 руб.

22.06.2016    30910    4    4    

8

Мастер создания внешних компонент 1С (технология COM) для DELPHI 6/7/8/2005/2006/2007/2008/2010/XE/XE2/XE3

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

Средство для сверхбыстрой разработки внешних компонент 1С:Предприятия 7.7 и 8 по технологии COM на всех версиях DELPHI, начиная с 6.

2000 руб.

28.03.2013    54119    35    14    

68

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

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

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

19.02.2024    4245    starik-2005    28    

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