Деловая неделя

Для синхронизации баз данных вашего компьютера Windows с интернет-сайтом нужен MySQL-сервер и MyODBC коннектор.

ЕЖЕНЕДЕЛЬНАЯ РЕКЛАМНАЯ ГАЗЕТА ДЛЯ ПРЕДПРИЯТИЙ «Деловая неделя» (Иркутск)

Автоматизация офиса 2

Связь 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 наиболее распространённый):

Посмотреть, как работает этот код, можно с помощью следующей формы:

Выполнить запрос sql

Слово "скамейки" можно заменить на какое-то другое, и PHP-скрипт будет искать в БД MySQL товары, содержащие в наименовании именно это "слово" (точнее, последовательность букв).

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

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

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

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

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

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

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

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

2. Будем считать, что версия вашего MySQL начинается на цифры 5.0, тогда файл настройки по умолчанию находится по адресу: C:\Program Files\MySQL\MySQL Server 5.0\my.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:\Apache\Apache2\conf\httpd.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, «Деловая неделя», Михаил Гутентог

Читать все комментарии (35)

5. поп

Можно ли сделать подбор программ самим и выставить их с русскими инструкциями на своём сайте или ссылки, которые будут периодически проверяться, а инструкции у себя, а так же на инфодиске?

18.03.2009 12:13:35

7. D.M., admin

Да, это можно. Только на сайте http://infodisk.info/ – там места больше.

20.03.2009 01:27:47

18. Василий

Вообще, когда читаешь такое, посещает мысль, а ведь это ж так просто, ну почему я это не смог придумать Респект :)

10.04.2009 08:51:44

27. кaпитaн

Любопытно. Некоторые моменты не знал.

24.04.2009 00:42:54

28. Яков Карпин

Вообще, когда читаешь такое, посещает мысль, а ведь это ж так просто, ну почему я это не смог придумать Респект :)

21.05.2009 15:50:38

29. Тарас

А это Вы написали на основе личного опыта?

28.05.2009 02:44:32

34. Леонтий

Прикольную тему для вордпресса поставили. Сами дизайнили или стандартную какую брали? :)

30.05.2009 23:36:15

35. D.M., admin

Леонтий, я не знаю, что такое «вордпресс». Этот сайт дизайнило Дизайн-бюро «Модерн»

31.05.2009 03:37:57

38. Яков Карпин

Вполне возможно. Иногда так действительно случается.

03.06.2009 00:31:52

39. PsyMonk

Жесть просто:) Хорошая статья и картинка в тему, молодцом:)

16.06.2009 22:17:36

40. D.M., admin

Гм... PsyMonk, единственная картинка, которую я вижу в статье, – логотип «Деловой недели». Его автор – Валерий Прокушев.

17.06.2009 23:29:40

41. XSatiram

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

22.06.2009 03:44:27

42. BoлкBepнyлcя

Да, похоже что в действительности – так оно и есть. P.S. Сайт, кстати, у вас прикольно сверстан :)

25.06.2009 09:36:49

161. BoлкBepнyлcя

Да, похоже что в действительности – так оно и есть. P.S. Сайт, кстати, у вас прикольно сверстан :)

25.06.2009 09:36:49

43. Валентин Родионов

Спасибо. Давно такое искал :)

25.06.2009 17:10:51

44. цыпoчкa

Прикольно! Только не могу понять насколько часто обновляется блог? :)

27.06.2009 20:05:09

176. цыпoчкa

Прикольно! Только не могу понять насколько часто обновляется блог? :)

27.06.2009 20:05:09

45. D.M., admin

Цыпочка, зачем те это? Он обновляется по системе благородных зигзагов летучей мыши. Открой статью, щёлкни правой кнопкой, выбери "Информация о странице" – там будет, например, "23 июня 2009 года". Только сначала установи Firefox.

27.06.2009 23:13:33

54. Семен

Все-таки действительно нравится мне Ваш блог. Всегда занятно читать, включая и эту тему. :)

03.07.2009 00:32:27

202. Семен

Все-таки действительно нравится мне Ваш блог. Всегда занятно читать, включая и эту тему. :)

03.07.2009 00:32:27

59. Legioner

Приятно понимать, что остались действительно интересные блоги в этой мусорке рейтинга Яши. Ваш – один из таких. Спасибо!

04.07.2009 06:19:17

60. Админ

Legioner, если б я считал рейтинг ЯШИ мусоркой, Вы бы не увидели моих страниц :-). Я ж таки маленько продвигал свой сайт.

04.07.2009 07:13:50

62. БECCTЫДHИK

Не совсем в тему, но вопрос такой возник автору. А почему вы именно wordpress выбрали для своего блога. Я вот ваш блог постоянно читаю :)

04.07.2009 19:24:02

63. D.M., admin

БECCTЫДHИK, я не знаю, что такое wordpress. Может, это что-то неприличное? Гм, на всякий случай включу это слово в стоп-список.

04.07.2009 21:25:14

64. Winner

В общем-то согласен :) Для меня это точно очень актуально :)

10.07.2009 02:05:29

66. Максим

В сообщении конечно много чего упрощено, в отличии от реалий... :)

10.07.2009 04:58:25

71. nensobced

Надеюсь, остальные записи окажутся такими же интересными

14.07.2009 14:42:46

72. Арсений

Хотя еще полностью непонятно, что там такое происходит, но точно могу сказать, что не в лучшую сторону!

15.07.2009 05:42:38

73. pacleuttecy

У вас RSS в кривой кодировке!

15.07.2009 12:56:41

74. D.M., admin

pacleuttecy, да и на....ть!

15.07.2009 23:20:26

284. Ростислав

Скажите, а можно ли взять новости с вашего блога? Со ссылкой на первоисточник естественно. :)

30.07.2009 11:05:42

75. Ростислав

Скажите, а можно ли взять новости с вашего блога? Со ссылкой на первоисточник естественно. :)

30.07.2009 11:05:42

287. D.M., admin

Ростислав, естественно, можно.

04.08.2009 02:47:23

76. D.M., admin

Ростислав, естественно, можно.

04.08.2009 02:47:23

Добавить комментарий:

*Автор:
E-Mail:
*Текст: