Ошибка при запуске теста
Модератор: Дмитрий Юхтимовский
Ошибка при запуске теста
Добрый день, Вячеслав!
Наши сисадмины установили сервер 1С и SQL на Windows server 2012. Он немного работает медленно, поэтому мы решили запустить Ваш тест и проверить.
Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Что это может быть и как побороть? Модули у Вас вырезаны, так что попасть поглядеть в чем ошибка не могу.
- stig
- Сообщений: 6
- Зарегистрирован: 30 май 2014, 06:57
Re: Ошибка при запуске теста
stig » 30 май 2014, 07:46
Запустил тест на сервере 8.2.17.143
Конфигурация: Простой тест интенсивной записи для платформы 1С:Предприятие + Многопоточный тест записи на диск (2.0.3.3)
Гилёв Вячеслав Валерьевич
(gilev.ru/1c/tpc)
И получил ошибку:
{Обработка.TPC_1C_GILV.Форма.Форма(499)}: Ошибка при вызове метода контекста (ConnectAgent): Произошла исключительная ситуация: Версия компоненты ‘comcntr’ (8.2.19.68) отличается от версии корневого модуля ‘core82’ (8.2.17.143)
Но после этого рабочий стол открылся и тестирование я провел. Не знаю влияла ли эта ошибка на тест или нет.
- stig
- Сообщений: 6
- Зарегистрирован: 30 май 2014, 06:57
Re: Ошибка при запуске теста
Гилёв Вячеслав » 30 май 2014, 18:47
наверно ставили 8.2 после 8.3, посмотрим что можно сделать
попробуйте перерегистрировать COM-соединение
- Гилёв Вячеслав
- Сообщений: 2719
- Зарегистрирован: 11 фев 2013, 15:40
- Откуда: Россия, Москва
Re: Ошибка при запуске теста
stig » 30 май 2014, 19:46
Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Этот тест я запускал на одном сервере, где стоит только 8.3
Что делать с ней?
Последний раз редактировалось stig 02 июн 2014, 07:17, всего редактировалось 1 раз.
- stig
- Сообщений: 6
- Зарегистрирован: 30 май 2014, 06:57
Re: Ошибка при запуске теста
stig » 30 май 2014, 19:57
И получил ошибку:
{Обработка.TPC_1C_GILV.Форма.Форма(499)}: Ошибка при вызове метода контекста (ConnectAgent): Произошла исключительная ситуация: Версия компоненты ‘comcntr’ (8.2.19.68) отличается от версии корневого модуля ‘core82’ (8.2.17.143)
А эту ошибку я уже устранил, спасибо!
- stig
- Сообщений: 6
- Зарегистрирован: 30 май 2014, 06:57
Re: Ошибка при запуске теста
stig » 02 июн 2014, 07:18
stig писал(а):Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Этот тест я запускал на одном сервере, где стоит только 8.3
Что делать с ней?
Вячеслав, можете подсказать как запустить тест на 8.3?
- stig
- Сообщений: 6
- Зарегистрирован: 30 май 2014, 06:57
Re: Ошибка при запуске теста
ssavel » 02 июн 2014, 12:54
stig писал(а):
stig писал(а):Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Этот тест я запускал на одном сервере, где стоит только 8.3
Что делать с ней?Вячеслав, можете подсказать как запустить тест на 8.3?
Добрый день.
Я занимаюсь поддержкой данного теста.
Для более подробного анализа ошибки прошу связаться со мной по скайпу «s.savel».
- ssavel
- Сообщений: 7
- Зарегистрирован: 21 мар 2014, 15:30
Re: Ошибка при запуске теста
Гилёв Вячеслав » 03 июн 2014, 19:11
stig писал(а):
stig писал(а):Тест TPC+G1C gilev.ru 2.1.0.2
Платформа 8,3,4,482.
Но при запуске теста в режиме предприятия выходит ошибка:
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(511)}: Ошибка при вызове метода контекста (Authenticate): Типы не совпадают (2)
Этот тест я запускал на одном сервере, где стоит только 8.3
Что делать с ней?Вячеслав, можете подсказать как запустить тест на 8.3?
У вас есть созданные аккаунта администратора сервера 1с или администратора кластера 1С? Если да, то создайте в администраторах учетку с виндовой авторизацией пользователем, из под которого вы запускаете тест.
- Гилёв Вячеслав
- Сообщений: 2719
- Зарегистрирован: 11 фев 2013, 15:40
- Откуда: Россия, Москва
Re: Ошибка при запуске теста
stig » 04 июн 2014, 17:32
Понял, спасибо!
- stig
- Сообщений: 6
- Зарегистрирован: 30 май 2014, 06:57
Re: Ошибка при запуске теста
mechnotech » 07 дек 2019, 11:19
Добрый день!
Версия 8.3.16.1030. Сервер на линуксе 32 битный, postgresql 64 bit 10.10-1, оба на виртуальной машине vmware.
Конфигурации работают нормально.
Но провести данный тест не могу, выпадает следующая ошибка:
При загрузке, снизу выводит:
- Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(504)}: Метод объекта не обнаружен (ConnectAgent)
При запуске теста:
- Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(856)}: Ошибка при вызове метода контекста (Записать)
НовыйЭлементСправочника.Записать();
по причине:
Нарушено условие уникальности данных.Попытка вставки неуникального значения в уникальный индекс:
ERROR: duplicate key value violates unique constraint "_reference22_pkey"
DETAIL: Key (_idrref)=(xd199000c29d1e3bf11ea18c04bac4774) already exists.
Покажите пожалуйста, в какую сторону смотреть?
- mechnotech
- Сообщений: 2
- Зарегистрирован: 07 дек 2019, 10:18
Re: Ошибка при запуске теста
Дмитрий Юхтимовский » 07 дек 2019, 14:37
На этом сочетании версий платформы 1С и PostgreSQL работа теста не тестировалась.
Повторится ли ошибка, если загрузить конфигурацию из dt заново?
- Дмитрий Юхтимовский
- Сообщений: 735
- Зарегистрирован: 11 фев 2013, 19:28
- Откуда: gilev.ru
Re: Ошибка при запуске теста
mechnotech » 07 дек 2019, 18:36
Пробовал не один раз, ошибка регулярная, одна и та-же.
Попробую завтра запустить на 64битной версии 1С.
- mechnotech
- Сообщений: 2
- Зарегистрирован: 07 дек 2019, 10:18
Re: Ошибка при запуске теста
Дмитрий Юхтимовский » 07 дек 2019, 21:25
Непосредственно к тесту это не имеет никакого отношения, похоже на проблему связки конкретной версии платформы 1С и версии PostgreSQL. Хоть согласно системных требований 1С, формально PostgreSQL может использоваться, начиная с версии платформы 8.3.14.1565, здесь «что-то пошло не так».
- Дмитрий Юхтимовский
- Сообщений: 735
- Зарегистрирован: 11 фев 2013, 19:28
- Откуда: gilev.ru
Re: Ошибка при запуске теста
Гилёв Вячеслав » 09 дек 2019, 16:17
наличие этой ошибки говорит что платформа в целом и на обычных типовых конфигурациях может выдать ошибки в поведении функционала
так что сначала нужно разобраться с ошибкой неуникальности записи
и только потом возвращаться к тесту
ошибка к самому тесту отношения не имеет
рекомендую Вам воспользоваться ресурсом
http://1c.postgrespro.ru
- Гилёв Вячеслав
- Сообщений: 2719
- Зарегистрирован: 11 фев 2013, 15:40
- Откуда: Россия, Москва
Re: Ошибка при запуске теста
akatala » 20 дек 2019, 00:43
Добрый день!
аналогичная ошибка как у mechnotech
Версия 8.3.16.1063. Сервер на CentOs 7.7 64 битный, postgrepro 64 bit 11.6-1 (на 10.6-1 аналогично), оба на виртуальной машине vmware.
Провести данный тест не могу, выпадает следующая ошибка:
При загрузке, снизу выводит:
- Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(482)}: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса
При запуске теста:
- Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(856)}: Ошибка при вызове метода контекста (Записать)
НовыйЭлементСправочника.Записать();
по причине:
Нарушено условие уникальности данных.Попытка вставки неуникального значения в уникальный индекс:
ERROR: duplicate key value violates unique constraint "_reference22_pkey"
DETAIL: Key (_idrref)=(xc5890050560162d611ea22a8a24a49d6) already exists.
Сборка postgrepro бралась с сайте 1c.postgres.ru
- Код: выделить все
rpm --import http://repo.postgrespro.ru/keys/GPG-KEY-POSTGRESPRO
echo [postgrespro-1c] > /etc/yum.repos.d/postgrespro-1c.repo
echo name=Postgres Pro 1C repo >> /etc/yum.repos.d/postgrespro-1c.repo
echo baseurl=http://repo.postgrespro.ru//pg1c-archive/pg1c-11.6/centos/7/os/x86_64/rpms/ >> /etc/yum.repos.d/postgrespro-1c.repo
echo gpgcheck=1 >> /etc/yum.repos.d/postgrespro-1c.repo
echo enabled=1 >> /etc/yum.repos.d/postgrespro-1c.repo
yum makecache
yum install -y postgrespro-1c-11-server-11.6-1.el7.x86_64 postgrespro-1c-11-contrib-11.6-1.el7.x86_64
/opt/pgpro/1c-11/bin/pg-setup initdb
/opt/pgpro/1c-11/bin/pg-setup service enable
service postgrespro-1c-11 start
Покажите пожалуйста, в какую сторону смотреть?
- akatala
- Сообщений: 1
- Зарегистрирован: 20 дек 2019, 00:33
Re: Ошибка при запуске теста
Гилёв Вячеслав » 20 дек 2019, 02:50
в сторону неуникальности в индексе на субд
- Гилёв Вячеслав
- Сообщений: 2719
- Зарегистрирован: 11 фев 2013, 15:40
- Откуда: Россия, Москва
Re: Ошибка при запуске теста
bambr » 26 дек 2019, 12:03
Добрый день.
Я думаю, что проблема в том, что при создании баз в 8.3.16 последней нельзя указать смещение дат. На более старых платформах, где можно указать смещение с любой версией постгрес включая 12 все хорошо.
- bambr
- Сообщений: 1
- Зарегистрирован: 26 дек 2019, 11:59
Re: Ошибка при запуске теста
Павликовский Андрей » 04 янв 2020, 00:53
Та же ошибка на 8.3.16.1063
- Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(856)}: Ошибка при вызове метода контекста (Записать)
НовыйЭлементСправочника.Записать();
по причине:
Нарушено условие уникальности данных.Попытка вставки неуникального значения в уникальный индекс:
ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "_reference22_pkey"
DETAIL: Ключ "(_idrref)=(x4a95be0d5a10e54711ea2e729ff14b78)" уже существует.
Postgres Pro Standart 12.1
Update: после отката на 8.3.15.1747 проблема пропала.
- Павликовский Андрей
- Сообщений: 1
- Зарегистрирован: 04 янв 2020, 00:51
Re: Ошибка при запуске теста
sysadmin » 08 янв 2020, 17:43
Та же ошибка на 8.3.16.1063
- Код: выделить все
{Обработка.TPC_1C_GILV.Форма.Форма.Форма(856)}: Ошибка при вызове метода контекста (Записать)
НовыйЭлементСправочника.Записать();
по причине:
Нарушено условие уникальности данных.Попытка вставки неуникального значения в уникальный индекс:
ОШИБКА: повторяющееся значение ключа нарушает ограничение уникальности "_reference22_pkey"
postgresql_10.10_4.1C_amd64
- sysadmin
- Сообщений: 4
- Зарегистрирован: 08 янв 2020, 17:36
Re: Ошибка при запуске теста
Дмитрий Юхтимовский » 08 янв 2020, 19:30
Как можно заметить — у всех подобная ошибка вылезла после перехода на 1С 8.3.16.
И с большой вероятностью такое же поведение может наблюдаться не только на базе теста, а и на любых других базах 1С+PostgreSQL.
Если есть желание принести пользу сообществу — можно отправлять подробно документированное воспроизведение этой ошибки в техподдержку 1С, чтобы они таки исправили ошибку.
- Дмитрий Юхтимовский
- Сообщений: 735
- Зарегистрирован: 11 фев 2013, 19:28
- Откуда: gilev.ru
Re: Ошибка при запуске теста
sysadmin » 09 янв 2020, 09:56
На типовых конфигурациях ошибка не воспроизводится.
- sysadmin
- Сообщений: 4
- Зарегистрирован: 08 янв 2020, 17:36
Re: Ошибка при запуске теста
Дмитрий Юхтимовский » 09 янв 2020, 10:05
Тем не менее, никакого уникального для платформы 1С кода наш тест не содержит.
То, что у вас на типовых эта ошибка не воспроизводится, может говорить только о том, что мы «удачно» попали в условия воспроизведения ошибки, а на вашей выборке этого пока не случилось.
- Дмитрий Юхтимовский
- Сообщений: 735
- Зарегистрирован: 11 фев 2013, 19:28
- Откуда: gilev.ru
Re: Ошибка при запуске теста
sysadmin » 09 янв 2020, 20:51
В техподдержку 1С баги репорчу регулярно, но тут вряд ли они будут рассматривать этот тест(не типовая конфигурация)
UPD 09.01.2020: запостил багрепорт, если ответят отпишусь
UPD 09.01.2020:
Здравствуйте,
Ваше обращение зарегистрировано под номером HL-101266.
UPD 13.01.2020: ТП запросила скрины
UPD 14.01.2020: отправил скрины в ТП
UPD 15.01.2020:
Добрый день,
Возможно это ошибка 10215986, проверьте , пожалуйста, на тестовой платформе 8.3.16.1148.
- sysadmin
- Сообщений: 4
- Зарегистрирован: 08 янв 2020, 17:36
Re: Ошибка при запуске теста
sysadmin » 15 янв 2020, 21:33
UPD 19.01.2020: протестил и отписал в ТП
На платформе 8.3.16.1148 ошибки нет, тест c PostgreSQL проходит.
Результат(попугаи) показывает такой же(1:1) как и с MSSQL.
- sysadmin
- Сообщений: 4
- Зарегистрирован: 08 янв 2020, 17:36
Вернуться в Нагрузочное тестирование
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
02.02.21 — 15:28
Смотрю тему Отключение зависших сеансов на сервере., у меня выдает: Метод объекта не обнаружен (ОтключитьСеанс)!? Как исправить?
1 — 02.02.21 — 15:35
а режим совместимости какой?
2 — 02.02.21 — 15:37
(1) Это ты так издалека к версии БСП подбираешься?
3 — 02.02.21 — 15:38
(2) ога, сам сталкивался с подобным
4 — 02.02.21 — 15:58
(1) Версия 8.2.16, платформа 8.3.10.2466, обычное приложение (не УФ) Альфа-Авто.
5 — 02.02.21 — 16:39
(4) У тебя там БСП (если она вообще есть) древней египетских пирамид…
6 — 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 — 02.02.21 — 16:55
+(6) плюс на форме обработки у меня список значений, куда добавляю пользователей, которых не завершать, т.е. исключения.
8 — 02.02.21 — 17:18
(6) Вообще-то мне надо закрыть конфигуратор (и желательно фоновые задания) по завершению работы последнего пользователя в базе…
9 — 02.02.21 — 17:21
(8) ну так уберите из кода эти условия, и завершать будет вообще все сеансы и подключения к базе.
Типа такие условия: нРег(Сеанс.AppID) = «backgroundjob».
10 — 02.02.21 — 17:23
+(9) код рабочий, если ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов) зарегистрирован в системе, это важно.
11 — 02.02.21 — 17:24
Разумеется в исключение надо поставить текущий сеанс, под которым вы запускаете обработку))) ну, на всякий случай уточняю
12 — 02.02.21 — 17:55
(10) Мне бы попроще, без «ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов)»
Есть у меня функция для предупреждения пользователя, если кассовая смена не закрыта:
Функция ПоследнийПользовательБазы(КопияИБ = Истина) Экспорт
Если КопияИБ И КопияИнформационнойБазы() Тогда
Возврат Ложь;
КонецЕсли;
СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();
Если СоединенияИнформационнойБазы.Количество() = 1 Тогда
Возврат Истина;
КонецЕсли;
Количество = 0;
Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл
Если ПредставлениеПриложения(Соединение.ИмяПриложения) = «Конфигуратор» Тогда
Продолжить;
КонецЕсли;
Количество = Количество + 1;
КонецЦикла;
Возврат Количество = 1;
КонецФункции // ПоследнийПользовательБазы()
Как отключить сеанс, если ПредставлениеПриложения(Соединение.ИмяПриложения) = «Конфигуратор»?
13 — 02.02.21 — 18:32
(12) не вижу как она предупреждает, и зачем строка «Количество = Количество + 1;» если вы все равно возвращаете «Количество = 1;»?
14 — 02.02.21 — 18:46
(13) Возврат Количество = 1; — возвращает булево (типа: это последний пользователь вне конфигуратора? истина/ложь)
15 — 02.02.21 — 18:51
(13) Функцию (12) лишь привел для того, что могу получить все СоединенияИнформационнойБазы, найти нужное, его НомерСеанса. А как правильно его ОтключитьСеанс — не знаю?
16 — 03.02.21 — 07:26
(14) > типа: это последний пользователь вне конфигуратора?
Да, не учел, что могут быть зависшие и фоновые задания… желательно доработать функцию. Но сейчас вопрос не в этом.
(13) А для чего этот пример, по отключению зависших сеансов? Непосредственное отключение: РабПроц.Disconnect(Соединение);? Долгий путь к РабПроц, через Коннектор = Новый COMОбъект(«v83.COMConnector.1»);
Смотрю обработку Поиск и отключение зависших сеансов на сервере 1С (http://catalog.mista.ru/public/548893/), в ней тоже подобное, через СоединениеСАгентом.TerminateSession(РабочийКластер,ТекСеанс); Попроще нельзя?
17 — 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 — 03.02.21 — 08:45
(0) это из УПП 1.3
19 — 03.02.21 — 10:38
(18) Ага, обработка АктивныеПользователи процедура ЗавершитьСеанс(Команда), но там откуда?
20 — 03.02.21 — 10:53
(17) завершить сеанс не равно отключить соединение. Есть ситуации, когда сеанс завершен некорректно и подключение зависает или дублируется. Агент сервера вроде как должен сам завершать зависшие подключения, но лишь по истечению какого-то времени, мы же говорим о сиюминутном завершении всех сеансов и подключений.
Вы можете пробовать разные варианты, данный пример гибок и универсален, потому как работает непосредственно с агентом сервера 1с, т.е. перманентно.
21 — 03.02.21 — 12:01
(18)+ Запустил УПП в режиме отладки, посмотреть как выполняется процедура ЗавершитьСеанс(Команда), открыл обработку АктивныеПользователи. В ней даже кнопки нет Завершить сеанс!?
(20) В твоем примере (6):
АдминистраторКластера = «admins»;
ПарольКластера = «E8vbteud»;
У меня: Ошибка при вызове метода контекста (Authenticate): Произошла исключительная ситуация: Ошибка операции администрирования. Администратор кластера не аутентифицирован. Где их брать, в консоле администрирования? АдминистраторКластера взял, а пароль не помню, пустой не подходит. Как посмотреть пароль?
22 — 03.02.21 — 12:55
(21) ну так пропишите своего админа кластера и пароль.
Я вам дал инструмент, ваше дело как им распоряжаться. Гугл вам в помошь
23 — 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 — 03.02.21 — 14:37
+ Вроде не мешает, dt-выгрузка делается запущенным из 1С bat-файлом.
25 — 03.02.21 — 14:57
(19)+ СоединенияИБКлиентСервер — это общий модуль, еще используется общий модуль СоединенияИБ и другие для ОтключитьСеанс(). В Альфа-Авто их нет, не стал разбираться…
26 — 03.02.21 — 15:26
Вопрос не по теме, в bat-файле имя файла dt-выгрузки формируется: set «BakName=f:workspace1C1с_АрхивыAAAAkitAAAAkit_%date:~0,2%%date:~3,2%%date:~6,4%.dt». Но работа 1С может задержаться, завершиться после полуночи. Как бы мне BakName сформировать по вчерашней дате? Ведь в месяцах разное число дней.
27 — 09.02.21 — 06:21
(6) Этот алгоритм может определить какой сеанс из 1CV8 (толстого клиента) является зависшим? Или другой метод по СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();?
Свойства:
ИмяКомпьютера (ComputerName)
ИмяПриложения (ApplicationName)
НачалоСоединения (ConnectionStarted)
НомерСеанса (SessionNumber)
НомерСоединения (ConnectionNumber)
Пользователь (User)
28 — 09.02.21 — 06:27
(26)
1. Выгружать базу в файл с произвольным именем.
2. После пакетного запуска в скрипте ожидать появления этого ненулевого файла.
3. После выгрузки формировать имя файла по дате и времени.
4. Переименовать файл с произвольным именем в файл с нужным именем из шага 3.
29 — 09.02.21 — 07:11
(28) Наверное не точно задал вопрос (26), поясняю: обычно ночная выгрузки делается после 21 часа, когда все пользователи вышли из базы. Но бывает срочная работа, или пользователь неправильно вышел (только из терминала, но не из базы), или просто забыл выйти. С 21 часа включается принудительный мягкий выход, задается вопрос пользователю, но пользователь может отказаться выйти. Тогда принудительный мягкий выход откладывается на час. Через час ситуация может повториться… и через 2, 3, сейчас этот алгоритм работает до полуночи (пока более длительных задержек не было). Хотелось бы, чтобы этот алгоритм мог работать до утра (начала следующего рабочего дня). Но имя файла dt-выгрузки после полуночи сформировалось по вчерашней дате!?
30 — 09.02.21 — 12:48
(27)+ Наверное нет. Тогда тот же алгоритм (23) по условию: Если ТекСеанс.dbProcTook > Цел(ПериодичностьПроверки*60*1000) Тогда //в мс.
31 — 09.02.21 — 12:54
(29) Ваще плевать с каким именем он сформировался. Делай выгрузки с рандомным именем, а потом другим заданием с нужной тебе регулярностью проверяй, чтобы имя файла соответствовало дате и времени изменения (или создания) файла, если нет, то тогда переименовывай файл.
32 — 09.02.21 — 13:05
(31) По существованию файла с именем по дате как раз принимается решение: делать ли завершение сеансов и dt-выгрузку, или нет.
33 — 09.02.21 — 15:05
Вроде нашел https://www.sql.ru/forum/445183/kak-poluchit-vcherashnee-chislo-v-bat-fayle ужас какой!? Неужели у bat-файлов нет функции вчерашний даты? Если текущий час больше 6 часов, то имя файла BakName формируется по сегодняшней дате (26). Если нет (после полуночи), то по вчерашней.
34 — 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 — 10.02.21 — 06:48
(34) Это лишь фрагмент замены: «иначе будут проблемы на числах 08 и 09…», а сам код еще строк 60… советуют получать вчерашнюю дату через PowerShell (здесь вряд ли помогут). Спс всем.
36 — 10.02.21 — 15:21
37 — 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 — 13.03.21 — 13:47
Вроде нашел, но: Команда eventcreate позволяет администратору создать запись об особом событии в указанном журнале событий
т.е. не рядовому пользователю, а только администратору.
Смотрю журнал событий Windows Безопасность, в нем такие события: Вход с учетной записью выполнен успешно, Выполнен выход учетной записи из системы… А вход/выход пользователей из базы 1С, или что другое связанное 1С пишется в журнал событий Windows? Или можно настроить чтоб писалось?
39 — 16.03.21 — 13:14
1С что-то пишет в журнал событий Windows? Или можно настроить чтоб писалось?
40 — 16.03.21 — 16:14
А можно ли заставить 1С сделать что-то «нехорошее» (обычно не делается, но без последствий), что обязательно запишется в журнал событий Windows?
41 — 16.03.21 — 16:21
(40) а накой лезти в журнал событий винды? Чем тебя не устравивает писать какой нить файл — флаг для этих нужд?
42 — 16.03.21 — 17:10
(41) Есть такой флаг: при завершении сеанса последнего пользователя очищается лог-файл Как создать пустой текстовый файл из 1С Потом еще: при завершении сеанса последнего пользователя запускается нужный bat-файл, который выполняет все что нужно. Но не всегда: bat-файл запускается под учетной записью последнего пользователя. Если он завершает свой терминальный сеанс, то выполнение bat-файла прерывается. А запустить bat-файл планировщиком заданий командой: ЗапуститьПриложение(«schtasks /run /tn имя_задачи_в_планировщике»); не доступно рядовому пользователю, только администраторам. Запуск задания по расписанию сейчас делается в конце ночи (в 6 утра) в случае его не выполнения, но хотелось бы чтобы сразу выполнялось.
43 — 16.03.21 — 17:26
(42) каша какая то получается…Зачем запускать бат файл под учеткой последнего пользователя? Все пользователи вышли, создаешь флаг, что можно делать выгрузку. в шедулере можешь хоть каждые 5 минут проверять наличие файла флага, если он существует то запускать выгрузку чего тебе там надо, после выгрузки этот файл флаг удаляется.
44 — 16.03.21 — 17:34
(43) Это 1-й вариант, а 2-й (39)?
45 — 17.03.21 — 06:47
Нашел ответ на 1-й вопрос (39), настроил фильтр журнала событий Windows, отбирающего строки с ошибками и зависаниями, вызванными программой 1С по статье: https://infostart.ru/1c/articles/190790/. В отборе есть события, например, Программа 1cv8.exe версии 8.3.10.2466 прекратила взаимодействие с Windows и была закрыта — это событие Ошибка. Интересно, есть ли в журнале события о нормальном завершении 1С. Наверное нет… а как сделать чтобы были?
46 — 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 — 17.03.21 — 12:07
(46) У тебя все пользователи терминально работают?
48 — 17.03.21 — 13:32
(47) Да, завершение терминального сеанса фиксируется в журнале событий. Но не всегда пользователи сами его завершают. Иногда просто «выпадают» из терминала.
49 — 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 — 19.03.21 — 07:13
Может Использовать другую крайне редко используемую команду (какую?), чтобы она зафиксировалось в журнале событий Windows? (желательно без имени пользователя)
51 — 23.03.21 — 11:25
Если сообщение командой MSG (всем или конкретному пользователю) послано, когда нет активных сеансов (или конкретного пользователя) на сервере-терминале, оно не фиксируется в журнале событий Windows?
52 — 23.03.21 — 12:07
Жесть, сколько садо-мазо стоя в гамаке, вместо того, чтобы настроить нормальные бэкапы.
53 — 23.03.21 — 12:12
(52) мне кажется, что это еще не предел)
54 — 23.03.21 — 12:43
(52) Бэкапы настроены, делаются на SQL-сервере. Но были случаи его выхода из строя. Это дополнительно…
Секцию темы на IT/Админ сменить можно? А то ее только 1С-ники видят…
55 — 23.03.21 — 13:38
(54) >Но были случаи его выхода из строя.
Настоящий бэкап защищает и от этого.
56 — 23.03.21 — 14:15
(55) SQL-бэкап возможно был, но восстановить из него файловый вариант базы не получилось.
57 — 23.03.21 — 14:16
(56) вот в этом направлении и нужно было копать и автоматизировать, а не забить и параллельно запустить дт бекапы
58 — 23.03.21 — 14:16
(56) разобрались почему не получилось восстановить бекап?
59 — 23.03.21 — 14:18
(56) Из скульного бэкапа пытались получить файловую базу? Да вы там шутники однако.
60 — 24.03.21 — 09:01
61 — 09.09.21 — 10:57
При завершении работы пользователя выполняется предопределенная процедура ПередЗавершениемРаботыСистемы(). В ней проверяется последний ли пользователь. Если последний, то запускается bat-файл архивации. Но замечено что иногда последнему как-то удается завершить свою работу в Альфа-Авто и терминале (обычно это кассир завершает свою работу не с рабочего компьютера, а с домашнего) минуя эту предопределенную процедуру, и bat-файл не выполняется. Хотя в журнале регистрации есть запись события: Сеанс. Завершение.
Не пойму как такое возможно?
62 — 09.09.21 — 14:29
Может пользователь завершил терминальный сеанс не закрыв Альфа-Авто, она завершилась аварийно?
63 — 14.09.21 — 10:51
Для RDP ведется какой ни будь журнал регистрации подобный ЖР 1С, можно посмотреть когда начат сеанс RDP пользователем: состояние Активно/Отключено, а когда он вышел: не показывает состояние? Как?
64 — 14.09.21 — 15:23
(63) погуглите «Журнал событий Windows»
65 — 14.09.21 — 17:25
(64) Ссылок на проконтролировать вход по RDP много, а на проконтролировать выход из RDP не нашел. Хочется знать всегда ли выполняется предопределенная процедура ПриЗавершенииРаботыСистемы(), даже при аварийном завершении 1С, при закрытии сеанса RDP?
66 — 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 — 16.09.21 — 11:11
(61) >В ней проверяется последний ли пользователь.
Ставлю на то, что проверка кривая.
68 — 16.09.21 — 11:12
У меня в одном месте сделано так. Проверка в самом bat файле, что нет активных сеансов, и если есть, то архивация не выполняется.
69 — 16.09.21 — 12:24
(68) Пожалуйста, выложи текст этой проверки!?
Разобрался, при закрытии сеанса RDP предопределенная процедура ПриЗавершенииРаботыСистемы() не выполняется. Но запись в ЖР Сеанс. Завершение делается. Где, как отловить это событие в 1С?
70 — 16.09.21 — 13:38
(69) Там файловая, просто проверяется наличие lock-файлов в папке с базой.
71 — 17.09.21 — 09:23
(70) Для SQL-базы это не пойдет.
Но запись в ЖР Сеанс. Завершение делается. Где, на уровне платформы? Конфигуратором туда не добраться?
Еще заметил, что перед каждой записью в ЖР Сеанс. Завершение делается более 3-х записей событий: Данные. Изменение в Регистр сведений. Значения свойств объектов. Каких объектов, какие свойства неизвестно. Можно как-то под настроить ЖР, чтобы знать что за объекты?
72 — 18.09.21 — 09:58
Выяснил в Регистр сведений. Значения свойств объектов пишется свойства оборудования — кассы при завершении работы пользователя, вызывается в конечном счете из предопределенной процедуры ПриЗавершенииРаботыСистемы().
73 — 20.09.21 — 09:15
Обычно жалуются, что Активные пользователи в 1С остаются после отключение пользователя от RDP. У меня такой проблемы нет. Но в теме https://1s-forum.fun/showthread.php/201142-Активные-пользователи-в-1С-остаются-после-отключение-пользователя-от-RDP дан совет: «укажите в свойствах РДП — не отключение сеанса — а завершение, с переопределением пользовательских настроек». Мне бы наоборот, только где конкретно в свойствах RDP?
74 — 20.09.21 — 11:56
(73) Версию Windows Server озвучь.
75 — 20.09.21 — 12:31
(74) 2008R2
76 — 22.09.21 — 17:01
https://pro1c.org.ua/index.php?showtopic=26358 «Пуск» — «Все программы»-«Администрирование»-«Настройка служб терминалов» — нет у меня на сервере терминалов!?
И «Пуск» — «Выполнить»- «%SystemRoot%system32tscc.msc /s» — не удается найти tscc.msc?
Mikhail Volkov
77 — 26.09.21 — 13:03
В bat-файле для получения dt-выгрузки базы прописана строка:
«C:Program Files (x86)1cv88.3.10.2466bin1cv8s.exe» DESIGNER /S «Сервербаза» /N»Администратор» /P»Пароль» /DumpIB %BakName% /Out %LogName% -NoTruncate /DisableStartupMessages /UC AllowRobotLogon
Он запускается заданием, которое обычно запускается из 1С при завершении работы последнего пользователя из предопределенной процедуры ПриЗавершенииРаботыСистемы(). Перед его запуском в 1С проверяется: открыт ли конфигуратор, если он открыт, то он закрывается процедурой (23).
А есть ли другой способ закрыть конфигуратор? Вроде встречал команду для командной строки, выгоняющую всех пользователей из базы. Она закрывает конфигуратор, если он открыт? Или есть команда проверяющая открыт ли конфигуратор, или кто-то есть в базе (в серверной SQL)?
Mikhail Volkov
02.02.21 — 15:28
Смотрю тему Отключение зависших сеансов на сервере., у меня выдает: Метод объекта не обнаружен (ОтключитьСеанс)!? Как исправить?
Kigo_Kigo
1 — 02.02.21 — 15:35
а режим совместимости какой?
fisher
2 — 02.02.21 — 15:37
(1) Это ты так издалека к версии БСП подбираешься?
Kigo_Kigo
3 — 02.02.21 — 15:38
(2) ога, сам сталкивался с подобным
Mikhail Volkov
4 — 02.02.21 — 15:58
(1) Версия 8.2.16, платформа 8.3.10.2466, обычное приложение (не УФ) Альфа-Авто.
ДенисЧ
5 — 02.02.21 — 16:39
(4) У тебя там БСП (если она вообще есть) древней египетских пирамид…
Deal with it
6 — 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(Соединение);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Deal with it
7 — 02.02.21 — 16:55
+(6) плюс на форме обработки у меня список значений, куда добавляю пользователей, которых не завершать, т.е. исключения.
Mikhail Volkov
8 — 02.02.21 — 17:18
(6) Вообще-то мне надо закрыть конфигуратор (и желательно фоновые задания) по завершению работы последнего пользователя в базе…
Deal with it
9 — 02.02.21 — 17:21
(8) ну так уберите из кода эти условия, и завершать будет вообще все сеансы и подключения к базе.
Типа такие условия: нРег(Сеанс.AppID) = «backgroundjob».
Deal with it
10 — 02.02.21 — 17:23
+(9) код рабочий, если ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов) зарегистрирован в системе, это важно.
Deal with it
11 — 02.02.21 — 17:24
Разумеется в исключение надо поставить текущий сеанс, под которым вы запускаете обработку))) ну, на всякий случай уточняю
Mikhail Volkov
12 — 02.02.21 — 17:55
(10) Мне бы попроще, без «ком обьект v83.COMConnector.1 (или как он у вас назван в службе компонентов)»
Есть у меня функция для предупреждения пользователя, если кассовая смена не закрыта:
Функция ПоследнийПользовательБазы(КопияИБ = Истина) Экспорт
Если КопияИБ И КопияИнформационнойБазы() Тогда
Возврат Ложь;
КонецЕсли;
СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();
Если СоединенияИнформационнойБазы.Количество() = 1 Тогда
Возврат Истина;
КонецЕсли;
Количество = 0;
Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл
Если ПредставлениеПриложения(Соединение.ИмяПриложения) = «Конфигуратор» Тогда
Продолжить;
КонецЕсли;
Количество = Количество + 1;
КонецЦикла;
Возврат Количество = 1;
КонецФункции // ПоследнийПользовательБазы()
Как отключить сеанс, если ПредставлениеПриложения(Соединение.ИмяПриложения) = «Конфигуратор»?
Deal with it
13 — 02.02.21 — 18:32
(12) не вижу как она предупреждает, и зачем строка «Количество = Количество + 1;» если вы все равно возвращаете «Количество = 1;»?
Kesim
14 — 02.02.21 — 18:46
(13) Возврат Количество = 1; — возвращает булево (типа: это последний пользователь вне конфигуратора? истина/ложь)
Mikhail Volkov
15 — 02.02.21 — 18:51
(13) Функцию (12) лишь привел для того, что могу получить все СоединенияИнформационнойБазы, найти нужное, его НомерСеанса. А как правильно его ОтключитьСеанс — не знаю?
Mikhail Volkov
16 — 03.02.21 — 07:26
(14) > типа: это последний пользователь вне конфигуратора?
Да, не учел, что могут быть зависшие и фоновые задания… желательно доработать функцию. Но сейчас вопрос не в этом.
(13) А для чего этот пример, по отключению зависших сеансов? Непосредственное отключение: РабПроц.Disconnect(Соединение);? Долгий путь к РабПроц, через Коннектор = Новый COMОбъект(«v83.COMConnector.1»);
Смотрю обработку Поиск и отключение зависших сеансов на сервере 1С (http://catalog.mista.ru/public/548893/), в ней тоже подобное, через СоединениеСАгентом.TerminateSession(РабочийКластер,ТекСеанс); Попроще нельзя?
Mikhail Volkov
17 — 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(Соединение))
John83
18 — 03.02.21 — 08:45
(0) это из УПП 1.3
Mikhail Volkov
19 — 03.02.21 — 10:38
(18) Ага, обработка АктивныеПользователи процедура ЗавершитьСеанс(Команда), но там откуда?
Deal with it
20 — 03.02.21 — 10:53
(17) завершить сеанс не равно отключить соединение. Есть ситуации, когда сеанс завершен некорректно и подключение зависает или дублируется. Агент сервера вроде как должен сам завершать зависшие подключения, но лишь по истечению какого-то времени, мы же говорим о сиюминутном завершении всех сеансов и подключений.
Вы можете пробовать разные варианты, данный пример гибок и универсален, потому как работает непосредственно с агентом сервера 1с, т.е. перманентно.
Mikhail Volkov
21 — 03.02.21 — 12:01
(18)+ Запустил УПП в режиме отладки, посмотреть как выполняется процедура ЗавершитьСеанс(Команда), открыл обработку АктивныеПользователи. В ней даже кнопки нет Завершить сеанс!?
(20) В твоем примере (6):
АдминистраторКластера = «admins»;
ПарольКластера = «E8vbteud»;
У меня: Ошибка при вызове метода контекста (Authenticate): Произошла исключительная ситуация: Ошибка операции администрирования. Администратор кластера не аутентифицирован. Где их брать, в консоле администрирования? АдминистраторКластера взял, а пароль не помню, пустой не подходит. Как посмотреть пароль?
Deal with it
22 — 03.02.21 — 12:55
(21) ну так пропишите своего админа кластера и пароль.
Я вам дал инструмент, ваше дело как им распоряжаться. Гугл вам в помошь
Mikhail Volkov
23 — 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 + «, отключен » + ТекущаяДата());
КонецЦикла;
Прервать; // Только для указанной информационной базы
КонецЕсли;
КонецЦикла;
Исключение
Отказ = Истина;
Сообщить(«Не удалось завершить сеанс конфигуратора » + ТекущаяДата() + «; » + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;
КонецПроцедуры // ОтключениеКонфигуратора()
Правда по завершению выскакивает предупреждение, что сеанс завершен администратором с вопросом: Перезапустить или Завершить работу. Как бы его убрать? Интересно, это мешает?
Mikhail Volkov
24 — 03.02.21 — 14:37
+ Вроде не мешает, dt-выгрузка делается запущенным из 1С bat-файлом.
Mikhail Volkov
25 — 03.02.21 — 14:57
(19)+ СоединенияИБКлиентСервер — это общий модуль, еще используется общий модуль СоединенияИБ и другие для ОтключитьСеанс(). В Альфа-Авто их нет, не стал разбираться…
Mikhail Volkov
26 — 03.02.21 — 15:26
Вопрос не по теме, в bat-файле имя файла dt-выгрузки формируется: set «BakName=f:workspace1C1с_АрхивыAAAAkitAAAAkit_%date:~0,2%%date:~3,2%%date:~6,4%.dt». Но работа 1С может задержаться, завершиться после полуночи. Как бы мне BakName сформировать по вчерашней дате? Ведь в месяцах разное число дней.
Mikhail Volkov
27 — 09.02.21 — 06:21
(6) Этот алгоритм может определить какой сеанс из 1CV8 (толстого клиента) является зависшим? Или другой метод по СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();?
Свойства:
ИмяКомпьютера (ComputerName)
ИмяПриложения (ApplicationName)
НачалоСоединения (ConnectionStarted)
НомерСеанса (SessionNumber)
НомерСоединения (ConnectionNumber)
Пользователь (User)
SiAl-chel
28 — 09.02.21 — 06:27
(26)
1. Выгружать базу в файл с произвольным именем.
2. После пакетного запуска в скрипте ожидать появления этого ненулевого файла.
3. После выгрузки формировать имя файла по дате и времени.
4. Переименовать файл с произвольным именем в файл с нужным именем из шага 3.
Mikhail Volkov
29 — 09.02.21 — 07:11
(28) Наверное не точно задал вопрос (26), поясняю: обычно ночная выгрузки делается после 21 часа, когда все пользователи вышли из базы. Но бывает срочная работа, или пользователь неправильно вышел (только из терминала, но не из базы), или просто забыл выйти. С 21 часа включается принудительный мягкий выход, задается вопрос пользователю, но пользователь может отказаться выйти. Тогда принудительный мягкий выход откладывается на час. Через час ситуация может повториться… и через 2, 3, сейчас этот алгоритм работает до полуночи (пока более длительных задержек не было). Хотелось бы, чтобы этот алгоритм мог работать до утра (начала следующего рабочего дня). Но имя файла dt-выгрузки после полуночи сформировалось по вчерашней дате!?
Mikhail Volkov
30 — 09.02.21 — 12:48
(27)+ Наверное нет. Тогда тот же алгоритм (23) по условию: Если ТекСеанс.dbProcTook > Цел(ПериодичностьПроверки*60*1000) Тогда //в мс.
SiAl-chel
31 — 09.02.21 — 12:54
(29) Ваще плевать с каким именем он сформировался. Делай выгрузки с рандомным именем, а потом другим заданием с нужной тебе регулярностью проверяй, чтобы имя файла соответствовало дате и времени изменения (или создания) файла, если нет, то тогда переименовывай файл.
Mikhail Volkov
32 — 09.02.21 — 13:05
(31) По существованию файла с именем по дате как раз принимается решение: делать ли завершение сеансов и dt-выгрузку, или нет.
Mikhail Volkov
33 — 09.02.21 — 15:05
Вроде нашел https://www.sql.ru/forum/445183/kak-poluchit-vcherashnee-chislo-v-bat-fayle ужас какой!? Неужели у bat-файлов нет функции вчерашний даты? Если текущий час больше 6 часов, то имя файла BakName формируется по сегодняшней дате (26). Если нет (после полуночи), то по вчерашней.
SiAl-chel
34 — 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%
Mikhail Volkov
35 — 10.02.21 — 06:48
(34) Это лишь фрагмент замены: «иначе будут проблемы на числах 08 и 09…», а сам код еще строк 60… советуют получать вчерашнюю дату через PowerShell (здесь вряд ли помогут). Спс всем.
Mikhail Volkov
36 — 10.02.21 — 15:21
Mikhail Volkov
37 — 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, а которое реагировало бы мое задание в планировщике. Возможно? (никогда не делал)
Mikhail Volkov
38 — 13.03.21 — 13:47
Вроде нашел, но: Команда eventcreate позволяет администратору создать запись об особом событии в указанном журнале событий
т.е. не рядовому пользователю, а только администратору.
Смотрю журнал событий Windows Безопасность, в нем такие события: Вход с учетной записью выполнен успешно, Выполнен выход учетной записи из системы… А вход/выход пользователей из базы 1С, или что другое связанное 1С пишется в журнал событий Windows? Или можно настроить чтоб писалось?
Mikhail Volkov
39 — 16.03.21 — 13:14
1С что-то пишет в журнал событий Windows? Или можно настроить чтоб писалось?
Mikhail Volkov
40 — 16.03.21 — 16:14
А можно ли заставить 1С сделать что-то «нехорошее» (обычно не делается, но без последствий), что обязательно запишется в журнал событий Windows?
Kassern
41 — 16.03.21 — 16:21
(40) а накой лезти в журнал событий винды? Чем тебя не устравивает писать какой нить файл — флаг для этих нужд?
Mikhail Volkov
42 — 16.03.21 — 17:10
(41) Есть такой флаг: при завершении сеанса последнего пользователя очищается лог-файл Как создать пустой текстовый файл из 1С Потом еще: при завершении сеанса последнего пользователя запускается нужный bat-файл, который выполняет все что нужно. Но не всегда: bat-файл запускается под учетной записью последнего пользователя. Если он завершает свой терминальный сеанс, то выполнение bat-файла прерывается. А запустить bat-файл планировщиком заданий командой: ЗапуститьПриложение(«schtasks /run /tn имя_задачи_в_планировщике»); не доступно рядовому пользователю, только администраторам. Запуск задания по расписанию сейчас делается в конце ночи (в 6 утра) в случае его не выполнения, но хотелось бы чтобы сразу выполнялось.
Kassern
43 — 16.03.21 — 17:26
(42) каша какая то получается…Зачем запускать бат файл под учеткой последнего пользователя? Все пользователи вышли, создаешь флаг, что можно делать выгрузку. в шедулере можешь хоть каждые 5 минут проверять наличие файла флага, если он существует то запускать выгрузку чего тебе там надо, после выгрузки этот файл флаг удаляется.
Mikhail Volkov
44 — 16.03.21 — 17:34
(43) Это 1-й вариант, а 2-й (39)?
Mikhail Volkov
45 — 17.03.21 — 06:47
Нашел ответ на 1-й вопрос (39), настроил фильтр журнала событий Windows, отбирающего строки с ошибками и зависаниями, вызванными программой 1С по статье: https://infostart.ru/1c/articles/190790/. В отборе есть события, например, Программа 1cv8.exe версии 8.3.10.2466 прекратила взаимодействие с Windows и была закрыта — это событие Ошибка. Интересно, есть ли в журнале события о нормальном завершении 1С. Наверное нет… а как сделать чтобы были?
Mikhail Volkov
46 — 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С в журнале не фиксируются?
Kassern
47 — 17.03.21 — 12:07
(46) У тебя все пользователи терминально работают?
Mikhail Volkov
48 — 17.03.21 — 13:32
(47) Да, завершение терминального сеанса фиксируется в журнале событий. Но не всегда пользователи сами его завершают. Иногда просто «выпадают» из терминала.
Mikhail Volkov
49 — 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 (Если получится, текст сообщения будет другой).
Mikhail Volkov
50 — 19.03.21 — 07:13
Может Использовать другую крайне редко используемую команду (какую?), чтобы она зафиксировалось в журнале событий Windows? (желательно без имени пользователя)
Mikhail Volkov
51 — 23.03.21 — 11:25
Если сообщение командой MSG (всем или конкретному пользователю) послано, когда нет активных сеансов (или конкретного пользователя) на сервере-терминале, оно не фиксируется в журнале событий Windows?
mistеr
52 — 23.03.21 — 12:07
Жесть, сколько садо-мазо стоя в гамаке, вместо того, чтобы настроить нормальные бэкапы.
Kassern
53 — 23.03.21 — 12:12
(52) мне кажется, что это еще не предел)
Mikhail Volkov
54 — 23.03.21 — 12:43
(52) Бэкапы настроены, делаются на SQL-сервере. Но были случаи его выхода из строя. Это дополнительно…
Секцию темы на IT/Админ сменить можно? А то ее только 1С-ники видят…
mistеr
55 — 23.03.21 — 13:38
(54) >Но были случаи его выхода из строя.
Настоящий бэкап защищает и от этого.
Mikhail Volkov
56 — 23.03.21 — 14:15
(55) SQL-бэкап возможно был, но восстановить из него файловый вариант базы не получилось.
Kassern
57 — 23.03.21 — 14:16
(56) вот в этом направлении и нужно было копать и автоматизировать, а не забить и параллельно запустить дт бекапы
Kassern
58 — 23.03.21 — 14:16
(56) разобрались почему не получилось восстановить бекап?
mistеr
59 — 23.03.21 — 14:18
(56) Из скульного бэкапа пытались получить файловую базу? Да вы там шутники однако.
Mikhail Volkov
60 — 24.03.21 — 09:01
Mikhail Volkov
61 — 09.09.21 — 10:57
При завершении работы пользователя выполняется предопределенная процедура ПередЗавершениемРаботыСистемы(). В ней проверяется последний ли пользователь. Если последний, то запускается bat-файл архивации. Но замечено что иногда последнему как-то удается завершить свою работу в Альфа-Авто и терминале (обычно это кассир завершает свою работу не с рабочего компьютера, а с домашнего) минуя эту предопределенную процедуру, и bat-файл не выполняется. Хотя в журнале регистрации есть запись события: Сеанс. Завершение.
Не пойму как такое возможно?
Mikhail Volkov
62 — 09.09.21 — 14:29
Может пользователь завершил терминальный сеанс не закрыв Альфа-Авто, она завершилась аварийно?
Mikhail Volkov
63 — 14.09.21 — 10:51
Для RDP ведется какой ни будь журнал регистрации подобный ЖР 1С, можно посмотреть когда начат сеанс RDP пользователем: состояние Активно/Отключено, а когда он вышел: не показывает состояние? Как?
ildary
64 — 14.09.21 — 15:23
(63) погуглите «Журнал событий Windows»
Mikhail Volkov
65 — 14.09.21 — 17:25
(64) Ссылок на проконтролировать вход по RDP много, а на проконтролировать выход из RDP не нашел. Хочется знать всегда ли выполняется предопределенная процедура ПриЗавершенииРаботыСистемы(), даже при аварийном завершении 1С, при закрытии сеанса RDP?
Mikhail Volkov
66 — 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
В чем некорректность выхода: можно определить?
mistеr
67 — 16.09.21 — 11:11
(61) >В ней проверяется последний ли пользователь.
Ставлю на то, что проверка кривая.
mistеr
68 — 16.09.21 — 11:12
У меня в одном месте сделано так. Проверка в самом bat файле, что нет активных сеансов, и если есть, то архивация не выполняется.
Mikhail Volkov
69 — 16.09.21 — 12:24
(68) Пожалуйста, выложи текст этой проверки!?
Разобрался, при закрытии сеанса RDP предопределенная процедура ПриЗавершенииРаботыСистемы() не выполняется. Но запись в ЖР Сеанс. Завершение делается. Где, как отловить это событие в 1С?
mistеr
70 — 16.09.21 — 13:38
(69) Там файловая, просто проверяется наличие lock-файлов в папке с базой.
Mikhail Volkov
71 — 17.09.21 — 09:23
(70) Для SQL-базы это не пойдет.
Но запись в ЖР Сеанс. Завершение делается. Где, на уровне платформы? Конфигуратором туда не добраться?
Еще заметил, что перед каждой записью в ЖР Сеанс. Завершение делается более 3-х записей событий: Данные. Изменение в Регистр сведений. Значения свойств объектов. Каких объектов, какие свойства неизвестно. Можно как-то под настроить ЖР, чтобы знать что за объекты?
Mikhail Volkov
72 — 18.09.21 — 09:58
Выяснил в Регистр сведений. Значения свойств объектов пишется свойства оборудования — кассы при завершении работы пользователя, вызывается в конечном счете из предопределенной процедуры ПриЗавершенииРаботыСистемы().
Mikhail Volkov
73 — 20.09.21 — 09:15
Обычно жалуются, что Активные пользователи в 1С остаются после отключение пользователя от RDP. У меня такой проблемы нет. Но в теме https://1s-forum.fun/showthread.php/201142-Активные-пользователи-в-1С-остаются-после-отключение-пользователя-от-RDP дан совет: «укажите в свойствах РДП — не отключение сеанса — а завершение, с переопределением пользовательских настроек». Мне бы наоборот, только где конкретно в свойствах RDP?
SiAl-chel
74 — 20.09.21 — 11:56
(73) Версию Windows Server озвучь.
Mikhail Volkov
75 — 20.09.21 — 12:31
(74) 2008R2
Mikhail Volkov
76 — 22.09.21 — 17:01
https://pro1c.org.ua/index.php?showtopic=26358 «Пуск» — «Все программы»-«Администрирование»-«Настройка служб терминалов» — нет у меня на сервере терминалов!?
И «Пуск» — «Выполнить»- «%SystemRoot%system32tscc.msc /s» — не удается найти tscc.msc?
Mikhail Volkov
77 — 26.09.21 — 13:03
В bat-файле для получения dt-выгрузки базы прописана строка:
«C:Program Files (x86)1cv88.3.10.2466bin1cv8s.exe» DESIGNER /S «Сервербаза» /N»Администратор» /P»Пароль» /DumpIB %BakName% /Out %LogName% -NoTruncate /DisableStartupMessages /UC AllowRobotLogon
Он запускается заданием, которое обычно запускается из 1С при завершении работы последнего пользователя из предопределенной процедуры ПриЗавершенииРаботыСистемы(). Перед его запуском в 1С проверяется: открыт ли конфигуратор, если он открыт, то он закрывается процедурой (23).
А есть ли другой способ закрыть конфигуратор? Вроде встречал команду для командной строки, выгоняющую всех пользователей из базы. Она закрывает конфигуратор, если он открыт? Или есть команда проверяющая открыт ли конфигуратор, или кто-то есть в базе (в серверной SQL)?
Ошибка при вызове метода контекста (Подключиться): Аутентификация не прошла (SMTP error code 535 5.7.0 NEOBHODIM parol prilozheniya https://help.mail.ru/mail/security/protection/external / Application password is REQUIRED )
Описание ошибки:
Ошибка в 1С 8 при поптыке подключиться к почтовому серверу mail.ru: Аутентификация не прошла (SMTP error code 535 5.7.0 NEOBHODIM parol prilozheniya https://help.mail.ru/mail/security/protection/external / Application password is REQUIRED )
Найденные решения:
Нажатие на изображении увеличит его
Рис. 1. Ошибка «Аутентификация не прошла (NEOBHODIM parol prilozheniya Application password is REQUIRED )» в окне сообщений в 1С 8 в режиме обычного приложения.
Нажатие на изображении увеличит его
Рис. 2. Ошибка при установке настроек почты в 1С 8 в управляемом приложении «Аутентификация не прошла (SMTP error code 535 5.7.0 NEOBHODIM parol prilozheniya»
На самом деле эта ошибка может возникнуть не только в среде 1С 8, но и в любой почтовой программе, которую настроили для сбора/отправки почты с сервиса mail.ru. Факт состоит в том, что в 1С подключение к почте по реквизитам SMTP-сервера, POP3-сервера, SSL-настройкам, пользователю, паролю до определенного момента, связанного датой чуть ранее возникновения материала ниже, работало, но потом перестало работать рапортуя с содержанием представленной ошибки.
В ошибке латиницей и на английском языке дается подсказка: необходим пароль приложения — application password is required.
Поэтому нужно было поискать информацию о том, что такое пароль приложения в mail.ru, где его найти или установить?
Благодаря обсуждению на форме сайта Инфостарт было облегчен поиск решения поставленных вопросов.
Нажатие на изображении увеличит его
Рис. 3. Скриншот обсуждения на форуме
Ссылка в обсуждении на форуме вела на страницу поддержки сервиса mail.ru с описанием в разделе безопасности того, как создать и узнать пароль приложения. Кстати, эта же ссылка содержится в описании самой ошибки: https://help.mail.ru/mail/security/protection/external. Т.е. если даже структура помощи сервиса mail.ru измениться, то автор этого материала предполагает, что и ссылка в описании ошибки должна быть обновлена разработчиками почтового сервиса. А пока текущая ссылка актуальна.
Нажатие на изображении увеличит его
Рис. 4. Общая инструкция в разделе «Помощь» почтового сервиса mail.ru
Если ссылка выше станет неактуальной (т.к. измениться структура ссылок на сайте help.mail.ru), то ищите в разделе помощи сервиса mail.ru через поиск что-то по типу «пароль для внешнего приложения».
Нажатие на изображении увеличит его
Рис. 5. Пример поиска в «Помощи» сервиса mail.ru о настройке и получении пароля приложения.
Рассмотрим, как выглядит процесс получения пароля приложения. Примеры скриншотов приведены на момент данной публикации (ноябрь 2022), но даже спустя время смысл действий будет сохраняться.
Необходимо авторизоваться на сайте mail.ru в Вашем браузере.
Рис. 6, 7. Переход в «Настройки» и далее во «Все настройки» на mail.ru для получения пароля приложения для 1С 8
Далее переходим по ссылке в раздел «Безопасность».
Рис. 8. Переход в раздел настроек «Безопасность» сервиса mail.ru
На странице «Безопасность» находим ссылку раздела «Пароли для внешних приложений» или по смыслу.
Нажатие на изображении увеличит его
Рис. 9. Раздел «Безопасность» настроек почтового сервиса
Откроется страница «Пароли для внешних приложений». Если уже настроены и есть для других приложений, то они будут отображены на этой странице. Скорее всего, что у Вас нет пароля приложения для 1С, поэтому нужно его сгенерировать. Нажимаем кнопку «Добавить». Откроется страница с шагом «Новый пароль для внешнего приложения» — нужно будет в поле ввода ввести произвольное название, которое будет понятно для Вас в дальнейшем, для какой цели тот или иной создаваемый пароль. Можно просто ограничиться названием «Для 1С». Нажимаем кнопку «Продолжить».
Рис. 10, 11. Добавление, генерация, указание названия для нового пароля приложения в mail.ru
Если адрес почты не привязан к номеру телефона, то придется выполнить привязку. В процессе настройки Вас об этом проинформирует надпись «К Вашему ящику не привязан номер телефона.» Перейдя по ссылке «Привяжите его» можно не прерывая процесс выполнить привязку а потом вернуть в это окно браузера и по кнопке «Продолжить» настройку.
Рис. 12. Необходимость привязки номера телефона при создании пароля приложения.
На следующем шаге потребуется подтвердить, что Вы — владелец почты и знаете пароль от нее и подтвердить, что Вы человек, «разгадав» капчу под заголовком «Проверка безопасности». После нажать кнопку «Продолжить».
Рис. 13. Проверка «на человека» при получении пароля приложения
После всего проделанного поздравляем Вас с результатом. Вы должны получить созданный пароль для внешнего приложения.
Рис. 14. Успешно сформированный пароль для внешнего приложения.
Созданный этот пароль и другие теперь будет храниться в списке «Пароли для внешних приложений» настроек «Безопасности» почтового сервиса mail.ru. Но только просмотреть ранее созданные пароль не получиться. Так сделано, что (на момент написания данной публикации) пароль можно только перегенерировать. Если нажать на название уже ранее созданного пароля, то начнется «Создание нового пароля для приложения». Т.е. в будущем, если пароль не был записан, то придется его перегенерировать и указывать новый пароль в настройках почт в 1С 8.
Рис. 15. Список паролей для внешних приложений в настройках mail.ru и пересоздание.
Полученный пароль копируем-вставляем в соответствующее поле ввода «Пароль» в 1С как для SMTP-, так и для POP3-серверов.
Рис. 16. Пароль приложения в поле «Пароль» справочника «Учетные записи электронной почты» в конфигурации обычного приложения.
В форме «Настройка почты» конфигураций 1С, работающих в режиме управляемого приложения «Пароль» указывается только в одном поле ввода.
Рис. 17. Указание пароля приложения от mail.ru в поле «Пароль» справочника «Настройка почты» в управляемом приложении.
Если все верно сделано, то тестирование реквизитов подключения будет успешным, как и дальнейшая работа с сервисом mail.ru в 1С любой конфигурации и релиза платформы.
Рис. 18. Результат успешного подключения в 1С8 после указания пароля приложения mail.ru
Желаю приятного использования возможностей почтового функционала, работающего с mail.ru, в типовых конфигурациях 1С платформы 8.
Оцените, помогло ли Вам предоставленное описание решения ошибки?
© www.azhur-c.ru 2014-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
01-11-2022
Журавлев А.С.
(Сайт azhur-c.ru)
Описание ошибки:С сентября 2014 Яндекс.Почта, Mail.ru перешли на протокол SSL, что сделало их ещё более безопасными. Чтобы и дальше работать с письмами через 1С, Вам нужно изменить их настройки и внести доработки в код конфигураций.
Найденные решения:
Ошибка наблюдается, в частности, в случае, когда меняются настройки почты. Например мне довелось столкнуться в случае, когда ввели для почты SSL-шифрование. Если это Ваш случай, то из быстрых и простых остается только обновление до версии платформы 8.3, где поддержка этого шифрования для «ИнтернетПочтовыйПрофиль» реализована. И доработка кода типовых конфигураций для учета настроек SSL-шифрования и включения у почтового профиля.
Код 1C v 8.х
ИнтернетПочтовыйПрофиль.ИспользоватьSSLPOP3 = Истина;ИнтернетПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
Сопровождающие проблему ошибки:
Яндекс.Почта
адрес_почты@yandex.ru. {ОбщийМодуль.УправлениеЭлектроннойПочтой.Модуль(1065)}: Ошибка при вызове метода контекста (Подключиться): Почтовый ящик пользователя «адрес_почты@yandex.ru» на сервере «pop.yandex.ru» не найден. Ответ сервера: «[AUTH] Working without SSL/TLS encryption is not allowed. Please visit https://help.yandex.ru/mail/mail-clients/ssl.xml. sc=NXhLmqHbM4YK»
Если установлены не правильные порты, то получим ошибку:Ошибка при вызове метода контекста (Подключиться): TLS/SSL failure for smtp.mail.ru: Invalid token, probably not an SSL serverУстановите порты 465 для smtp, 995 для pop3.
При соединении с Яндексом: в логинах оставить только содержимое логина до @yandex.ru, т.е. из примера «адрес_почты» (без кавычек). Устанавливаем для pop3 и smtp SSL-шифрование. Если почта корпоративная на Яндексе, и в наименовании не используется @yandex.ru, то оставляем логин, равный наименованию почты, как есть.
Mail.ru
Не включено SSL-шифрование для учетной записи электронной почты. Ошибка при вызове метода контекста (Подключиться): Can not authenticate to POP3 server: POP3 is available only with SSL or TLS connection enabled
Если установлены не правильные порты, то получим ошибку:Ошибка при вызове метода контекста (Подключиться): TLS/SSL failure for smtp.mail.ru: Invalid token, probably not an SSL serverУстанавливаем порты 465 для smtp, 995 для pop3.
Если возникает ошибка:Ошибка при вызове метода контекста (Подключиться): Can’t connect to smtp.mail.ru,495: Timed out — значит неправильно указан порт.
Если возникает ошибка:Ошибка при вызове метода контекста (Подключиться): SMTP greeting failure: 421 SMTP connection broken (reply)Порты настроены правильно, не установлено SSL-шифрование для smtp.
В паролях для почты не использовать спецсимволы, пример из опыта: в пароле к почте был символ «+», пока из пароля не убрали, соединение не происходило! Система выдавала ошибку: Ошибка при вызове метода контекста (Подключиться): Can not authenticate to SMTP server: 535 5.7.8 Error: authentication failed: Invalid user or password!
Разработчики 1С вносят фунционал в рабочие конфигурации, например: УТ 10.3.30.1 от 26.09.2014, описание обновления: В справочник «Учетные записи электронной почты» добавлены реквизиты «Использовать защищенную версию протокола SMTP» и «Использовать защищенную версию протокола POP3». При установке этих реквизитов предоставляется возможность подключаться к почтовым серверам через безопасное соединение (SSL). Реквизиты доступны при использовании версии платформы не ниже 8.3.1.
P.S.: Возможно еще использование дополнительной программы stunnel. Но мне этот вариант меньше понравился. Т.к. клиенту не хотелось зависеть от программиста каждый раз, когда появляется новая почта или рабочее место, а чтобы сразу можно было из 1С настроить, как и раньше.
Журавлев А.С. (Сайт www.azhur-c.ru)
Завершение работы пользователей регламентным заданием
24.05.2017
Обработка «Завершение работы пользователей» позволяет завершить работу пользователей регламентным заданием, используются механизмы типовых конфигураций. Может быть полезна администраторам информационных систем на платформе 1С.
В процессе эксплуатации информационных систем на платформе 1С часто возникает задача по завершению работы пользователей для выполнения различных регламентных работ. В конфигурациях 1С есть обработка для блокировки работы пользователей. Эта встроенная обработка послужила шаблоном для создания обработки для завершения работы пользователей по расписанию.
Обработка оформлена в виде внешней обработки , подключается в справочнике Дополнительные отчеты и обработки. Содержит две команды.
Первая команда -для работы в интерактивном режиме . Форма обработки выглядит просто — всего две кнопки
Так как обработка в процессе работы создает Comconnector, в информационной базе пришлось создать пользователеля без защиты от опасных действий. Ниже на рисунке указан этот реквизит
Этого же пользователя надо указать в настройке регламентного задания для запуска обработки по расписанию- это- Администрирование- Поддержка и обслуживание — Регламентные и фоновые задания — найти в списке рег заданий Дополнительная обработка : Завершение работы пользователей/ Команда : Завершение работы пользователей
Ниже исходный код команды , которая выполняется в интерактивном режиме.
&НаКлиенте
Процедура Завершить(Команда)
Если Не ЭтоФайловаяБаза() Тогда
ПараметрыАдминистрирования=ПараметрыИБ();
ПодстрокиСтрокиСоединения = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(СтрокаСоединенияИнформационнойБазы(),";");
Если ПодстрокиСтрокиСоединения.Количество()> 1 и Лев(ПодстрокиСтрокиСоединения[0], 5) = "Srvr=" и Лев(ПодстрокиСтрокиСоединения[1], 4) = "Ref=" Тогда
ИмяСервера = Сред(ПодстрокиСтрокиСоединения[0],7, СтрДлина(ПодстрокиСтрокиСоединения[0]) - 7);
ИмяИБ = Сред(ПодстрокиСтрокиСоединения[1],6, СтрДлина(ПодстрокиСтрокиСоединения[1]) - 6);
Если ПараметрыАдминистрирования.АдресАгентаСервера<>ИмяСервера Тогда
ПараметрыАдминистрирования.АдресАгентаСервера=ИмяСервера;
КонецЕсли;
Если ПараметрыАдминистрирования.ИмяВКластере<>ИмяИБ Тогда
ПараметрыАдминистрирования.ИмяВКластере=ИмяИБ;
КонецЕсли;
КонецЕсли;
СоединенияИБКлиентСервер.УдалитьВсеСеансыКромеТекущего(ПараметрыАдминистрирования);
СоединенияИБКлиент.СохранитьПараметрыАдминистрирования(Неопределено);
СоединенияИБКлиент.ЗавершитьРаботуЭтогоСеанса();
Иначе
Сообщить("Для файловой базы не работает!");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПараметрыИБ()
Возврат Константы.ПараметрыАдминистрированияИБ.Получить().Получить();
КонецФункции
&НаСервере
Функция ЭтоФайловаяБаза()
Возврат ОбщегоНазначения.ИнформационнаяБазаФайловая();
КонецФункции
Обработка проверялась на типовых конфигурациях Зарплата и управление персоналом 3.1 (3.1.2.154) и Бухгалтерия предприятия 3.0 (3.0.48.21) , на платформе 8.3.9.2170. Для файловых баз не работает.
Описание ошибки:С сентября 2014 Яндекс.Почта, Mail.ru перешли на протокол SSL, что сделало их ещё более безопасными. Чтобы и дальше работать с письмами через 1С, Вам нужно изменить их настройки и внести доработки в код конфигураций.
Найденные решения:
Ошибка наблюдается, в частности, в случае, когда меняются настройки почты. Например мне довелось столкнуться в случае, когда ввели для почты SSL-шифрование. Если это Ваш случай, то из быстрых и простых остается только обновление до версии платформы 8.3, где поддержка этого шифрования для «ИнтернетПочтовыйПрофиль» реализована. И доработка кода типовых конфигураций для учета настроек SSL-шифрования и включения у почтового профиля.
Код 1C v 8.х
ИнтернетПочтовыйПрофиль.ИспользоватьSSLPOP3 = Истина;ИнтернетПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
Сопровождающие проблему ошибки:
Яндекс.Почта
адрес_почты@yandex.ru. {ОбщийМодуль.УправлениеЭлектроннойПочтой.Модуль(1065)}: Ошибка при вызове метода контекста (Подключиться): Почтовый ящик пользователя «адрес_почты@yandex.ru» на сервере «pop.yandex.ru» не найден. Ответ сервера: «[AUTH] Working without SSL/TLS encryption is not allowed. Please visit https://help.yandex.ru/mail/mail-clients/ssl.xml. sc=NXhLmqHbM4YK»
Если установлены не правильные порты, то получим ошибку:Ошибка при вызове метода контекста (Подключиться): TLS/SSL failure for smtp.mail.ru: Invalid token, probably not an SSL serverУстановите порты 465 для smtp, 995 для pop3.
При соединении с Яндексом: в логинах оставить только содержимое логина до @yandex.ru, т.е. из примера «адрес_почты» (без кавычек). Устанавливаем для pop3 и smtp SSL-шифрование. Если почта корпоративная на Яндексе, и в наименовании не используется @yandex.ru, то оставляем логин, равный наименованию почты, как есть.
Mail.ru
Не включено SSL-шифрование для учетной записи электронной почты. Ошибка при вызове метода контекста (Подключиться): Can not authenticate to POP3 server: POP3 is available only with SSL or TLS connection enabled
Если установлены не правильные порты, то получим ошибку:Ошибка при вызове метода контекста (Подключиться): TLS/SSL failure for smtp.mail.ru: Invalid token, probably not an SSL serverУстанавливаем порты 465 для smtp, 995 для pop3.
Если возникает ошибка:Ошибка при вызове метода контекста (Подключиться): Can’t connect to smtp.mail.ru,495: Timed out — значит неправильно указан порт.
Если возникает ошибка:Ошибка при вызове метода контекста (Подключиться): SMTP greeting failure: 421 SMTP connection broken (reply)Порты настроены правильно, не установлено SSL-шифрование для smtp.
В паролях для почты не использовать спецсимволы, пример из опыта: в пароле к почте был символ «+», пока из пароля не убрали, соединение не происходило! Система выдавала ошибку: Ошибка при вызове метода контекста (Подключиться): Can not authenticate to SMTP server: 535 5.7.8 Error: authentication failed: Invalid user or password!
Разработчики 1С вносят фунционал в рабочие конфигурации, например: УТ 10.3.30.1 от 26.09.2014, описание обновления: В справочник «Учетные записи электронной почты» добавлены реквизиты «Использовать защищенную версию протокола SMTP» и «Использовать защищенную версию протокола POP3». При установке этих реквизитов предоставляется возможность подключаться к почтовым серверам через безопасное соединение (SSL). Реквизиты доступны при использовании версии платформы не ниже 8.3.1.
P.S.: Возможно еще использование дополнительной программы stunnel. Но мне этот вариант меньше понравился. Т.к. клиенту не хотелось зависеть от программиста каждый раз, когда появляется новая почта или рабочее место, а чтобы сразу можно было из 1С настроить, как и раньше.
Журавлев А.С. (Сайт www.azhur-c.ru)