Получение данных из 1С в PHP используя WEB сервисы 1С
По мотивам статьи «Прямой доступ к базе 1С через MSSQL«. Как уже писал ранее — не понравилось. Жутко трудозатрадно рисовать запросы «руками», сопоставляя структуру из конфигуратора структуре в MS SQL.
Однако есть способ проще. Не использовал его сразу, т.к. у меня были проблемы с настройкой сервиса на стороне 1С. Итак, для примера сделаем классический HelloWorld веб сервис, от которого лишь требуется ответить что-то на какой-то запрос. А заодно напишем клиентскую часть на PHP, которая собственно этот запрос пошлет и обработает ответ. Ниже далее подразумевается что IIS или Apache у вас на сервере где стоит 1С установлен и настроен. Как? Спросите у гугла, это не сложное действо, потому и не буду описывать.
Ну а на стороне PHP все просто. Вот код для обработки этого сервиса:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
function Connect1C(){ if (!function_exists('is_soap_fault')){ print 'Не настроен web сервер. Не найден модуль php-soap.'; return false; } try { $Клиент1С = new SoapClient('http://10.80.16.34/upp_test/ws/ws1.1cws?wsdl', array('login' => 'Administrator', 'password' => 'bublgum', 'soap_version' => SOAP_1_2, 'cache_wsdl' => WSDL_CACHE_NONE, //WSDL_CACHE_MEMORY, //, WSDL_CACHE_NONE, WSDL_CACHE_DISK or WSDL_CACHE_BOTH 'exceptions' => true, 'trace' => 1)); }catch(SoapFault $e) { trigger_error('Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.', E_ERROR); var_dump($e); } //echo 'Раз<br>'; if (is_soap_fault(Клиент1С)){ trigger_error('Ошибка подключения или внутренняя ошибка сервера. Не удалось связаться с базой 1С.', E_ERROR); return false; } return $Клиент1С; } function GetData($idc, $txt){ if (is_object($idc)){ try { $par = array('zapros' => $txt); //var_dump($par); $ret1c = $idc->hellobaza($par); } catch (SoapFault $e) { echo "АЩИБКА!!! </br>"; var_dump($e); } } else{ echo 'Не удалося подключиться к 1С<br>'; var_dump($idc); } return $ret1c; } $idc = Connect1C(); $ret1c = GetData($idc, "привет"); //var_dump($ret1c); $aa=$ret1c->return; echo "!!$aa!!"; |
Как показала дальнейшая практика, запросы посредством такого способа обрабатываются ну очень медленно. До нескольких секунд..
Здравствуйте, я как вижу на 1с и php вы «собаку съели»
можете порекомендовать с чего начать ?- у меня есть 1 с сервер с базой posgresql я хочу получать из этой базы данных данные и загружать их на сайт, думал напрямую в posgresql запрос делать, да пока не пойму как это сделать, информации по структуре 1с бд не нашел, что имею ввиду как обращаться к таблицам и как их названия, какие поля что значат ? может какие уже наработки есть по таким вопросам — где почитать ?
В свое время на infostart.ru скачивал обработку которая раскрывает соответствие структуры базы данных конфигуратора и физическуи таблицы.А далее из PHP тащил запросами нужную информацию. Намучался. Потом понял, что лучше таки для этих целей использовать «сервисы ws 1C».
Какой же жуткий мусор в коде.
Composer пакета для PHP и работы с этим сраным 1C нет?
А как авторизоваться в 1с из jquery через odata?