обмен данными с 1C кто-нить делал?

InventOR^ULG

Новичок
обмен данными с 1C кто-нить делал?

у кого есть опыт написания магазинов обменивающихся данными с 1С. что посоветуете чтобы на грабли меньше наступать? может примеры есть?
 

KOTEHOK

Guest
работаецца просто.
Есть 1С, и есть MSSQL сервер (допустим там же где 1С - внутри сети за firewall) и есть наруже линукс вебсервер.
На линуксе - апач, пхп и FreeTDS (freetds.org) именно она и отвечает за связь php-mssql
Вот и все. Ваяй все что хочешь.
 

Alexandre

PHPПенсионер
Есть 1С, и есть MSSQL сервер (допустим там же где 1С - внутри сети за firewall) и есть наруже линукс вебсервер.
На линуксе - апач, пхп и FreeTDS (freetds.org) именно она и отвечает за связь php-mssql
Вот и все. Ваяй все что хочешь.
этого вполне достаточно в чем проблема
 

Alexandre

PHPПенсионер
Обмен данными WEB сервера и 1С можно построить двумя способами:
1) Режим реального отображения информации (реального времени):
Клиент -> WEB сервер -> 1С -> WEB сервер -> Клиент

2) псевдо реального времени, делится на этап подготовки данных и непосредственно диалог с клиентом
т.е. по событию осуществляется заполнение БД WEB (а)
а) 1С -> БД WEB
б) Клиент -> WEB сервер -> Клиент (непосредственный WEB диалог)

Основной недостаток первого пути (реального времени)
- долго отрабатывает модуль 1С (более 15 сек), что вообще недопустимо в интерактиве
- сложность реальзации (задействованы разные стили программирования....)
Учитывая первый недостаток, останавливаться на этом методе не будем, но если необходимо дать пояснения как из пользовательской программы вызвать 1С - то в я кратце я могу дать кой какую информацию. хотя это тупиковый путь
 

Alexandre

PHPПенсионер
ВАРИАНТ ДВА
1) как упоминалось делиться на два этапа:
предварительная подготовка данных для WEB публикации
и непосредственно сам WEB интерактив (далее расматриваться не будет).

Первое. пишется модуль выгрузки данных из 1С (на 1С скрипте или как его можно назвать....).
Данный модуль запускается по одному из событий (все зависит от фантазии автора или потребности разработчика):
- нажатие специальной кнопки
- запуска какого-нибудь модуля, который формирует (изменяет) данные (журналы, справочники и пр...)
пример расчет остатков на складе, изменение цен в прайсе, выставление нового счета
- по времени, например раз в сутки или при загрузки 1С

2. Реализация первого. Вот это самое интерестное, судя по постановки вопроса WEB сервер и сервер(я его условно так назову) 1С стоят в одной сетке.
тут в этом вопросе должны помочь сетевики, т.к. я не знаю конфигурации сетки, да и признаться в этих вопросах слабоват.
Короче - все зависит от конфигурации сети и построения системы защиты информации.
Если между WEB сервером и 1С нет шлюза или, как правило сам шлюз выполняет функцию WEB сервера (или наоборот), то проблем меньше...
В этом случае пишется 1С скрипт выгрузки данных из 1С и загрузки на WEB. Для этого БД WEB сервера (MySQL или PostgreSQL) должны быть отконфигурированны для удаленного доступа с конкретного IP и соответственно на шлюзе открыты необходимые порты.

Как правило, в тех системах, где более менее беспокоются о безопастности - установлены шлюзы (маршрутизаторы), все порты закрыты, доступ к БД настроен только на localhost и пр...
есть второй вариант.
 

Alexandre

PHPПенсионер
3. выгрузить данные из 1С и подготовить промежуточные данные, которые будут переданы на WEB сервер по протоколам FTP, SMTP или HTTP (эти-то порты всегда открыты).
На стороне WEB сервера пишется скрипт, который осуществляет аплоад и заносит данные в БД WEB сервера.

об этом более подробно и это наверно самое интерестное....
лично я использую HTTP и обработка на PHP проще, хотя вариант с FTP загрузкой тоже неплохой...(тогда еще необходимо поддерживать FTP сервер...)
можно использовать SMTP....

данные для передачи можно готовить в любом формате, но я использую XML (хотя можно передовать и в DBF или CSV,который хорошо понимает MySQL ) кто с чем боле работал и как нравиться так и реализовть
но, xml - структурирован, легче для отладки, не надо делать лишних (промежуточных) записей на диск, как в случае с DBF да и есть уже набор соответствующих утилит и парсеров...

3. Используя xml, я сразу убиваю двух зайцев - не беспокоюсь о передачи данных на сторону сервера....и подготовки данных....
Майкросовтовский парсер msxml.dll (несмотря на то что его многие ругают за медленность) имеет все необходимое для этого.
В нем содержатся два объекта( класса): XMLDOMDocument и XMLHttpRequest Первый отвечает за создание и разбор XML-документа, второй за его передачу на сервер.
т.е. я не имею головной боли - как сформированный мною документ (файл) передать на сервер.

Теперь о медленности. во первых перекачка данных из 1С на сервер не имеет критического времени, т.к. осуществляется работа в оффлайне...
второе практика работы с прайсом показала, что если в документе более чем 400 позиций, то его надо разбивать на разделы, подразделы и передовать частями...
Документы более 1К лечше разбивать на составные части....

На стороне сервера я использую SAX, мне этого хватает, т.к. я стараюсь не строить сложных документов. Но если придерживаться стандартов 1С, то тогда придется использовать DOM.Просто DOM библиотеки не доконца еще отлаженя и есть на серваке не у всех хостеров... Но если свой сервак, то конечно лучше использовать DOM

Кстати не советую использовать то, что формирует 1С в xml для передачи на сервер. Очень тяжело отлаживаться... Да и не все парсеры поймут русские буквы... да я и не нашел способа заставить 1С отправить все это по HTTP. хотя попытка-не-пытка любимые слова Лаврентий Палыча.

Ну пока все.... хотя это только вершина айсберга....
 

KOTEHOK

Guest
я блин на его вопрос о реализацаа ответил описанием схемы работы...
 

akabata

Guest
Alexandre
Как съевшего собаку и 1С, хочу спросить: как Вы делали саму передачу данных из 1С?
Мы сейчас передаем строку (по POST), Content-Type: application/x-www-form-urlencoded , и все работает жутко медленно. В смысле 1С очень долго формирует данные, причем львиная доля времени уходит на urlencode.
Посоветуйте, плиз, как передавать строку без url-кодирования?
 

Long

Новичок
akabata, собака у меня может быть была и поменьше, но на сколько я понимаю, нет никаких трудностей запускать из 1С внешнее приложение. в данном случае ftp.exe.
 

Alexandre

PHPПенсионер
как Вы делали саму передачу данных из 1С?
я делал черех XML
как это долго работает, оценку не проводил
Но собака зарыта в тормозах самой 1С

1) передача данных по ПОСТ у меня через класс xmlhttp
2) XML формирует (msxml.dll)? но если хотите быстрее, то данные проще формировать вручную, тогда ПОСТить компонентой 1С

формируются данные приблизительно так:

PHP:
строка="<?xml version=""1.0""><root>";
пока (....){
строка = "<itemPrice><price>"+Справочник.Цены("цена")+"</price><descr> "Справочник.Цены("товар")+"</descr><code>"+Справочник.Цены("код")+"</code></itemPrice>";
}
строка = строка+"</root>";
Далее идет постинг на сайт. Как показывает опыт - все тормоза в цикле ПОКА();
akabata каков объем данных (сколько строк БД и каков объем поста)?

Парсинг на стороне WEB сервера используется SAX

если есть вопросы - готов ответить,
чуть позже покажу живые примеры

PS - в синтаксисе могут быть ошибки
заранее извиняюсь
если кто незнаком - это знаменитый синтаксис 1С

-~{}~ 22.07.04 17:49:

Longкстати ты прав, один из вариантов - часть данных экспортирцуешь из 1С в нормальный формат, а дальше запускаешь внешнее приложение, которое будет постить (или закачивать по фтипи) данные на сайт.
и ни каких тормозов со стороны 1С
 

_RVK_

Новичок
Alexandre а почему SAX? XML прежде всего это дерево, а древовидная структура проще обрабатывается DOM. Лично я сейчас тоже делаю обмен с 1C, и рекомендвал программру клеента передавать данные в виде:
PHP:
<?xml version=""1.0"">
<root>
   <item name="Имя" desc="Описание">
       <item name="Имя" desc="Описание">
          <item name="Имя" desc="Описание">
             <prices>
                 <price name="Оптовая" val="10">
                 <price name="Розничная" val="20">
                 <price name="Для своих" val="15">
            </prices>
          </item>
       </item>
  </item>
</root>
Потом дерево легко парсится DOM.
Для хранения Nested Sets.

Не наступаю ли я на какие нибудь грабли?
 

RoLex

Новичок
подниму тему...
большого опыта в вопросе нет, но может пригодится кому информация, нарыл в инете:
http://infostart.ru/public/60330/

http://forum.mista.ru/topic.php?id=4714

если кто еще будет искать инфу, можно по запросам:
1С WinHttp.WinHttpRequest
1С V7HttpReader

PS. может тему лучше перенеси в "теорию..."?
 

Ирокез

бессмертный пони
Команда форума
Партнер клуба
Удивляюсь я народу нашему,

1С -> ODBC коннектор с любой базой данных -> из самого 1C делаем SELECT-ы, UPDATE-ы, есть вероятность того, что это намного быстрее работает.
 
Сверху