|
Отключить сеанс | ☑ | ||
---|---|---|---|---|
0
Mikhail Volkov
02.02.21
✎
15:28
|
Смотрю тему Отключение зависших сеансов на сервере., у меня выдает: Метод объекта не обнаружен (ОтключитьСеанс)!? Как исправить?
|
|||
1
Kigo_Kigo
02.02.21
✎
15:35
|
а режим совместимости какой?
|
|||
2
fisher
02.02.21
✎
15:37
|
(1) Это ты так издалека к версии БСП подбираешься? :)
|
|||
3
Kigo_Kigo
02.02.21
✎
15:38
|
(2) ога, сам сталкивался с подобным
|
|||
4
Mikhail Volkov
02.02.21
✎
15:58
|
(1) Версия 8.2.16, платформа 8.3.10.2466, обычное приложение (не УФ) Альфа-Авто.
|
|||
5
ДенисЧ
02.02.21
✎
16:39
|
(4) У тебя там БСП (если она вообще есть) древней египетских пирамид...
|
|||
6
Deal with it
02.02.21
✎
16:54
|
Пользуюсь таким примером:
Если Найти(СтрокаСоединенияИнформационнойБазы(), "Srvr") > 0 Тогда // серверный вариант Поиск1 = Найти(СтрокаСоединенияИнформационнойБазы(), "Srvr="); ПодстрокаПоиска = Сред(СтрокаСоединенияИнформационнойБазы(), Поиск1 + 6); ИмяСервера = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, """") - 1); // теперь ищем имя базы Поиск1 = Найти(СтрокаСоединенияИнформационнойБазы(), "Ref="); ПодстрокаПоиска = Сред(СтрокаСоединенияИнформационнойБазы(), Поиск1 + 5); ИмяБазы = Лев(ПодстрокаПоиска, Найти(ПодстрокаПоиска, """") - 1); Иначе // для других способов подключения алгоритм не актуален Возврат; КонецЕсли; МассивИсключений = Новый Массив; МассивИнденксов = Новый Массив; Для Каждого Стр Из Исключения Цикл МассивИсключений.Добавить(Стр.Значение.Наименование); КонецЦикла; Коннектор = Новый COMОбъект("v83.COMConnector.1"); //Сообщить("СОМ объект успешно получен");////////////////// Агент = Коннектор.ConnectAgent(ИмяСервера); //Сообщить("Агент сервера успешно получен"); //////////////////// Кластеры = Агент.GetClusters(); Для каждого Кластер из Кластеры Цикл АдминистраторКластера = "admins"; ПарольКластера = "E8vbteud"; Агент.Authenticate(Кластер, АдминистраторКластера, ПарольКластера); //Сообщить("Утентификация сервера успешно получена"); //////////////////// Процессы = Агент.GetWorkingProcesses(Кластер); Для каждого Процесс из Процессы Цикл Порт = Процесс.MainPort; // теперь есть адрес и порт для подключения к рабочему процессу РабПроц = Коннектор.ConnectWorkingProcess(ИмяСервера + ":" + СтрЗаменить(Порт, Символы.НПП, "")); РабПроц.AddAuthentication("Admin", "4615426"); //Сообщить("Утентификация рабочего процесса успешно выполнена"); //////////////////// ИнформационнаяБаза = ""; Базы = Агент.GetInfoBases(Кластер); Для каждого База из Базы Цикл Если База.Name = ИмяБазы Тогда ИнформационнаяБаза = База; //Сообщить(ИнформационнаяБаза);///////////// Прервать; КонецЕсли; КонецЦикла; Если ИнформационнаяБаза = "" Тогда // база не найдена КонецЕсли; Сеансы = Агент.GetInfoBaseSessions(Кластер, ИнформационнаяБаза); Для каждого Сеанс из Сеансы Цикл Если нРег(Сеанс.AppID) = "backgroundjob" ИЛИ нРег(Сеанс.AppID) = "designer" Или нРег(Сеанс.AppID) = "SrvrConsole"Тогда // если это сеансы конфигуратора или фонового задания, то не отключаем Продолжить; КонецЕсли; Если Сеанс.UserName = ИмяПользователя() Тогда // это текущий пользователь Продолжить; КонецЕсли; Если МассивИсключений.Найти(Сеанс.UserName) = Неопределено Тогда а=0; //Сообщить(Сеанс.UserName);///////////// Агент.TerminateSession(Кластер, Сеанс); КонецЕсли; КонецЦикла; ИнформационнаяБаза2 = РабПроц.CreateInfoBaseInfo(); ИнформационнаяБаза2.Name = ИмяБазы; СоединенияБазы = РабПроц.GetInfoBaseConnections(ИнформационнаяБаза2); //СоединенияБазы = Агент.GetInfoBaseConnections(Кластер, ИнформационнаяБаза); // Разорвать соединения клиентских приложений. Для Каждого Соединение Из СоединенияБазы Цикл Если нРег(Соединение.AppID) = "backgroundjob" Или нРег(Соединение.AppID) = "designer" Или нРег(Соединение.AppID) = "SrvrConsole" Или нРег(Соединение.AppID) = "COMConsole" Или нРег(Соединение.AppID) = "SystemBackgroundJob" Тогда // если это соединение конфигуратора или фонового задания, то не отключаем Продолжить; КонецЕсли; Если Соединение.UserName = ИмяПользователя() Тогда // это текущий пользователь Продолжить; КонецЕсли; Если МассивИсключений.Найти(Соединение.UserName) = Неопределено Тогда // это текущий пользователь а=0; //Сообщить(Соединение.UserName);///////////// РабПроц.Disconnect(Соединение); КонецЕсли; КонецЦикла; КонецЦикла; КонецЦикла; |
|||
7
Deal with it
02.02.21
✎
16:55
|
+(6) плюс на форме обработки у меня список значений, куда добавляю пользователей, которых не завершать, т.е. исключения.
|
|||
8
Mikhail Volkov
02.02.21
✎
17:18
|
(6) Вообще-то мне надо закрыть конфигуратор (и желательно фоновые задания) по завершению работы последнего пользователя в базе...
|
|||
9
Deal with it
02.02.21
✎
17:21
|
(8) ну так уберите из кода эти условия, и завершать будет вообще все сеансы и подключения к базе.
Типа такие условия: нРег(Сеанс.AppID) = "backgroundjob". |
|||
10
Deal with it
02.02.21
✎
17:23
|
+(9) код рабочий, если ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов) зарегистрирован в системе, это важно.
|
|||
11
Deal with it
02.02.21
✎
17:24
|
Разумеется в исключение надо поставить текущий сеанс, под которым вы запускаете обработку))) ну, на всякий случай уточняю
|
|||
12
Mikhail Volkov
02.02.21
✎
17:55
|
(10) Мне бы попроще, без "ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов)"
Есть у меня функция для предупреждения пользователя, если кассовая смена не закрыта: Функция ПоследнийПользовательБазы(КопияИБ = Истина) Экспорт Если КопияИБ И КопияИнформационнойБазы() Тогда Возврат Ложь; КонецЕсли; СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы(); Если СоединенияИнформационнойБазы.Количество() = 1 Тогда Возврат Истина; КонецЕсли; Количество = 0; Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл Если ПредставлениеПриложения(Соединение.ИмяПриложения) = "Конфигуратор" Тогда Продолжить; КонецЕсли; Количество = Количество + 1; КонецЦикла; Возврат Количество = 1; КонецФункции // ПоследнийПользовательБазы() Как отключить сеанс, если ПредставлениеПриложения(Соединение.ИмяПриложения) = "Конфигуратор"? |
|||
13
Deal with it
02.02.21
✎
18:32
|
(12) не вижу как она предупреждает, и зачем строка "Количество = Количество + 1;" если вы все равно возвращаете "Количество = 1;"?
|
|||
14
Kesim
02.02.21
✎
18:46
|
(13) Возврат Количество = 1; - возвращает булево (типа: это последний пользователь вне конфигуратора? истина/ложь)
|
|||
15
Mikhail Volkov
02.02.21
✎
18:51
|
(13) Функцию (12) лишь привел для того, что могу получить все СоединенияИнформационнойБазы, найти нужное, его НомерСеанса. А как правильно его ОтключитьСеанс - не знаю?
|
|||
16
Mikhail Volkov
03.02.21
✎
07:26
|
(14) > типа: это последний пользователь вне конфигуратора?
Да, не учел, что могут быть зависшие и фоновые задания... желательно доработать функцию. Но сейчас вопрос не в этом. (13) А для чего этот пример, по отключению зависших сеансов? Непосредственное отключение: РабПроц.Disconnect(Соединение);? Долгий путь к РабПроц, через Коннектор = Новый COMОбъект("v83.COMConnector.1"); Смотрю обработку Поиск и отключение зависших сеансов на сервере 1С (http://catalog.mista.ru/public/548893/), в ней тоже подобное, через СоединениеСАгентом.TerminateSession(РабочийКластер,ТекСеанс); Попроще нельзя? |
|||
17
Mikhail Volkov
03.02.21
✎
08:15
|
(13) Нашел откуда пример (6), из Программное отключение сеансов 1С 8.2 (http://catalog.mista.ru/1c/articles/77671/). Только не понял: РабПроц.Disconnect(Соединение); делать обязательно, не достаточно Агент.TerminateSession(Кластер, Сеанс);? (в обработке http://catalog.mista.ru/public/548893/ нет Disconnect(Соединение))
|
|||
18
John83
03.02.21
✎
08:45
|
(0) это из УПП 1.3
|
|||
19
Mikhail Volkov
03.02.21
✎
10:38
|
(18) Ага, обработка АктивныеПользователи процедура ЗавершитьСеанс(Команда), но там откуда?
|
|||
20
Deal with it
03.02.21
✎
10:53
|
(17) завершить сеанс не равно отключить соединение. Есть ситуации, когда сеанс завершен некорректно и подключение зависает или дублируется. Агент сервера вроде как должен сам завершать зависшие подключения, но лишь по истечению какого-то времени, мы же говорим о сиюминутном завершении всех сеансов и подключений.
Вы можете пробовать разные варианты, данный пример гибок и универсален, потому как работает непосредственно с агентом сервера 1с, т.е. перманентно. |
|||
21
Mikhail Volkov
03.02.21
✎
12:01
|
(18)+ Запустил УПП в режиме отладки, посмотреть как выполняется процедура ЗавершитьСеанс(Команда), открыл обработку АктивныеПользователи. В ней даже кнопки нет Завершить сеанс!?
(20) В твоем примере (6): АдминистраторКластера = "admins"; ПарольКластера = "E8vbteud"; У меня: Ошибка при вызове метода контекста (Authenticate): Произошла исключительная ситуация: Ошибка операции администрирования. Администратор кластера не аутентифицирован. Где их брать, в консоле администрирования? АдминистраторКластера взял, а пароль не помню, пустой не подходит. Как посмотреть пароль? |
|||
22
Deal with it
03.02.21
✎
12:55
|
(21) ну так пропишите своего админа кластера и пароль.
Я вам дал инструмент, ваше дело как им распоряжаться. Гугл вам в помошь |
|||
23
Mikhail Volkov
03.02.21
✎
13:50
|
(22) Галочка стояла Аутентификация ОС - поэтому не помню, поставил новый пароль 1С - заработало. За основу взял , тоже громоздко, но не так (6):
Процедура ОтключениеКонфигуратора(Отказ) Экспорт Соединитель = Новый COMОбъект("V83.COMConnector"); Кластер = Сред(СтрокаСоединенияИнформационнойБазы(), 7, Найти(СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 8); // "andromeda:1641"; ИмяБазы = Сред(СтрокаСоединенияИнформационнойБазы(), Найти(СтрокаСоединенияИнформационнойБазы(), ";Ref=") + 6, СтрДлина(СтрокаСоединенияИнформационнойБазы()) - Найти(СтрокаСоединенияИнформационнойБазы(), ";Ref=") - 7); // "PatrERP"; ПериодичностьПроверки = 8; СтрокаСоединения = "TCP://" + Кластер; АдминистраторКластера = ""; ПарольАдминистратора = СвязьКА.ПарольКонсольАдминистратор(АдминистраторКластера); Попытка // попытка соединения с центральным сервером СоединениеСАгентом = Соединитель.ConnectAgent(СтрокаСоединения); РабочийКластер = СоединениеСАгентом.GetClusters().GetValue(0); СоединениеСАгентом.Authenticate(РабочийКластер, АдминистраторКластера, ПарольАдминистратора); ИБ = СоединениеСАгентом.GetInfoBases(РабочийКластер); Для Каждого СтрИБ Из ИБ Цикл Если СтрИБ.Name = ИмяБазы Тогда ТекущаяИБ = СтрИБ; СеансыИБ = СоединениеСАгентом.GetInfoBaseSessions(РабочийКластер,ТекущаяИБ); //Проверяем наличие сеанса пользователя, кроме 1CV8 - толстого клиента Для Каждого ТекСеанс Из СеансыИБ Цикл Если ТекСеанс.AppID = "1CV8" Тогда Продолжить; КонецЕсли; ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ТекСеанс.userName); СоединениеСАгентом.TerminateSession(РабочийКластер, ТекСеанс); // Если ТекСеанс.dbProcTook > Цел(ПериодичностьПроверки*60*1000) Тогда //в мс. // Сообщить("Зависший сеанс у пользователя: " + ТекСеанс.userName + ", компьютер: " + ТекСеанс.Host); // КонецЕсли; // Если ТекСеанс.connection = Неопределено Тогда // Сообщить("Пользователь: " + ТекСеанс.userName + ", компьютер: " + ТекСеанс.Host + ", аварийно завершил сеанс"); // КонецЕсли; // Сообщить(" ->>> Сеанс пользователя: " + ТекСеанс.userName + ", приложение: " + ТекСеанс.AppID + ", компьютер: " + ТекСеанс.Host + ", отключен " + ТекущаяДата()); КонецЦикла; Прервать; // Только для указанной информационной базы КонецЕсли; КонецЦикла; Исключение Отказ = Истина; Сообщить("Не удалось завершить сеанс конфигуратора " + ТекущаяДата() + "; " + ОписаниеОшибки(), СтатусСообщения.Внимание); КонецПопытки; КонецПроцедуры // ОтключениеКонфигуратора() Правда по завершению выскакивает предупреждение, что сеанс завершен администратором с вопросом: Перезапустить или Завершить работу. Как бы его убрать? Интересно, это мешает? |
|||
24
Mikhail Volkov
03.02.21
✎
14:37
|
+ Вроде не мешает, dt-выгрузка делается запущенным из 1С bat-файлом.
|
|||
25
Mikhail Volkov
03.02.21
✎
14:57
|
(19)+ СоединенияИБКлиентСервер - это общий модуль, еще используется общий модуль СоединенияИБ и другие для ОтключитьСеанс(). В Альфа-Авто их нет, не стал разбираться...
|
|||
26
Mikhail Volkov
03.02.21
✎
15:26
|
Вопрос не по теме, в bat-файле имя файла dt-выгрузки формируется: set "BakName=f:\workspace\1C\1с_Архивы\AAAAkit\AAAAkit_%date:~0,2%%date:~3,2%%date:~6,4%.dt". Но работа 1С может задержаться, завершиться после полуночи. Как бы мне BakName сформировать по вчерашней дате? Ведь в месяцах разное число дней.
|
|||
27
Mikhail Volkov
09.02.21
✎
06:21
|
(6) Этот алгоритм может определить какой сеанс из 1CV8 (толстого клиента) является зависшим? Или другой метод по СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();?
Свойства: ИмяКомпьютера (ComputerName) ИмяПриложения (ApplicationName) НачалоСоединения (ConnectionStarted) НомерСеанса (SessionNumber) НомерСоединения (ConnectionNumber) Пользователь (User) |
|||
28
SiAl-chel
09.02.21
✎
06:27
|
(26)
1. Выгружать базу в файл с произвольным именем. 2. После пакетного запуска в скрипте ожидать появления этого ненулевого файла. 3. После выгрузки формировать имя файла по дате и времени. 4. Переименовать файл с произвольным именем в файл с нужным именем из шага 3. |
|||
29
Mikhail Volkov
09.02.21
✎
07:11
|
(28) Наверное не точно задал вопрос (26), поясняю: обычно ночная выгрузки делается после 21 часа, когда все пользователи вышли из базы. Но бывает срочная работа, или пользователь неправильно вышел (только из терминала, но не из базы), или просто забыл выйти. С 21 часа включается принудительный мягкий выход, задается вопрос пользователю, но пользователь может отказаться выйти. Тогда принудительный мягкий выход откладывается на час. Через час ситуация может повториться... и через 2, 3, сейчас этот алгоритм работает до полуночи (пока более длительных задержек не было). Хотелось бы, чтобы этот алгоритм мог работать до утра (начала следующего рабочего дня). Но имя файла dt-выгрузки после полуночи сформировалось по вчерашней дате!?
|
|||
30
Mikhail Volkov
09.02.21
✎
12:48
|
(27)+ Наверное нет. Тогда тот же алгоритм (23) по условию: Если ТекСеанс.dbProcTook > Цел(ПериодичностьПроверки*60*1000) Тогда //в мс.
|
|||
31
SiAl-chel
09.02.21
✎
12:54
|
(29) Ваще плевать с каким именем он сформировался. Делай выгрузки с рандомным именем, а потом другим заданием с нужной тебе регулярностью проверяй, чтобы имя файла соответствовало дате и времени изменения (или создания) файла, если нет, то тогда переименовывай файл.
|
|||
32
Mikhail Volkov
09.02.21
✎
13:05
|
(31) По существованию файла с именем по дате как раз принимается решение: делать ли завершение сеансов и dt-выгрузку, или нет.
|
|||
33
Mikhail Volkov
09.02.21
✎
15:05
|
Вроде нашел https://www.sql.ru/forum/445183/kak-poluchit-vcherashnee-chislo-v-bat-fayle ужас какой!? Неужели у bat-файлов нет функции вчерашний даты? Если текущий час больше 6 часов, то имя файла BakName формируется по сегодняшней дате (26). Если нет (после полуночи), то по вчерашней.
|
|||
34
SiAl-chel
09.02.21
✎
21:10
|
(33) Бат-файлы это - не язык программирования, это скриптовый язык. В нем есть ровно то, что могут консольные команды ОС и стороннего софта.
Определение вчерашних дат взято вот отсюда https://www.sql.ru/forum/445183/kak-poluchit-vcherashnee-chislo-v-bat-fayle set /A CalculatePreviousDay=1%Day%-1 set Yesterday=%CalculatePreviousDay:~1,2% set PreviousDate=%Year%%Month%%Yesterday% |
|||
35
Mikhail Volkov
10.02.21
✎
06:48
|
(34) Это лишь фрагмент замены: "иначе будут проблемы на числах 08 и 09...", а сам код еще строк 60... советуют получать вчерашнюю дату через PowerShell (здесь вряд ли помогут). Спс всем.
|
|||
36
Mikhail Volkov
10.02.21
✎
15:21
|
Здесь http://forum.ru-board.com/topic.cgi?forum=5&topic=50615&start=460#11 подсказали.
|
|||
37
Mikhail Volkov
13.03.21
✎
08:12
|
А как создать некое событие для Windows, в 1С это возможно?
Бат-файл запущенный из 1С не всегда выполняется до конца, иногда его выполнение прерывается (ход выполнения пишется в лог-файл). Потому, что он запущен под конкретным пользователем 1С. А этот пользователь (подозреваю) завершил работу, и вышел из терминала. Решил выполнять bat-файл под системной учетной записью: СИСТЕМА или USR1CV8. Для этого в планировщике заданий создал свое с моим bat-файлом. Из 1С это задание запускаю ЗапуститьПриложение("schtasks /run /tn имя_задачи_в_планировщике"); Справка SchTasks /? дает описание: Позволяет администратору создавать, удалять, изменять и опрашивать запланированные задачи в локальной или удаленной системе. Примеры: SCHTASKS /Run /? SCHTASKS /Run /TN "\Архивация\Начать архивацию" SCHTASKS /Run /S <система> /U <пользователь> /P <пароль> /I /TN "\Архивация\Архивация и восстановление" Подомною все прекрасно сработало, а под рядовым пользователем - ничего!? Выходит выполнять задачу (в справке прямо ни сказано) можно только администратору? Поэтому решил в 1С создать некое событие для Windows, а которое реагировало бы мое задание в планировщике. Возможно? (никогда не делал) |
|||
38
Mikhail Volkov
13.03.21
✎
13:47
|
Вроде нашел, но: Команда eventcreate позволяет администратору создать запись об особом событии в указанном журнале событий
т.е. не рядовому пользователю, а только администратору. Смотрю журнал событий Windows Безопасность, в нем такие события: Вход с учетной записью выполнен успешно, Выполнен выход учетной записи из системы... А вход/выход пользователей из базы 1С, или что другое связанное 1С пишется в журнал событий Windows? Или можно настроить чтоб писалось? |
|||
39
Mikhail Volkov
16.03.21
✎
13:14
|
1С что-то пишет в журнал событий Windows? Или можно настроить чтоб писалось?
|
|||
40
Mikhail Volkov
16.03.21
✎
16:14
|
А можно ли заставить 1С сделать что-то "нехорошее" (обычно не делается, но без последствий), что обязательно запишется в журнал событий Windows?
|
|||
41
Kassern
16.03.21
✎
16:21
|
(40) а накой лезти в журнал событий винды? Чем тебя не устравивает писать какой нить файл - флаг для этих нужд?
|
|||
42
Mikhail Volkov
16.03.21
✎
17:10
|
(41) Есть такой флаг: при завершении сеанса последнего пользователя очищается лог-файл Как создать пустой текстовый файл из 1С Потом еще: при завершении сеанса последнего пользователя запускается нужный bat-файл, который выполняет все что нужно. Но не всегда: bat-файл запускается под учетной записью последнего пользователя. Если он завершает свой терминальный сеанс, то выполнение bat-файла прерывается. А запустить bat-файл планировщиком заданий командой: ЗапуститьПриложение("schtasks /run /tn имя_задачи_в_планировщике"); не доступно рядовому пользователю, только администраторам. Запуск задания по расписанию сейчас делается в конце ночи (в 6 утра) в случае его не выполнения, но хотелось бы чтобы сразу выполнялось.
|
|||
43
Kassern
16.03.21
✎
17:26
|
(42) каша какая то получается...Зачем запускать бат файл под учеткой последнего пользователя? Все пользователи вышли, создаешь флаг, что можно делать выгрузку. в шедулере можешь хоть каждые 5 минут проверять наличие файла флага, если он существует то запускать выгрузку чего тебе там надо, после выгрузки этот файл флаг удаляется.
|
|||
44
Mikhail Volkov
16.03.21
✎
17:34
|
(43) Это 1-й вариант, а 2-й (39)?
|
|||
45
Mikhail Volkov
17.03.21
✎
06:47
|
Нашел ответ на 1-й вопрос (39), настроил фильтр журнала событий Windows, отбирающего строки с ошибками и зависаниями, вызванными программой 1С по статье: https://infostart.ru/1c/articles/190790/. В отборе есть события, например, Программа 1cv8.exe версии 8.3.10.2466 прекратила взаимодействие с Windows и была закрыта - это событие Ошибка. Интересно, есть ли в журнале события о нормальном завершении 1С. Наверное нет... а как сделать чтобы были?
|
|||
46
Mikhail Volkov
17.03.21
✎
12:00
|
Вроде убрал все лишнее из фильтра, оставил:
<QueryList> <Query Id="0" Path="Application"> <Select Path="Application"> *[EventData[(Data='1cv8.exe')]] </Select> </Query> </QueryList> Теперь в журнале событий вижу не только Ошибки от источников Application Error и Application Hang, но и Сведения от Windows Error Reporting. А события запуска/остановки 1С не вижу!? Фильтр неправильно настроен, или события запуска/остановки 1С в журнале не фиксируются? |
|||
47
Kassern
17.03.21
✎
12:07
|
(46) У тебя все пользователи терминально работают?
|
|||
48
Mikhail Volkov
17.03.21
✎
13:32
|
(47) Да, завершение терминального сеанса фиксируется в журнале событий. Но не всегда пользователи сами его завершают. Иногда просто "выпадают" из терминала.
|
|||
49
Mikhail Volkov
18.03.21
✎
10:11
|
> А можно ли заставить 1С сделать что-то "нехорошее" (обычно не делается, но без последствий), что обязательно запишется в журнал событий Windows? (40)
Послал сообщение командой MSG, и оно зафиксировалось в журнале событий Windows! Имя журнала: Система, Источник: Application Popup, Уровень: Сведения, Код события: 26, Ключевые слова: Классический. По нему можно запускать свое задание под системой учетной записью. Вот только бы не перепутать его с другими событиями... На вкладке Триггеры по кнопке Изменить фильтр событий... создал фильтр XML: <QueryList> <Query Id="0" Path="System"> <Select Path="System">*[System[Provider[@Name='Application Popup'] and (Computer='PERSEUS.corp.akit') and (Level=4 or Level=0) and (band(Keywords,36028797018963968)) and (EventID=26)]]</Select> </Query> </QueryList> Как в него вставить текст сообщения? https://ibb.co/N1D7tzN (Если получится, текст сообщения будет другой). |
|||
50
Mikhail Volkov
19.03.21
✎
07:13
|
Может Использовать другую крайне редко используемую команду (какую?), чтобы она зафиксировалось в журнале событий Windows? (желательно без имени пользователя)
|
|||
51
Mikhail Volkov
23.03.21
✎
11:25
|
Если сообщение командой MSG (всем или конкретному пользователю) послано, когда нет активных сеансов (или конкретного пользователя) на сервере-терминале, оно не фиксируется в журнале событий Windows?
|
|||
52
mistеr
23.03.21
✎
12:07
|
Жесть, сколько садо-мазо стоя в гамаке, вместо того, чтобы настроить нормальные бэкапы.
|
|||
53
Kassern
23.03.21
✎
12:12
|
(52) мне кажется, что это еще не предел)
|
|||
54
Mikhail Volkov
23.03.21
✎
12:43
|
(52) Бэкапы настроены, делаются на SQL-сервере. Но были случаи его выхода из строя. Это дополнительно...
Секцию темы на IT/Админ сменить можно? А то ее только 1С-ники видят... |
|||
55
mistеr
23.03.21
✎
13:38
|
(54) >Но были случаи его выхода из строя.
Настоящий бэкап защищает и от этого. |
|||
56
Mikhail Volkov
23.03.21
✎
14:15
|
(55) SQL-бэкап возможно был, но восстановить из него файловый вариант базы не получилось.
|
|||
57
Kassern
23.03.21
✎
14:16
|
(56) вот в этом направлении и нужно было копать и автоматизировать, а не забить и параллельно запустить дт бекапы
|
|||
58
Kassern
23.03.21
✎
14:16
|
(56) разобрались почему не получилось восстановить бекап?
|
|||
59
mistеr
23.03.21
✎
14:18
|
(56) Из скульного бэкапа пытались получить файловую базу? Да вы там шутники однако.
|
|||
60
Mikhail Volkov
24.03.21
✎
09:01
|
Создал новую тему IT/Админ: Создать событие Windows из 1С возможно?
|
|||
61
Mikhail Volkov
09.09.21
✎
10:57
|
При завершении работы пользователя выполняется предопределенная процедура ПередЗавершениемРаботыСистемы(). В ней проверяется последний ли пользователь. Если последний, то запускается bat-файл архивации. Но замечено что иногда последнему как-то удается завершить свою работу в Альфа-Авто и терминале (обычно это кассир завершает свою работу не с рабочего компьютера, а с домашнего) минуя эту предопределенную процедуру, и bat-файл не выполняется. Хотя в журнале регистрации есть запись события: Сеанс. Завершение.
Не пойму как такое возможно? |
|||
62
Mikhail Volkov
09.09.21
✎
14:29
|
Может пользователь завершил терминальный сеанс не закрыв Альфа-Авто, она завершилась аварийно?
|
|||
63
Mikhail Volkov
14.09.21
✎
10:51
|
Для RDP ведется какой ни будь журнал регистрации подобный ЖР 1С, можно посмотреть когда начат сеанс RDP пользователем: состояние Активно/Отключено, а когда он вышел: не показывает состояние? Как?
|
|||
64
ildary
14.09.21
✎
15:23
|
(63) погуглите "Журнал событий Windows"
|
|||
65
Mikhail Volkov
14.09.21
✎
17:25
|
(64) Ссылок на проконтролировать вход по RDP много, а на проконтролировать выход из RDP не нашел. Хочется знать всегда ли выполняется предопределенная процедура ПриЗавершенииРаботыСистемы(), даже при аварийном завершении 1С, при закрытии сеанса RDP?
|
|||
66
Mikhail Volkov
16.09.21
✎
08:40
|
Например вчера 15.09.2021 20:34:37 по ЖР 1С есть запись Сеанс. Завершение. В журнале Безопасность этому пользователю соответствуют две записи категории "Выход из системы":
15.09.2021 20:34:31 код события: 4647 Данное событие возникает, когда выход начат. Дальнейшие действия, запрошенные пользователем, не выполняются. Данное событие можно рассматривать как событие выхода. 15.09.2021 20:35:07 код события: 4634 Данное событие возникает при уничтожении сеанса входа. Его можно однозначно связать с событием входа с помощью значения "Код входа". Коды входа остаются уникальными после перезагрузки, но они уникальны только на одном компьютере. Тип входа: 3 В чем некорректность выхода: можно определить? |
|||
67
mistеr
16.09.21
✎
11:11
|
(61) >В ней проверяется последний ли пользователь.
Ставлю на то, что проверка кривая. |
|||
68
mistеr
16.09.21
✎
11:12
|
У меня в одном месте сделано так. Проверка в самом bat файле, что нет активных сеансов, и если есть, то архивация не выполняется.
|
|||
69
Mikhail Volkov
16.09.21
✎
12:24
|
(68) Пожалуйста, выложи текст этой проверки!?
Разобрался, при закрытии сеанса RDP предопределенная процедура ПриЗавершенииРаботыСистемы() не выполняется. Но запись в ЖР Сеанс. Завершение делается. Где, как отловить это событие в 1С? |
|||
70
mistеr
16.09.21
✎
13:38
|
(69) Там файловая, просто проверяется наличие lock-файлов в папке с базой.
|
|||
71
Mikhail Volkov
17.09.21
✎
09:23
|
(70) Для SQL-базы это не пойдет.
Но запись в ЖР Сеанс. Завершение делается. Где, на уровне платформы? Конфигуратором туда не добраться? Еще заметил, что перед каждой записью в ЖР Сеанс. Завершение делается более 3-х записей событий: Данные. Изменение в Регистр сведений. Значения свойств объектов. Каких объектов, какие свойства неизвестно. Можно как-то под настроить ЖР, чтобы знать что за объекты? |
|||
72
Mikhail Volkov
18.09.21
✎
09:58
|
Выяснил в Регистр сведений. Значения свойств объектов пишется свойства оборудования - кассы при завершении работы пользователя, вызывается в конечном счете из предопределенной процедуры ПриЗавершенииРаботыСистемы().
|
|||
73
Mikhail Volkov
20.09.21
✎
09:15
|
Обычно жалуются, что Активные пользователи в 1С остаются после отключение пользователя от RDP. У меня такой проблемы нет. Но в теме https://1s-forum.fun/showthread.php/201142-Активные-пользователи-в-1С-остаются-после-отключение-пользователя-от-RDP дан совет: "укажите в свойствах РДП - не отключение сеанса - а завершение, с переопределением пользовательских настроек". Мне бы наоборот, только где конкретно в свойствах RDP?
|
|||
74
SiAl-chel
20.09.21
✎
11:56
|
(73) Версию Windows Server озвучь.
|
|||
75
Mikhail Volkov
20.09.21
✎
12:31
|
(74) 2008R2
|
|||
76
Mikhail Volkov
22.09.21
✎
17:01
|
https://pro1c.org.ua/index.php?showtopic=26358 «Пуск» - «Все программы»-«Администрирование»-«Настройка служб терминалов» - нет у меня на сервере терминалов!?
И «Пуск» - «Выполнить»- «%SystemRoot%\system32\tscc.msc /s» - не удается найти tscc.msc? |
|||
77
Mikhail Volkov
26.09.21
✎
13:03
|
В bat-файле для получения dt-выгрузки базы прописана строка:
"C:\Program Files (x86)\1cv8\8.3.10.2466\bin\1cv8s.exe" DESIGNER /S "Сервер\база" /N"Администратор" /P"Пароль" /DumpIB %BakName% /Out %LogName% -NoTruncate /DisableStartupMessages /UC AllowRobotLogon Он запускается заданием, которое обычно запускается из 1С при завершении работы последнего пользователя из предопределенной процедуры ПриЗавершенииРаботыСистемы(). Перед его запуском в 1С проверяется: открыт ли конфигуратор, если он открыт, то он закрывается процедурой (23). А есть ли другой способ закрыть конфигуратор? Вроде встречал команду для командной строки, выгоняющую всех пользователей из базы. Она закрывает конфигуратор, если он открыт? Или есть команда проверяющая открыт ли конфигуратор, или кто-то есть в базе (в серверной SQL)? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |