gifts2017

Изменение информации на удаленном веб сайте из 1С через ODBC драйвер для mysql

Опубликовал Николай Бекетов (jorikfon) в раздел Обмен - Интеграция с WEB

В статье описана технология взаимодействия с mysql базой данных из 1С:Предприятия через ODBC драйвер.

В продолжение статьи о использовании внешних источников данных в 1С.

 

У меня появилась интересная задача. Необходимо на интернет сайте держать список актуальных телефонов клиентов компании. Самый актуальный список этих телефонов есть в нашей CRM системе.

Задача простейшая.
Скачиваем свежий ODBC драйвер для mysql с сайта производителя.

В 1С создаем обработку с следующим кодом.

Код
СтрокаСоединенияСАстерискСервером   =   "
 |DRIVER={MySQL ODBC 5.1 Driver};
 |SERVER=wwwhost_na_korotom_stoit_mysql_base;
 |DATABASE=imya_database_s_telefonami; 
 |UID=user_s_pravami_zapisi_v_database;
 |PWD=password_usera_s_provami_zapisi; 
   
Соединение = Новый COMОбъект("ADODB.Connection");
   
Соединение.ConnectionString = (СтрокаСоединенияСАстерискСервером);
   
Попытка
      Соединение.Open();
      Сообщить("MySQL база подключена!!!");
Исключение
      Сообщить("Не могу подключиться к базе!!! ");
КонецПопытки;



Если верхний код отработал без ошибок, значит, мы успешно соединились с базой данных и теперь можем с ней делать, что нам нужно.

Очищаем все записи из таблицы с телефонами

Код
Попытка
      Соединение.Execute("truncate table callerid;");
      Сообщить("Мы успешно все подчистили!");
Исключение
      Сообщить("Что то пошло не так :( ");
КонецПопытки;



Добавляем новую строчку с контактной информацией

Код
АбонентТранслит = "Vaisya Pupkin";
НомерТелефона  = "74952293042";

Стр = "INSERT INTO `callerid` SET `number`  ="+""""+НомерТелефона+ """"+",  `name`  ="+""""+АбонентТранслит+"""";

Попытка
      Соединение.Execute(Стр);
      Сообщить("Запись с Васей добавлена в базу сайта");
Исключение
      Сообщить("Что то пошло не так :( ");
КонецПопытки;


p.s. В реальной жизни этим методом я ежедневно обновляю информацию на нашей АТС (asterisk) о контактных телефонах клиентов. Задача выполняется фоновым заданием на сервере 1С. Около 1200 записей заливается 12 секунд.

См. также

Вознаграждение за ответ
Сумма: 0 $m
Добавили:
Антон Скакалин (atol_zlat) (0.02 $m)
Подписаться Добавить вознаграждение

Комментарии

1. Ийон Тихий (cool.vlad4) 22.09.11 10:38
Я бы добавил, что это не для всех "удаленных веб сайтов ". По причинам безопасности ODBC закрывают на удаленных веб сайтах, да и к тому же размещают внутри сети - т.е. по хорошему напрямую через интернет БД не должна быть видна. Так, что можно добавить способ через туннелирование - ssh, http. ssh - через putty. а http через скрипт на сайте.
2. Ийон Тихий (cool.vlad4) 22.09.11 10:40
Да и для общего интереса можно рассмотреть техники генерации запросов для пакетной вставки, для обновления данных.
3. Николай Бекетов (jorikfon) 22.09.11 10:51
(1) cool.vlad4, Конечно вы правы, просто вопросы безопасности я вынес за рамки стати для ее упрощения. Ведь механизмов удаленного взаимодействия с сайтом действительно много, да и сама субд позволяет настраивать авторизацию по IP. В моем конкретном случае сайт находится внутри локальной сети в DMZ зоне и я имею все инструменты безопасного доступа к нему из LAN.

