gifts2017

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

Опубликовал Сергей Карташев (Elisy) в раздел Обмен - Интеграция с WEB

Описанный метод позволяет обратиться к веб-сервисам 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С не будут работать в данной среде. Это значит, что нужно дополнительно решать проблему с написанием драйверов для оборудования.

// //

Скачать файлы

Наименование Файл Версия Размер
Пример веб-сайта 35
.zip 81,76Kb
16.07.13
35
.zip 81,76Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Asmody (Asmody) 16.07.13 10:44
часть кода после
var soapRequest =
парсер пожрал?
2. crazy1C (detro) 16.07.13 11:03
Есть ли оценки производительности 1С при выдаче результатов по SOAP, какая возможная интенсивность работы ?
3. Сергей Карташев (Elisy) 16.07.13 11:24
(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
    });
}
...Показать Скрыть
4. Сергей Кудашкин (sikuda) 16.07.13 12:06
username: ,
password: , в IE не работают на русском(Пришлось делать пользователей на английском). Причина и решение самому интересна.
5. Алексей Белоусов (AllexSoft) 16.07.13 12:14
По моему опыту все гораздо веселее работает на PHP5... не люблю я JS ( за статью плюс!
6. Александр Кунташов (kuntashov) 16.07.13 17:44
(3) Elisy,

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


В статью вставляйте картинкой, а для тех, кому нужен исходник - давайте ссылку на сниппет, который можно разместить либо на http://gist.github.com либо на http://pastebin.com
7. Евгений _ (Johny_v) 17.07.13 08:36
Если кто-нибудь знает причину и как обойти, пожалуйста, напишите в комментариях.

Сделай простенький модуль на PHP, который будет обращаться к веб-сервису 1С и возвращать XML или JSON.
AJAX-ом будешь обращаться к этому модулю. Тогда не должно быть проблем с авторизацией.
Был где-то пример. Могу поискать, если надо.
white_sochi; Elisy; vasiliy_b; +3 Ответить 1
8. Сергей Карташев (Elisy) 17.07.13 11:27
(4) sikuda,
username: ,
password: , в IE не работают на русском(Пришлось делать пользователей на английском). Причина и решение самому интересна.

Спасибо. Интересная версия. Хотя бы намек появился на причину. На другом ресурсе
http://www.richmedia.us/post/2013/06/25/soap-1c-jscript-html.aspx
в комментарии предложили переписать Authorization-заголовок
9. Павел Опарин (opx) 17.07.13 13:55
Soap это такой же http запрос, переданный в виде xml и полученный ответ тоже в xml.
По мне удобнее работать с soap запросами через xmlhttp = Новый COMОбъект("Msxml2.XMLHTTP");
Кстати и с авторизацией можно попробовать через xmlhttp.setRequestHeader("Authorization","Basic dXNlcm5hbWU6cGFzc3dvcmQ=");
10. Трактор Трактор (Трактор) 17.07.13 14:13
Параметры авторизации можно прописать в файле default.vrd, в строке с путём к информационнойй базе ib. Работает не на всех релизах 1С, но на последних должно работать. Так мы получим анонимный сервис.
11. Сергей Карташев (Elisy) 18.07.13 10:17
(7) Johny_v,
Сделай простенький модуль на PHP, который будет обращаться к веб-сервису 1С и возвращать XML или JSON.
AJAX-ом будешь обращаться к этому модулю. Тогда не должно быть проблем с авторизацией.
Был где-то пример. Могу поискать, если надо.

Хотелось бы обойтись без посредников. Модуль PHP тянет за собой PHP и настройку сервера. В сложных задачах, вероятно, не удастся обойтись без Asp.Net/PHP, а на простых, думаю, можно обойтись средствами клиента.
12. Александр Кузин (sashocq) 18.07.13 11:01
У меня одного возникают сомнения в практической ценности данного материала?
13. Алексей Белоусов (AllexSoft) 18.07.13 11:39
Elisy, просьба, ну то же самое только с прицелом на PHP, было бы гораздо полезнее... почему имено JS ?
14. Сергей Карташев (Elisy) 18.07.13 14:34
(10) Трактор,
Параметры авторизации можно прописать в файле default.vrd, в строке с путём к информационнойй базе ib. Работает не на всех релизах 1С, но на последних должно работать. Так мы получим анонимный сервис.

Новость вызывает двоякое чувство. С одной стороны - это гибкость. Но с другой стороны 1С и сетевая безопасность - вещи несовместимые. Применение оправдано без выхода в публичную сеть.
15. Евгений _ (Johny_v) 18.07.13 14:35
В случае использования связки PHP + JS вы получите более безопасный метод обращения к веб-сервису.
Пользователь вообще не сможет узнать что используется веб-сервис 1С, тем более адреса сервера и данные авторизации.
16. Сергей Видякин (badboychik) 18.07.13 18:43
когда я работал с веб-сервисами 1С из РНР, возникла проблема преобразования сложных вложенных структур XDTO в объекты РНР. Может в эту сторону подумать?
17. Алексей Белоусов (AllexSoft) 18.07.13 20:14
(15) Johny_v, (16) badboychik, помоему автор игнорирует все вопросы о Web-сервисы + PHP ((
18. Трактор Трактор (Трактор) 18.07.13 22:28
(16) (17) В качестве примера можно 1С+php рассматривать эту разработку http://infostart.ru/public/59207/ Если сподоблюсь сделаю пример попроще.
19. Сергей Карташев (Elisy) 19.07.13 06:20
(12) sashocq,
У меня одного возникают сомнения в практической ценности данного материала?

Мы на определенном этапе столкнулись с ограничениями управляемых форм. Ведут они себя непредсказуемо, занимают много лишнего места. Адекватная замена - это html. Именно поэтому html было уделено много внимания. Подходы использования html могут быть различными: встраивание html в УФ на стороне 1С, встраивание веб-клиента 1С в свой Frame и создание своих страниц с доступом по soap. Все эти варианты были рассмотрены в предыдущих и этой публикациях. Насколько применимы, судить нужно в каждом конкретном случае.
20. Евгений _ (Johny_v) 19.07.13 08:23
(17) AllexSoft,
Нет, он вроде объяснил что хочется обойтись без PHP. Может в его случае это как-то оправданно.
21. Алексей Белоусов (AllexSoft) 19.07.13 10:31
(20) Johny_v, ну если это считать объяснением...

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


Хм, а проект расчитан для ларьков? Насколько я понял подобная модульная система (с веб мордой) будет охватывать всю деятельность предприятия, тогда зачем говорить о простых задачах и наивно полагать что хватит JS ?)
22. Сергей Карташев (Elisy) 19.07.13 12:33
(13) AllexSoft,
Elisy, просьба, ну то же самое только с прицелом на PHP, было бы гораздо полезнее... почему имено JS ?

Я работал в рамках поставленной задачи. Здесь делюсь результатами исследований. PHP не входил в поставленную задачу. Да и статьи на тему PHP + 1C были: в (18) пример одной из них.
Лично я не сторонник веб-сервисов вообще, а сторонник альтернативного подхода, где работа ведется по веб-протоколу 1С. Связано это с тем, что веб-сервисы пока не доступны в облаках, а их реализация не является универсальной.
23. Алексей Белоусов (AllexSoft) 19.07.13 12:49
веб-сервисы пока не доступны в облаках

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

ПС: а в чем их не универсальность в данной реализации ?
24. ффф ыыы (zqzq) 19.07.13 16:16
(19)
Мы на определенном этапе столкнулись с ограничениями управляемых форм. Ведут они себя непредсказуемо, занимают много лишнего места. Адекватная замена - это html.

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

Управляемые формы "из коробки" очень много функционала реализуют при минимальных усилиях разработчика.
25. Ярослав Попов (YOr!k) 19.07.13 18:00
(24) Странные у вас выводы :)
Наоборот, собравшиеся люди много работали с управляемыми формами, поэтому прекрасно знакомы с их ограничениями - статью здесь писать не о чем, любой профессиональный разработчик, проработавший с упр. формами более 2х месяцев прекрасно знает все эти ограничения. И то что "управляемые" формы во многих аспектах фактически не управляемы также неоспоримый факт (размеры формы и элементов, цвет фона, расстояние между элементами, шрифты заголовков, управление стандартными панелями навигации, отсутствие многих элементов управления и прочее, и прочее...)

Во многом (но далеко не всегда) эти ограничения обоснованы тем, что
управляемые формы "из коробки" очень много функционала реализуют при минимальных усилиях разработчика.

Но позиция нашей команды - это бережное отношение к пользователю и уделение большого внимания к интерфейсу и юзабилити, и здесь решений "из коробки" часто не хватает.
mdSerg; Elisy; +2 Ответить
26. Сергей Карташев (Elisy) 19.07.13 20:01
(16) badboychik,
когда я работал с веб-сервисами 1С из РНР, возникла проблема преобразования сложных вложенных структур XDTO в объекты РНР. Может в эту сторону подумать?

Я перспективней вижу технологию 1С Business Connector. После Проекта Доминикана вернусь к той теме.
27. Сергей Карташев (Elisy) 19.07.13 20:08
(17) AllexSoft,
(15) Johny_v, (16) badboychik, помоему автор игнорирует все вопросы о Web-сервисы + PHP ((

Стараюсь отвечать на вопросы по мере возможности. Но про PHP мне нечего сказать. Во-первых к данной теме не относится, а во вторых - я разбираюсь в Asp.Net, а не в PHP. По PHP вам лучше найти кого-то другого.
28. Сергей Карташев (Elisy) 19.07.13 20:28
(21) AllexSoft,
Хм, а проект расчитан для ларьков? Насколько я понял подобная модульная система (с веб мордой) будет охватывать всю деятельность предприятия, тогда зачем говорить о простых задачах и наивно полагать что хватит JS ?)

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

Не совсем понял, в какой реализации?
30. Алексей Белоусов (AllexSoft) 22.07.13 09:44
(29) Elisy,
Связано это с тем, что веб-сервисы пока не доступны в облаках, а их реализация не является универсальной.


Вот я про это, в чем не универсальность веб сервисов платформы?
31. Сергей Карташев (Elisy) 22.07.13 13:36
(24) zqzq,
Такое впечатление, что у вас там веб-программисты собрались, неосилившие управляемые формы. Пока что недоказанное утверждение, попробуйте статью на эту тему написать с примерами и посмотрите на реакцию сообщества.
Управляемые формы "из коробки" очень много функционала реализуют при минимальных усилиях разработчика.

Наконец-то появился человек, который разъяснит нам во многих местах странное поведение УФ и откровенные баги Такси, а то на форуме 1С не торопятся комментировать.
Много функционала УФ - это заявление маркетологов, потому что набор из Группа-Поле-Таблица-Декорация в нормальных фрейморках за функционал не считается. Попробуйте на досуге поиграться с шириной бордюра, поуправлять отображением, растянуть кнопку на всю ширину формы, убрать сплиттер между таблицами. Может, вы подскажете, как подсказку генерить динамически и отображать разную для каждой строки таблицы? А вы в курсе были, что в динамических списках бестолку использовать ПЕРВЫЕ N - конструкцию, потому что динамический список настолько высокоинтеллектуальный, что в расчет ее не берет.
32. Алексей Белоусов (AllexSoft) 23.07.13 13:16
33. Сергей Карташев (Elisy) 23.07.13 14:42
(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/
"Веб-сервисы более прогрессивны, но и у них есть свои особенности работы и сложности (настройка, преобразование типов, сложность стандарта, несовместимость). "
34. Алексей Белоусов (AllexSoft) 23.07.13 21:17
(33) Elisy, по поводу 1cfresh это проблема конкретной реализации конфигураций, а не платформы... я всетаки говорил про сам обмен через SOAP web-сервисы
за вторую ссылку спасибо, почитал... согласен про преобразование типов, но никуда не денешься от этого, тут проблемы платформеных типов значений которая она использует
35. Сергей Карташев (Elisy) 23.07.13 21:33
(34) AllexSoft,
Elisy, по поводу 1cfresh это проблема конкретной реализации конфигураций, а не платформы... я всетаки говорил про сам обмен через SOAP web-сервисы

Меня очень интересует вопрос - есть ли системные проблемы у веб-сервисов на SaaS-серверах 1С, работающих на базах с разделением данных. Не встречались ли статьи на тему особенностей использования веб-сервисов в режиме разделения данных? Какие особенности и узкие места, практика использования?
Наша система планируется именно такой и хотелось бы знать, можно ли закладывать в нее клиентские веб-сервисы, как инструмент, например, для обмена с веб-сайтами клиентов. Есть опасения, что веб-сервисы могут привести к уязвимостям в системе безопасности.
36. Алексей Белоусов (AllexSoft) 23.07.13 21:47
(35) Elisy, к сожалению примеров таких систем не знаю, да и статьи искал и не нашел ( самому интересно... если напишите статью о использовании web-сервисов в нестандатных задачах (условиях модульности, условиях разделения данных) то было бы очень интересно.
А по поводу стоит ли закладывать возможности обмена с сайтами через SOAP то конечно нужно, вот только придумать как ) схемы подключения xsd пользовательских схем, сам обмен данными на подобие обработки универсального обмена и файлов правил...
37. Игорь (6есик) 08.08.13 15:57
Я обычный XMLHttpRequest использовал, то у меня авторизируется обоими способами.
Только в IE заметил разницу что при авторизации не через хедеры при неправильных данных не появляется стандартное окно авторизации в браузере.

И при использовании русских символов либо в пароле либо в пользователе авторизация неработает даже в стандартных окошках авторизации в браузере (пробовал хром,мозилу,експлорер)
38. Ivan Kovtun (i.kovtun) 25.08.13 19:13
(37) 6есик,
А в какой кодировке отправляете реквизиты авторизации? Подозреваю 1С UTF-8 ожидает...
39. Сергей Карташев (Elisy) 26.08.13 14:15
(38) i.kovtun,
На странице выставлен meta для utf-8. Хорошо бы было, если бы браузер ее и использовал :)
40. Игорь (6есик) 27.08.13 12:21
(38) i.kovtun,
Да по разному пробовал уже. И через encodeURIComponent() пробовал авторизационные данные пропускать, но ничего не помогло. Даже надоело пробовать - но если у кого-то получиться то было бы очень интересно увидеть.
41. Олег Власенко (Vlasenko.Oleg) 02.09.13 16:47
По поводу авторизации попробуйте использовать Preemptive Authentication,
здесь описано как http://hc.apache.org/httpclient-3.x/authentication.html
42. Ivan Kovtun (i.kovtun) 20.09.13 13:55
(40) 6есик,
Вот появилась публикация http://infostart.ru/public/201461/, в ней есть информация по поводу авторизации киррилистических логинов. Сам пока до проблемы не добрался.
43. program program (prodines) 08.04.15 12:11
А как всё-таки составлять SOAP-запросы из веб-клиента к веб-серверу 1С?
44. Алексей Белоусов (AllexSoft) 08.04.15 12:25
(43) prodines, точнее проблему озвучьте, в чем сложность то? примеров использования SoapClient на PHP полно, там 3 строки кода.. ну а собственно вызов из вашего клиентского приложения веб сервиса на 1С или на чем то другом одинаков, там все равно ответы в формате XML вам будут приходить. Ну а как парсить ответы это уже другая тема =)
45. Сергей Карташев (Elisy) 08.04.15 12:39
(43) Веб-клиент имеется ввиду 1С?
46. program program (prodines) 10.04.15 12:13
(44) AllexSoft, (45) Elisy, Суть проблемы в следующем: есть веб-клиент в виде броузера с загруженным HTML/JavaScript-файлом. Есть Веб-сервер в виде связки 1С:Предприятие и Апач. Задача: обращаться из клиента к серверу и получать некий ответ. Вопрос: какого вида XML-файлы слать из клиента на 1С? Откуда я узнаю их формат, синтаксис?

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

Таким образом, данная статья мне вообще абсолютно непонятна - ни единого слова.
47. Сергей Карташев (Elisy) 15.04.15 08:06
(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С
48. program program (prodines) 15.04.15 11:48
(47) Elisy, то ли Вы ничего не ответили на мой вопрос, то ли я не сумел ничего понять. Да поймите же - JSON для меня просто не существует. Примите это как условное допущение. И изучать его я не стану - нет смысла.
Формат XML и JSON вы определяете на стороне 1С

Возможно, это является ответом. Тогда это и есть суть моего вопроса - как конкретно это делается - "Формат XML вы определяете на стороне 1С"?
49. Алексей Белоусов (AllexSoft) 15.04.15 16:47
(48) prodines, думаю у вас еще недостаточно теоретической основы для реализации вашей задачи.
При этом, разумеется, такие вещи, как JSON, WSDL, SOAP, jQuery - для меня, программиста 1С, тёмный лес.

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

ну тогда вы ничего и не сделаете к сожалению ( Нельзя что-то сделать и не понимать что ты делаешь. Копипаст тут не прокатит
50. Сергей Карташев (Elisy) 16.04.15 07:29
(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 или добавить другую информацию
51. Алексей Белоусов (AllexSoft) 17.04.15 11:21
(50) Elisy, думаю он хочет пример оформления soapRequest с одним или двумя параметром (скажем простыми в виде string) в вызове функции executeSoap(script, successHandler) из вашего примера
52. Serg S (mdSerg) 19.02.16 04:05
(24) zqzq, (24) zqzq, Поставил бы минус на Ваше высказывание. А автор молодец.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа