Имя: Пароль:
1C
Админ
Не работает второй процесс 1с 7.7
, ,
0 Shaman100M
 
21.12.11
17:32
Добрый вечер!
Бьемся с системным администратором над проблемой где-то неделю. Может, кто-то ранее уже сталкивался...

ОС Windows Server2008R2 + Remote Desktops
1С 7.70.0.27 SQL

В глобальнике
Процедура ПриНачалеРаботыСистемы()
   Если ИмяПользователя() = "test1" Тогда
       ОткрытьФорму("Отчет.Test1vn");
       ЗавершитьРаботуСистемы();
   ИначеЕсли ИмяПользователя() = "test2" Тогда
       ОткрытьФорму("Отчет.Test2vn");                                                      
       ЗавершитьРаботуСистемы();      
   КонецЕсли;
КонецПроцедуры

В модуле отчета:
Процедура ПриОткрытии()

// служебный код
СтатусВозврата(0);

КонецПроцедуры

В планировщике создаем задачу, которая выполняется под администратором домена+Выполнить с наивысшими правами. Задача запускает скрипт, который запускает 1С сначала с авторизацией test1, затем второй, - с test2. Задача под test1 работает, задача под test2 запускается и через несколько секунд завершается. Глобальный модуль во втором сеансе не отрабатывает вообще.

Есть предположение, что что-то связано с расположением временных файлов. Заранее спасибо.
1 miki
 
21.12.11
17:34
поменять местами, сначала для test2, а после для test1 пробовали?
2 Shaman100M
 
21.12.11
17:35
ага
3 GLazNik
 
21.12.11
17:35
пропишите разные рабочие каталоги для пользователя test1 и test2

Интерактивно запускать под пользователем test1 и test2 пробывали?
4 andrewks
 
21.12.11
17:36
ОткрытьФормуМодально() ?
5 Shaman100M
 
21.12.11
17:38
(3) каталоги разные - делали.
Интерактивно все работает.
А в "нулевой" сессии (созданы планировщиком) - второй процесс полноценно не идет.
6 Shaman100M
 
21.12.11
17:38
(4) тоже не помогло.
7 miki
 
21.12.11
17:41
(6)>>Интерактивно все работает.
может задача требует нажатия какой-нить кнопочки? :)
8 andrewks
 
21.12.11
17:41
(6) я надеюсь, ты в обоих строчках поменял? ;-)
9 Tatitutu
 
21.12.11
17:44
Если ИмяПользователя() = "test1" Тогда
       ОткрытьФорму("Отчет.Test1vn");
       ЗавершитьРаботуСистемы();
   ИначеЕсли ИмяПользователя() = "test2" Тогда
       ОткрытьФорму("Отчет.Test2vn");                                                      
       ЗавершитьРаботуСистемы();      
   КонецЕсли;

у тебя во второй строчке ИмяПользователя() неправильно написано :-)
10 Shaman100M
 
21.12.11
17:44
(7) код 1с ничего не требует. Интерактивно если запускать, все отрабатывает и закрывается без вмешательства человека. )
(8) ну да, естественно.
11 andrewks
 
21.12.11
17:45
что в ПриОткрытии() в Отчет.Test2vn?
12 andrewks
 
21.12.11
17:46
и как определил, что не отрабатывает ГМ? что в логах 1с?  пробовал ли в ГМ в ПриНачалеРаботыСистемы() писать в свой лог текст?
13 miki
 
21.12.11
17:47
(10)>>Интерактивно если запускать, все отрабатывает и закрывается без вмешательства человека

Уточню, на всякий случай: оба одновремено запускал?
14 Shaman100M
 
21.12.11
17:48
(9) )))

?("синий"="красный",1,0) = 0
15 andrewks
 
21.12.11
17:49
+(12) и есть ли что-то в логах выня
16 Ленинград
 
21.12.11
17:50
Может у тебя там в момент закрытия с первого юзе.....

А нет, бл""ть SQL же
17 Shaman100M
 
21.12.11
17:51
(11) спецом сделали одинаковые тестовые отчеты с "зацикливанием". Пока 1=1...
(12) в ЖР писал первой строкой из ПриНачалеРаботыСистемы(). Записей не было.
18 Deathless
 
21.12.11
17:52
А не монопольно ли 1с запускаете ?
19 Кириллка
 
21.12.11
17:53
(10)интерактивно одновременно под разными учетками работает?
20 Shaman100M
 
21.12.11
17:54
(13) Последовательно, после загрузки первого грузил второй. А в скрипте второй процесс запускается не сразу, спустя какое-то время. минуты, часы.
21 Shaman100M
 
21.12.11
17:55
(18) первым делом ключик М проверил...
22 andrewks
 
21.12.11
17:55
ну, кагбэ чудес-то не бывает...
23 Shaman100M
 