(2) cool.vlad4, К сожалению, я не владею языком запросов MYSQL. Если кто-то в комментариях напишет пример, я допишу его в пост. По сути описанным способом можно выполнять любой произвольный MYSQL запрос. Меня в этом случае всегда выручает гугл. :)
4. Alxd (salexdv) 22.09.11 10:54
Добавьте еще выборку данных и как сказано в (2) пакетную вставку данных, ибо вставлять по одной записи, когда база MySQL висит в вебе - кощунство :-)
5. Николай Бекетов (jorikfon) 22.09.11 10:57
(4) Alxd, Выборку делаем через внешние источники используя язык запросов 1С.
Вставлять группами наверное не проблема, дайте текст запроса, я проверю и допишу в статью. Не умею, не пробовал :)
6. Alxd (salexdv) 22.09.11 11:01
// Выборка данных
RS = Новый COMОбъект("ADODB.Recordset");
RS.ActiveConnection = Connection;	

query = "SELECT бла-бла-бла"

Попытка                      
 RS.Open(query);
Исключение
 Предупреждение(ОписаниеОшибки());
 Возврат Ложь;	
КонецПопытки;
	
Если RS.EOF() И RS.BOF() Тогда
  (результат запроса пустой)
   Предупреждение("Нет запрашиваемых данных.");
Иначе
  RS.MoveFirst();
  Пока НЕ RS.EOF() Цикл
    Поле1 = RS.Fields.Item("BlaBla");
    RS.MoveNext();	
  КонецЦикла;
КонецЕсли;
RS.CLOSE();
...Показать Скрыть


Как-то так делается выборка
7. Alxd (salexdv) 22.09.11 11:04
Пакетная вставка
query = "INSERT INTO products_
        |(product_id , product_name )
	|VALUES 
        |('1', 'Товар №1'),
        |('2', 'Товар №2'),
        |('3', 'Товар №3')";
Попытка
      Соединение.Execute(query);
      Сообщить("Мы успешно все вставили!");
Исключение
      Сообщить("Что то пошло не так :( ");
КонецПопытки;
...Показать Скрыть
jorikfon; +1 Ответить
8. Alxd (salexdv) 22.09.11 11:13
(5) Попробуйте, вам понравится :-)
9. muha muhaha (fr.myha) 27.03.12 12:20
10. Игорь Баринов (CrazyDave) 02.05.12 16:06
(3) jorikfon, насчёт odbc. Делал тут одному мужику, который офигенно любит автономоность во всём, внешнюю компоненту для связи MySQL c 1C. Компонента работает без установленных на клиенте odbc драйверов и т.п, позволяет выполнять как select запросы к БД - результат возвращается как ТаблицаЗначений так и insert delete update. Как вы думаете - стоит такое поделие выложить или нет? )))) Просто одно portable-чудо уже выложил (делал изначально тому же человеку)- http://infostart.ru/public/125392/ - ну так , ни шатко ни валко))))
11. Евгений Дубовик (Jatz) 16.05.12 11:40
(10) CrazyDave, компонента в 64х системе работает?
12. Антон Скакалин (atol_zlat) 28.05.15 07:40
Спасибо за пакетную вставку, 2500 тысячи записей вставляются за 2 сек. Спасибо.
13. Nike K (Nkolp) 11.09.15 14:54
Не могу подключиться с MS Server 2012 к базе MySQL на удаленном виртуальном сервере (ни по IP, ни по имени сайта)
ODBC на сервере MS настроил (Тест подключения в панели управления - проходит, список баз выдает).
Хочу подключить внешний источник данных 1С, тестирую по ADODB.
АДО = Новый ComОбъект("ADODB.Connection");
 СтрокаСоединения = "
// |Provider=MSDASQL;
 |DRIVER={MySQL ODBC 5.3 Unicode Driver};
 |Server=95.ььь.ььь.ььь;
 |PORT=3306;
 |DATABASE=.......;
 |User=.......; // сначала пробовал UID и PWD соответственно
 |Password=......;
 //|Socket=MySQL;
 |Option=3;
 |";
 Попытка
  АДО.Open(СтрокаСоединения);
...Показать Скрыть

... Попытка не проходит ...
Пробовал разные варианты с сайта http://www.connectionstrings.com/mysql/#mysql-connector-odbc-5-1
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа