Связь 1С с MySQL

Как постоянно поддерживать прайс-лист на веб-сайте предприятия в актуальном состоянии? Список продаваемых товаров часто изменяется. Эти изменения вносятся в офисную БД (чаще всего – 1С:Торговля). Для соответствия прайс-листа на сайте реальному списку товаров надо все изменения списка товаров в 1С дублировать на сайте, в БД MySQL. Т.е. делать двойную работу, за которой потом ещё нужен двойной контроль (так как делает её человек).

Можно полностью переложить работу по синхронизации 1C c MySQL на компьютер. Для этого, разумеется, надо, чтобы на компьютере был установлен MySQL-сервер. Файл для его установки можно (бесплатно) скачать с официального сайта производителя – http://www.mysql.com/. Для организации простого доступа к MySQL из других программ, работающих под Windows, надо установить ещё одну небольшую программу – MyODBC коннектор (http://dev.mysql.com/downloads/connector/odbc/3.51.html). Устанавливать эти программы не сложнее, чем MS Office или 1С.

Эта статья не для специалиста, но мы приведём здесь примерный программный код, который нужно добавить в конфигурацию 1С – чтобы можно было судить о его сложности хотя бы по его длине. Этот код нужно добавить в Конфигураторе 1С в Справочник Товары, в Форму элемента:

Процедура ПриЗаписи();
	cnn = CreateObject("ADODB.Connection");
	cnn.open("DSN=website");
	cnn.Execute ("SET NAMES 'cp1251';");
	cnn.Execute ("REPLACE INTO `tovar` (`kod` , `name` , `cena`, `group`)
 values ('"+Код+"', '"+Наименование+"', '"+Цена+"', '"+ВидТовара+"');");
	cnn.Close();
КонецПроцедуры

Этот код переносит в БД MySQL каждое изменение в справочнике 1С «Товары». БД MySQL может называться как угодно (например, «mybd_tovar» – её должен создать и дать ей имя программист, изготавливающий ваш веб-сайт), но в коде записано обращение к ней по конкретному «псевдониму» – website. Связать используемый в коде 1С «псевдоним» с реальным именем БД может любой опытный пользователь Windows (и уж тем более программист 1С) через «Панель Управления» – «Администрирование» – «Источники данных (ODBC)»- вкладка «Системный DSN» – кнопка «Добавить» – выбрать из списка «MySQL ODBC 3.51 Driver». В открывшемся окне нужно ввести выбранный нами псевдоним (website) в поле «Data Source Name», обязательно заполнить поля «User» и «Password» – теми значениями, которые были выбраны при установке на компьютер MySQL сервера, и сохранить выбранные настройки.

В код синхронизации с MySQL (в 1С) надо, строго говоря, ещё добавить обработку ошибки – на тот случай, если в системном источнике данных ODBC всё-таки не существует корректного подключения к БД mybd_tovar с именем website.

Вывод данных из MySQL в браузер

Этот код более сложный, однако размер файла (http://dn.ir2.ru/mysql.php) с кодом – всего 2Кб, код написан на языке PHP (можно и на других языках, но PHP наиболее распространённый).

Чтобы через файл mysql.php ваши клиенты (и другие пользователи Интернета) могли видеть описание ваших товаров, ваш компьютер должен быть подключен к Интернету и иметь постоянный ip-адрес, а также на компьютере должен быть установлен веб-сервер Apache (распространяется свободно, скачать можно с сайта производителя http://httpd.apache.org/). Предположим, вы установили Apache в корневую папку диска C:, тогда папка, куда следует поместить наш скрипт mysql.php, скорее всего, будет иметь следующий адрес: C:Apachehtdocs (или C:ApacheApache2htdocs).

К БД нашей газеты (Деловая неделя) можно получить доступ по постоянному ip-адресу 90.188.255.99. Наши клиенты и сотрудничающие с нами агентства могут в любое время просматривать информацию о плане своих публикаций в газете, по адресу: http://90.188.255.99/planvyp/. По этому адресу находится примерно такой же скрипт, как описанный здесь mysql.php, он выводит на экран информацию из БД, выбранную по параметрам, задаваемым пользователем.

Принципиальная схема передачи данных из 1С в общий доступ:

1С => MySQL => PHP => Apache => 90.188.255.99

В принципе, PHP и без Апача может извлекать данные из БД MySQL и оформлять эти данные в виде удобных HTML-страниц, которые может читать и отображать на экране браузер. Но именно Апач выдаёт HTML-страницы всем пользователям («агентам»), которые обращаются с запросом http по адресу 90.188.255.99 (http://90.188.255.99). Веб-сервер – это, скорее, неформальное определение Апача. Более точное его название – http-сервер.

Некоторые особенности настройки MySQL, Apache, PHP

Несколько советов начинающим (чтоб меньше мучаться).

1. Версии MySQL и PHP должны быть похожими, т.е. если версия MySQL выглядит как 5.хх (х – любая цифра), то и версия PHP должна быть 5.хх. Apache лучше брать всегда самый новый, на данный момент это версия примерно 2.2.11.

2. Будем считать, что версия вашего MySQL начинается на цифры 5.0, тогда файл настройки по умолчанию находится по адресу: C:Program FilesMySQLMySQL Server 5.0my.ini. В этом файле (my.ini) есть несколько разделов, они начинаются словом, отдельно стоящим в строке и заключённом в квадратные скобки. В разделы, начинающиеся словами [client], [mysqld], [mysqldump], [mysql] лучше сразу вписать (в начало каждого раздела) по две строчки:
default-character-set=cp1251
character-sets-dir = ‘c:/Program Files/MySQL/MySQL Server 5.0/share/charsets/’
Причём, если первая строчка не очень принципиальна (всё равно каждый клиент при подключении к MySQL сам обычно устанавливает нужную ему кодовую таблицу), то вторая на компьютерах с Windows избавит вас от очень неприятных проблем с чтением русских текстов: MySQL под Windows почему-то не знает сам, где у него хранятся кодовые таблицы, – это место ему обязательно нужно указывать в явном виде.

3. Для ускорения работы и экономии места на диске найдите в файле my.ini инструкцию #skip-innodb и уберите в начале неё решётку (если решётка там есть) – базы данных innodb в большинстве случаев должны быть отключены. То есть они по умолчанию должны быть отключены, пока вы не поймёте, что они вам зачем-то нужны.

4. PHP следует устанавливать как модуль Апач. Как именно это сделать под Windows, написано в огромном количестве инструкций, рассыпанных по Интернету. И в самих дистрибутивах Апач и PHP такие инструкции по установке есть, только они чаще всего там на английском языке:

# For PHP 5 & Apache 2 do something like this:
LoadModule php5_module «c:/php/php5apache2.dll»
AddType application/x-httpd-php .php
PHPIniDir «C:/php»

Это означает, что для PHP версии 5 и выше и Apache версии 2 и выше, для установки PHP как модуля Apache надо вписать в конфигурационный файл Apache три следующие за инструкцией строчки (начинающиеся со слова LoadModule). Конфигурационный файл Apache находится по адресу: C:ApacheApache2confhttpd.conf. Ну, а сам PHP, как видно из этих строк, должен быть установлен в папку C:php.

Настоящий веб-сервер

Качественно работающий, надёжный http-сервер, разумеется, на машину с Windows никто не устанавливает. Подавляющее большинство веб-сайтов в Интернете находится на машинах с Linux (или Freebsd). Но надо хорошо себе представлять, что означает в современном мире определение «надёжный веб-сервер». Тут предполагаются: 1) бесперебойная работа круглые сутки, 365 дней в году; 2) постоянное резервное копирование данных; 3) способность с высокой скоростью обрабатывать десятки и даже сотни тысяч http- и sql-запросов в день (это предполагает ещё и хороший интернет-канал).

Если вашу информацию будут просматривать каждый день даже 200-300 человек (чего добиться не так-то легко), вам не особенно будет нужно беспокоиться о высокой производительности сервера. Опять же важно, какую именно информацию выдаёте вы людям. Вернее, какое количество информации. Если каждый посетитель будет скачивать, например, прайс-лист размером в 500Кб (а вы при этом сами активно пользуетесь Интернетом по этому же доступу), то ваша выделенная линия (или подключение к Интернету по ADSL) может и не выдержать – что выразиться в долгом открытии страниц и в постоянных обрывах соединений для пользователей. А при том, как сейчас работает наш ADSL-монополист (Сибирьтелеком – «Вебстрим»), нужно сразу планировать расходы на пользование профессиональными хостинг-услугами. Тем более, что это не такие большие расходы: одна-две тысячи рублей в год. За эту сумму можно купить место на надёжном веб-сервере в Москве, Германии или даже в Америке, поместить туда свою информацию и уже не беспокоиться о производительности.

В случае помещения вашего веб-сайта на удалённый хостинг, цепочка 1С – Интернет-пользователи удлиниться на один шаг. Но важно то, что этот шаг тоже может быть доверен машине. Главное, правильно поставить задачу. Вряд ли есть смысл каждую минуту пытаться передавать изменения справочника 1С Товары на удалённый сайт. Каждое мелкое изменение в автоматическом режиме по-прежнему будет дублироваться в MySQL на том же компьютере, где стоит 1С. А как часто эти изменения должны передаваться на хостинг, нужно решать по потребностям. Может быть, раз в сутки. Если это очень принципиально, можно и каждый час. Можно, в общем, и каждую минуту – всё равно это будет делать PHP-скрипт, по заданному вами расписанию.

Принцип работы PHP-скрипта, синхронизирующего данные двух сайтов, расположенных далеко друг от друга, может быть очень прост, если вы правильно спланировали структуру MySQL-таблицы. В таблицу, которую предполагается синхронизировать, следует обязательно добавить поле типа Timestamp, в это поле по умолчанию (не пользователем, а самим MySQL-сервером) будет вписываться метка типа «дата-время» при каждом изменении какой-либо строки. Тогда PHP-скрипт просто должен будет выбирать все записи из таблицы за указанный временной интервал – и отправлять эти записи на удалённый веб-сайт. На удалённом сайте должен быть расположен принимающий PHP-скрипт, который будет загружать принятые записи в соответствующую таблицу местного MySQL-сервера.

© 2009, «Деловая неделя», Михаил Гутентог

Share