Имя: Пароль:
1C
 
Работа с 1с через PHP
0 Thatatos
 
31.07.06
15:47
Уменя вот такая проблема...
На PHP написан скрипт который через OLE запрашивает в 1С функцию такого вида

Функция Функц(Массив1[], Массив2[], х1, х2)
//Тут оба массива заполняются
Возврат 1;
Конец Функции

На PHP обращение выглядит так:
$c1 = new COM("V77.Application") or die("Unable to instanciate");
$res = $c1->initialize($c1->rmtrade,'/DC:\СУУ /M','NO_SPLASH_SHOW');
$list1=array();
$list2=array();
$adr1=&$list1;
$adr2=&$list2;
$result = $c1->EvalExpr("Функц(".$adr1.",".$adr2.",1,100)");  

В итоге выдает ошибку где пишет вызов функции который передался в 1с таком виде Функц(<array>,<array>,1,100)<>; ОТкуда беруться эти <> в конце строки? Я так понял ошибка именно из за них...

Если кто нибудь уже работал с этим может сможет поправить меня...
1 Кецалькоатль
 
31.07.06
15:57
Хм... нет, я не работал, но идея очень и очень интересная! Попробую ее развить в Web-интерфейс.
2 Олдж
 
31.07.06
16:03
Функция Функц(Массив1[], Массив2[], х1, х2) Экспорт
3 asady
 
31.07.06
16:11
Массивы в семерке не покатят - лучше строкой передавай, а строку делай из СЗ путем ЗначениеИзСтрокиВнутр и ЗначениеВСтрокуВнутр или еще как-нибудь.
4 Camino
 
31.07.06
16:16
(0) Я думаю, что в конце строки <> - это какой-то глюк вывода ошибки. В вызове ошибок я не вижу.
Покажи ошибку так, как ее отдает РНР.
5 Camino
 
31.07.06
16:18
А ошибка скорее всего действительно из-за того, что ты пытаешься передать через OLE неолешный тип данных.
6 Андрюха
 
31.07.06
16:20
(0) Смело можешь подавать свою работу на конкурс "моё извращение".
(1) Что интересного? Что водку через клизьму хлещут?
7 Camino
 
31.07.06
16:20
(6) Хорошее мнение. Аргументированное.
8 Андрюха
 
31.07.06
16:27
(7) Если бы из пакетных файлов DOS тоже можно было бы обращаться к 1С, думаю нашлись бы люди, котрые начали бы делать учетные системы, опираясь на "гибкую систему батников".
9 gr13
 
31.07.06
16:32
(8) а где здесь батник? или я наотдыхался до того, что просто не вижу?
10 Camino
 
31.07.06
16:35
(8) Ты себе не можешь и представить многообразие ситуаций в которых может потребоваться обращение из РНР по OLE (например, в 1С). У меня такая ситуация (не с 1С, правда, а с другой системой) была не далее чем пару месяцев назад. Поэтому юношеский максимализм на подобные темы меня просто веселит.
11 Андрюха
 
31.07.06
16:36
(10) Теперь мне понятен твой отказ.
12 gr13
 
31.07.06
16:37
(10) мне вообще этот вопрос интересен. На данный момент как интерсный метод программирования. И возможно скоро прийдется нечто подобное реализовывать.
13 andrey1111
 
31.07.06
16:42
мне кажется прав (3). Ты пытаешься передать объект (массив), который существует в контексте процесса PHP в контекст 1С. Попробуй для начала упростить функцию в 1С (убрать массивы) и передай ей простые типы. Посмотри что получиться
14 Thanatos
 
01.08.06
12:55
(2) Даже если экспортную функцию сделать все равно не работает по тем же причинам.


Придеться все делать в строках ((
15 Кецалькоатль
 
02.08.06
14:06
на РНР есть такая штука
$vVar = new VARIANT($var)
можно через нее массивы передавать
16 vitaly
 
02.08.06
19:38
А может кто нибудь сказать как это будет с точки зрения быстродействия?
Мне кажется, что этв вещь:
"$c1 = new COM("V77.Application") or die("Unable to instanciate");
$res = $c1->initialize($c1->rmtrade,'/DC:\СУУ /M','NO_SPLASH_SHOW'); "
будет каждый раз запускать базу, что само по себе не очень быстро!
Или я не прав в таком вопросе????
17 Camino
 
02.08.06
21:17
(16) В РНР хитрая система работы с OLE-объектами. В связи со сложностями получения сессии, вся забота о хранении оле-объектов возложена на сам экзешник. Т.е. в большинстве случаев он вернет уже созданный объект, а не будет его уничтожать и создавать заново.
18 Ay49Mihas
 
03.08.06
05:01
Народ, использование PHP здесь оправдано только в качестве внутреннего
скрипт-языка для упрощения автоматизации, к Web здесь он не имеет никакого
отношения --- так как для Web он будет запускаться в UNIX-окружении. Поэтому
истерия здесь поднята зря.
19 vitaly
 
03.08.06
13:46
А почему именно UNIX-окружении?
Это не истерия, просто интересно стало
20 Thatatos
 
07.08.06
15:29
(18) Не обязательно в UNIX-окружение...
PHP выбран для доступа к 1С через Веб а не для упрощения автоматизации...
21 Ay49Mihas
 
10.08.06
08:48
>А почему именно UNIX-окружении?

Потому что PHP в большинстве имеет смысл запускать на UNIX --- у большинства провайдеров так.

И потому что нужно делать универсальные решения, а не костыли и затычки дыр. А универсальное решение в данном случае --- событийное управление с промежуточным слоем. Вот так.
22 Ay49Mihas
 
10.08.06
08:51
Ну и плюс ко всему хотел бы я посмотреть на такую конструкцию (запуск OLE-сервера) при настройках принудительного убивания скрипта через 30сек после начала его работы (это настройка PHP по умолчанию).
Ошибка? Это не ошибка, это системная функция.