|
Веб-сервер из apache + php + 1C: как? | ☑ | ||
---|---|---|---|---|
0
Котокот
08.10.13
✎
16:26
|
Веб-интерфейс для 1С. Он уже есть, но формируется пока в форме 1С в тонком или веб-клиенте, а надо чтобы прямо из браузера можно было открыть. Как реализуем: поднимаем сервер с 1С, апачем и php на борту, кладем в нужную папку php-шный скрипт, который принимает GET-запросы от пользовательского браузера, переводит их в нужный вид, отправляет 1С-ке и полученный от нее результат пихает в ответ юзеру - принцип простой.
Вопрос: как лучше организовать связь между php и 1С? 1С тут получается выступает только в роли сервера - принимает запросы, отправляет ответы. Какой канал взаимодействия лучше использовать: веб-сервисы, OLE, что-то другое? |
|||
1
zladenuw
08.10.13
✎
16:27
|
веб-сервисы
|
|||
2
php5
08.10.13
✎
16:30
|
(0) Веб-сервисы более правильно и надежно.
Можно и через промежуточный файл, с помощью Новый HTTPСоединение, НТТР.Получить(), см. в яндексе... |
|||
3
Котокот
08.10.13
✎
16:39
|
(2) Не, промежуточный файл это не вариант, это ж лаги будут - пока его слепишь и запишешь, пока на той стороне его увидят и прочитают...
|
|||
4
Котокот
08.10.13
✎
16:40
|
Вариант веб-сервисов хорош еще тем, что можно физически разнести сервер с php и сервер с 1С. Главное чтобы веб-сервисы не отваливались и работали быстро и стабильно.
|
|||
5
badboychik
08.10.13
✎
16:47
|
Из браузера ты с апачем не откроешь, надо писать собственное веб приложение на ASP.NET
|
|||
6
badboychik
08.10.13
✎
16:47
|
используя веб-расширение
|
|||
7
Котокот
08.10.13
✎
16:49
|
(5) Что не открою?
|
|||
8
badboychik
08.10.13
✎
16:49
|
А хотя через веб-сервисы можно.. только у меня сложные сложенные структуры не получалось разбирать в РНР, но если решил это - напиши )
|
|||
9
badboychik
08.10.13
✎
16:50
|
можно из РНР подключиться через СОМ-соединение
http://php.net/manual/en/ref.com.php |
|||
10
Котокот
08.10.13
✎
16:50
|
(8) Ото ж, а то я уже возомнил себя шмелем, который по законам аэродинамики летать не должен но летает так как не знает законов аэродинамики.
|
|||
11
Котокот
08.10.13
✎
16:51
|
(8) Что подразумеваешь под сложными сложенными структурами?
|
|||
12
Котокот
08.10.13
✎
16:51
|
(9) Будет быстрее и надежней веб-сервисов?
|
|||
13
badboychik
08.10.13
✎
16:52
|
(11) список значений со справочниками внутри например
|
|||
14
badboychik
08.10.13
✎
16:52
|
(12) ну если соединение создать и хранить между сессиями, то должно быть очень быстро
|
|||
15
Котокот
08.10.13
✎
16:54
|
(13) А нафейхоа его в php разбирать? Идея в том, чтобы все разборки проводить на стороне 1С и выплевывать php-шке уже готовый html.
|
|||
16
Lionee
08.10.13
✎
16:55
|
пишешь морду на пхп. пхп "общается" с 1с-ной базой через ком. собственно все....
|
|||
17
Котокот
08.10.13
✎
16:56
|
(14) Ну допустим я php-скриптом подключился к 1С и вишу на этом соединении, время от времени пингуя ее, если нет активности пользователей, типа "я тут". Если пользователь кидает запрос к этому скрипту, я его разбираю, формирую запрос к 1С, выполняю его и забираю результат - это подходит под определение "соединение создать и хранить между сессиями"?
|
|||
18
Котокот
08.10.13
✎
16:56
|
(16) Это понятно, сейчас стоит вопрос выбора канала соединения между php и 1С
|
|||
19
badboychik
08.10.13
✎
16:58
|
(15) не не не, как это "зачем разбирать"?? Тебе 1С выдает ответ в виде SOAP XML, ты его в ПХП должен понять, вытащить данные из полей и массивов и т.д.
Как ты собрался HTML внутри 1С формировать, зачем делать за РНР его работу? |
|||
20
Котокот
08.10.13
✎
17:00
|
(19) Так же как и сейчас формирую - беру дерево объектов 1С (выборку из запроса, дерево значений etc.) и "перевожу" в дерево DOM. ИМХО собрать готовый html на стороне 1С значительно проще, чем в php.
|
|||
21
badboychik
08.10.13
✎
17:01
|
(20) ппц, лезешь в форточку когда двери нараспашку...
|
|||
22
Котокот
08.10.13
✎
17:03
|
(21) Так ты ж сам говоришь - "у меня сложные сложенные структуры не получалось разбирать в РНР". Вот я их и разбираю в 1С, где это легко. 1С отлично работает с ДокументHTML.
|
|||
23
badboychik
08.10.13
✎
17:03
|
Если точно помню свои потуги, то простые значения можно передавать из 1С строками, а сложные типа (13) - они передаются сериализованными в XDTO, поэтому в РНР их надо распаковывать, это единственная сложность.
(20) А если надо поменять дизайн страницы, добавить CSS, скрипты, картинки? Тоже в 1С полезешь в DOM-дерево встраивать? |
|||
24
Котокот
08.10.13
✎
17:05
|
(23) Да, оно там тоже запросто делается
|
|||
25
Котокот
08.10.13
✎
17:05
|
+(24) Я ж говорю - в форме 1С уже все отлично работает, осталось научиться открывать это из браузера.
|
|||
26
badboychik
08.10.13
✎
17:28
|
(24) ты извращенец, фу таким быть.
Разработал технологию удаления гланд через опу, теперь осталась маленькая проблема - как руку засунуть ))))) |
|||
27
Котокот
08.10.13
✎
17:34
|
(26) Аргументируй! В php мне что надо сделать? Взять полученную из 1С структуру объектов и на ее основе сформировать текст вида "<html><head><css>...</head><body>ОбъектыОбъектыОбъектыОбъектыОбъектыОбъектыОбъектыОбъекты</body>", но при этом есть трабла с разбором сложных 1Сных струкрур в php. В 1С я делаю то же самое: беру сложные структуры, запросто их разбираю и формирую тот же "<html><head><css>...</head><body>ОбъектыОбъектыОбъектыОбъектыОбъектыОбъектыОбъектыОбъекты</body>"
1C легко работает со строками, с ДокументомHTML. Я выдаю из 1С готовый текст, который принимает скрипт php. Скрипту остается просто его выдать клиенту. ЧЯДНТ? Я не критикую твой метод, просто пока не могу понять, чем он лучше моего. |
|||
28
badboychik
08.10.13
✎
17:39
|
(27) 1С - это поставщик данных, апач - поставщик ответного HTML, РНР - обработчик данных и компоновщик динамического HTML. А у тебя смешались в кучу кони, люди...
|
|||
29
badboychik
08.10.13
✎
17:39
|
проблему разбора сложных структур можно решить и сделать веб-приложение по нормальным общепринятым стандартам
|
|||
30
badboychik
08.10.13
✎
17:41
|
если не получится XDTO парсить, можно из 1С выдавать данные, преобразованные в JSON, преобразователи в инете есть и на инфостарте даже
|
|||
31
badboychik
08.10.13
✎
17:44
|
и получится красота : Пользователь -> PHP-SOAP-запрос --> сервис 1C дает JSON-ответ --> PHP встраивает ответ в заранее созданный HTML
|
|||
32
badboychik
08.10.13
✎
17:46
|
(27) PHP не формирует весь текст "<html><body>...</body></html>", этот текст вообще отдельно создается и лежит как шаблон, а РНР только кусочками внутри встроен, где содержимое изменяется, неужели не знал это????
|
|||
33
Котокот
08.10.13
✎
17:50
|
(28) Ну а почему бы не заюзать ДокументHTML, который является частью платформы? Почему веб-приложение должно лучше справиться с задачей компоновки HTML? Может оно и справится лучше, я не спорю, но опять же - мы решаем проблему разбора сложных структур.
|
|||
34
Котокот
08.10.13
✎
17:51
|
(32) Да ладно! Вариант с шаблонами имеет место быть, но кто сказал, что PHP не формирует весь текст?
|
|||
35
badboychik
08.10.13
✎
17:54
|
(33) эта проблема - ничто по сравнению с получившимся монстром. 1С придется тупить при формировании ДОМ-дерева и гонять кучу текста при каждом запросе, а картинки вообще не вставишь. Доработка
(34) Приведи пример где РНР формирует весь текст! РНР вообще для этого и задумывался чтобы писать маленькими вставками в готовый HTML. |
|||
36
badboychik
08.10.13
✎
17:54
|
доработка превратится в издевательство, получится велосипед с кубическими колесами
|
|||
37
badboychik
08.10.13
✎
17:57
|
это индусский подход - не изучать "как надо", а делать квадратно-гнездовым способом, подгоняя и выкручиваясь начальными знаниями
|
|||
38
Котокот
08.10.13
✎
17:58
|
(35) ну вот пример:
<?php header("Content-Type: text/html; charset=UTF-8"); ?><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <?php //echo($_POST[invoiceID]); //try { $client = new SoapClient("http://xx.xx.xx.xx/ut_77/ws/siteex.1cws?wsdl",array( //$client = new SoapClient("http://xx.xx.xx.xx/ut_01/ws/siteex.1cws?wsdl",array( "trace" => 1, "exceptions" => 0, "login" => "****", "password" => "******")); $a["invoiceID"] = $_POST[invoiceID]; //$a["invoiceID"] = "4357"; $result = $client->getinvoice($a); $inv_text = $result->return; //print_r($result); //echo print_r($client->__getFunctions(), true) //echo ($result->return); //} catch (Exception $exc) { // echo ("\n".$exc->getMessage()); // echo ("\n".$exc->getTraceAsString()); //} // Обрабатываем полученный текст счета // Меняем кодировку //$inv_text = str_replace("CHARSET=utf-8", "CHARSET=windows-1251", $inv_text); // Заменяем картинки на выложенные на хостинге $inv_text = str_replace('img_1', '<img src="http://www.xxx.ru/bitrix/templates/safemoney.ru_2013/img/ip_sign.png" ALT = "" STYLE = "position:absolute;z-index:-1;">', $inv_text); $inv_text = str_replace('img_2', '<img src="http://www.xxxru/bitrix/templates/safemoney.ru_2013/img/ip_stamp.png" ALT = "" STYLE = "position:absolute;z-index:-1;">', $inv_text); //$inv_text = str_replace('<TD CLASS=R27C7 COLSPAN=13 ALIGN=LEFT VALIGN=TOP STYLE="padding-left:0px"><IMG SRC = "invoice_files\image000.png" ALT = "" STYLE = "margin-left:0pt;margin-top:0pt;"></TD>', '<TD><SPAN></SPAN></TD>', $inv_text); //$inv_text = str_replace('<TD CLASS=R27C7 COLSPAN=12 ALIGN=LEFT VALIGN=TOP STYLE="padding-left:0px"><IMG SRC = "invoice_files\image001.png" ALT = "" STYLE = "margin-left:1pt;margin-top:0pt;"></TD>', '<TD><SPAN></SPAN></TD>', $inv_text); $inv_text = str_replace('<IMG SRC = "invoice_files\image000.png" ALT = "" STYLE = "margin-left:0pt;margin-top:0pt;">', '', $inv_text); $inv_text = str_replace('<IMG SRC = "invoice_files\image001.png" ALT = "" STYLE = "margin-left:1pt;margin-top:0pt;">', '', $inv_text); // Добавляем скрипт и кнопку распечатки $inv_text = str_replace('<HEAD>', '<HEAD><script language="javascript">function printPage(){document.getElementById("PrintButton").style.display="none";window.print();document.getElementById("PrintButton").style.display="";}</script>', $inv_text); $inv_text = str_replace('</BODY>', '<br><br><input type="button" id="PrintButton" value=" Печать " onClick="printPage()"></BODY>', $inv_text); // Выводим результат на страницу echo($inv_text); ?> </body> |
|||
39
badboychik
08.10.13
✎
17:58
|
например индус не знает циклы и хочет увеличить число на 5. Он не будет учить циклы, он просто напишет
А = А +1; А = А +1; А = А +1; А = А +1; А = А +1; работает и ему норм! |
|||
40
arsik
гуру
08.10.13
✎
17:58
|
(33) Весь топик о том, что в php сложно разобрать структуры полученные от вебсервиса.
Там все просто при помощи soap у тебя нормальная структура получается // Подключаемся к веб-сервису через SOAP $client = new SoapClient($ws_url , $options); //Достанем тип запроса $type = (int) getTagContent($xml_query, "act"); if ($type == 1) { //это проверка $params = array('ТекстЗапроса' => $xml_query,'НомерДоговора' => $kc_account); $sp_data = $client->ПолучитьРезультатПроверки($params)->return; if ($sp_data->КодОшибки == 0) { addTagContent($response,"err_code", $sp_data->КодОшибки); addTagContent($response,"err_text", $sp_data->ТекстОшибки); addTagContent($response,"account", $account); addTagContent($response,"client_name", $sp_data->Плательщик); addTagContent($response,"sum_total", $sp_data->СуммаДолга); addTagContent($response,"sum_current", $sp_data->ПросроченнаяЗадолженность); |
|||
41
badboychik
08.10.13
✎
18:00
|
(38) А зачем в начале header если он итак в html уже прописан
|
|||
42
Котокот
08.10.13
✎
18:00
|
(35) "картинки вообще не вставишь" - кто мешает вставить в html ссылку на внешнюю картинку? php будет делать то же самое, не?
|
|||
43
Котокот
08.10.13
✎
18:01
|
(41) Это забыли убрать
|
|||
44
Котокот
08.10.13
✎
18:02
|
Все, я в спортзал, вечерком еще загляну.
|
|||
45
badboychik
08.10.13
✎
18:02
|
(42) так я и говорю, можно сделать велосипед, убить месяц на него и через костыли будет работать. А профи сделает все стандартными методами за день и все будет летать.
|
|||
46
badboychik
08.10.13
✎
18:05
|
(42) картинки будешь отдельно отслеживать на хостинге, отслеживать соответствия для замены строк на адреса в 1С, скрипты будут еще где то лежать, вставляться опять отдельно из 1С, короче какое то болото и спагетти-система, в которой сам через месяц запутаешься
|
|||
47
Котокот
08.10.13
✎
23:46
|
(45) Ну в общем спасибо за ликбез, посмотрим на эти стандартные методы, когда время придет.
|
|||
48
badboychik
11.10.13
✎
03:13
|
Сделал пример взаимодействия веб-сервисов и РНР, оказалось почти ничего сложного
|
|||
49
Котокот
11.10.13
✎
04:33
|
(48) Пример в открытых источниках?
|
|||
50
sttt
11.10.13
✎
07:12
|
гы-гы, маньяки, трудоголики... чем бы дитя не тешилось, лишь бы не плакало)))
|
|||
51
Котокот
11.10.13
✎
10:03
|
(50) Я не работал в 4 ночи, жену в аэропорт отвозил )
|
|||
52
badboychik
11.10.13
✎
10:05
|
(49) Не, сегодня добавлю какой нибудь PHP-фреймворк для красоты кода и Bootstrap для оформления морды, а то на голом РНР не айс.
На инфостарте же есть статья с примером для скачивания. Но мне жалко $m, не качал ) |
|||
53
sttt
11.10.13
✎
11:15
|
(51) я про другое
|
|||
54
Котокот
11.10.13
✎
16:03
|
(52) А после этого можно будет посмотреть?
|
|||
55
badboychik
11.10.13
✎
20:25
|
(54) можно )
|
|||
56
badboychik
13.10.13
✎
02:37
|
С фреймворком как то затягивается. Хочу компоненты http://dhtmlx.com прикрутить или хотя бы на Regenix поставить. Вот базовый код на голом РНР, его можно куда угодно встроить и расширить
http://savepic.net/3912382.png Код: http://pastebin.com/QMkqBwY5 Структура XDTO-типов: Question - структура из "Code,Text,Theme,PartNum,Answer1,Answer1,Answer2,Answer3,Answer4,Answer5,Answer6,RightNum,Pic" QuestionsList - содержит массив Questions из структур Question Themes - структура из "Code, Name" |
|||
57
badboychik
13.10.13
✎
02:49
|
А вообще, если делать корпоративную веб-морду к 1С-сервисам, надо использовать яву и шикарный Vaadin (https://vaadin.com/demo), на РНР ничего путного не сделать, кроме интеграции с интернет-магазинчиками
|
|||
58
Web00001
13.10.13
✎
07:07
|
(56) Про шаблонизаторы как я понял ты не в курсе? Smarty там например? Код пхп сразу в html, назад в 90ые?
|
|||
59
Web00001
13.10.13
✎
07:10
|
>>С фреймворком как то затягивается
Так то да, у них там уже давно MVC, а у тебя пхп в штмл. :) |
|||
60
Rie
13.10.13
✎
07:20
|
(41) Имеет смысл. Поскольку header наверняка сработает, а meta - тут ещё бабушка надвое сказала. Вот зачем meta c Content-Type, если есть header...
|
|||
61
EvgeniuXP
13.10.13
✎
13:35
|
(0) веб-сервис.
|
|||
62
badboychik
13.10.13
✎
17:04
|
(59) дурень, я же и написал что это голый РНР, с MVC и шаблонами у меня все в порядке. Чукча не читатель?
|
|||
63
badboychik
16.10.13
✎
16:56
|
Поставил фреймворк Yii и для интерфейса к нему прикрутил Bootstrap. Теперь открывается простор для написания невероятных АРМов и приложений, работающих с данными 1С ))
|
|||
64
Котокот
16.10.13
✎
16:59
|
(63) Какой будет порядок работы с данными 1С? Что и как извлекается, в каком месте и какими механизмами переводится в html-формат, где и как отображается? Как будет реализована интерактивность и обратная связь?
|
|||
65
badboychik
16.10.13
✎
17:11
|
(64) в контроллерах Yii будут вызовы к 1С и серверная обработка полученных данных, потом передача переменных в макеты, где уже лежит html. Обычная схема MVC, что именно непонятно?
Интерактивность через AJAX, тоже стандартно. Клиентская логика на JavaScript, если надо |
|||
66
Котокот
16.10.13
✎
17:16
|
(65) Ну то есть для работы все этой кухни поднимается некий сервер 1С и некий сервер php+Yii. Клиент в браузере набирает адрес, php берет нужные данные из 1С и красиво отображает в браузере? Верно?
|
|||
67
badboychik
16.10.13
✎
17:18
|
Да. Для бутстрапа есть такие темы - http://demo.onokumus.com/metis/dashboard.html
Или http://suggeelson.com/themes/?theme=supr Куча их. Можно корпоративный портал построить и тянуть сводные данные из 1С |
|||
68
badboychik
16.10.13
✎
17:21
|
Можно и на яве всё это написать. Хочу потом попробовать Vaadin, там вообще вся логика на яве, даже клиентская, она потом компилится в JavaScript и библиотека элементов намного круче
|
|||
69
Котокот
16.10.13
✎
17:22
|
Так а архитектура какая в итоге получается, как в (66)?
|
|||
70
badboychik
16.10.13
✎
17:24
|
(69) абсолютно такая же как в любом веб-приложении. Только одно отличие - РНР данные не из базы MySQL запрашивает, а из сервисов 1С
|
|||
71
Котокот
16.10.13
✎
17:25
|
(70) Гут!
|
|||
72
Котокот
16.10.13
✎
17:26
|
Давай тогда уже примеры использования! А то интересно!
|
|||
73
badboychik
16.10.13
✎
17:31
|
(72) ну я пока хочу написать веб-клиент для базы с вопросами на "1С:Профессионала".
Более тяжелые примеры не придумал, можно сделать интерфейс для какого нибудь сотрудника на складе или базе со слабым китайским планшетом (который не потянет веб-клиент 1С), он будет ходить и тыкать толстым пальцем в большие красивые кнопки на экране |
|||
74
Asmody
16.10.13
✎
17:32
|
и вы при этом собираетесь видимость 1Ски для php организовывать? наружу выпячивать? или это все исключительно для внутреннего пользования?
|
|||
75
badboychik
16.10.13
✎
17:32
|
Или можно сделать приложение объединяющее на одном экране данные нескольких систем, включая 1С. Это все банальность и давно уже применяется.
|
|||
76
badboychik
16.10.13
✎
17:34
|
(74) можно сделать свою авторизацию в приложении хоть по отпечатка пальца, а уже для авторизованного пользователя РНР сделает авторизацию в 1С на стороне сервера
|
|||
77
Котокот
16.10.13
✎
17:35
|
(74) "Для внутреннего" это как? Ну вот например, хотим сделать собственную веб-морду для документа. Это еще "для внутреннего" или уже "наружу выпячивать"?
|
|||
78
badboychik
16.10.13
✎
17:36
|
(77) если веб-сервер и сервер 1С находятся в одной локалке, это для внутреннего. Если пользователь заходит по 3G или из дома - внешний вход
|
|||
79
Asmody
16.10.13
✎
17:38
|
(76) я не это имел ввиду. сервер 1С обычно глубоко внутри корп.сети, наружу ни-ни. там городить огород с php особо не надо. apache+php предусматривают какой-то доступ из-вне, возможно даже на каком-то хостинге. как вы предполагаете доступаться оттуда к 1С?
(у меня есть работающее решение, но мне интересен ход ваших мыслей) |
|||
80
badboychik
16.10.13
✎
17:40
|
(79) так хостинга не надо, свой же сервер должен стоять внутри фирмы. А наружу в инет белый IP виден или можно сделать доменное имя для него, обычная же схема
|
|||
81
Котокот
16.10.13
✎
17:40
|
(79) Так бы и сказал: у меня есть работающее решение, но вдруг ваше окажется лучше
|
|||
82
badboychik
16.10.13
✎
17:42
|
(79) сотрудник заходит на сайт, который хостится на своей же фирме и имеет доступ к корпоративной сети и следовательно 1С
|
|||
83
arsik
гуру
16.10.13
✎
17:51
|
(79) Да тут то все просто. ВПН канал от хостера к серверу внутри корп. сети
|
|||
84
Asmody
16.10.13
✎
17:53
|
(82) т.е. надо организовывать DMZ, выпячивать наружу сервера...
|
|||
85
Asmody
16.10.13
✎
17:54
|
(83) вот это уже лучше. только у меня наоборот: vpn от сервера к хостеру, т.е. на сервере 1С vpn-клиент
|
|||
86
arsik
гуру
16.10.13
✎
17:59
|
(85) Ну тут только от реализации зависит. Если у меня ВПН уже внутрь локалки поднят (для удаленных сотрудников), зачем мне еще и на хостере поднимать.
Ну и удобнее на хостере соединением рулить |
|||
87
badboychik
17.10.13
✎
14:03
|
Единственная проблема - если писать формы документов на веб-морде под Bootstrap, надо допиливать его, например сделать в поле ввода кнопку для открытия формы подбора из справочников или кнопку для калькулятора. А так 90% элементов уже готово или есть в расширениях.
Но это вообще надо кому-то - документы через браузер вводить? |
|||
88
Котокот
17.10.13
✎
16:24
|
(87) Насчет документов - не уверен. Мы делаем визуализацию для учета задач, календарей, интерактивных схем и т.д. - вот тут оно полезно было бы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |