«Класс» для упрощения работы с 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.ОписаниеОшибки);
Возврат Ложь;
КонецЕсли; |
// Подключение к базе данных
Имя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;
КонецЦикла;
КонецЕсли; |
// Получение таблицы значений и работа с ней
Запрос =
"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.ОписаниеОшибки);
Возврат Ложь;
КонецЕсли; |
// Добавление новых записей в таблицу базы 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.КоличествоИзменныхЗаписей);
КонецЕсли; |
// Обновление полей записи
// Соответствие с новыми значениями полей
Товар = Новый Соответствие();
Товар["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.ОписаниеОшибки);
Возврат Ложь;
КонецЕсли; |
// Выполнение произвольного запроса
Запрос = "DELETE FROM table_products WHERE product_id='158742'";
Если НЕ MySQL.ВыполнитьЗапрос(Запрос) Тогда
Сообщить(MySQL.ОписаниеОшибки);
Возврат Ложь;
КонецЕсли;
Есть возможность разбить INSERT запрос с несколькими записями на подзапросы, чтобы не вставлять за раз много значений. Например, при добавлении в таблицу более 1000 записей, можно сделать это 10-ю запросами по 100 записей в каждом. Для этого достаточно вызвать код:
1
| MySQL.ЭлементовВЗапросе = 100; |
MySQL.ЭлементовВЗапросе = 100;
После этого все массивные INSERTы будут делаться по 100 записей за раз.
Полный текст запроса можно получить так:
1
2
| MySQL.СоздатьЗапрос("INSERT", "table_products", НовыеТовары);
Сообщить(MySQL.ТекстЗапроса()); |
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 с настройками соединения |
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 автора не видно!
Очень ёмкий комментарий! Что не взлетает и куда летите?
Доброго дня! Не скачивается обработка. Она в свободном доступе?
Попробуйте еще раз скачать.
Все скачалось! Такой хороший инструмент, спасибо! Вот только я и в своей обработке (узконаправленной и более «бедной») использую ADODB — выполняется запрос очень долго! Аналогичный запрос в HeidiSQL выполняется 3-5 минут, а через ADODB — 30-35 минут… Может Вы подскажите другой вариант соединения с базой MySQL из 1С? Что то слышал о расширении на PHP — но уж очень сложно мне кажется.
Что-то какой-то неправильный у вас запрос, если он столько выполняется, ну да не мое дело. Попробуйте вот это, возможно, быстрее будет работать.
Все качается норм, автору спасибо — инструмент рабочий