Доступ к SOAP веб-сервисам 1С из JavaScript и Html

Описанный метод позволяет обратиться к веб-сервисам 1С из html-страницы через JavaScript. В качестве примера выводится список справочников. При нажатии на любой справочник выводятся первые буквы наименований. При нажатии на букву выводятся данные с наименованиями, начинающимися на эту букву.

Описанный метод позволяет обратиться к веб-сервисам 1С из html-страницы через JavaScript. В качестве примера выводится список справочников. При нажатии на любой справочник выводятся первые буквы наименований. При нажатии на букву выводятся данные с наименованиями, начинающимися на эту букву.

Способ применим для случаев, когда веб-сервис и html-страница опубликованы на одном сервере. В этом случае не возникает кросс-доменных проблем. Например, если домены будут отличаться, то Chrome выдаст ошибку:

Failed to load resource: Origin http://localhost:3299 is not allowed by Access-Control-Allow-Origin

Не вдаваясь в подробности публикации веб-сервисов, предположим, что на стороне 1С создан и опубликован веб-сервис catalogs с операцией Execute. На входе — параметр script типа string, на выходе тип string. Операция запускает на стороне произвольный код script из параметра и возвращает JSON-сериализацию от переменной result.

Функция ExecuteCommands(script)
    result = null;
    Execute(script);
    return JSON(result);
КонецФункции

С JSON-сериализацией удобно работать средствами JavaScript и преобразовать строку в объект/массив одной командой eval(resultText). В Интернете можно найти несколько JSON-сериализаторов для 1С.

Удостоверимся, что веб-сервис отвечает, введя его адрес:

Отклик веб-сервиса

[more]

Проект Html-файла лучше начать с готового шаблона, где прописаны стили на все случаи браузеров. Весьма достойный шаблон находится по адресу http://html5boilerplate.com/ В шаблон включен jQuery 1.9.1.

На форме сверху разместим элементы настройки веб-сервера: wsUrl — адрес веб-сервиса, wsUser — логин, wsPassword — пароль. На стороне веб-сервиса 1С включена basic autherization. Логин и пароль соответствуют пользователю, прописанному в 1С.

Левая панель отвечает за отображение доступных справочников catalogsList, правая — за отображение букв (letters) и данных (catalogRecords).

JavaScript

Функция обращения к SOAP веб-сервису определена следующим образом:

function executeSoap(script, successHandler) {
    var wsUrl = $("#wsUrl").val();

    var soapRequest =
    '' +
    '<soapenv:Envelope ' +
    'xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ' +
    'xmlns:api="http://www.1cbit.ru/dominicana/soap-html-js" ' +
    'xmlns:xsd="http://www.w3.org/2001/XMLSchema" ' +
    'xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">' +
    '' +
    '' +
    '     '' +
    '' +
    '';

    $.ajax({
    type: "POST",
    url: wsUrl,
    contentType: "text/xml",
    dataType: "xml",
    username: $("#wsUser").val(),
    password: $("#wsPassword").val(),
    data: soapRequest,
    success: successHandler,
    error: processError
    });
}

На входе в executeSoap подается скрипт 1С, который выполняется на стороне 1С, и обработчик для удачного исполнения. В случае ошибки вызовется обработчик processError, который выведет сообщение об ошибке.

