Вызов операций WS-сервисов SAP из 1С (передача в параметрах Объектов XDTO)

18.04.12

Интеграция - Внешние источники данных

Довелось столкнуться в своей работе с вызовом из 1С веб-сервисов SAP. Если с передачей простых типов (в терминах XDTO - значений XDTO) в параметрах операции веб-сервиса, не возникло никаких проблем, то с передачей объекта XDTO пришлось повозиться. Несмотря на то, что в 1С я его заполнял, в SAP он воспринимался как пустой. В интернет особо много полезной информации не нашел, поэтому выкладываю свои наработки по теме.

Полезной оказалась эта ссылка:

http://j1c.ru/j1c/node/45

Но там было предложено решение использовать внешний прокси адаптер. Т.к. проблем с обратным вызовом веб-сервиса (из SAP вызывался веб-сервис 1с) не возникло, то решил, что вполне можно обойтись без внешнего прокси адаптера, только штатными средствами 1С.

Собственно все решение приводить не буду, приведу основные функции, которые в итоге получились.

Не знаю, как тут оформлять код, поэтому пока функции выложу так:

1. Сначала подготавливаем структуру 1С, которая по реквизитам аналогична структуре объекта XDTO: на верхнем уровне она должна содержать ИмяКлюча, соответствующее ИмениПараметра операции WS-сервиса. Значениями структуры могут быть: Значение / Массив / Структура, где в свою очередь Массив может содержать Значения / Структуры

Массив используется для передачи таблиц (Список XDTO)

2. Получаем объект Прокси фабрики XDTO

... описывать не буду, все стандартно (я использовал динамическую ссылку, скорее всего можно и статическую)

3. Вызываем функцию:

// Функция инициализирует параметры метода WS и вызывает метод WS
//
Функция ВыполнитьОперациюWS(ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметров1С = Неопределено) Экспорт

    Перем СтруктураПараметровОперацииWS;

    СтруктураПараметровОперацииWS = ИнициализироватьСтруктуруПараметровОперацииWS(СтруктураПараметров1С);
    ПолучитьСтруктуруПараметровОперацииWS(ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметровОперацииWS);
    ПреобразоватьСтруктуруПараметровОперацииWS(ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметровОперацииWS);

    СтрокаПараметровОперацииWS = ПолучитьСтрокуПараметровОперацииWSПоСтруктуре(СтруктураПараметровОперацииWS, "СтруктураПараметровОперацииWS");

    Попытка
        Если СтруктураПараметровОперацииWS.ВозвращаемоеЗначение = Неопределено Тогда
            Выполнить("ПроксиФабрикиXDTO." + ИмяОперацииWS + "(" + СтрокаПараметровОперацииWS + ")");
        Иначе
            Выполнить("СтруктураПараметровОперацииWS.ВозвращаемоеЗначение = ПроксиФабрикиXDTO." + ИмяОперацииWS + "(" + СтрокаПараметровОперацииWS + ")");
        КонецЕсли;
    Исключение
    КонецПопытки;

    СтруктураПараметровОперацииWS.ВозвращаемоеЗначение = ПреобразоватьОбъектXDTOвСтруктуру(СтруктураПараметровОперацииWS.ВозвращаемоеЗначение);
    Если ТипЗнч(СтруктураПараметровОперацииWS.Параметры) = Тип("Структура") Тогда
        Для Каждого Пар Из СтруктураПараметровОперацииWS.Параметры Цикл
            СтруктураПараметровОперацииWS.Параметры.Вставить("Значение", ПреобразоватьОбъектXDTOвСтруктуру(Пар.Значение));
        КонецЦикла;
    КонецЕсли;

    Возврат СтруктураПараметровОперацииWS;

