7.7 Помогите пожалуйста разобраться с DCOM объектом (1C + PHP)

Тема в разделе "Обмен данными в "1С:Предприятие 7.7"", создана пользователем dima_si, 28 мар 2013.

  1. TopicStarter Overlay
    dima_si
    Offline

    dima_si

    Регистрация:
    28 мар 2013
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Уважаемые форумчане, прошу помощи в решении своего вопроса, возможно, кто-то сталкивался с вопросами интеграции 1С 7.7 в приложения WEB. Даже и не знаю на каком из форумов задавать данный вопрос. Имеется WEB приложение, написанное на PHP (Windows + Apache + PHP + MySQL), реализован модуль формирования документов 1С через WEB-интерфейс (модуль рабочий), 1С установлена на WEB-сервере, для интеграции используется DCOM объект «V77.GeneralPropPage».
    Алгоритм действия: пользователь заходит через WEB-интерфейс, совершает какое-то действие (нажимает кнопку), в 1С создается необходимый документ.
    Встал вопрос о разделении серверов, 1С переезжает на отдельный сервер, не удается подключить DCOM объект удаленного сервера

    Тестовый код подключения DCOM-объекта на PHP (локальный вариант, код работает)

    $path="C:\\Base\\1c_base";
    $myCom = new COM("V77.Application") or die("Unable to instantiate");
    if ($myCom->Initialize($myCom->RMTrade,"/d$path /nUser /pPassword","NO_SPLASH_SHOW")==0)
    echo "ERROR [$path]";
    else
    echo "OK! [$path]";


    Для подключения удаленного сервера используется следующий код PHP

    $path="C:\\Base\\1c_base";
    $server=”192.168.1.2”; //$server=”Server1C”;
    $myCom = new COM("V77.Application",$server) or die("Unable to instantiate");
    if ($myCom->Initialize($myCom->RMTrade,"/d$path /nUser /pPassword","NO_SPLASH_SHOW")==0)
    echo "ERROR [$path]";
    else
    echo "OK! [$path]";

    Ответ сервера:
    Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `V77.Application': Отказано в доступе. ' in F:\home\test\www\index.php:9 Stack trace: #0 F:\home\test\www\index.php(3): com->com('V77.Application', '192.168.1.2') #1 {main} thrown in F:\home\test\www\index.php on line 3

    Была мысль, что нужна авторизация, в мануалах PHP практически нет примеров (и толкогого описания) авторизованного доступа, есть строчка: «If server_name is an array, it should contain the following elements (case sensitive!). Note that they are all optional (although you need to specify both Username and Password together); if you omit the Server setting, the default server will be used (as mentioned above), and the instantiation of the object will not be affected by the directive.», тогда поменял код и добавил авторизацию ассоциированным массивом:

    $path="C:\\Base\\1c_base";
    $server=array("Server"=>"192.168.1.2","Username"=>"user1","Password"=>"MyPassword");
    $myCom = new COM("V77.Application",$server) or die("Unable to instantiate");
    if ($myCom->Initialize($myCom->RMTrade,"/d$path /nUser /pPassword","NO_SPLASH_SHOW")==0)
    echo "ERROR [$path]";
    else
    echo "OK! [$path]";

    Ответ сервера:
    Fatal error: Uncaught exception 'com_exception' with message 'Failed to create COM object `V77.Application': Сервер RPC недоступен. ' in F:\home\test\www\index.php:3 Stack trace: #0 F:\home\test\www\index.php(3): com->com('V77.Application', Array) #1 {main} thrown in F:\home\test\www\index.php on line 3

    Как видим это не массив.

    Еще была мысль, что это структура (класс), попробовал следующим кодом:

    class myClass {
    var $Server='192.168.1.2';
    var $Username='user1';
    var $Password='MyPassword';
    }

    $server= new myClass();
    $path="C:\\Base\\1c_base";
    $myCom = new COM("V77.Application",$server) or die("Unable to instantiate");
    if ($myCom->Initialize($myCom->RMTrade,"/d$path /nUser /pPassword","NO_SPLASH_SHOW")==0)
    echo "ERROR [$path]";
    else
    echo "OK! [$path]";

    Ответ сервера:
    Fatal error: Uncaught exception 'com_exception' with message 'Could not create COM object - invalid arguments!' in F:\home\test\www\index.php:9 Stack trace: #0 F:\home\test\www\index.php (9): com->com('V77.Application', Object(myClass)) #1 {main} thrown in F:\home\test\www\index.php on line 9

    Тоже не подошло...

    Системный администратор клянется и божиться, что доступ до объекта имеется. Пробовали и через определенного пользователя и давали доступ для всех пользователей, не помогло.

    У кого имеется опыт в данном вопросе, прошу подскажите, каким образом организовать связь с DCOM-объектом удаленного сервера? Желательно авторизованный доступ, но мне будет интересен и опыт не авторизованного доступа.
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    доступ должен быть у того пользователя, под которым крутится процесс сайта (пользователь сервиса апача чаще всего). причем этот пользователь должен быть в домене, а не локальным, чтобы иметь одинаковые sid

    ну и не заморачивались бы вы с dcom до 1с 7.7 - поставьте клиента локально, а база пусть лежит где хотите.
  3. TopicStarter Overlay
    dima_si
    Offline

    dima_si

    Регистрация:
    28 мар 2013
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Пробовали уже все варианты с пользователями. Хотелось бы иметь правильный (рабочий) вариант обращения, чтобы можно было с уверенностью "пинать" сисадмина. не заморачиваться не можем, т.к. нужно разнести нагрузку по разным серверам. С WEB-сервера 1С будет уезжать, т.к. WEB будет 2008 (64 бита)

Поделиться этой страницей