21.12.11
17:56
(15) ничего. Второй процесс отработал и завершился в норм. режиме.
24 Shaman100M
 
21.12.11
17:57
(19) да, и под одним тоже.
25 Shaman100M
 
21.12.11
17:57
(22) вот и я про то же...
26 FN
 
21.12.11
17:57
сделайте робота, который все время висит в базе в отключенной рдп сессии, а там через обработку ожидания + справочник заданий запускайте все что надо.
27 andrewks
 
21.12.11
17:58
на другом хосте проверь
28 Кириллка
 
21.12.11
17:58
(24)а может быть нет?
29 rs_trade
 
21.12.11
17:58
запускай тест2 в конце тест1
30 Shaman100M
 
21.12.11
18:01
(29) разные задания, д.б. разнесены по времени.

Кстати, ВАЖНОЕ ЗАМЕЧАНИЕ.

Без оператора ОткрытьФорму() в первом сеансе, второй отрабатывает норм.
31 Shaman100M
 
21.12.11
18:06
(27) проверяли и на другом виртуальном сервере
32 Franchiser
 
гуру
21.12.11
18:12
(31) попробуй  ЗавершитьРаботуСистемы(0)
33 Shaman100M
 
21.12.11
18:13
Выход, конечно, есть: грузить глобальный модуль из текстового файла, его содержимое менять для первого, второго процесса (они ночные) и для интерактивных процессов пользователей.

Интересно разобраться, в чем проблема...
34 Shaman100M
 
21.12.11
18:14
(32) Второй загружается - первый еще не завершен.
35 Franchiser
 
гуру
21.12.11
18:17
(34) у меня используется ОткрытьФормуМодально() в связке с Завершитьработусистемы(0)- все работает,
Надо бы знать что еще стоит в этих формах: в твоем случае может попасть вприоткрытии в приповторномоткрытии()
36 Shaman100M
 
21.12.11
18:20
+ (33) т.е. обойтись вообще без открытия форм и в то же время не дублировать код.

(35) в тестовых - одна кнопка "Закрыть", в ПриОткрытии() - бесконечный цикл.
ЗавершитьРаботуСистемы(0) к моменту второго входа отработать не успевает.
37 Shaman100M
 
21.12.11
18:21
Исчезну на час..
38 Torquader
 
21.12.11
18:24
Во-первых, через ключи запуска указать всё, что только можно:
/u - директорию пользователя (разные)
/t - директории временных файлов (тоже разные)
В глобальном модуле проверить, что ExcluziveMode() не равно 1 (мало ли как оно там запускается).
Проверить, что предыдущая 1С не "слопала" все ресурсы - если вход не интерактивный, то создаётся Desktop, у которого буферы и ресурсы сильно ограничены - может оказаться, что на вторую 1С просто не хватает ресурсов GDI (которых там не должно быть, так как экрана-то нет).
39 Franchiser
 
гуру
21.12.11
18:25
(37) "задача под test2 запускается и через несколько секунд завершается" относится к планировщику? то есть, в журнале регистрации нет записи о том что произошел запуск/завершение 1с предприятия? Попробуй войти под тестом 2 интерактивно когда работает тест1. Может там окошко какое.
40 Franchiser
 
гуру
21.12.11
18:48
я думаю что либо 1с либо скуль не пускает теста2 в момент работа теста 1. Тест 2 проходит только до ввода пароля, после чего д.б сообщение и гм не отрабатывает.
41 Torquader
 
21.12.11
19:03
(40) Ну, например, никто не может войти, если открыта транзакция - ожидает какое-то время и выходит - вполне похоже, но, думаю, автор этот вопрос уже проверял - по его словам интерактивно всё работает.
P.S. можно сменить планировщик на что-то самописное, чтобы можно было и окна посмотреть (есть мнение, что первое же окно сообщения от программы срубает процесс, так как система не может его вывести).
42 mvk
 
21.12.11
19:26
Текст скрипта, который запускает 1С сначала с авторизацией test1, затем второй, - с test2, можно увидеть?
43 Sk0rp
 
21.12.11
19:38
Сильно меня смущают строки:

       ОткрытьФорму("Отчет.Test1vn");
       ЗавершитьРаботуСистемы();

т.к. при немодальном открытии 1С не будет ждать пока отработает форма и сразу выполнит ЗавершитьРаботуСистемы(). И я не уверен, что затем произойдет раньше, будет передано управление в ПриОткрытии формы Test1vn или после окончания работы функции из которой вызваны эти команды сразу пойдет завершение работы системы.
44 Torquader
 
21.12.11
21:03
(43) Так там формы - муляжи - в ПриОткрытии код будет выполняться до возврата из вызова ОткрытьФорму, а в конце кода ПриОткрытии наверняка стоит СтатусВозврата(0) - так что форма и не откроется, а вот если при исполнении происходит какая-то ошибка, то да - прерывание процесса открытия формы и завершение работы программы - но ошибку легко в журнале регистрации увидеть (конечно, если её через Try Except не перехватили).
45 PZh
 
21.12.11
21:46
(0) У нас та же песня. Просто смирились, что в скрытом режиме 2 1С-ки работать не могут нормально и все.
Теперь всегда отключенный RDP сеанс висит и в нем пашет куча роботов.
46 Franchiser
 
гуру
21.12.11
22:50
(45) у нас нормально работает под 2–3 роботами и пишется лог работы в 1 файл средствами vbs
47 Franchiser
 
гуру
21.12.11
22:57
кстати, почему нельзя зайти в сессию этого пользователя под которым происходит запуск планировщика
48 PZh
 
21.12.11
23:22
(46) Я глубоко не вникал, просто нужды в скрытом сеансе нет.

А у вас VBS-ка планировщик запускает или минуя оный?
Возможно это особенности взаимодействия планировщика с 1С? Если не влом поставьте опыт:
Создайте задание и запускайте его через VBS-ку.
49 rider
 
21.12.11
23:28
ЗавершитьРаботуСистемы();

заменить на
статусВозврат(0);
возврат
50 Shaman100M
 
22.12.11
09:54
(39) окошка там нет, каких либо диалоговых конструкций - тоже, т.к. это тестовая конфа, запускаемые отчеты - почти пустые, "клоны", с программной паузой (цикл). Записи в ЖР по второму процессу только: "подключение - отключение", а программных записей в ЖР из предопр. процедур - нет. Авторизация test2 проходит (если это первый процесс). Интерактивно второй процесс отрабатывает полностью, с открытием формы отчета.

(38) монопольный режим не дал бы второй раз войти вообще. Ключи /u и /t сегодня попробовали - результата нет.

(43) не должно смущать, т.к. 1с все же подождет, пока отработают команды в модуле отчета и предопределенные процедуры. В немодальном режиме 1с не ждет  закрытия формы, однако само "открытие" отрабатывает полностью. Команда ЗавершениеРаботыСистемы() ( и +(49) ) тоже не должна смущать, т.к. первый процесс -еще не завершен, там эта команда еще не выполняется, а второй процесс - вообще вылетает намного раньше, даже в гм не входит.
51 Shaman100M
 
22.12.11
09:59
(44) отчеты тестовые, просто с "паузой". ошибки быть не должно.
(47) ее как таковой нет.
52 Shaman100M
 
22.12.11
10:01
(45) Ну, наверно, тогда нужно помнить об этом сеансе, чтобы его случайно не вырубить.
53 Shaman100M
 
22.12.11
10:07
(48) В сессии пользователя VBS-ка отрабатывает оба подключения.
+(45) серваков много, висящих сеансов тоже будет много, сисадмины сидят распределенно, - много организационных действий.
54 Shaman100M
 
22.12.11
10:22
Пока единственный вариант, который работает: не открывать форму отчета, процедуры из отчета перенести в ГМ (не оч. хорошо, конечно...), в случае работы "роботов" эти процедуры вызываются из ПриНачалеРаботыСистемы()

(46) а сервак 2003 ?
55 Shaman100M
 
22.12.11
10:46
на 2003-ем работает. Это особенность 2008.
56 Ковычки
 
22.12.11
10:53
создать другого пользователя ос ?
57 Ковычки
 
22.12.11
10:54
а ремотестол указан для информации в сабже или ?
58 Shaman100M
 
22.12.11
10:58
(57) ну то что с-ка запускается в терминальной сессии, а не по сетке.
59 Ковычки
 
22.12.11
11:00
(58) еще раз и помедленнее
"В планировщике создаем задачу" и "с-ка запускается в терминальной сессии" ?
60 Shaman100M
 
22.12.11
11:13
(59) Session ID = 0
61 Ковычки
 
22.12.11
11:24
(60) т.е. терминал тут просто к слову ?
62 Ковычки
 
22.12.11
11:25
запускаете в одном задании или в двух ?
63 Shaman100M
 
22.12.11
11:41
(62) одно задание в планировщике, которое запускает один скрипт, который запускает 1с с разными параметрами. Задание стартует 2 раза в разное время
64 Shaman100M
 
22.12.11
16:14
Есть еще идеи?
65 Ёпрст
 
22.12.11
16:19
(64) скрипт покажи, что ли.
66 Shaman100M
 
22.12.11
17:31
(65)

VBS

команда запуска в первый раз

 Rez = WshShell.Run ("""C:\Program Files\1cv77s\BIN\1CV7s.exe"" enterprise /DD:\DB\Test\ /Ntest1", ,True)

второе срабатывание планировщика (первое задание еще не завершено)

 Rez = WshShell.Run ("""C:\Program Files\1cv77s\BIN\1CV7s.exe"" enterprise /DD:\DB\Test\ /Ntest2", ,True)
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн