Как узнать открыт конфигуратор или нет? #90797


#0 by Друг1С
Для УРИБ пишу программу автоматического обмена файлами. При поступлении файла запускаю 1С в режиме автообмена. Но если 1С уже запущена в режиме конфигуратора автообмен не проходит. Как корректно отследить состояние системы?
#1 by aKomper
*.lck
#2 by КонецЦикла
+ В корне папки с БД... может не понятно быть...
#3 by LDR
проще - SYSLOGlinks.tmpтам все понятно и видно.
#4 by Друг1С
Этот файл создается в любом случае, при запуске в режиме конфигуратора или в пользовательском режиме. Обмен в разделенном режиме возможен, поэтому надо отследить именно конфигуратор.
#5 by Друг1С
Вариант с файлом "links.tmp", не проходит поскольку он не обновляеться после закытия конфигуратора, если уже есть открытая 1с в раздельном режиме
#6 by Ломастер
Delphi:function ApplicationRunning(Caption:string):boolean;
#7 by КонецЦикла
А вот, итересно... Длина файла ТМП меняется, вместо 1024 становится 2048, может енто поможет? Но, если запущено 2 пр-тия и один конф-р - 3072. Если запускается пр-тие монопольно, длина 2048 означает запущенность конф-ра
#8 by КонецЦикла
+ Млин, точно не обновляется, пропустил посты...
#9 by smaharbA
а если он (конфигуратор) на другой машине открыт???
#10 by Ломастер
Сорри
#11 by Друг1С
2 Автообмен запускается на сервере, а конфигуратор на пользовательской машине.
#12 by Ломастер
Тогда упс...
#13 by smaharbA
если подождешь, напишу код в 1Сэ и тута расположу
#14 by smaharbA
+ без lck и темпов
#15 by Друг1С
--Что здесь имелось ввиду:Проверять завершение автообмена можно, указав в пакетном файле дополнительный файл журнала регистрации, а после автообмена проверять этот файл. У нас в свое время была написана прога, которая читает этот файл и если все плохо, то посылает письмо админу.
#16 by Друг1С
+15Этот текст я нашел в одном из форумов.Подскажите как указать в пакетном файле дополнительный файл журнала регистрации?
#17 by AlexP
(Друг1С) links.tmp обновляется ТОЛЬКО при подключении к базе и его можно использовать. Если подключиться к базе например через ОЛЕ, то файл обновится. Дай мыло, вышлю обработку.
#18 by Друг1С
+15Все, разобрался, этот журнал не создается, когда 1С запущена в режиме конфигуратора.
#19 by Друг1С
#20 by AlexP
Ушло.
#21 by smaharbA
конечно тупо, но примерно так (тока ради бока ничего не пиши в текстстреем, а то дополнишь свою конфу строками (файл) ;))(Можно еще аттрибутами побаловаться)Функция ПроверитьКонфБлок(тИмяФайла)
#22 by smaharbA
#23 by smaharbA
тИмяФайла="1cv7.md"ну или что там еще на "открытость" надо/можно проверить
#24 by Друг1С
Да, я тоже подумал, что если открыт конфигуратор, то должен быть залочен МД файл. Но не тут то было, его можно удалить даже при откытом конфигураторе.....А все остальный файлы лочатся и в обычном режиме.
#25 by Kropa
Можна запускать автообмен и смотреть в журнал регистрации - если ошибка блокировки тоды ждать.
#26 by Kropa
если обмен через почту, то обновления останутся нетронутыми, непрочитаными.
#27 by Друг1С
В том то и дело, что в логи ничего не пишется
#28 by smaharbA
ну тогда тИмяФайла=КаталогНужнойБазы+"1cv7.lck"значит тока так (а мож и нет) позырим
#29 by AlexP
Мыло получил?
#30 by smaharbA
можно еще попробовать через оле конфигуратор открыть/закрыть (открывается свобода!!!)
#31 by Kropa
Хорошо, тогда так - запускать автообмен, если прошел автообмен, тогда все ОК, если не прошел - сообщение об ошибке
#32 by Друг1С
2 Да получил, спасибо, отрабатываю эту версию.
#33 by smaharbA
ты это о чем, через попытку же а далее в цикле или через обрабожид и проверять Если ОК тогда Вперед
#34 by Kropa
причем здесь "обрабожид и проверять Если ОК тогда Вперед" - это уже проблемы - как он будет обрабатывать ожидание - для нево главное если конфигуратор открыть тогда выдать сообщение, аили кинуть месагу по сети, или еще как нибуть матюкнуться, щтоб закрыли конфигуратор или 1С монопольно.
#35 by smaharbA
можно и моно закрыть чужой и конфигуратор (тока люди обидятся) а оброжид (ждем как вышли обмен делаем), а месагу для моно нече делать послать я всем шлю вроде глСообщить(лалала) у их предупрежд, сообщение, статус и заголовок, а для упертых еще и попуп (виндовый)в глобальнике оброжидания (правда у меня своя оброжид, много функций засунуть каждая со своим интервалом (конечно точность от 1 до 5 сек)) и зыришь какойнибудь текстовик если появился "читаешь" и на экран, а из уриб или другого обменника туда ложиш текст, а если в тексте "пошли все подалее" то вываливается, а конфигуратор закрыть через всш
#36 by Друг1С
Ну, вывод делаю такой.              1. Определяем на монопольное открытие базы (проверяем              блокировку на чтение любого DBF)              2. Если не монопольно, смотрим есть ли в links.tmp              строки запуска конфигуратора.              3. Если есть, то пытаемся выяснить, не зависший ли это              процесс? (Активируем 1С как ОЛЕ приложение под сервисным              юзером)              4. Окончательно удостоверившись успокаиваемся и идем              пить чай с кофе.
#37 by IronSerg
А еще в директории TEMP при заходе в режим конфигуратора появляется файл вида ~md1A8.tmp
#38 by Kropa
Половину слов не уловил :) мы сдесь не говорим как пользователя кинуть месагу думаю уже наметил себе как. Проблема в том как определить не открыт ли конфигуратор.
#39 by reminder
Открытый конфигуратор это только одна из возможных причиннеудачного автообмена. А их может быть гораздо больше.Например юзер открыл элемент справочника на редактирование иэтот элемент не может быть синхронизирован.В логе успешность обмена обязательно отражается в видестрочки типа20050325;12:48:24;URBD;C;Distr;DistUplSuc;1;;;DistUplSuc;0;;; если ошибка.Вообще правильно нужно сделать 2 prm файла. И если приемпрошел правильно то только тогда запускать посылку.
#40 by smaharbA
дак я и дал код пробуй, работает
#41 by artbear
А чего думать-то? Запускаем конфигуратор сами.Ждем или1) окна "ошибка блокировки данных" или2) появления окна "Конфигуратор".если 2), тогда посылаем этому окну сообщение WM_Quitесли 1, нажимаем ОК и знаем, что уже запущен Конфигуратор!
#42 by reminder
Заглянул как это сделано у меня :)) Вот прога на паскале. В случае ошибкивозвращает errorlevel 7. Можно прописать в батнике и анализировать.assign(x,paramstr);reset(x);while not eof(x) do  if pos('DistUplFail;1;',_str)>0 then halt;  if pos('DistDnldFail;1;',_str)>0 then halt;  if pos('Ошибка блокировки данных. Возможно, данные',_str)>0 then halt;  { if pos('Данные из указанного файла переноса данных уже загружались',_str)>0 then halt; }writeln('OK');halt;end.
#43 by Друг1С
2 Программа автообмена работает на сервере и не подразумевает наблюдения за ней пользователя. Закрывать конфигуратор на клиентсткой машине нельзя. Нужно лишь отследить факт работы и отложить обновление до лучших времен. При долгом простое, отправить сообщение админу.
#44 by artbear
Ты не понял: я не предлагал ничего закрывать у пользователя, тем более, что с сервера это не получится.Все действия совершаются именно программно/автоматически, без участия человека.П.2 - это появление окна "Конфигуратор", которое запустили мы, именно в этой сессии на сервере, а не у пользователя.
#45 by Друг1С
2 при запущенном конфигураторе никаких логов не пишется.
#46 by smaharbA
дак тебе все сказали и написалитогда опенконф и скрипт при запуске конфигуратора пусть че нибудь куданибудь пишет и не закрываетвот и проверяй блок этого файлатогда узнаешь о конфигуратореа так как вот и все счас код вышлю (или не вышлю) тока покурю...
#47 by Друг1С
2 Файл LCK появляется и при обычном запуске системы, и его наличие ниочем не говорит.
#48 by reminder
Следовательно будет отсутствовать искомая строчка типаDistUplSuc;1;;;Отсутствие успеха - есть неудача :))
#49 by Друг1С
2 Да но, такая же ошибка и при неправильной строке инициализацииПока я и иду этим путем, жду, пока успех проявит себя. :))
#50 by artbear
Я тут попробовал FileMon-ом отследить действия 1С и получил1) удачный вход в конфигуратор18:46:24 1cv7.exe:41232 Lock D:11Cv7.LCK SUCCESS Excl: Yes Offset: 50000001 Length: 1 18:46:24 1cv7.exe:41232 Lock D:11Cv7.LCK SUCCESS Excl: Yes Offset: 0 Length: 10000000 18:46:24 1cv7.exe:41232 Unlock D:11Cv7.LCK SUCCESS Offset: 50000001 Length: 1 2) неудачный вход18:37:36 1cv7.exe:14512 Lock D:11Cv7.LCK SUCCESS Excl: Yes Offset: 50000001 Length: 1 18:37:36 1cv7.exe:14512 Lock D:11Cv7.LCK NOT GRANTED Excl: Yes Offset: 0 Length: 10000000 18:37:36 1cv7.exe:14512 Unlock D:11Cv7.LCK SUCCESS Offset: 50000001 Length: 13) удачный вход в Предприятие18:57:43 1cv7.exe:34516 Lock D:11Cv7.LCK SUCCESS Excl: Yes Offset: 50000001 Length: 1 18:57:43 1cv7.exe:34516 Lock D:11Cv7.LCK SUCCESS Excl: Yes Offset: 19999999 Length: 1 18:57:43 1cv7.exe:34516 Unlock D:11Cv7.LCK SUCCESS Offset: 19999999 Length: 1 18:57:43 1cv7.exe:34516 Lock D:11Cv7.LCK SUCCESS Excl: Yes Offset: 10000000 Length: 1 18:57:43 1cv7.exe:34516 Unlock D:11Cv7.LCK SUCCESS Offset: 5000000
#51 by smaharbA
получится, тока в конфах поправить ну или внешнобр при запуске 1сэ
#52 by smaharbA
#53 by Gloom
For Each user In Users        If user.Mode = "C" Then WSH.Echo "Конфигуратор запущен у пользователя " & user.UserName & _    Next
#54 by smaharbA
+ но об этом было в и говорили уже
#55 by smaharbA
наверно луччее, а на 1Сэ пусть сам переписывает, хотя можно и так оставить
#56 by artbear
Это чья компонента?"AddIn.v7UserMonitor" ?
#57 by Друг1С
52) Всегда возвращает 0
#58 by artbear
Тут мне MMF подсказал:>>запость пжалста ссылку - >это консольная программулина для батников, выводит в stdout информацию об активных подключениях, в том числе и конфигуратора.Может понадобится кому-нить
#59 by smaharbA
проверял или 0(если конфа запущена) или -1 завершающий слеш обязательно
#60 by Друг1С
59) Пробовал и с выбором пользователя вручную и без, мелькает заставка 1с и все.
#61 by artbear
(58+) А ведь работает!И правильно показывает состояние пользователей, даже после входа/выхода из Конфигуратора, когда запущено Предприятие!
#62 by Друг1С
#63 by Друг1С
61) Точно, отрабатывает, только интересно как?
#64 by artbear
Его прога анализирует файл линкс.тмп, но не просто текст. А лочит нужные участки файла, если заблокировать не удается, значит, пользователь "жив".
#65 by Друг1С
Вот за этой прогой надо ФайлМоном проследить
#66 by artbear
(58+) Снова от MMFтам еще скрипт можно в этой консольке исполнятьпримерный текст[ОбрабатываемаяБаза]ПутьКБазе='c:1cmmk_cb'ИмяБазы='ЦБ ммк'[Действия]Подключения='c:DelphiProgMDI_AdminLinksCB.txt'ОтключитьПользователей='Да'ВыйтиПослеВыполнения='Да'
#67 by Друг1С
64) Все понятно, вопрос закрыт, будем анализировать участки файла на блокировку.
#68 by artbear
У нее даже частично исходники на Делфи есть :)На проклубе лежит его разработка "Admin1C Внешняя компонента" с сорцами, в них есть файл LinksWork.pas, где и сделана вся работа.----------------Внешняя компонента для Admin1C v2 []
#69 by smaharbA
Друг, ты переврал что тебе написали, написаное работает, если надо то можно и сост пользователя из 1Сэ (в конфе, в мониторе, в моно)
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С