Цель взаимодействия MySQL и 1С

В последнее время наблюдается активное развитие интернет-магазинов в России, где продавцы предлагают заказать товар напрямую с сайта.

В то же время  программы для бухгалтерского и управленческого учета остаются старыми – в основном это 1С Предприятие.

Необходимо уйти от ручного труда и автоматизировать обмен данными между базами данных 1С и MySQL, переносить справочники, например номенклатуру, контрагентов, цены, скидки и другие, а так же переносить заказы.

Заполненная таблица

Заполненная таблица

Авторские права на предоставленный материал принадлежат автору сайта http://extremallife.ru

Мне поставили задачу перенести справочники из 1С в базу данных MySQL, как это сделать в кратце я описывал в статье Как подключить 1С к базе данных MySQL. Теперь я постараюсь описать процесс более подробно и с примерами переноса данных. В интернете предлагают в начале сделать выгрузку во внешний файл, а потом загрузить его в MySQL. Я расскажу как можно обойтись без этих файлов, а выполнить перенос напрямую через ODBC-драйвер.

Как настроить обмен 1С с MySQL через ODBC – драйверУстановка и настройка ODBC – драйвера

Необходимо скачать и установить ODBC – драйвер.

Запускаем файл «MySql.Data.msi». Выбираем типовую установку. Ничего сложного в этом нет.

Установка ODBC Драйвера

Установка ODBC Драйвера

Далее заходим в Пуск – Настройка – Панель Управления – Администрирование , находим там Источники данных (ODBC)

Админиcтрирование ODBC

Админиcтрирование ODBC

Кликаем 2 раза по иконке Источники данных (ODBC) и в появившемся окне ищем что-то вроде MySQL, если не находим, то жмем добавить и добавляем драйвер.

Добавляем соедниение ODBC

Добавляем соедниение ODBC

Далее выбираем драйвер и щелкаем «настройка». В появившемся окне указываем параметры базы данных 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 прошел успешно

Тест подключений к MySQL прошел успешно

На этом данный пункт закончен. Мы настроили сисемное подключние к MySQL через ODBC.

Настройка базы данных MySQL

База MySQL уже создана и имеет заданную структуру, которую смотрим любым способом. Мои познания в MySQL ограничены, поэтому я использую стандартные средства phpmyadmin.

Открываем браузер и вбиваем адрес – http://localhost/tools/phpmyadmin/

На экране должна отобразиться панель управления базами данных.

Заходим в необходимую нам базу данных и смотрим структуру.

Для примера сделаем простую загрузку номенклатуры из 1С в MySQL. Имеем таблицу «tovar«, которая имеет 2 поля – «kod» и «name«. В первое запишем код товара в 1С Предприятие, а в поле name - наименование товара.

Структура таблицы в MySQL

Структура таблицы в MySQL

В принципе все. Далее мы переходим к 1С

Обработка 1С для подключения к MySQL и переноса данных

Запускаем конфигуратор 1С, создаем новый внешний отчет

Я сделал на форме 2 кнопки – подключить, при нажатии на которую мы будем подключаться к базе данных  MySQL, и перенести, которой будем переносить товары.

Форма обработки 1С

Форма обработки 1С

Далее переходим к процедурам

Процедура Подключить()
Соединение = СоздатьОбъект(«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

Заполненная таблица

Заполненная таблица

Вот в общем то и все. По своему вкусу необходимо будет дописать различные проверки, но это уже дело техники и фантазии.

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

Рубрики: , Вопросы и ответы

Теги: ,


Комментарии

36 комментариев в “1С и MySQL. Обмен данными. Пример переноса данных справочника”

Страниц: [4] 3 2 1 » Все

  1. 36
    LamEdition пишет:

    Было бы так же интересно увидеть и импорт заказов.

  2. 35
    admin пишет:

    Во-первых надо разобраться откуда куда и какие данные должны передаваться. Обычно из интернет-магазина передаются данные о продажах, а из 1С в интернет-магазин – об остатках (для наличия).
    Если это так, то зачем передавать данные о продажах из 1С в mySQL. Такое может понадобиться, например для того, чтобы клиенты могли отслеживать состояние своего заказа. Если этого нет, то я не вижу смысла.
    Во-вторых. Передавать каждую продажу так сказать он-лайн имеет смысл, если интернет-сервер, на котором крутится сайт, лежит здесь же, в локалке, и нет проблем со связью. Если же сайт лежит на внешнем хостинге, то есть такое понятие, как канал связи и он может быть не всегда стабильным… В этом случае, думаю, необходимо организовать периодический обмен (например, каждые 10 минут, или час, или сутки, в зависимости от нюансов работы фирмы).
    Естественно, надо будет запрограммировать обработку ошибок…

  3. 34
    RASHID пишет:

    Респект тебе админ!! Спасибо за статью!! Я новичок в 1с поэтому хочу ваш совет. Вообщем картина такая, есть магазин который работает на 1С, так вот этот магазин делает себе интернет магазин.Задача такая: при каждой операции по продаже 1С должна вносить соответствующее изменение в Mysql базу интернет магазина. Так вот какое я вижу решение: подкорректировать конфигурацию 1С в тех местах где происходят операции с таблицами товаров чтобы при каждой операции например продаже товара совершалось обращение к Mysql базе посредством sql запросов. Что можете сказать? 

  4. 33
    admin пишет:

    У меня готового решения нет, а что переносить хочешь? У тебя интернет – магазин? Остатки-продажи?
    VirtueMart  – это надстройка на Джумлу?

  5. 32
    Николай пишет:

    Здравствуйте. Ищу готовое решение синхронизации 1С и Joomla-VirtueMart не программист и самостоятельно синхронизировать не потяну. Может у вас есть готовое решение? Напишите мне или в асю  стукните: 473737041

  6. 31
    Макс пишет:

    Евгений, кодировки должны быть одинаковы как в MySQL так и в 1С

Страниц: [4] 3 2 1 » Все

Выскажи свое мнение