КонецФункции //ВыполнитьОперациюWS

 
// Процедура заполняет структуру параметров WS по структуре параметров 1С
//
// Параметры:
// ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметров1С, СтруктураПараметровОперацииWS
//
Процедура ПолучитьСтруктуруПараметровОперацииWS(ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметровОперацииWS)

    Перем ТипОперацииWS;

    ПроверятьПараметр1С = (СтруктураПараметровОперацииWS.Параметры1С <> Неопределено);

    Для каждого ОперацияWS Из ПроксиФабрикиXDTO.ТочкаПодключения.Интерфейс.Операции Цикл

        Если ОперацияWS.Имя = ИмяОперацииWS Тогда

            Если ОперацияWS.ВозвращаемоеЗначение <> Неопределено Тогда
                СтруктураПараметровОперацииWS.ВозвращаемоеЗначение = ПроксиФабрикиXDTO.ФабрикаXDTO.Создать(ОперацияWS.ВозвращаемоеЗначение.Тип);
            КонецЕсли;

            // Добавим URIПространстваИмен и Объект типа операции
            Для каждого ПакетXDTO ИЗ ПроксиФабрикиXDTO.ФабрикаXDTO.Пакеты Цикл
                Для каждого СвойствоXDTO Из ПакетXDTO.КорневыеСвойства Цикл
                    Если СвойствоXDTO.Имя = ИмяОперацииWS Тогда
                        СтруктураПараметровОперацииWS.URIПространстваИмен = ПакетXDTO.URIПространстваИмен;
                        ТипОперацииWS = СвойствоXDTO.Тип;
                    КонецЕсли;
                КонецЦикла;
            КонецЦикла;

            ОбъектXDTO = ПроксиФабрикиXDTO.ФабрикаXDTO.Создать(ТипОперацииWS);
            Для каждого ПараметрОперацииWS Из ОперацияWS.Параметры Цикл

                Объект1С = Неопределено;
                Если ПроверятьПараметр1С И СтруктураПараметровОперацииWS.Параметры1С.Свойство(ПараметрОперацииWS.Имя, Объект1С) Тогда
                    ОбъектПараметраОперацииWS = ПолучитьОбъектXDTOпоСтруктуреОбъекта1С(ПроксиФабрикиXDTO, ПараметрОперацииWS.Тип, Объект1С);
                    ОбъектXDTO[ПараметрОперацииWS.Имя] = ОбъектПараметраОперацииWS;
                    СтруктураПараметровОперацииWS.Параметры.Вставить(ПараметрОперацииWS.Имя, ОбъектПараметраОперацииWS);
                Иначе
                    СтруктураПараметровОперацииWS.Параметры.Вставить(ПараметрОперацииWS.Имя, Неопределено);
                КонецЕсли;

            КонецЦикла;
            //СтруктураПараметровОперацииWS.ОбъектОперацииWS = ОбъектXDTO;

        КонецЕсли;

    КонецЦикла;

КонецПроцедуры // ЗаполнитьСтруктуруПараметровОперацииWS(ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметровОперацииWS)

 
// Процедура Преобразует формат параметров WS 1С в формат WS внешней системы (SAP)
//
// Параметры:
// ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметровОперацииWS
//
Процедура ПреобразоватьСтруктуруПараметровОперацииWS(ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметровОперацииWS)

    Для каждого ОперацияWS Из ПроксиФабрикиXDTO.ТочкаПодключения.Интерфейс.Операции Цикл

        Если ОперацияWS.Имя = ИмяОперацииWS Тогда

            Для каждого Параметр Из СтруктураПараметровОперацииWS.Параметры Цикл

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

                ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяОперацииWS);
                ЗаписьXML.ЗаписатьСоответствиеПространстваИмен("", СтруктураПараметровОперацииWS.URIПространстваИмен);

                ПроксиФабрикиXDTO.ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Параметр.Значение, Параметр.Ключ);

                ЗаписьXML.ЗаписатьКонецЭлемента();

                Стр = ЗаписьXML.Закрыть();

                // Преобразуем XML (для более сложных случаев надо задействовать XSLT)
                Стр = СтрЗаменить(Стр, ИмяОперацииWS, "n0:" + ИмяОперацииWS);
                Стр = СтрЗаменить(Стр, "xmlns=", "xmlns:n0=");

                ЧтениеXML = Новый ЧтениеXML;
                ЧтениеXML.УстановитьСтроку(Стр);
                ЧтениеXML.ПерейтиКСодержимому();
                ЧтениеXML.Прочитать();

                Попытка
                    СтруктураПараметровОперацииWS.Параметры.Вставить(Параметр.Ключ, ПроксиФабрикиXDTO.ФабрикаXDTO.ПрочитатьXML(ЧтениеXML));
                Исключение
                    Сообщить(ОписаниеОшибки());
                КонецПопытки;

            КонецЦикла;

        КонецЕсли;

    КонецЦикла;

КонецПроцедуры // ПреобразоватьСтруктуруПараметровОперацииWS(ПроксиФабрикиXDTO, ИмяОперацииWS, СтруктураПараметровОперацииWS)

 
// Функция возвращает строку параметров через запятую из структуры
//
// Параметры:
// Нет
//
Функция ПолучитьСтрокуПараметровОперацииWSПоСтруктуре(СтруктураПараметровОперацииWS, ИмяПеременнойСтруктурыПараметровОперацииWS)

    Перем ВозвращаемоеЗнач;

    ВозвращаемоеЗнач = "";
    Если ТипЗнч(СтруктураПараметровОперацииWS) = Тип("Структура") Тогда
        Для каждого Пар Из СтруктураПараметровОперацииWS.Параметры Цикл
            ВозвращаемоеЗнач = ВозвращаемоеЗнач + ", " + ИмяПеременнойСтруктурыПараметровОперацииWS + ".Параметры." + Пар.Ключ;
        КонецЦикла;
        Если ВозвращаемоеЗнач <> "" Тогда
            ВозвращаемоеЗнач = Сред(ВозвращаемоеЗнач, 3);
        КонецЕсли;
    КонецЕсли;

    Возврат ВозвращаемоеЗнач;

КонецФункции // ПолучитьСтрокуПараметровОперацииWSПоСтруктуре(СтруктураПараметровОперацииWS, ИмяСтруктурыПараметровОперацииWS)

 
// Функция возвращает структуру по объекту XDTO
//
Функция ПреобразоватьОбъектXDTOвСтруктуру(ОбъектXDTO)

    Перем ВозвращаемоеЗнач;

    Если ОбъектXDTO = Неопределено Тогда

        ВозвращаемоеЗнач = Неопределено;

    ИначеЕсли ТипЗнч(ОбъектXDTO) = Тип("ЗначениеXDTO") Тогда

        ВозвращаемоеЗнач = ОбъектXDTO.Значение;

    ИначеЕсли ТипЗнч(ОбъектXDTO) = Тип("ОбъектXDTO") Тогда

        ВозвращаемоеЗнач = Новый Структура;

        Для каждого СвойствоXDTO Из ОбъектXDTO.Свойства() Цикл

            ВозвращаемоеЗнач.Вставить(СвойствоXDTO.Имя);

            Попытка // свойство - списокXDTO

                СписокXDTO = ОбъектXDTO.ПолучитьСписок(СвойствоXDTO);
                КоличествоСписка = СписокXDTO.Количество();

                МассивЗначений = Новый Массив;
                Для Сч = 0 По КоличествоСписка - 1 Цикл
                    МассивЗначений.Добавить(ПреобразоватьОбъектXDTOвСтруктуру(СписокXDTO.ПолучитьXDTO(Сч)));
                КонецЦикла;

                ВозвращаемоеЗнач[СвойствоXDTO.Имя] = МассивЗначений;

            Исключение // свойство - объектXDTO/значениеXDTO

                ВозвращаемоеЗнач[СвойствоXDTO.Имя] = ПреобразоватьОбъектXDTOвСтруктуру(ОбъектXDTO.ПолучитьXDTO(СвойствоXDTO));

            КонецПопытки;

        КонецЦикла;

    КонецЕсли;

    Возврат ВозвращаемоеЗнач;

КонецФункции

4. Ключевой является преобразование функция ПреобразоватьСтруктуруПараметровОперацииWS

Я ее реализовал простой СтрЗаменить, т.к. этого оказалось достаточно, но в принципе можно было бы провести XSLT- преобразование (в 1С эта возможность тоже штатная). 

Причина возникновения этой функции в том, что 1С добавляет и в узел, и в его подчиненные элементы префикс имени (не знаю, точно ли передаю термины, т.к. не силен в веб технологиях, надеюсь смысл понятен). А SAP эти префиксы не воспринимает, и потому считает соответствующие значение пустыми. Фактические же префикс надо добавлять только в сам узел (в данном случае узел параметра операции). Это я и делаю с помощью СтрЗаменить.

 

Отвечать и оформлять если что, буду позже, просто думаю, что данный материал может пригодится не только для вызова сервисов SAP, но и для других Web-сервисов.

См. также

Внешние источники данных Программист Бизнес-аналитик Пользователь Платформа 1С v8.3 Управляемые формы Анализ и прогнозирование Конфигурации 1cv8 Узбекистан Беларусь Кыргызстан Молдова Россия Казахстан Платные (руб)

Готовое решение для автоматической выгрузки данных из 1С 8.3 в базу данных ClickHouse, PostgreSQL или Microsoft SQL для работы с данными 1С в BI-системах. «Экстрактор данных 1С в BI» работает со всеми типовыми и нестандартными конфигурациями 1С 8.3 и упрощает работу бизнес-аналитиков. Благодаря этому решению, специалистам не требуется быть программистами, чтобы легко получать данные из 1С в вашей BI-системе.

28500 руб.

15.11.2022    20641    20    49    

38

Поиск данных Внешние источники данных Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Если вам нужно автоматически генерировать представления (view) к вашей базе данных 1С (есть две версии - для СУБД MS SQL Server и для PostgreSQL) по структуре метаданных 1С, то вам необходима данная обработка. Наш "Генератор View", другими словами - это коннектор к данным 1С для Power BI - незаменимый помощник для бизнес-аналитиков, работающих с базами 1С из Yandex Datalens/Power BI и т.д. Работает для обычных и управляемых форм под 1С 8.3

230000 руб.

31.07.2020    13735    13    48    

25

Внешние источники данных Зарплата Бюджетный учет Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 7.хх учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

48000 руб.

24.04.2017    51027    100    165    

89

Зарплата Внешние источники данных Бюджетный учет Перенос данных 1C Системный администратор Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 8 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

84000 руб.

19.08.2020    25035    23    1    

25

Внешние источники данных Кадровый учет Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Программист Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и кадры государственного учреждения 3 Государственные, бюджетные структуры Россия Бухгалтерский учет Бюджетный учет Платные (руб)

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    10773    12    8    

14

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    17783    19    22    

16
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Kuzja_R 172 18.04.12 20:20 Сейчас в теме
Спасибо, интересно!
Для оформления http://infostart.ru/public/66592/
2. adva 45 18.04.12 21:24 Сейчас в теме
Оформлю позднее.

Выявил, что ответные параметры из SAP в виде объектов XDTO все же не принимаются (со значениями опять же проблем нет). Входные/выходные параметры, тоже не отрабатывают, в ту сторону уходят, а назад платформа 1с выдает ошибку. Пока для обработной передачи остаются только параметры значения (например в виде строки), что конечно не достаточно, но похоже ограничения самой платформы не обойти. Может ее когда нибудь исправят.

Пример выдаваемой ошибки:
Проверка дополнительного свойства:
форма: Элемент
имя: NameItem: Ошибка преобразования данных XDTO:
Чтение объекта типа: {urn:sap-com:document:sap:soap:functions:mc-style}NameType - [13,26]
Проверка дополнительного свойства:
форма: Элемент
имя: item: Ошибка проверки данных XDTO:
3. Dreadnouth 11.10.12 10:00 Сейчас в теме
не могли бы вы привести более полный код?
потому что никак не могу понять что же за структуру надо сделать в СтруктураПараметров1С
и что делает процедура ИнициализироватьСтруктуруПараметровОперацииWS

заранее благодарен!
4. adva 45 27.10.12 16:58 Сейчас в теме
(3) Извиняюсь за задержку, здесь не очень часто бываю. Код скорее всего уже не найду, т.к. сменил место работы. СтруктураПараметров1С это:
1. Сначала подготавливаем структуру 1С, которая по реквизитам аналогична структуре объекта XDTO: на верхнем уровне она должна содержать ИмяКлюча, соответствующее ИмениПараметра операции WS-сервиса. Значениями структуры могут быть: Значение / Массив / Структура, где в свою очередь Массив может содержать Значения / Структуры
Массив используется для передачи таблиц (Список XDTO)


Насколько помню:
ИнициализироватьСтруктуруПараметровОперацииWS по структуре параметров 1С создает по сути не заполненный объект XDTO

В общем попробую найти код, если найду, выложу
5. BOZKURT 17.03.13 01:51 Сейчас в теме
6. Trise 139 30.08.13 12:22 Сейчас в теме
Я знаешь как пробовал делать, указываешь в качестве параметра метода anyType для веб-сервиса и он может у тебя все принимать и все передавать
7. Westbound 13.08.14 13:54 Сейчас в теме
(6) Trise, а если веб-сервис не мой, как я могу изменить данные о параметрах?
8. B2B 274 17.09.14 17:09 Сейчас в теме
По сути самая важная процедура в данном примере - это "ПреобразоватьСтруктуруПараметровОперацииWS". Она отвязывает значения параметров от пространства имен функции. Совсем не обязательно, как в данном примере, прогонять все параметры через эту процедуру, достаточно обработать только параметры со сложных типов.
9. harmer 1 02.09.15 11:46 Сейчас в теме
Кто-нибудь сталкивался с проблемой, что имя метода содержит точку. Соответственно при вызове
 Прокси.ИмяМетода.ЧерезТочку(Параметр)

возникает исключительная ситуация "Поле объекта не обнаружено".
10. adva 45 06.11.15 13:10 Сейчас в теме
(9) harmer, (опять поздно отвечаю), но разве можно имя метода через точку писать, разве правила имени не такие же, как у любых переменных 1С? Или это не 1с веб-сервис?
14. vpaoli 26 18.03.20 07:27 Сейчас в теме
(9) вот у меня сейчас такая же проблема - имя операции с точкой ! Вы эту проблему как то решили в 1С ?
15. harmer 1 18.03.20 11:04 Сейчас в теме
(14) К сожалению, уже не помню как решилась проблема, а доступа к базе уже нет.
16. Dreadnouth 18.03.20 12:09 Сейчас в теме
(14)Попробуйте обратиться к методу по его индексу, что то типа
Прокси[IDМетодаСТочкой](Параметр)
или
Прокси[ИмяМетода.ЧерезТочку](Параметр)
17. adva 45 23.03.20 09:45 Сейчас в теме
(14) К сожалению, давно уже с сап не сталкивался, поэтому помочь не могу. В (13) какой то еще вариант предлагают. Не пробовали?
11. harmer 1 06.11.15 13:34 Сейчас в теме
12. _OVEN_ 19.07.18 20:37 Сейчас в теме
Подтверждаю - если 1с-кий Web-сервис в связке с SAP работает на ура! То в SAP-кий Web-сервис - смог передать только элементарные типы данных - строка, число. Структуру - ни в какую. 2-й день не могу АБАПЕРУ передать структуру состоящую из двух реквизитов строчного типа. Автору статьи огромнейший респект.
18. ~ZasrAnka~ 07.05.20 17:27 Сейчас в теме
(12) Подскажите у вас получилось передать структуру? Как реализовали? Столкнулась с той же проблемой - пока не выходит.
13. _OVEN_ 25.07.18 13:58 Сейчас в теме
Есть другой проверенный подход. В SAP передавать заранее подготовленную строку файла XML (тип string). SAP имеет ограничение длины этой строки - 2 Гб. Для обменов - этого будет достаточно. В 1с создаем пакет XDTO (с таблицами, списками значений и так далее), с помощью которого создадим строку XML. Собственно ее и передадим на Веб-сервис SAP.

Вот код:
Функция ВернутьХМЛ()
	
	ЗаписьXML  = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	
	ЗаписьXML.ЗаписатьОбъявлениеXML();
    ПрайсXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.sample-package.org", "TZ"));
	
	Для Сч = 1 По 2 Цикл
		
	    СтрокаПрайсXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип("http://www.sample-package.org", "TZ_Line"));
		
		Если Сч = 1 Тогда
		СтрокаПрайсXDTO.Field1_Str = "Автомобиль №1"; 
		СтрокаПрайсXDTO.Field_Int  = Число("12545444");
		СтрокаПрайсXDTO.Field_Date = ТекущаяДата();
		СтрокаПрайсXDTO.Field_Num  = Число("4500,87");
	ИначеЕсли Сч = 2 Тогда
		СтрокаПрайсXDTO.Field1_Str = "Автомобиль №567"; 
		СтрокаПрайсXDTO.Field_Int  = Число("38887410");
		СтрокаПрайсXDTO.Field_Date = ДобавитьМесяц(ТекущаяДата(),-1);
		СтрокаПрайсXDTO.Field_Num  = Число("875200,23");
	КонецЕсли;
		
		
		ПрайсXDTO.TZ_Str.Добавить(СтрокаПрайсXDTO);
		
	КонецЦикла;
	
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ПрайсXDTO);
	
	СтрокаXML = ЗаписьXML.Закрыть();
	
	Возврат СтрокаXML;
	
	
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)

	Урл = УрлВебСервисаСАП;
	УрлПространстваИмен = ПространствоИменВебСервисаСАП;
	
	WSПрокси = Новый WSПрокси(WSОпределение,  УрлПространстваИмен ,  "zws_utn_test_xml", "zws_utn_test_xml_bind" );
	WSПрокси.Пользователь = ЛогинСАП;
	WSПрокси.Пароль       = ПарольСАП;
	
	Фабрика = WSПрокси.ФабрикаXDTO;
	
	ТипWSПараметра_ТЗ = Фабрика.Пакеты.Получить(УрлПространстваИмен).Получить("Z_UTN_TEST_WS_XML");
	ТЗ_WS	   = Фабрика.Создать(ТипWSПараметра_ТЗ);

	Зн_IV_BUDAT =  ВернутьХМЛ();

	Результат = WSПрокси.Z_UTN_TEST_WS_XML(Зн_IV_BUDAT);

КонецПроцедуры
Показать


Собственно, WS-ссылка и пакета XDTO - прикрепляю в картинках.
Прикрепленные файлы:
19. ~ZasrAnka~ 07.05.20 17:53 Сейчас в теме
Добрый день.
Столкнулись с проблемой, что в SAP-кий Web-сервис - можно передать только элементарные типы данных - строка, число. Структуру - ни в какую.
Выше писали, что можно в качестве параметра метода anyType для веб-сервиса, передали такую структуру в SAP, но при передачи пакета процесс даже не попадает в нужную процедуру, хотя авторизацию проходит.
Если выполнить вызов не из SAP, а из другой базы 1С - все отлично.
Так понимаю, что статья автора предназначена для адаптации ответов в SAP, а не наоборот.
Как быть? Кто нашел решение?
20. Dreadnouth 07.05.20 20:44 Сейчас в теме
(19) Добрый день, ваш вопрос совсем не понятен, перефразируйте.
21. ~ZasrAnka~ 08.05.20 08:51 Сейчас в теме
(20) Задача такая: нужно из SAP получать пакет с материалами, т.е. номенклатурой. Создали в 1С Веб-сервис, создали операцию, в ней параметр с типом XDTO-пакет, в котором описана структура входящих данных. Отдали ссылку абаперам, они не могут такую структуру загрузить (выше про это тоже пишут).

Комментарий 6 - предлагают вместо сложной структуры сделать параметр типа anyType, но все равно SAP ругается.

При том, что с другой базы 1С - обмен идет без проблем, а так же тест через вспомогательные сервисы все проходит. Что делать?
22. Dreadnouth 08.05.20 14:22 Сейчас в теме
(21) да, такая проблема есть. Как из неё выходил я. В браузере открывал WS ссылку сервиса 1С, получал описание WS-сервиса в виде WS определения в формате JSON. Сохранял его и отправлял именно этот JSON разработчикам SAP. Они "кувалдами" его запихивали в SAP. При этом SAP видит куда можно послать данные, но не очень корректно видит как эти данные корректно оформлять. Поэтому на стороне 1С приходится полученных пакет данных (он приходит в JSON) разбирать руками, что достаточно просто. Это конечно костыль и система не работает автоматически как вроде бы должна, но всё таки SAP может вызвать сервис 1С и отправить в него данные.
Оставьте свое сообщение