Имя: Пароль:
1C
 
Подключение OLE в регламентном задании на 64 битном сервере
0 Xershi
 
09.04.15
12:31
Читал:
v8: Подключение OLE в регламентном задании

Но так и не смог у себя настроить выполнение регламентного задания.

Есть сервер1 вин2012 р2 64 бита на нем крутится 1с 8.3 на SQL, также поставили платформу 1с 7.7.

Есть сервер2 вин2003 на нем крутится 1c 7.7 на SQL.

Решал проблему вот тут http://forum.infostart.ru/forum26/topic121228/
Но результат пока не получил.

И так задача:
1. Сделать файл в 1с 8.3 (не важно на каком сервере)
2. Открыть по ОЛЕ 1с 7.7 и загрузить файл

1. Уже решен, а вот с 2 пунктом проблема.

Какие действия дальше? Есть ли решение для 64 битного сервера?
1 Torquader
 
09.04.15
12:41
1С 7.7 как известно 32-битный.
Соответственно, у вас будет STUB в 64-битном процессе для вызова 32-битного локального OLE-сервера - а есть ли она ?
Можно решить по-другому, если написать сценарий VbScript, например, который будет в 32-битном процессе, и запускать его через командную строку с параметрами, а уже этот сценарий пусть "кормит" семёрку файлами.
2 Ёпрст
 
гуру
09.04.15
12:46
(0) не в фоновом задании, п.2 работает, это для начала ?
3 Xershi
 
09.04.15
13:33
(2) да. Я открыл 1с8 на сервере1 и запустил обработку, которая выполнил код, который в регламентном задании. Все работает.

Сама 1с7 запускается нормально на сервере1. Как базу созданную локально на сервере1 так и по сети базу на сервере2.
4 Xershi
 
09.04.15
13:35
(1) получается когда я запускаю 1с8 в режиме предприятия, то у меня процесс 32-битный, а вот когда сервер запускает регламентное задание, то процесс 64-битный?

Решить то можно создав на сервере2 в планировщике запуск 1с7 под юзером и выполнением нужных инструкций.

Вопрос в другом можно ли победить используя ОЛЕ в 64 битном сервере 1с8?
5 Xershi
 
09.04.15
13:52
Вот здесь по идее решили вопрос:
http://forum.infostart.ru/forum16/topic77413/

Но не до конца понятно удалось ли на вин2012 это сделать автору.

Есть идеи?
6 Ёпрст
 
гуру
09.04.15
13:58
(5) Есть, дать права юзверю, под которым запущена служба агента сервера на комкомпоненты в диспетчере служб компонентов. Наслаждаться, кушать печенки.
7 Xershi
 
09.04.15
14:05
(6) речь идет о V77.GeneralPropPage?

Можно подробнее какие комкомпоненты в диспетчере служб компонентов?
8 Ёпрст
 
гуру
09.04.15
14:12
(7) вот эти:
http://pics.rsh.ru/img/123_sr6v8lua.jpg

Но, там может быть не М, а другие, в зависимости от версии 7.7
9 Xershi
 
09.04.15
14:19
(8) у меня только один дком объект
http://forum.infostart.ru/forum26/topic121228/message1334804/?result=reply#message1334804
10 Xershi
 
09.04.15
14:20
Может проблема в этом?
11 Ёпрст
 
гуру
09.04.15
14:21
12 Ёпрст
 
гуру
09.04.15
14:22
+ запусти остнастку от 32
13 Ёпрст
 
гуру
09.04.15
14:24
хотя не, в mmc /32 её не должно быть
14 Xershi
 
09.04.15
14:31
(11) запись в реестре есть, а в ДКОМ нету.
От юзера же работает ОЛЕ или для чего это?
15 Xershi
 
09.04.15
14:32
Заходил через пуск-выполнить (вин+К)
прописывал: DCOMCNFG
16 Ёпрст
 
гуру
09.04.15
14:33
(14) у тебя запуск фонового задания идёт от учетной записи пользователя, от которго служба агент сервера запущена (если , конечно, у тебя не файловая)
17 Xershi
 
09.04.15
14:36
(16) да служба агент сервера запущена от учетной записи: "Администратор".
База на SQL.

Так v77.Application должно быть в ДКОМ объектах?
В реестре у меня есть такая запись!
18 Torquader
 
09.04.15
14:37
(16) А под пользователем, под которым работает сервер, вообще семёрку открыть можно ? Есть мнение, что пользователь должен иметь определённые ветки в реестре и разрешения на папку семёрки.
19 Ёпрст
 
гуру
09.04.15
14:37
(17) да, должна быть
20 Torquader
 
09.04.15
14:37
(17) Зайди под администратором и сделай так, чтобы можно было запускать 1С 7.7
21 Torquader
 
09.04.15
14:40
Можно ещё почитать про COM+:

http://www.chestysoft.com/component-services.asp
22 Ёпрст
 
гуру
09.04.15
14:40
(17) Зайди в 1с-ину 1 раз под админом (локальным) и потом попробуй рестартануть сервер
23 Xershi
 
09.04.15
14:41
(22) попробую.
(18) да код работает и база вручную тоже открывается. Почитай тему на инфостаре там я подробно это написал.
24 Torquader
 
09.04.15
14:54
(23) Так если там вход в 7.7 под специальным пользователем - то зачем вообще нужно OLE - просто в восьмёрке пишется ЗапуститьПриложение где запускается 7.7 под нужным пользователем, а у этого пользователя при входе выполняется обработка, которая загружает файл и после этого завершает 1С.
Просто, через OLE в границе процессов будет медленно, а использовать OLE только для запуска семёрки - особого смысла нет.
25 Torquader
 
09.04.15
14:57
У семёрки, есть ключи запуска:
/nИмяПользователя
/uКаталогПользователя
/pПарольПользователя
/dКаталогБазы
/tКаталогВременныхФайлов
26 Xershi
 
09.04.15
15:26
(24) в принципе это мне и нужно. Не знал что это тоже самое.

Можно пример кода для запуска в студию.

По поводу (22) зашел под локальным админом, затем доменным в 1с7 с параметром как администратор. Затем поставил на процесс агента сервера доменного админа.
Перезапустил сервер в ДКОМ не появилось v77.Application.
Регламентное задание в ошибке как и писал раньше:
Error calling context method (Initialize)
reason:
Unknown error
27 Ёпрст
 
гуру
09.04.15
15:39
(26) а строка подключения какая ? с V1СEnterprise.Application пробовал ?
28 Ёпрст
 
гуру
09.04.15
15:45
если запускаешь 32-х битную остнастку, тоже не видно v7 application ?

comexp.msc /32
29 Xershi
 
09.04.15
16:10
(28) в comexp.msc /32  ДКОМ v77.Application тоже нет.

Сейчас тестирую
СтрокаКоманды = "C:\Program Files (x86)\1Cv77\BIN\1cv7s.exe enterprise /D"+КаталогБазыОЛе+" /N"+ПользовательОле+" /P"+ПарольОле;
    ТекущийКаталог = "C:\Program Files (x86)\1Cv77\BIN";
    ДождатьсяЗавершения = Ложь;
    КодВозврата = "";
    
    ЗапуститьПриложение(СтрокаКоманды,ТекущийКаталог,ДождатьсяЗавершения,КодВозврата);
30 Xershi
 
09.04.15
16:34
ЗапуститьПриложение(СтрокаКоманды,ТекущийКаталог,ДождатьсяЗавершения,КодВозврата);

Запускает, но код в 1с7 не отрабатывает в регламентном задании. Если запустить через обработку все ок.

Не знаю даже куда копать.
31 Torquader
 
09.04.15
16:41
(29) Во-первых, кавычки правильно расставить.
Во-вторых, у пользователя, под которым запускается задание в ПриНачалеРаботы должна открываться обработка.
В-третьих, если сеанс сервера консольный, то семёрка выжрет все ресурсы и не сможет стартануть - это лечится правкой ресурсов для сеанса или запуском в интерактивной сессии.
32 Xershi
 
09.04.15
16:45
(31) с кавычками проблем нет.
Я уже написал что этот код все делает, но в регламентном не работает.

Семерка стартует под юзером процесса агент сервера 1с8.

Она на секунду запускается и пропадает.
Так чем лечить?
33 Torquader
 
09.04.15
16:49
(32) Под пользователем агента из командной строки стартует ?
Также смотрим директорию временных файлов (через ключ /t и чтобы в ней пробелов не было)
Ну и ключи в реестре можно проверить - просто ключ с базами из текущего пользователя выгрузить в пользователю агента загрузить.
Внешних компонент не стартует при запуске ?
34 Xershi
 
09.04.15
17:05
(33) я же написал 1с7 стартует на сервере1 под юзером "АдминДомена" в регламентном задании.
Все ВК уже прописаны.
Если сам "АдминДомена" залогинится и откроет обработку с кодом (29), то запустится 1с7 отработает код написанный в ней и она закроется.

Та же проблема как и с ОЛЕ подключением.

Вопрос в том почему ЗапуститьПриложение в обработке работает, а в регламентном нет.

По поводу временных файлов, то как они вяжутся с выше изложенным?
35 Torquader
 
09.04.15
17:09
(34) у консольного процесса мало GDI-ресурсов, а семёрка создаёт все свои окна со всеми там вытекающими - GDI-память кончается, и она валится с ошибкой.
Можно попробовать в реестре увеличить GDI-память для семёрки.
Можно службе сервера 1С поставить флаг INTERACTIVE, чтобы использовала ресурсы текущей консольной сессии и зайти в неё - если отработает - то проблема в памяти.
36 Xershi
 
09.04.15
17:14
(35) как это сделать?
37 Torquader
 
09.04.15
17:20
Вот здесь описано как увеличить кучу для неинтерактивного сеанса - можно попробовать поставить значение равное значению для интерактивного - если поможет, то это как раз именно оно.
http://www.techarp.com/showarticle.aspx?artno=238&pgno=1
38 Torquader
 
09.04.15
17:21
Если не помогает, то пробовать запускать семёрку через планировщик под отдельным пользователем, для неё созданным - ему дадут новый Desktop и там ресурсов должно хватить.
39 Xershi
 
10.04.15
09:27
(28) у меня кстати и на сервере2 где крутится 1с7 нет в дком объектах его. Только V77.GeneralPropPage.
40 ЧеловекДуши
 
10.04.15
09:34
(0) Зачем ОЛЕ на регламентном?
Используй файловый вариант обмена :)
41 ЧеловекДуши
 
10.04.15
09:36
(3) Ты обработку напиши так, что бы она запускала ОЛЕ на стороне сервера.
Вот так и поймешь, где и что не так :)
42 ЧеловекДуши
 
10.04.15
09:38
Кстати, никто не задался вопросом, под каким режимом он запускает обработку :)

Думается все это делается под Толстым клиентом. :)
43 Xershi
 
10.04.15
09:42
(42) обычное приложение всегда в толстом клиенте.
Добавить препроцессор сервер?
44 Xershi
 
10.04.15
14:50
Победил!!
Регламентное задание на 64 битном сервере будет работать!

Не хватало:
Оказалось этого ДКОМ объекта достаточно, причина крылась в нехватке памяти для открытия окон 1С 7.7 в "[B]не интерактивном[/B]" режиме (т.е. в регламентном задании) для этого в реестре добавили памяти сеансу подробно расписано тут: http://www.techarp.com/showarticle.aspx?artno=238&pgno=1

HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Control>Session Manager>SubSystems
Там Windows открыть и изменить строку:
%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512
  Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3
  ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16

SharedSection=1024,3072,512 вот здесь редактируем 3 значение мы поставили 5 мб (было 512 кб). Важно чтобы 2 и 3 значение не превысило 48 мб.

ОЛЕ заработало!

(37) Спасибо!!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.