Код 1С записан в html-коде через script-тэг. Получить текст каждого куска кода для выполнения можно через jQuery $(«#enumerate1CCatalogs»).text().

Получение списка наименований каталогов.


// result = Новый Массив();
Для Каждого СправочникИзМетаданных Из Метаданные.Справочники Цикл
    структура = Новый Структура("name, synonym");
    структура.name = СправочникИзМетаданных.Имя;
    структура.synonym = СправочникИзМетаданных.Синоним;
    result.Добавить(структура);
КонецЦикла;
// ]]>

Получение первых букв наименований справочника {catalog}


// запрос = Новый Запрос();
запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ Подстрока(Наименование, 0, 1) КАК letter ИЗ Справочник.{catalog}
УПОРЯДОЧИТЬ ПО Подстрока(Наименование, 0, 1)";
result = запрос.Выполнить().Выгрузить();
// ]]>

Получение данных для каталога {catalog}, где первая буква входит в условие {condition}.


// запрос = Новый Запрос();
запрос.Текст = "ВЫБРАТЬ Ссылка as ref, Наименование as name ИЗ Справочник.{catalog}
ГДЕ Подстрока(Наименование, 0, 1) В ({condition})";
result = запрос.Выполнить().Выгрузить();
// ]]>

При нажатии на кнопку Обновить происходит вызов функции

executeSoap($("#enumerate1CCatalogs").text(), processSuccess);

и при успешном выполнении вызывается обработчик processSuccess

function processSuccess(data, status, req) {

    var resultText = $(req.responseText).find("m\:return").html();
    result = eval(resultText);

    $("#catalogRecords").empty();

    catalogsList = $("#catalogsList");
    catalogsList.empty();

    $(result).each(function (index, item) {
        var li = '

  • ' + item.synonym + '

';
        catalogsList.append(
            $(li).addClass("catalogTitle")
        );
    });
}

 

Веб-сервис возвращает xml, где значимым является содержимое m:return-тэга — JSON-сериализация. Перевести его в объекты JavaScript можно через eval-вызов. Обработчик очищает перечень справочников и заново его формирует через li-тэги с атрибутом catalog. Каждому элементу устанавливается класс catalogTitle.

Веб-сервис возвращает xml, где значимым является содержимое m:return-тэга — JSON-сериализация. Перевести его в объекты JavaScript можно через eval-вызов. Обработчик очищает перечень справочников и заново его формирует через li-тэги с атрибутом catalog. Каждому элементу устанавливается класс catalogTitle.

Аналогично обрабатываются нажатия на все управляющие элементы. Нажатие на справочник очищает буквы и данные, перезаполняет буквы. Нажатие на букву перезаполняет данные из справочника. За обработку кода на 1С отвечают куски кода в script-блоках с типом «text/1c».

Приложение выглядит так:

Внешний вид примера

Нерешенная проблема авторизации на браузере IE

Существует проблема авторизации на IE. На IE 8/9 не удалось решить проблему basic authorization аналогичным для остальных браузеров методом.

Ошибка при доступе через Internet Explorer

На IE Ajax не работает с использованием user/password — свойств $.ajax. На FF и Chrome все работает нормально. По какой-то причине на сервер в случае с IE не передается заголовок

Authorization: Basic 0JHQsNGF0YjQuNC10LLQn9CYICjRgNGD0LrQvtCy0L7QtNC40YLQtdC70YwpOg==

Если кто-нибудь знает причину и как обойти, пожалуйста, напишите в комментариях.

Выводы

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

Разработчики в этом способе самостоятельно отвечают за безопасность. Необходимо проверять входные параметры при записи, не позволять запуск произвольных скриптов, переданных с клиента. В статье выполнение произвольного кода показано только для примера. Унифицировать можно выполнение произвольного запроса, но это связано с опасностью SQL-инъекций.

Внешние компоненты Native API от 1С не будут работать в данной среде. Это значит, что нужно дополнительно решать проблему с написанием драйверов для оборудования.

//
//

52 Comments

  1. Asmody

    часть кода после

    var soapRequest =

    парсер пожрал?

    Reply
  2. detro

    Есть ли оценки производительности 1С при выдаче результатов по SOAP, какая возможная интенсивность работы ?

    Reply
  3. Elisy

    (1) Asmody,

    парсер пожрал?

    Да, парсер. В каждой статье что-нибудь съедает. Как побороть не придумал еще.

    function executeSoap(script, successHandler) {
    var wsUrl = $(«#wsUrl»).val();
    
    var soapRequest =
    ‘<?xml version=»1.0″ encoding=»utf-8″?>’ +
    ‘<soapenv:Envelope ‘ +
    ‘xmlns:xsi=»http://www.w3.org/2001/XMLSchema-instance» ‘ +
    ‘xmlns:api=»http://www.1cbit.ru/dominicana/soap-html-js» ‘ +
    ‘xmlns:xsd=»http://www.w3.org/2001/XMLSchema» ‘ +
    ‘xmlns:soapenv=»http://schemas.xmlsoap.org/soap/envelope/»>’ +
    ‘<soapenv:Body>’ +
    ‘<api:Execute soapenv:encodingStyle=»http://schemas.xmlsoap.org/soap/encoding/»>’ +
    ‘<‘ + ‘script xsi:type=»xsd:string»>’ + script + ‘</’ + ‘script>’ +
    ‘</api:Execute>’ +
    ‘</soapenv:Body>’ +
    ‘</soapenv:Envelope>’;
    
    $.ajax({
    type: «POST»,
    url: wsUrl,
    contentType: «text/xml»,
    dataType: «xml»,
    username: $(«#wsUser»).val(),
    password: $(«#wsPassword»).val(),
    data: soapRequest,
    success: successHandler,
    error: processError
    });
    }

    Показать

    Reply
  4. sikuda

    username: ,

    password: , в IE не работают на русском(Пришлось делать пользователей на английском). Причина и решение самому интересна.

    Reply
  5. AllexSoft

    По моему опыту все гораздо веселее работает на PHP5… не люблю я JS ( за статью плюс!

    Reply
  6. kuntashov

    (3)

    Как побороть не придумал еще.

    В статью вставляйте картинкой, а для тех, кому нужен исходник — давайте ссылку на сниппет, который можно разместить либо на http://gist.github.com либо на http://pastebin.com

    Reply
  7. Johny_v
    Если кто-нибудь знает причину и как обойти, пожалуйста, напишите в комментариях.

    Сделай простенький модуль на PHP, который будет обращаться к веб-сервису 1С и возвращать XML или JSON.

    AJAX-ом будешь обращаться к этому модулю. Тогда не должно быть проблем с авторизацией.

    Был где-то пример. Могу поискать, если надо.

    Reply
  8. Elisy

    (4) sikuda,

    username: ,

    password: , в IE не работают на русском(Пришлось делать пользователей на английском). Причина и решение самому интересна.

    Спасибо. Интересная версия. Хотя бы намек появился на причину. На другом ресурсе

    http://www.richmedia.us/post/2013/06/25/soap-1c-jscript-html.aspx

    в комментарии предложили переписать Authorization-заголовок

    Reply
  9. opx

    Soap это такой же http запрос, переданный в виде xml и полученный ответ тоже в xml.

    По мне удобнее работать с soap запросами через xmlhttp = Новый COMОбъект(«Msxml2.XMLHTTP»);

    Кстати и с авторизацией можно попробовать через xmlhttp.setRequestHeader(«Authorization»,»Basic dXNlcm5hbWU6cGFzc3dvcmQ=»);

    Reply
  10. Трактор

    Параметры авторизации можно прописать в файле default.vrd, в строке с путём к информационнойй базе ib. Работает не на всех релизах 1С, но на последних должно работать. Так мы получим анонимный сервис.

    Reply
  11. Elisy

    (7) Johny_v,

    Сделай простенький модуль на PHP, который будет обращаться к веб-сервису 1С и возвращать XML или JSON.

    AJAX-ом будешь обращаться к этому модулю. Тогда не должно быть проблем с авторизацией.

    Был где-то пример. Могу поискать, если надо.

    Хотелось бы обойтись без посредников. Модуль PHP тянет за собой PHP и настройку сервера. В сложных задачах, вероятно, не удастся обойтись без Asp.Net/PHP, а на простых, думаю, можно обойтись средствами клиента.

    Reply
  12. sashocq

    У меня одного возникают сомнения в практической ценности данного материала?

    Reply
  13. AllexSoft

    Elisy, просьба, ну то же самое только с прицелом на PHP, было бы гораздо полезнее… почему имено JS ?

    Reply
  14. Elisy

    (10) Трактор,

    Параметры авторизации можно прописать в файле default.vrd, в строке с путём к информационнойй базе ib. Работает не на всех релизах 1С, но на последних должно работать. Так мы получим анонимный сервис.

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

    Reply
  15. Johny_v

    В случае использования связки PHP + JS вы получите более безопасный метод обращения к веб-сервису.

    Пользователь вообще не сможет узнать что используется веб-сервис 1С, тем более адреса сервера и данные авторизации.

    Reply
  16. s_vidyakin

    когда я работал с веб-сервисами 1С из РНР, возникла проблема преобразования сложных вложенных структур XDTO в объекты РНР. Может в эту сторону подумать?

    Reply
  17. AllexSoft

    (15) Johny_v, (16) badboychik, помоему автор игнорирует все вопросы о Web-сервисы + PHP ((

    Reply
  18. Трактор

    (16) (17) В качестве примера можно 1С+php рассматривать эту разработку http://infostart.ru/public/59207/ Если сподоблюсь сделаю пример попроще.

    Reply
  19. Elisy

    (12) sashocq,

    У меня одного возникают сомнения в практической ценности данного материала?

    Мы на определенном этапе столкнулись с ограничениями управляемых форм. Ведут они себя непредсказуемо, занимают много лишнего места. Адекватная замена — это html. Именно поэтому html было уделено много внимания. Подходы использования html могут быть различными: встраивание html в УФ на стороне 1С, встраивание веб-клиента 1С в свой Frame и создание своих страниц с доступом по soap. Все эти варианты были рассмотрены в предыдущих и этой публикациях. Насколько применимы, судить нужно в каждом конкретном случае.

    Reply
  20. Johny_v

    (17) AllexSoft,

    Нет, он вроде объяснил что хочется обойтись без PHP. Может в его случае это как-то оправданно.

    Reply
  21. AllexSoft

    (20) Johny_v, ну если это считать объяснением…

    В сложных задачах, вероятно, не удастся обойтись без Asp.Net/PHP, а на простых, думаю, можно обойтись средствами клиента

    Хм, а проект расчитан для ларьков? Насколько я понял подобная модульная система (с веб мордой) будет охватывать всю деятельность предприятия, тогда зачем говорить о простых задачах и наивно полагать что хватит JS ?)

    Reply
  22. Elisy

    (13) AllexSoft,

    Elisy, просьба, ну то же самое только с прицелом на PHP, было бы гораздо полезнее… почему имено JS ?

    Я работал в рамках поставленной задачи. Здесь делюсь результатами исследований. PHP не входил в поставленную задачу. Да и статьи на тему PHP + 1C были: в (18) пример одной из них.

    Лично я не сторонник веб-сервисов вообще, а сторонник альтернативного подхода, где работа ведется по веб-протоколу 1С. Связано это с тем, что веб-сервисы пока не доступны в облаках, а их реализация не является универсальной.

    Reply
  23. AllexSoft
    веб-сервисы пока не доступны в облаках

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

    ПС: а в чем их не универсальность в данной реализации ?

    Reply
  24. zqzq

    (19)

    Мы на определенном этапе столкнулись с ограничениями управляемых форм. Ведут они себя непредсказуемо, занимают много лишнего места. Адекватная замена — это html.

    Такое впечатление, что у вас там веб-программисты собрались, неосилившие управляемые формы. Пока что недоказанное утверждение, попробуйте статью на эту тему написать с примерами и посмотрите на реакцию сообщества.

    Управляемые формы «из коробки» очень много функционала реализуют при минимальных усилиях разработчика.

    Reply
  25. YOr!k

    (24) Странные у вас выводы 🙂

    Наоборот, собравшиеся люди много работали с управляемыми формами, поэтому прекрасно знакомы с их ограничениями — статью здесь писать не о чем, любой профессиональный разработчик, проработавший с упр. формами более 2х месяцев прекрасно знает все эти ограничения. И то что «управляемые» формы во многих аспектах фактически не управляемы также неоспоримый факт (размеры формы и элементов, цвет фона, расстояние между элементами, шрифты заголовков, управление стандартными панелями навигации, отсутствие многих элементов управления и прочее, и прочее…)

    Во многом (но далеко не всегда) эти ограничения обоснованы тем, что

    управляемые формы «из коробки» очень много функционала реализуют при минимальных усилиях разработчика.

    Но позиция нашей команды — это бережное отношение к пользователю и уделение большого внимания к интерфейсу и юзабилити, и здесь решений «из коробки» часто не хватает.

    Reply
  26. Elisy

    (16) badboychik,

    когда я работал с веб-сервисами 1С из РНР, возникла проблема преобразования сложных вложенных структур XDTO в объекты РНР. Может в эту сторону подумать?

    Я перспективней вижу технологию 1С Business Connector. После Проекта Доминикана вернусь к той теме.

    Reply
  27. Elisy

    (17) AllexSoft,

    (15) Johny_v, (16) badboychik, помоему автор игнорирует все вопросы о Web-сервисы + PHP ((

    Стараюсь отвечать на вопросы по мере возможности. Но про PHP мне нечего сказать. Во-первых к данной теме не относится, а во вторых — я разбираюсь в Asp.Net, а не в PHP. По PHP вам лучше найти кого-то другого.

    Reply
  28. Elisy

    (21) AllexSoft,

    Хм, а проект расчитан для ларьков? Насколько я понял подобная модульная система (с веб мордой) будет охватывать всю деятельность предприятия, тогда зачем говорить о простых задачах и наивно полагать что хватит JS ?)

    Вы что-то совсем ниже плинтуса опустили JS. JS + HTML5 + jQuery(UI) даст фору управляемым формам, потому что формат открытый, стандартизованный и поддерживаемый во всем мире. Там уж точно нет багов, которых уже насчитали штук 10 в новом Такси. Контролов раз в 100 больше от разных производителей и они гибкие и настраиваемые под любые задачи. Не то, что набор из Поле-Таблица-Декорация. 1С пошла по пути Microsoft, которая выпустила лет 10 назад XAML и ее реализацию для web XBAP (до нее WebForms). Потом одумались XAML оставили для десктопа, а для веба создали Asp.Net MVC + jQuery.

    Reply
  29. Elisy

    (23) AllexSoft,

    ПС: а в чем их не универсальность в данной реализации ?

    Не совсем понял, в какой реализации?

    Reply
  30. AllexSoft

    (29)

    Связано это с тем, что веб-сервисы пока не доступны в облаках, а их реализация не является универсальной.

    Вот я про это, в чем не универсальность веб сервисов платформы?

    Reply
  31. Elisy

    (24) zqzq,

    Такое впечатление, что у вас там веб-программисты собрались, неосилившие управляемые формы. Пока что недоказанное утверждение, попробуйте статью на эту тему написать с примерами и посмотрите на реакцию сообщества.

    Управляемые формы «из коробки» очень много функционала реализуют при минимальных усилиях разработчика.

    Наконец-то появился человек, который разъяснит нам во многих местах странное поведение УФ и откровенные баги Такси, а то на форуме 1С не торопятся комментировать.

    Много функционала УФ — это заявление маркетологов, потому что набор из Группа-Поле-Таблица-Декорация в нормальных фрейморках за функционал не считается. Попробуйте на досуге поиграться с шириной бордюра, поуправлять отображением, растянуть кнопку на всю ширину формы, убрать сплиттер между таблицами. Может, вы подскажете, как подсказку генерить динамически и отображать разную для каждой строки таблицы? А вы в курсе были, что в динамических списках бестолку использовать ПЕРВЫЕ N — конструкцию, потому что динамический список настолько высокоинтеллектуальный, что в расчет ее не берет.

    Reply
  32. AllexSoft

    (29) на (30) ответ дашь?

    Reply
  33. Elisy

    (30)(32)

    Извиняюсь за задержку. Неуниверсальность относится к вопросу №4 публикации 1С в SaaS:

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

    http://habrahabr.ru/qa/31297/

    Судя по ответам, на тот момент не было возможности пользоваться веб-сервисами на популярных 1С SaaS-площадках.

    Можно еще почитать комментарии (начиная с 9го) к

    http://forum.infostart.ru/forum24/topic75705/

    «Веб-сервисы более прогрессивны, но и у них есть свои особенности работы и сложности (настройка, преобразование типов, сложность стандарта, несовместимость). «

    Reply
  34. AllexSoft

    (33) по поводу 1cfresh это проблема конкретной реализации конфигураций, а не платформы… я всетаки говорил про сам обмен через SOAP web-сервисы

    за вторую ссылку спасибо, почитал… согласен про преобразование типов, но никуда не денешься от этого, тут проблемы платформеных типов значений которая она использует

    Reply
  35. Elisy

    (34) AllexSoft,

    Elisy, по поводу 1cfresh это проблема конкретной реализации конфигураций, а не платформы… я всетаки говорил про сам обмен через SOAP web-сервисы

    Меня очень интересует вопрос — есть ли системные проблемы у веб-сервисов на SaaS-серверах 1С, работающих на базах с разделением данных. Не встречались ли статьи на тему особенностей использования веб-сервисов в режиме разделения данных? Какие особенности и узкие места, практика использования?

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

    Reply
  36. AllexSoft

    (35) к сожалению примеров таких систем не знаю, да и статьи искал и не нашел ( самому интересно… если напишите статью о использовании web-сервисов в нестандатных задачах (условиях модульности, условиях разделения данных) то было бы очень интересно.

    А по поводу стоит ли закладывать возможности обмена с сайтами через SOAP то конечно нужно, вот только придумать как ) схемы подключения xsd пользовательских схем, сам обмен данными на подобие обработки универсального обмена и файлов правил…

    Reply
  37. 6есик

    Я обычный XMLHttpRequest использовал, то у меня авторизируется обоими способами.

    Только в IE заметил разницу что при авторизации не через хедеры при неправильных данных не появляется стандартное окно авторизации в браузере.

    И при использовании русских символов либо в пароле либо в пользователе авторизация неработает даже в стандартных окошках авторизации в браузере (пробовал хром,мозилу,експлорер)

    Reply
  38. i.kovtun

    (37) 6есик,

    А в какой кодировке отправляете реквизиты авторизации? Подозреваю 1С UTF-8 ожидает…

    Reply
  39. Elisy

    (38) i.kovtun,

    На странице выставлен meta для utf-8. Хорошо бы было, если бы браузер ее и использовал 🙂

    Reply
  40. 6есик

    (38) i.kovtun,

    Да по разному пробовал уже. И через encodeURIComponent() пробовал авторизационные данные пропускать, но ничего не помогло. Даже надоело пробовать — но если у кого-то получиться то было бы очень интересно увидеть.

    Reply
  41. Vlasenko.Oleg

    По поводу авторизации попробуйте использовать Preemptive Authentication,

    здесь описано как http://hc.apache.org/httpclient-3.x/authentication.html

    Reply
  42. i.kovtun

    (40) 6есик,

    Вот появилась публикация http://infostart.ru/public/201461/, в ней есть информация по поводу авторизации киррилистических логинов. Сам пока до проблемы не добрался.

    Reply
  43. prodines

    А как всё-таки составлять SOAP-запросы из веб-клиента к веб-серверу 1С?

    Reply
  44. AllexSoft

    (43) prodines, точнее проблему озвучьте, в чем сложность то? примеров использования SoapClient на PHP полно, там 3 строки кода.. ну а собственно вызов из вашего клиентского приложения веб сервиса на 1С или на чем то другом одинаков, там все равно ответы в формате XML вам будут приходить. Ну а как парсить ответы это уже другая тема =)

    Reply
  45. Elisy

    (43) Веб-клиент имеется ввиду 1С?

    Reply
  46. prodines

    (44) AllexSoft, (45) Суть проблемы в следующем: есть веб-клиент в виде броузера с загруженным HTML/JavaScript-файлом. Есть Веб-сервер в виде связки 1С:Предприятие и Апач. Задача: обращаться из клиента к серверу и получать некий ответ. Вопрос: какого вида XML-файлы слать из клиента на 1С? Откуда я узнаю их формат, синтаксис?

    При этом, разумеется, такие вещи, как JSON, WSDL, SOAP, jQuery — для меня, программиста 1С, тёмный лес. Кое-как со скрипом я ещё могу осилить JavaScript — хотя это тоже довольно непростой язык программирования, просто я случайно прочитал недавно 5 издание библии флэнагана. Да, ну и XML — вещь понятная, разумеется, т.к. 1С-программист с XML регулярно сталкивается в работе.

    Таким образом, данная статья мне вообще абсолютно непонятна — ни единого слова.

    Reply
  47. Elisy

    (46) Извините, что отвечаю с запозданием. На Инфостарт с определенного момента перестала нотификация об ответах приходить по почте. Очень неудобно стало.

    Суть проблемы в следующем: есть веб-клиент в виде броузера с загруженным HTML/JavaScript-файлом. Есть Веб-сервер в виде связки 1С:Предприятие и Апач. Задача: обращаться из клиента к серверу и получать некий ответ. Вопрос: какого вида XML-файлы слать из клиента на 1С? Откуда я узнаю их формат, синтаксис?

    Думаю, вам нужно решить сначала вопрос с авторизацией.

    Для вашего случая есть несколько подходов: 1) из этой статьи и 2) http-сервисы из мира 1С 8.3. В обоих случаях встанет проблема ввода пользователем логина и пароля. В случае статьи — хранение логина и пароля будет на стороне веб-браузера, в случае с http-сервисов логин и пароль распознает 1С и факт распознавания будет передаваться через куки. 3) подход — http://infostart.ru/public/104926/ может не предполагать авторизации совсем (Требует платный компонент .Net Bridge — встречал аналог через COM-объект).

    Я встречал несколько вариантов передачи данных от сервера к клиенту: JSON и XML. Самый распространненный в веб-мире все-таки JSON, но он очень медленный при формировании средствами 1С.

    По методам:

    1) Поддерживает XML, внутрь ответов можно встраивать JSON. Формат XML фиксированный — определяется 1С стандартом SOAP — сложный для понимания.

    2) Поддерживает XML, JSON — гибче, чем 1й подход. Формат XML и JSON вы определяете на стороне 1С

    3) Поддерживает XML, JSON. Формат XML и JSON вы определяете на стороне 1С

    Reply
  48. prodines

    (47) то ли Вы ничего не ответили на мой вопрос, то ли я не сумел ничего понять. Да поймите же — JSON для меня просто не существует. Примите это как условное допущение. И изучать его я не стану — нет смысла.

    Формат XML и JSON вы определяете на стороне 1С

    Возможно, это является ответом. Тогда это и есть суть моего вопроса — как конкретно это делается — «Формат XML вы определяете на стороне 1С»?

    Reply
  49. AllexSoft

    (48) prodines, думаю у вас еще недостаточно теоретической основы для реализации вашей задачи.

    При этом, разумеется, такие вещи, как JSON, WSDL, SOAP, jQuery — для меня, программиста 1С, тёмный лес.

    И изучать его я не стану — нет смысла.

    ну тогда вы ничего и не сделаете к сожалению ( Нельзя что-то сделать и не понимать что ты делаешь. Копипаст тут не прокатит

    Reply
  50. Elisy

    (48) prodines,

    Про JSON нужно знать, что это альтернатива XML. Это текстовая строка, полученная на выходе какой-то функции 1С. Ее понимает JavaScript. 1С запакует структуру в JSON без вашего участия, JavaScript его поймет и восстановит объект опять без вашего участия.

    Код для получения JSON при беглом поиске можно взять здесь http://infostart.ru/public/61194/

    XML создается стандартными 1С-средствами, например, так — для таблицы значений:

     Запись = Новый ЗаписьXML;
    Запись.УстановитьСтроку(«UTF-8»);
    
    Запись.ЗаписатьОбъявлениеXML();
    Запись.ЗаписатьНачалоЭлемента(«root»);
    
    МасКолонки = Новый Массив();
    Запись.ЗаписатьНачалоЭлемента(«columns»);
    Для Ном = 0 по Таблица.Колонки.Количество()-1 цикл
    Колонка = Таблица.Колонки[Ном];
    МасКолонки.Добавить(Колонка.Имя);
    
    Запись.ЗаписатьНачалоЭлемента(«colum»);
    Запись.ЗаписатьАтрибут(«Name»,Колонка.Имя);
    Запись.ЗаписатьАтрибут(«Type»,Строка(Колонка.ТипЗначения));
    Запись.ЗаписатьКонецЭлемента();  // colum
    КонецЦикла;
    Запись.ЗаписатьКонецЭлемента();  // columns
    
    Запись.ЗаписатьНачалоЭлемента(«records»);
    Для Каждого СтрТаблицы из Таблица цикл
    
    Запись.ЗаписатьНачалоЭлемента(«record»);
    Для каждого ИмяКолонки из МасКолонки цикл
    Запись.ЗаписатьНачалоЭлемента(ИмяКолонки);
    
    Тип = ТипЗнч(СтрТаблицы[ИмяКолонки]);
    Если Справочники.ТипВсеСсылки().СодержитТип(Тип)
    Или Документы.ТипВсеСсылки().СодержитТип(Тип) Тогда
    Запись.ЗаписатьТекст(«» + СтрТаблицы[ИмяКолонки].УникальныйИдентификатор());
    ИначеЕсли Тип = Тип(«Число») Тогда
    Запись.ЗаписатьТекст(Формат(СтрТаблицы[ИмяКолонки], «ЧРД=.; ЧН=0; ЧГ=0»));
    Иначе
    Значение = Строка(СтрТаблицы[ИмяКолонки]);
    Запись.ЗаписатьСекциюCDATA(Значение);
    КонецЕсли;
    
    Запись.ЗаписатьКонецЭлемента();
    КонецЦикла;
    Запись.ЗаписатьКонецЭлемента();
    КонецЦикла;
    
    Запись.ЗаписатьКонецЭлемента();  // records
    Запись.ЗаписатьКонецЭлемента();  // root
    
    Возврат Запись.Закрыть();
    

    Показать

    Здесь под «Формат XML вы определяете на стороне 1С» я понимаю то, что вы можете дать другие имена root, columns или добавить другую информацию

    Reply
  51. AllexSoft

    (50) думаю он хочет пример оформления soapRequest с одним или двумя параметром (скажем простыми в виде string) в вызове функции executeSoap(script, successHandler) из вашего примера

    Reply
  52. mdSerg

    (24) zqzq, (24) zqzq, Поставил бы минус на Ваше высказывание. А автор молодец.

    Reply

Leave a Comment

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