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

25.06.23

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Внешняя компонента для работы с MYSQL в формате JSON:
.zip 2,17Mb
5
5 Скачать (5 SM) Купить за 3 050 руб.

В первую очередь у многих может возникнуть вопрос, зачем вдруг может понабиться «лезть» в базу 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 и маркетинг Управленческий учет Платные (руб)

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

18000 руб.

30.05.2017    54123    9    69    

46

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

Внешняя компонента для конвертации PDF файлов в картинки без использования дополнительных программ. Работает на сервере и в тонком клиенте.

2400 руб.

25.06.2024    1166    3    4    

3

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

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

2400 руб.

04.05.2018    47388    124    66    

67

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

Внешняя компонента, позволяющая посылать команды и получать ответы по GraphQL протоколу из 1С.Может быть использована при интеграции. В 1С работает на стороне "клиента".

4600 руб.

27.06.2023    3649    3    0    

5

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

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

3600 руб.

02.09.2010    77559    72    257    

191

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

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

3000 руб.

12.05.2020    28764    138    100    

91

Разработка внешних компонент Системный администратор Программист Стажер Бесплатно (free)

Библиотека для работы с базами SQLite из 1С на основе внешней компоненты. Для Linux и Windows, бесплатно и с открытым исходным кодом!

14.01.2025    2243    bayselonarrend    14    

46

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

В статье описывается приложение-конструктор внешних компонент (native API). Конструктор упрощает процесс разработки за счет удобного добавления всех нужных функций и процедур в графическом режиме, с указанием их параметров и типов параметров. На выходе приложение генерирует готовый код на С++ и Rust и позволяет сразу приступить к реализации, без настройки API компоненты вручную.

04.12.2024    4891    kovalevdmv    26    

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