Обмен данными между базами 1С и MySQL можно реализовать при помощи драйвера ODBC. Скачать его можно перейдя по ссылке https://dev.mysql.com/downloads/connector/odbc. Скачать и установить требуется сразу 2 драйвера - и 32-битный и 64-битный, независимо от вашей ОС. Потому что часто бывают непонятные ситуации, когда не удается наладить подключение, используя только один драйвер. В этой статье расмотрим 3 варианта подключения из 1С к MySQL, используя данный драйвер. В моих примерях я использую версию ODBC 5.3.6.
1) Через созданный DSN и полностью настроенный - с указанием пароля, юзера, БД и др.
Создание и настройка DSN производится в окне Администратора источника данных ODBC на вкладках "Пользовательский DSN" и "Системный DSN". Нажимаем кнопку "Добавить", выбираем наш установленный драйвер, заполняем поля:
Data Source Name - имя DSN;
TSP/IP Server - сервер MySQl (адрес сайта, если подключение ведется к БД сайта);
Port - по умолчанию 3306;
User - имя пользователя БД MySQl;
Password - пароль пользователя БД MySQl;
Database - база данных MySQl.
В 1С прописываем функцию подключения:
Функция ПодключениеКСайту()
Connection = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "DSN=ИмяDSN;"; //указываем значение из поля Data Source Name в окне настроек DSN
Попытка
Connection.Open(СтрокаПодключения);
Возврат Connection;
Исключение
Сообщить("Не удалось подключится к сайту!");
Сообщить (ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
2) Через созданный DSN, у которого указано только имя (Data Source Name)Создаем DSN в окне Администратора источника данных ODBC на вкладках "Пользовательский DSN" и "Системный DSN", но указываем только имя DSN. Все остальные поля будем заполнять программно.
В 1С прописываем функцию подключения:
Функция ПодключениеКСайту()
Connection = Новый COMОбъект("ADODB.Connection");
СтрокаПодключения = "DSN=ИмяDSN;"; //указываем значение из поля Data Source Name в окне настроек DSN
Connection = Новый COMОбъект("ADODB.Connection");
ДСН = "ИмяDSN"; //указываем значение из поля Data Source Name в окне настроек DSN
СРВ = "ИмяСервера"; // сервер MySQl (адрес сайта, если подключение ведется к БД сайта)
УИД = "ИмяПользователя"; // имя пользователя БД MySQl
ПВД = "Пароль"; // пароль пользователя БД MySQl
БД = "ИмяБД"; // пароль пользователя БД MySQl
СтрокаПодключения = "DSN=" + ДСН + ";Server=" + СРВ + ";Database=" + БД + ";UID=" + УИД + ";PWD=" + ПВД;
Connection.ConnectionString = СтрокаПодключения;
Попытка
Connection.Open();
Возврат Connection;
Исключение
Сообщить("Не удалось подключится к сайту!");
Сообщить (ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
3) Без созданного DSN, создаем его полностью программноВ 1С прописываем функцию подключения:
Функция ПодключениеКСайту()
Connection = Новый COMОбъект("ADODB.Connection");
Провайдер = "MSDASQL.1"; // имя провайдера ODBC, чаще всего указывается именно такой
Драйвер = "MySQL ODBC 5.3 ANSI Driver"; // Имя драйвера ODBC
СРВ = "ИмяСервера";
БД = "ИмяБД";
УИД = "ИмяПользователя";
ПВД = "Пароль";
СтрокаПодключения = "Provider=" + Провайдер + ";DRIVER=" + Драйвер + ";Server=" + СРВ + ";Database=" + БД + ";UID=" + УИД + ";PWD=" + ПВД + ";";
Попытка
Connection.Open(СтрокаПодключения);
Возврат Connection;
Исключение
Сообщить("Не удалось подключится к сайту!");
Сообщить (ОписаниеОшибки());
Возврат Неопределено;
КонецПопытки;
КонецФункции
Теперь рассмотрим несколько примеров как получать и передавать данные используя подключение через ODBC.1) Получим остатки товаров из таблицы goods_item_depozit из БД MySQL на сайте.
Процедура ЗагрузитьОстаткиИзСайта()
Connection = ПодключениеКСайту(); // одна из трех вышеописанных функций
Если Connection = Неопределено Тогда
Возврат;
КонецЕсли;
RecordSet = Новый COMОбъект("ADODB.Recordset");
Command = Новый COMОбъект ("ADODB.Command");
Command.ActiveConnection = Connection;
ЗапросОстатковНаСайте =
"SELECT
|`goods_item_depozit`.`goods_name` AS `goods_name`,
|`goods_item_depozit`.`depozit_name` AS `depozit_name`,
|`goods_item_depozit`.`remained` AS `remained`
|FROM `goods_item_depozit`";
RecordSet.Open(ЗапросОстатковНаСайте, Connection);
Пока RecordSet.EOF() = 0 Цикл
НаименованиеТовара = RecordSet.Fields("goods_name").Value;
НаименованиеСклада = RecordSet.Fields("depozit_name").Value;
Остаток = RecordSet.Fields("remained").Value;
RecordSet.MoveNext();
КонецЦикла;
RecordSet.Close();
КонецПроцедуры
2) Запишим остатки товара в таблицу goods_item_depozit из БД MySQL на сайте.Процедура ВыгрузитьОстаткиНаСайт()
Connection = ПодключениеКСайту(); // одна из трех вышеописанных функций
Если Connection = Неопределено Тогда
Возврат;
КонецЕсли;
RecordSet = Новый COMОбъект("ADODB.Recordset");
Command = Новый COMОбъект ("ADODB.Command");
Command.ActiveConnection = Connection;
НаименованиеТовара = "НаименованиеТовара";
НаименованиеСклада = "НаименованиеСклада";
Остаток = Формат(Остаток,"ЧГ=0"); // обязательно убираем группировку для числа
ЗапросДобавленияОстатков =
"INSERT
|INTO `goods_item_depozit`
|SET
|`goods_name`='" + НаименованиеТовара + "',
|`depozit_name`='" + НаименованиеСклада + "',
|`remained`='" + Остаток + "'";
Command.CommandText = ЗапросДобавленияОстатков;
Command.CommandType = 1;
Попытка
RecordSet = Command.Execute();
Исключение
Сообщить ("Не удалось экспортировать остатки товара: " + НаименованиеТовара);
Сообщить (ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры