2009
24
октября
1С и MySQL. Обмен данными. Пример переноса данных справочника
Автор статьи: admin | Просмотров: 8,004 | Комментариев: 36
Цель взаимодействия MySQL и 1С
В последнее время наблюдается активное развитие интернет-магазинов в России, где продавцы предлагают заказать товар напрямую с сайта.
В то же время программы для бухгалтерского и управленческого учета остаются старыми – в основном это 1С Предприятие.
Необходимо уйти от ручного труда и автоматизировать обмен данными между базами данных 1С и MySQL, переносить справочники, например номенклатуру, контрагентов, цены, скидки и другие, а так же переносить заказы.
Мне поставили задачу перенести справочники из 1С в базу данных MySQL, как это сделать в кратце я описывал в статье Как подключить 1С к базе данных MySQL. Теперь я постараюсь описать процесс более подробно и с примерами переноса данных. В интернете предлагают в начале сделать выгрузку во внешний файл, а потом загрузить его в MySQL. Я расскажу как можно обойтись без этих файлов, а выполнить перенос напрямую через ODBC-драйвер.
Как настроить обмен 1С с MySQL через ODBC – драйверУстановка и настройка ODBC – драйвера
Необходимо скачать и установить ODBC – драйвер.
Запускаем файл «MySql.Data.msi». Выбираем типовую установку. Ничего сложного в этом нет.
Далее заходим в Пуск – Настройка – Панель Управления – Администрирование , находим там Источники данных (ODBC)
Кликаем 2 раза по иконке Источники данных (ODBC) и в появившемся окне ищем что-то вроде MySQL, если не находим, то жмем добавить и добавляем драйвер.
Далее выбираем драйвер и щелкаем «настройка». В появившемся окне указываем параметры базы данных MySQL. Так как тестил я на localhost – на локальном сервере «Апач», то указываем параметры подключения
Data Source name – MySQL ODBC 5.1 Driver
Description - MySQL ODBC 5.1 Driver
Server – 127.0.0.1
Port – 3306
User – root (можно любого другого пользователя)
Password – пароль от учетной записи (на локалхосте чаще всего пустой)
Выбираем базу данных – в моем случае – это «test«
Нажимаем кнопку Test, все должно пройти успешно, если возникли ошибки, то проверяем параметры подключения, запущен ли Apache, есть ли в MySQL такая база данных (test).
На этом данный пункт закончен. Мы настроили сисемное подключние к MySQL через ODBC.
Настройка базы данных MySQL
База MySQL уже создана и имеет заданную структуру, которую смотрим любым способом. Мои познания в MySQL ограничены, поэтому я использую стандартные средства phpmyadmin.
Открываем браузер и вбиваем адрес – http://localhost/tools/phpmyadmin/
На экране должна отобразиться панель управления базами данных.
Заходим в необходимую нам базу данных и смотрим структуру.
Для примера сделаем простую загрузку номенклатуры из 1С в MySQL. Имеем таблицу «tovar«, которая имеет 2 поля – «kod» и «name«. В первое запишем код товара в 1С Предприятие, а в поле name - наименование товара.
В принципе все. Далее мы переходим к 1С
Обработка 1С для подключения к MySQL и переноса данных
Запускаем конфигуратор 1С, создаем новый внешний отчет
Я сделал на форме 2 кнопки – подключить, при нажатии на которую мы будем подключаться к базе данных MySQL, и перенести, которой будем переносить товары.
Далее переходим к процедурам
Процедура Подключить()
Соединение = СоздатьОбъект(«ADODB.Connection»);
СтрокаСоединения = «DRIVER=MySQL ODBC 5.1 Driver;SERVER=localhost;DataBase=test;UID=root;PWD=;
Соединение.ConnectionString = (СтрокаСоединения);
Попытка
Соединение.Open();
Сообщить(«MySQL база подключена!!!»);
Исключение
Сообщить(«Не могу подключиться к базе!!!»);
КонецПопытки;
КонецПроцедуры
Эта процедура выполняет подключение
Строку соединения я прописал жестко, но ее параметры можно задавать и в элементах формы.
Вторая же процедура будет переносить данные
Процедура Перенос()
Т = СоздатьОбъект(«Справочник.Номенклатура»);
Т.ВыбратьЭлементы();
Пока Т.ПолучитьЭлемент() = 1 Цикл
Если Т.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
Стр = «INSERT INTO `tovar` SET `kod` =»+»"»"+Т.Код+ «»"»+», `name` =»+»"»"+Строка(Т.Наименование)+»"»";
Соединение.Execute(Стр);
Сообщить(«Перенесли – » + Т.Наименование);
КонецЦикла;
КонецПроцедуры
Соединение.Execute(Стр); – выполняет запрос, который заносит в базу данных MySQL необходимые данные
Стр = «INSERT INTO `tovar` SET `kod` =»+»"»"+Т.Код+ «»"»+», `name` =»+»"»"+Строка(Т.Наименование)+»"»"; – сам текст запроса
После отрабатывания обработки мы получаем заполненную таблицу базы MySQL
Вот в общем то и все. По своему вкусу необходимо будет дописать различные проверки, но это уже дело техники и фантазии.
Подобным образом можно запрограммировать двухсторонний обмен любыми данными, справочниками и движениями, заказами.
Рубрики: 1С, Вопросы и ответы






июня 16, 2011 at 4:17
Было бы так же интересно увидеть и импорт заказов.
января 24, 2011 at 8:45
Во-первых надо разобраться откуда куда и какие данные должны передаваться. Обычно из интернет-магазина передаются данные о продажах, а из 1С в интернет-магазин – об остатках (для наличия).
Если это так, то зачем передавать данные о продажах из 1С в mySQL. Такое может понадобиться, например для того, чтобы клиенты могли отслеживать состояние своего заказа. Если этого нет, то я не вижу смысла.
Во-вторых. Передавать каждую продажу так сказать он-лайн имеет смысл, если интернет-сервер, на котором крутится сайт, лежит здесь же, в локалке, и нет проблем со связью. Если же сайт лежит на внешнем хостинге, то есть такое понятие, как канал связи и он может быть не всегда стабильным… В этом случае, думаю, необходимо организовать периодический обмен (например, каждые 10 минут, или час, или сутки, в зависимости от нюансов работы фирмы).
Естественно, надо будет запрограммировать обработку ошибок…
января 24, 2011 at 0:27
Респект тебе админ!! Спасибо за статью!! Я новичок в 1с поэтому хочу ваш совет. Вообщем картина такая, есть магазин который работает на 1С, так вот этот магазин делает себе интернет магазин.Задача такая: при каждой операции по продаже 1С должна вносить соответствующее изменение в Mysql базу интернет магазина. Так вот какое я вижу решение: подкорректировать конфигурацию 1С в тех местах где происходят операции с таблицами товаров чтобы при каждой операции например продаже товара совершалось обращение к Mysql базе посредством sql запросов. Что можете сказать?
декабря 20, 2010 at 15:29
У меня готового решения нет, а что переносить хочешь? У тебя интернет – магазин? Остатки-продажи?
VirtueMart – это надстройка на Джумлу?
декабря 20, 2010 at 15:23
Здравствуйте. Ищу готовое решение синхронизации 1С и Joomla-VirtueMart не программист и самостоятельно синхронизировать не потяну. Может у вас есть готовое решение? Напишите мне или в асю стукните: 473737041
апреля 11, 2010 at 1:21
Евгений, кодировки должны быть одинаковы как в MySQL так и в 1С