Двусторонний обмен между 1С и Веб сервисом на PHP #776799


#0 by ChunLee
Доброго времени суток и низкий поклон всем магистрам данного форума. У себя на работе столкнулся с проблемой интеграции 1С и веб сервисом на PHP. Как я понял она заключается в сложности структуры обмена (массив в массиве). К сожалению 1С такую структуру wsdl файла не хочет понимать... Была предпринята попытка считать эту структуру в c#. Но и эта идея закончилась ни чем. Да я понимаю что на всех форумах с такой проблемой в основном заставляют разработчиков изменить веб сервис. К сожалению наши разработчики стоят на своем и не хотят изменять свой веб сервис. По этому я пришел на этот форум чтобы задать великим из умов данный вопрос. "Как решить вопрос с таким обменом?" В голове летает вариант сделать чтобы java считала структуру с веб сервиса и была так сказать почтальоном между 1С и веб сервисом.
#1 by Azxcvbn
Ни разу не встречал такого, что бы 1с не схавала wsdl-ссылку. Наверное редко с таким встречался, можете дать wsdl-ссылку?
#2 by Garykom
1. 1Сник может все 2. Если 1С что то не может, исполните пункт 1 (поменяйте 1Сника)
#3 by Garykom
+ любой веб сервис это обычный обмен по протоколу http "текстовыми данными" (xml, json) всегда можно "вручную" обрабатывать эти файлы/данные читать/парсить их или формировать
#4 by 2mugik
Ты так пишешь как будто тебе это доставляет удовольствие.
#5 by Beretta
Ему за это деньги платят. А ты в 1С по убеждениям пришел?
#6 by 2mugik
По интересам пришел. И парсить xml вручную  интереса никакого.
#7 by Beretta
Понятно, бард-одиночка. Так и видится резолюция в жире - "will not fix, интереса никакого".
#8 by Mankubus
тоже интересна ссылка на wsdl
#9 by Serginio1
Можно и на PHP делать с нормальными массивами
#10 by Beretta
Без примера wsdl разговор ни о чем. Очень сильно подозреваю, что кто-то просто не осилил работу с сложным xdto.
#11 by ChunLee
Ссылка на WSDL файл
#12 by ChunLee
Один из 6-ти файлов. Мне бы просто отправить запрос с параметрами на веб сервис чтобы получить ответ от веб сервиса, дальше я уже думаю сам разберусь
#13 by Mankubus
ссылка без проблем загрузилась в 1с. в чем проблема то?
#14 by Beretta
версия платформы какая?
#15 by ChunLee
Чтобы понять проблему нужно либо прочитать структуру в wsdl и в 1С и сравнить их либо попробовать обратиться к серверу. Второй вариант вам не доступен так как сервер локальный, закрытый от внешки. Придется читать. Версия 1С:Предприятие 8.3 (8.3.7.2008) Для справки, мы с Serginio1 пробовали воспользоваться C# для чтения структуры, чтобы запихать dll в 1С. Все закончилось тем же, не все переменные были считанны. Самый прикол 1С читает ту часть массивов которые не может прочитать c#, а c# считывает те массивы которые не может прочитать 1С.
#16 by ChunLee
Видишь проблема в том что они не хотят менять свой веб сервис, так как там уже весят фирмы уже довольно долго.
#17 by Beretta
А теперь еще раз и по-русски. Что вы там с чем сравниваете?
#18 by Serginio1
Там проблема вот в этих массивах 1С их вообще не определяет. А на .Net формируется такой класс [System.Xml.Serialization.XmlTypeAttribute(Namespace=";)]     public partial class Array {                           private string offsetField;                  private bool offsetFieldSpecified;                  private string idField;                  private string hrefField;
#19 by Garykom
> Самый прикол 1С читает ту часть массивов которые не может прочитать c#, а c# считывает те массивы которые не может прочитать 1С. На подобные случаи есть верная лошадка по имени Java...
#20 by Garykom
+
#21 by Serginio1
Да им просто нужно привести к нормальному виду, что бы все могли читать
#22 by ChunLee
Народ хотел спросить, а 1С может из своей оболочки на прямую запустить скрипт php без веб сервера?
#23 by Garykom
качаешь , ставишь и запускаешь пэхэпэ скрипты но что оно сделает если нету веб сервера куда хотит ответ писать? а так то php это просто язык обработки текстовых файликов/данных
#24 by ChunLee
Так установил. Теперь мне получается нужно запустить скрипт php.
#25 by ChunLee
нашел такую опесуху Exec(<Путь>)  апускает на выполнение программу или скрипт. Возвращает объект типа WshScriptExec. Пример:
#26 by Garykom
#27 by ChunLee
можно ли сделать так путь_до_пхпphp.exe test.php params
#28 by Garykom
там же написано OFF "C:phpphp.exe" script.php %*
#29 by ChunLee
Или как-то так чтобы вызвать скрипт и передать параметр
#30 by Кирпич
чисто поржать. У меня есть Delphi 7 и она сожрала этот файл влет. Нарисовала вроде всё правильно. Там четыре типа массива?
#31 by ChunLee
Пример #3 Пакетный файл для запуска PHP-скрипта из командной строки (script.bat) OFF "C:phpphp.exe" script.php %* Предполагая, что скрипт называется script.php и полный путь к CLI php.exe совпадает с C:phpphp.exe, приведенный пакетный файл запустит скрипт с переданными параметрами: script.bat echothis либо script.bat -h. Подскажите 1. script.php должен лежать в корне папки php или я должен где то указать адрес? 2. Как я из 1с должен передать параметр? В WScript.Shell в описании нет указания куда нужно закидывать параметр, только адрес php.exe
#32 by ChunLee
получается в этой строке я должен все указать Процесс = WshShell.Exec("C:Progra~1Window~1Access~1wordpad.exe"); или нет?
#33 by Garykom
1. Полный путь укажи до "script.php" 2. Батник через %* передает все параметры которые в батник пришли Батник совершенно не обязателен как и "WshShell.Exec" когда есть встроенные средства 1С. А лучше наваять свой php прокси, поднять его на своем типа сервере с апачем и к нему из 1С штатно стучаться по http.
#34 by Garykom
Поймите что для решения данной задачи не через одно место кто то пока имеет маловато опыта.
#35 by Garykom
+ Это не к тому что не нуна решать, а блин подучите чуток чего нибудь сначала, азы же это эникейства.
#36 by ChunLee
Я пытаюсь разобраться, просто в темной комнате на ощупь разобраться довольно сложно, сами понимаете, по этому я прошу подсветить мне немного у кого есть свой факел.
#37 by Garykom
Понимаете у вас есть уже свой факел и даже спички с инструкцией. Но кто то не умеет пока спичками и факелами пользоваться - такая аналогия напрашивается. Мы конечно можем подсветить = сделать все за вас но нафуя это нам? Или вам если цель научиться а не получить з/п.
#38 by ChunLee
Для справки. Я сижу на окладе. Выполню я это задание или нет, на мне ни как не отобразится. Жалко много потраченного времени. Честно это задание уже дело принципа. Если вы человек который всегда доводит свои дела до конца, тогда вы понимаете о чем я говорю. До этого я уже делал обмен с сайтом. Там было все просто. Через XDTO структура строилась аж бегом. Примеров куча в интернете. Все сделал сам без чей либо помощи. А такая ситуация для меня нарисовалась впервые. Ни где нет нормального описания. На формумах переписка идет между людьми явно разбирающимися в веб программировании и мне часть слов вообще не понятна. Я уже несколько вариантов отработал, как видите не помогло. Сейчас хотим передать параметры через json и php скрипт. Разрабы веб сервиса только кидают идеи, а разбираться во всем приходится мне. Довольно сложно, когда вообще не знаешь синтаксиса другого языка. Я прошу помочь мне просто отправить пакет с параметрами на веб сервис и получить хоть какой-нибудь ответ. Вот и все! Там работы еще будет выше крыши. А отладка этого всего еще займет процентов 80 времени от создания самого обмена. Если вы на этом форуме чтобы только критиковать и унижать достоинства тех людей которые и не говорят что они мегамозги и велике умы, которые просто пришли попросить помощи, тогда прошу Вас проходить мимо данной темы. Спасибо
#39 by Serginio1
Пусть сделают HTTP сервис, дадут примеры. А ты кинешь их сюда. Здесь специалисты по PHP переведут тебе на HTTPСоедиение HTTPЗапрос
#40 by Serginio1
там у них всего 2 метода с кучей параметров
#41 by ChunLee
Да ни хотят они ничего делать. В этом и проблема. Говорят от нас доступ к веб сервису. Остальное делайте сами. Они да же не могут дать готовую строку запроса, чтобы я пользовался ей как шаблоном. Сейчас я установил расширение php на свой веб сервер. Сделал обращение через 1с к нему. Ответ приходит  "Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'ad' : failed to load external entity" и дальше бла бла бла. Не понятно, я что-то перемудрил с параметрами или с index.php.
#42 by ChunLee
<? вот такой код в index.php
#43 by ChunLee
Это разрабы дали сказали обращайся к нему из 1С передавай параметры, все будет работать
#44 by Serginio1
Посмотри
#45 by ChunLee
Ссылка классная, опять же потребует телодвижение от разрабов веб сервиса. Они не согласятся.
#46 by Serginio1
Обратись к он поможет тебе сделать прокси Вэб сервер
#47 by Serginio1
Что то тут любителей PHP не наблюдается.
#48 by ChunLee
Все решил вопрос. Сделал обращение на скрипт php c 1C. В 1С сделал формирование параметров и запихал в json. Общая картина такова. Из 1С отправляется json в php скрипт на локальный веб сервер. А php скрипт обращается в веб сервис и передает параметры. Веб сервис разбирает json. Для разрабов все обошлось малой кровью. Как закончу полностью обмен, соберусь мыслями и постараюсь объяснить по подробнее с исходным кодом. Serginio1 огромное спасибо за помощь и понимание.
#49 by Garykom
Ну в очередной раз убедился что есть гениальные программисты ради программирования, а есть кто просто проблемы решает. Вот кто то хочет попасть в 1С но не берут, а кто то отказывается из нежелания пока менять место проживания.
#50 by Serginio1
На здоровье! Главное получил решение.
#51 by Fragster
смотрел?
#52 by ttk
у меня вот такой не хавается, пришлось сторонними методами
#53 by Fragster
почитал тему. не поможет. я думал, у автора проблема сделать сервис на php, чтобы с ним взаимодействовать, а тут уже есть какой-то сервис... в принципе, проблемы с "массивом в массиве" быть не должно, тот же с подобным справляется. я бы на месте автора взял бы wsdl, посмтрел бы на него незамутненным взглядом, подергал из SoapUI и подредактировал таким образом, чтобы его схавала 1с. Если же во взаимодействии используются всякие soapheaders то тут сложнее, придется через httpзапрос общаться, но это тоже не сильно сложно, на самом деле
#54 by Fragster
ну и заставить "на той стороне" поменять определение до нужного состояния тоже можно
#55 by ChunLee
Тут нарисовалась еще одна проблема, теперь с обращением веб сервиса к 1С. В 1С я сделал не замысловатый код CorrespondentsResponseP.putCorrespondentsResult.Добавить("Ошибка создания корреспондента";); ответ из 1с выглядит вот так <soap:Envelope xmlns:soap="; <soap:Body> <m:putCorrespondentsResponse xmlns:m="; <m:return xmlns:xs="; xmlns:xsi="; <putCorrespondentsResult xmlns="TSD_WsPutReferenceModel">Ошибка создания корреспондента</putCorrespondentsResult> </m:return> они хотят чтобы приходил ответ вот такой <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="; xmlns:ns1="; в частности задают вопрос. Что за return? Как всегда говорят что ничего не будут у себя менять и проблема в вашей 1С.
#56 by ChunLee
Не пойму, может я что-то настроил не так, что 1С выдает такой ответ.Может кто сталкивался с такой ситуацией? Можно ли как то ручками подкорректировать ответ 1С?
#57 by ChunLee
Fragster ты пользовался данной библиотекой Я уже думаю лучше создать веб сервис на php со своей стороны. Получится 1С > мой веб сервис на PHP > Конечный веб сервис. Если она реально рабочая я с помощью этой библиотеки смогу общаться со своим веб сервисом, а уж php c php смогут найти общий язык я думаю. Как считаешь такая идея имеет право на жизнь. Или все таки есть какой-то более простой вариант? Просто видишь разрабы менять в своем веб сервисе ничего не собираются потому что через него уже в течении года обмениваются другие организации, а ломать из-за нас одних они не собираются.
#58 by ChunLee
Ха вот прикол, это ты эту библиотеку запилил)))))) Сорян. Так, что проканает такая задумка как считаешь?
#59 by Fragster
такой подход работает. единственное - не работает с двоичными данными и не предназначен для передачи большого количества данных (ну, или настраивать php.ini надо на время скрипта и потребляемую память)
#60 by Fragster
в простейшем виде (где простыми операциями со строками можно добиться эффекта) эффективнее может быть подход, подобный
#61 by denis_jj
сталкивались с проблемами обмена 1С с разными WEB сервисами в разные стороны. Обычно 1С читает все wsdl если они валидные. Проверить валидность можно SOAP-валидатором, например SOAPUI. Отдает 1С нормальные wsdl. Если принимающий не читает, то что-то в нем не так.
#62 by ChunLee
У меня получилось подстроить 1С так чтобы строка return перестала выходить. теперь ответ такой          <m:putCorrespondentsResult xsi:type="m:putCorrespondentsResponse" xmlns:xs="; xmlns:xsi=";             <m:putCorrespondentsResult xsi:type="xs:string">Ошибка создания корреспондента</m:putCorrespondentsResult> теперь мне говорят что в ответе в начале нет <?xml version="1.0" encoding="UTF-8"?> Неужели это так принципиально?
#63 by denis_jj
на SOAP есть стандарт. SOAPUI как раз проверяет соответствие со стандартом. Так что ориентируйтесь на него. Отсутствие какого-либо блока, обязательного по стандарту, принципиально.
#64 by ChunLee
Тогда вопрос. Как затолкать в ответ 1С этот блок?
#65 by Serginio1
А ты фиддлером смотришь?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С