Имя: Пароль:
1C
1С v8
Веб-сервер из 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) Насчет документов - не уверен. Мы делаем визуализацию для учета задач, календарей, интерактивных схем и т.д. - вот тут оно полезно было бы.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой