Двухсторонний обмен 1С с WEB-сайтом

Двухсторонний обмен 1С с WEB-сайтом. Вариант решения

Двухсторонний обмен 1С с WEB-сайтом. Вариант решения

В 1С пишется следующая процедура:

Процедура 1с_обмен_с_WEB () //отдает файл на сайт и забирает ответ
СтруктураАдреса= ЭлектронныеДокументы.РазобратьАдрес("http://< example.ru>/index.php");
ОбменПорт = СтруктураАдреса.HTTPПорт;
ОбменСервер = СтруктураАдреса.HTTPСервер;
РесурсСервера = "/" + СтруктураАдреса.HTTPАдресСкрипта;

ИмяФайла = "C:in.xml";

ОбъектXML = Новый ЗаписьXML;
ОбъектXML.ОткрытьФайл(ИмяФайла, "UTF-8");
ОбъектXML.ЗаписатьОбъявлениеXML();

ОбъектXML.ЗаписатьБезОбработки("");
ОбъектXML.Закрыть();

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "text/xml; charset=utf-8");

HTTP = Новый HTTPСоединение(ОбменСервер);

ИмяПолученногоФайла = "C:out.txt";
Попытка
HTTP.ОтправитьДляОбработки(ИмяФайла, РесурсСервера, ИмяПолученногоФайла, ЗаголовокHTTP);
Сообщить( "ok" + ИмяФайла + " " + ИмяПолученногоФайла);
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецПроцедуры

Сайт со своей стороны складывает XML на сайт. 1С периодически забирает файлы и разбирает их.

Есть ли другие варианты общения?

10 Comments

  1. CheBurator

    есть… сайт лег — все стоит… а работать надо

    соответсвенно нужны резервные каналы: фтп (веб лежит, а фтп — пашет)

    мыло, опять же как резервный канал — но это по приоритету — самый нижний уровень…

    Reply
  2. Душелов

    Веб-сервисы помогут отцу русской демократии.

    Reply
  3. aselez

    У нас используется может не совсем правильный вариант, но вполне рабочий. В конфигурации (УПП 1.2, платформа 8.1) реализован регистр сведений Лог изменений и обработчик событий при записи необходимых объектов конфигурации. При записи объекта делается запись в регистр сведений — Ссылка, НомерЗаписи (Для ограничения пакетной выгрузки ), ИдОбъекта (для обработки удаленных обхектов). На сайте открыт прямой доступ к порту 3306 MySQL на конкретный IPшник (согласен реализация не очень безопасная, но впринципе есть другие варианты реализации например VPN с аппаратным ключом). На регламентных задачах (у нас раз в 3 минуты) висит процедура опрашивающая лог и собирающая пакет из лога для выгрузки на MySQL сайта. Размер элементов пакета задаем в настройке выгрузки. Запросом собираем необходимые объекты из лога и автоматически генерируем текст запроса на DELETE, UPDATE, REPLACE для MySQL сайта. Выполнение запросов реализуем через ADODB, ODBC драйвер. По замеру — пакет из 8000 элементов (более 30 полей в элементе различной степени тяжести — длинные строки, БЛОБ поля) выгружается примерно за 5-7 минут, что вполне нас устраивает т.к. у нас средний размер регистрируемого пакета составляет не более 100 объектов за 3 минуты работы системы и выгружается из 1С/загружается на сайт такой пакет за 10 секунд. Данная реализация позволяет не терять данные при изменении пакета и при восстановлении связи достаточно оперативно выгружать туда накопленное. Впринципе возможно для 8.1 вместо регистра сведений использовать дополнительный план обмена (т.к. там можно строить запросы по таблицам изменений), на оптимальность работы не проверял. Прошу сильно не пинать это всего лишь один из вариантов реализации.

    Reply
  4. aselez

    И еще совсем забыл, с сайта мы загружаем только ограниченное количество информации и опрашиваем изменения в БД MySQL при выгрузке изменений из 1С (в БД MySQL так же есть таблица изменений в которую попадают записи с триггера на INSERT), с интерфейса сайта мы ничего не удаляем.

    Reply
  5. dimakez

    А Веб-сервисы то чего не стали делать? Они и предназначены для таких целей, и лучше них пока ничего не придумано, 1С 8.2 разве что.

    Reply
  6. elena777

    Спасибо за комм, всегда интересно как другие работают.

    Посмотрев поближе WS и XDTO, поняла живых примеров нет, комментарии попробовших не радуют.

    Реальные разработки только через хмл или ODBC.

    хмл у меня уже шустенько летает:

    Из 1с генерирую запросы (по регламенту) МySql типа:

    ОбъектXML.ЗаписатьСекциюCDATA(INSERT INTO …) Values ();



    HTTP.ОтправитьДляОбработки(ИмяФайла1, РесурсСервера, ИмяФайла2, ЗаголовокHTTP);

    ODBC теор. понятно, практически нужны определенные условия протестировать.

    Reply
  7. Душелов

    (6) Как вариант http://www.infostart.ru/projects/2151/

    Reply
  8. elena777

    Смотрела, как один из первых вариантов. Ведь «»1С’ники как правило не сильны в web программировании».

    Работающие со мной WEB програмисты долго смеялись над предложенными скриптами.

    И оно ведь не работает.

    Reply
  9. d.snissarenko

    http://infostart.ru/profile/1173/blogs/634/

    вот но это с учетом того что мускул в одной сети — ну или нужно не плохой канал иметь до сервера с открытым портом — если odbc

    Reply
  10. makaken

    Можно просто написать вызов 1С в WebService т.е. сервис будет дергать 1С общаться с ней, а http-server будет общаться с сервисом.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *