Имя: Пароль:
1C
1С v8
Соединение с Axapta по COM в фоновом задании
0 111222333444
 
07.06.13
10:41
Всем трям.

Имеется:
1. 1С 8.2 УПП 1.3.39.1, платформа 8.2.18.82.
2. Аксапта 4.0

Задача:
В фоновом задании подключиться из 1С к Аксапте, выполнить определенные процедуры.

Реализация:
В общем неглобальном модуле (стоят галки "Сервер", "Внешнее соединение", "Клиент(обычное приложение)", "Вызов сервера") создана экспортная процедура, которая благополучно назначена регламентному заданию

Axapta = Новый COMObject("AxaptaComConnector.Axapta3");
Axapta.Logon("", "", "", "");  
//тут идут определенные процедуры
Axapta.Logoff();

Проблема:
Метод Logon отрабатывает с ошибкой "Ошибка при вызове метода контекста (Logon)".

Дополнительные замечания:

При запуске вышеозначенного кода на клиенте (вариант запуска "А") - всё отрабатывает как и задумано - логинится, выполняются процедуры, логофается.
При запуске же как фонового задания (вариант запуска "Б") - болт.
В обоих случаях запуск происходит физически на одном и том же компе, который является собственно сервером приложений.
Служба сервера приложений запущена под тем же доменным пользователем, под которым производится запуск по варианту "А".
В аксапте заведен этот же пользователь с доменной авторизацией.

Поиск по мисте юзал, поиск по forum.mazzy.ru юзал.

Вопрос:
кто-то сталкивался с подобной проблемой? как решали?
1 бомболюк
 
07.06.13
10:50
Что то было: на сервере например, не получалось создать КОМ объект, оформленный как *.ocx, то есть визуальный компонент, писалось что то типа "Интерфейс не поддерживается", хотя на клиенте все работало. КОМ объект, оформленный по другому, нормально создавался и работал на сервере. Может и тут что то типа этого.
2 111222333444
 
07.06.13
10:53
так ком объект-то создается. валится при выполнении метода Logon
3 бомболюк
 
07.06.13
10:58
а при выполнении метода вывод каких нить форм предусмотрен?
4 111222333444
 
07.06.13
11:00
(3) нет
5 бомболюк
 
07.06.13
11:03
а точно после вызова
6 бомболюк
 
07.06.13
11:03
Axapta = Новый COMObject("AxaptaComConnector.Axapta3");
Axapta определено?
7 111222333444
 
07.06.13
11:07
(6) да. как ком-объект
8 бомболюк
 
07.06.13
11:11
может можно до Logon еще какой нить метод вызвать или свойство, чисто для проверки? Если будет работать - тогда скорее всего дело в кишках КОМ объекта, я так понимаю, на которые повлиять нельзя.
9 111222333444
 
07.06.13
11:48
(8) Axapta.Refresh(); отрабатывает без ошибок
10 Галахад
 
гуру
07.06.13
11:51
Может, ну его, фоновое? Стартовать клиента из планировщика и не париться.
11 111222333444
 
07.06.13
11:55
(10) вариант, но чесгря не очень нравится. да и дело принципа уже забороть эту тему
12 111222333444
 
07.06.13
11:55
(8) а вот Axapta.Session() не вызывается. говорит метод объекта не обнаружен
13 бомболюк
 
07.06.13
12:09
ну значит КОМ объект создается, откликается, а проблемы связаны с реализацией отдельных его методов. Если конечно есть время, желание и навыки владения каким нить нормальным языком, поддерживающим разработку КОМ объектов, можно изучить проблему более детально, только зачем? Присоединяюсь к (10).
14 alexhtn
 
07.06.13
12:32
(0) Проблема может быть в правах доступа к ком объектам.
Для проверки можно сделать запуск службы 1С от имени администратора
15 111222333444
 
07.06.13
12:40
(14) пользователь, под которым запущена служба имеет админские права
16 111222333444
 
07.06.13
15:13
апну разок
17 111222333444
 
07.06.13
17:21
и еще ап
18 Serginio1
 
07.06.13
17:37
(17) У тебя сервер 1C 64 разрядный?
19 acsent
 
07.06.13
17:40
(15) попробуй запустить службу 1с от своего имени
20 Serginio1
 
07.06.13
17:42
Там могут быть варианты когда внутри акзапты лезут куда то
v8: Зависает при создании COMОбъекта на стороне сервера
v8: регламентное задание и Ексель
21 111222333444
 
10.06.13
09:29
(18) хз, вроде 32
а как определить наверняка?
22 Serginio1
 
10.06.13
10:51
(21) Посмотри в сервисах какой у тебя 1C:Enterprise 8.2 Server Agent
23 111222333444
 
10.06.13
11:19
(22) 64 там нигде не мелькает. значит 32-битный. это хорошо или плохо?
24 Господин ПЖ
 
10.06.13
11:21
(23) это значит что нет нужды создавать обертку для com
25 Serginio1
 
10.06.13
11:23
(23) Это хорошо. Значит скорее всего у тебя проблемы с правами. Смотри 20
26 Serginio1
 
10.06.13
11:23
С правами DCOM
27 111222333444
 
10.06.13
12:14
(24) ага, понятно. но всё равно создал. хуже-то не будет?
(26) добавил пользователя, под которым запускается служба сервера в группу distributed com users. ничего не поменялось. или это не то?
28 Serginio1
 
10.06.13
12:36
Из v8: регламентное задание и Ексель
Подсказали решение на SQL.ru
На сервере необходимо было еще установить в локальных политиках право на запуск DCOM для конкретных пользователей.
и, о чудо, все заработало :-)
29 111222333444
 
10.06.13
14:44
(28) а чем это отличается от (27)
30 Serginio1
 
10.06.13
14:56
(29) Читай ссылки v8: регламентное задание и Ексель
37
(33) кроме того в (10) вообще ничего не сказано про то что 1С запускает DCOM без пользователя.
я внимательно прочитал то что Вы советовали, и в результате добавил пользоваля сервера 1С в группу Пользовтелей DCOM - только это не решило проблемы из-за некорректной работы 1С с DCOM на сервере (17).
К сожалению я не настолько глубоко разбираюсь в администировании win server, что б по термину 'DCOM' понять все возможные проблемы  и где их искать, в противном случае этот вопрос не выносился бы на обсуждение в текущем форуме.
31 Serginio1
 
10.06.13
14:57
Там же 31
я подозреваю что проблема все таки остается в том что DCOM запускается с пустым пользователем, но не знаю как можно это поправить
Я сделал следующее в настройках DCOM:
Администирование-СлужбыКопонентов-Компютеры-МойКомпютер-настройка DCOM-Microsoft Excel application- Свойства-Удостоверение: Указанный пользователь - выбрал администратора сервера и ввел его пароль
32 Serginio1
 
10.06.13
15:01
Раз ты сделал обертку для СОM+ то вместо Microsoft Excel application впиши название твоей обертки, что бы она запускалась под юзером с нужными правами
33 111222333444
 
10.06.13
15:14
(32) туда нельзя ничего вписывать, нет такого пункта меню
34 111222333444
 
10.06.13
15:16
(30) чем отличается "добавил пользователя, под которым запускается служба сервера в группу distributed com users" от
"На сервере необходимо было еще установить в локальных политиках право на запуск DCOM для конкретных пользователей." ?
35 Serginio1
 
10.06.13
15:37
(34) Прошу прощения. Давно правами не занимался.Скорее всего речь идет об правах на запуск конкретного приложения.

Если ты описал её как COM+ http://www.steeltrace.ru/details/articleid/22/регистрация-1с-com-компонента-для-работы-с-64-битными-приложениями.aspx

или она уже есть в Приложения COM+, то у неё есть свойства и безопасность

Чтобы установить разрешения на доступ в масштабах компьютера

Откройте оснастку «Службы компонентов».

В оснастке «Службы компонентов» щелкните правой кнопкой мыши компьютер, для которого хотите изменить разрешения на доступ в масштабах компьютера, а затем щелкните Свойства.

Откройте вкладку Безопасность COM.

В разделе Права доступа щелкните Изменить ограничения или Изменить умолчания в зависимости от того, требуется ли изменить политику ограничений в масштабах компьютера или только параметры по умолчанию в масштабах компьютера. Откроется диалоговое окно Права доступа.

Для удаления учетной записи пользователя или группы выберите пользователя или группу в списке Группы или пользователи и нажмите кнопку Удалить. Выбранная учетная запись или группа больше не будет отображаться в списке.

Чтобы добавить нового пользователя или группу, нажмите кнопку Добавить. В диалоговом окне Выбор пользователей, компьютеров или групп введите полное имя добавляемого пользователя или группы.

Если имя пользователя или группы не известно, нажмите кнопку Дополнительно, а затем щелкните Начать поиск, чтобы просмотреть список пользователей и групп в выбранном домене. Выберите пользователя или группу и нажмите кнопку ОК. Добавленный пользователь или добавленная группа появится в списке Группы или пользователи.

В списке Группы или пользователи выберите группу или пользователя, чье разрешение на доступ в масштабах компьютера хотите изменить.

В списке Разрешения установите флажок Разрешить или Запретить, чтобы разрешить или запретить разрешение на локальный доступ и разрешение на удаленный доступ для выбранного имени группы или пользователя.

Нажмите кнопку ОК, чтобы вернуться на вкладку Безопасность COM.

Нажмите кнопку ОК. Новые разрешения на доступ в масштабах компьютера будут применены при следующем запуске приложения на компьютере. Сделанные настройки не действуют в отношении приложений, выполняющихся в текущий момент, до тех пор, пока они не будут перезапущены.

Дополнительная информация
Оснастка «Службы компонентов» больше не входит в группу «Администрирование». Чтобы открыть оснастку «Службы компонентов», нажмите кнопку Пуск. В текстовом поле введите команду dcomcnfg и нажмите клавишу ВВОД.
36 Serginio1
 
10.06.13
15:44
Посмотри там же настройки DCOM для акзапты
37 Serginio1
 
10.06.13
15:45
Там явно проблема с правами, раз локально работает, а под сервисом не хочет.
38 111222333444
 
10.06.13
15:54
(35) это я сделал
(36) настроек там же DCOM для аксапты нету =))
39 Serginio1
 
10.06.13
16:15
Можешь попробовать засунуть DLL акзапты в Приложение COM+ указать от кого должна запускаться итд. По аналогии http://www.steeltrace.ru/details/articleid/22/регистрация-1с-com-компонента-для-работы-с-64-битными-приложениями.aspx
40 111222333444
 
10.06.13
17:06
(39) та же песня
41 Serginio1
 
10.06.13
17:07
Пиши в поддержку акзапты. Здесь не проблема 1С.
42 Serginio1
 
10.06.13
17:11
43 Serginio1
 
10.06.13
17:22
44 111222333444
 
10.06.13
17:28
спасибо за участие!