MySQL из 1С через ADODB: строка ODBC, параметры процедуры и функции
Зачем это битриксоцентричному читателю
В e‑commerce на 1С‑Битрикс база часто живёт под MySQL, а учёт или обмен может идти из «толстой» 1С на Windows. ADODB здесь — мост между COM и ODBC-драйвером MySQL. Ниже — не копирование документации, а собранный паттерн: открыть соединение, безопасно передать параметры в процедуру и считать скаляр из функции.
Строка подключения
Используйте фактическое имя ODBC-драйвера из «Администратор источников данных ODBC» (odbcad32.exe). Пример строки под 5.x ANSI (подставьте свои реквизиты и версию драйвера):
СтрокаСервера = "10.0.0.12";
Пользователь = "app_user";
Пароль = "********";
ИмяБазы = "shop_db";
СтрокаПодключения =
"DRIVER={MySQL ODBC 8.0 ANSI Driver};"
+ "SERVER=" + СокрЛП(СтрокаСервера) + ";"
+ "UID=" + СокрЛП(Пользователь) + ";"
+ "PWD=" + СокрЛП(Пароль) + ";"
+ "DATABASE=" + СокрЛП(ИмяБазы) + ";"
+ "PORT=3306;";
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionTimeout = 30;
Соединение.Open(СтрокаПодключения);Таймауты и кодировку согласуйте с настройками сервера MySQL; для обмена с сайтом обычно важны wait_timeout и размер пакета.
Вызов хранимой процедуры
Для процедуры типа SetField с именованными параметрами создаётся объект ADODB.Command, тип команды 4 (stored procedure), затем параметры через CreateParameter и Parameters.Append. Сигнатура CreateParameter на стороне ADO: имя, тип данных ADO, направление, размер, значение — см. справку MSDN по перечислению DataTypeEnum.
Команда = Новый COMОбъект("ADODB.Command");
Команда.ActiveConnection = Соединение;
Команда.CommandType = 4; // хранимая процедура
Команда.CommandText = "SetField";
П1 = Команда.CreateParameter("_docid", 3, 1, 11, 2); // adInteger, Input
Команда.Parameters.Append(П1);
// ... остальные параметры по схеме процедуры
Команда.Execute();Соответствие типов MySQL и констант ADO проще держать в маленькой таблице в коде/модуле и не смешивать «на глаз»: для строк чаще adVarChar (200), для больших бинарных полей — adLongVarBinary (205), для целых — adInteger (3).
Функция, возвращающая скаляр, и поток с файлом
Для вызова пользовательской функции в SQL тексте команды указывается SELECT … AS alias, тип команды — текст (например, 1). Файл в параметр удобно передать через ADODB.Stream в бинарном режиме и далее в параметр бинарного типа.
Поток = Новый COMОбъект("ADODB.Stream");
Поток.Type = 1; // adTypeBinary
Поток.Open();
Поток.LoadFromFile("C:\\tmp\\document.txt");
Команда = Новый COMОбъект("ADODB.Command");
Команда.ActiveConnection = Соединение;
Команда.CommandTimeout = 60;
Команда.CommandText = "SELECT CreateDocument(?, ?, ?, ?, ?, ?, ?) AS new_id";
Команда.CommandType = 1;
// параметры _idedo, сигнатуры, ключи, имя файла, содержимое — по вашей сигнатуре функции
Набор = Команда.Execute();
Сообщить(Набор.Fields("new_id").Value);Оборачивайте открытие и выполнение в Попытка … Исключение, логируйте текст ошибки и момент времени — на стороне MySQL одновременно смотрите SHOW ENGINE INNODB STATUS и slow log, если обмен «подвисает».
Эксплуатация и безопасность
Минимизируйте права учётной записи MySQL под 1С (только нужные процедуры/базы). Не зашивайте пароли в хранилище конфигурации без шифрования. Для сценариев с каталогом Битрикс помните про кодировки таблиц (utf8mb4) и согласованность с обменом заказами.
Итог
ADODB в 1С даёт предсказуемый способ дергать подготовленные на стороне MySQL процедуры и функции — полезно для обмена с интернет-магазином и кастомными таблицами рядом с ядром 1С‑Битрикс.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии