Простая работа с MySQL из 1С

«Класс» для упрощения работы с MySQL из 1С. Для соединения используется MySQL ODBC Connector. Позволяет просто выполнять любые виды запросов и получать данные в виде таблицы значений.

1
2
3
4
5
6
7
8
9
10
11
12
13
// Подключение к базе данных
ИмяODBC = "local_base";
ИмяБазы = "base_name";
ИмяПользователя = "base_name_user";
Пароль = "*******";
 
MySQL = Обработки.MySQL.Создать();
MySQL.Инициализация(ИмяODBC, ИмяБазы, ИмяПользователя, Пароль);
 
Если НЕ MySQL.УстановитьСоединение(Ложь) Тогда
   Сообщить(MySQL.ОписаниеОшибки);
   Возврат Ложь;
КонецЕсли;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Получение таблицы значений и работа с ней
Запрос = 
"SELECT order_id,
|  order_date,
|  order_summ,
|  order_customer
|FROM tamble_orders
|WHERE order_loaded=""N""";
 
ТаблицаЗаказов = MySQL.ПолучитьТаблицуЗначенийПоЗапросу(Запрос);	
 
Если ТаблицаЗаказов = Неопределено Тогда
   Сообщить(MySQL.ОписаниеОшибки);
   Возврат Ложь;	
КонецЕсли;
 
Если ТаблицаЗаказов.Количество() = 0 Тогда		
   Сообщить("На сайте нет новых заказов для загрузки.");
Иначе				
   Для Каждого СтрокаТЗ ИЗ ТаблицаЗаказов Цикл
      НомерЗаказа = СтрокаТЗ.order_id;
      Покупатель = СтрокаТЗ.order_customer;
   КонецЦикла;
КонецЕсли;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Добавление новых записей в таблицу базы MySQL
// Одиночная запись
// Соответствие со значениями полей для новой записи таблицы
Товар = Новый Соответствие();
Товар["product_id"] = "158742";
Товар["product_name"] = "1С Управление торговлей 10.3";
Товар["product_price"] = 12000;
 
// Построение запроса
MySQL.СоздатьЗапрос("INSERT", "table_products", Товар);
// Выполнение
Если НЕ MySQL.ВыполнитьЗапрос() Тогда
   Сообщить(MySQL.ОписаниеОшибки);
   Возврат Ложь;
КонецЕсли;
 
// Несколько записей
// Массив в который вставляются соответстия
НовыеТовары = Новый Массив();
 
Товар = Новый Соответствие();
Товар["product_id"] = "158742";
Товар["product_name"] = "1С Управление торговлей, редакция 10.3";
Товар["product_price"] = 12000;
НовыеТовары.Добавить(Товар);
 
Товар = Новый Соответствие();
Товар["product_id"] = "158743";
Товар["product_name"] = "1С Управление торговлей, редакция 11";
Товар["product_price"] = 12500;
НовыеТовары.Добавить(Товар);
 
MySQL.СоздатьЗапрос("INSERT", "table_products", НовыеТовары);
Если НЕ MySQL.ВыполнитьЗапрос() Тогда
   Сообщить(MySQL.ОписаниеОшибки);
   Возврат Ложь;
КонецЕсли;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Обновление полей записи
// Соответствие с новыми значениями полей
Товар = Новый Соответствие();
Товар["product_price"] = 13000;
Товар["product_rest"] = 10;
 
// В четвертом параметре можно указать условие, по которым осуществляется поиск записей для обновления
MySQL.СоздатьЗапрос("UPDATE", "table_products", Товар, "WHERE product_id='158742'");
Если НЕ MySQL.ВыполнитьЗапрос() Тогда
   Сообщить(MySQL.ОписаниеОшибки);
   Возврат Ложь;
Иначе
   Сообщить("Обновлено товаров: " + MySQL.КоличествоИзменныхЗаписей);
КонецЕсли;
1
2
3
4
5
6
7
// Выполнение произвольного запроса
Запрос = "DELETE FROM table_products WHERE product_id='158742'";
 
Если НЕ MySQL.ВыполнитьЗапрос(Запрос) Тогда
   Сообщить(MySQL.ОписаниеОшибки);
   Возврат Ложь;
КонецЕсли;

Есть возможность разбить INSERT запрос с несколькими записями на подзапросы, чтобы не вставлять за раз много значений. Например, при добавлении в таблицу более 1000 записей, можно сделать это 10-ю запросами по 100 записей в каждом. Для этого достаточно вызвать код:

1
   MySQL.ЭлементовВЗапросе = 100;

После этого все массивные INSERTы будут делаться по 100 записей за раз.
Полный текст запроса можно получить так:

1
2
   MySQL.СоздатьЗапрос("INSERT", "table_products", НовыеТовары);
   Сообщить(MySQL.ТекстЗапроса());

В случае, когда прямой доступ к MySQL запрещен, можно воспользоваться ssh-туннелем. В обработке есть настройки для запуска Putty.

1
2
3
4
5
MySQL.ИспользоватьPutty = Истина;
MySQL.Putty = "c:\Program Files\PuTTY\putty.exe"; // Путь к программе Putty (Kitty)
MySQL.User_put = "ssh_user"; // Имя пользователя для установки ssh-соединения
MySQL.Pass_put = "******"; // Пароль
MySQL.Name_put = "session_name"; // Имя сохраненной сесии Putty с настройками соединения

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *