Часто возникают вопросы обмена данными с интернет магазинами расположенными на внешних виртуальных хостингах. В основном обмены происходят через файлы. При этом в основном требуется рука человека и зачатую включение разума. Попробуем реализовать механизм обмена данными 1С и базы данных MySQL напрямую без включения человека в работу по обмену данными.
Работы на стороне сервера MySQL
Как пример - я пользуюсь хостингом на www.sweb.ru буду описывать его.
MySQL-сервер на виртуальном хостинге по умолчанию принимает только локальные подключения. Это значит, что любая программа, осуществляющая подключение к MySQL-серверу, обязательно должна располагаться на том же физическом сервере, где запущен MySQL-сервер.
Если Вам требуется работать с Вашими базами данных MySQL удалённо (например, с помощью установленного на собственном компьютере MySQL-клиента либо со стороннего сервера, где размещён сайт, которому требуется работать с Вашей базой данных у нас на хостинге), то существует возможность разрешить удалённые подключения.
(Это выдержка описания с сайта поддержки - подробнее: http://help.sweb.ru/entry/2322/)
Итак, базу данных мы открыли для доступа со стороны сервера MySQL. Переходим к настройке сервера или компьютера, где установлена 1С.
Работы на стороне сервера (компьютера) с 1С
Тут первый подводный камень: самый новый драйвер не захотел коннектиться пришлось устанавливать не первой свежести – качаем отсюда: http://dev.mysql.com/downloads/connector/odbc/5.1.html#downloads версию 3.51.30 для своей версии WINDOWS(у меня x64).
Открываем 1С и пишем следующие строки:
СтрокаПодключения = "DRIVER={MySQL ODBC 3.51 Driver};SERVER=Сервер;PORT=3306;DATABASE=ИмяБазы;uid=ИмяПользоватля;pwd=Пароль;"; Connection = Новый COMОбъект("ADODB.Connection"); Recordset = Новый COMОбъект("ADODB.Recordset"); Connection.Open(СтрокаПодключения); ТекстЗапроса = "select categoryID, name from categories;"; // тут запрос к Вашей таблице расположенной на MySQL Recordset.Open(ТекстЗапроса, Connection, 1); Пока Recordset.EOF() = 0 Цикл Сообщить (" id="+Recordset.Fields.Item("categoryID").value+" name="+Recordset.Fields.Item("name").value); Recordset.MoveNext(); КонецЦикла; Connection.Close(); |
В теле любой процедуры (я сделал внешнюю обработку и прописал в обработчик нажатия кнопки). Если выводятся сообщения по выполненному запросу – Ура вы подключились.
Теперь встает вопрос: что мне с этим делать…. Все очень просто – теперь у Вас есть доступ к базе данных в которой Вы можете делать что угодно: добавлять, удалять, обновлять записи.
Дополнительно настроив FTP можно выгружать картинки из 1С на сайт. Имея подключение к базе, можно в режиме онлайн загружать заказы с сайта.
Можно написать все что угодно – т.е. построить на 1С систему управления контентом сайта.
Конечно, можно сказать «Зачем изобретать велосипед – ведь есть уже готовые решения». Не могу не согласиться – но есть несколько бонусов – при самостоятельной реализации данного механизма.
Первое – скорость обмена – для своего сайта вы напишете неунифицированный конкретный запрос – который будет заточен именно под Вас.
Второе – тренировка ума программиста (для профессионала) и неплохой опыт для начинающих.
Третье – вы будете на 100% уверенны, что если что то не так то надо копать в своем коде – а не в закрытых кодах сторонних разработчиков.
Четвертое – маленькие организации и их очень большое количество – не могут приобрести готовые решения – пожалуйста- все в ваших руках.
Я ни в коем случае, не отговариваю рассматривать готовые решения по синхронизации данных с сайтом – просто описываю альтернативные пути решения задач.