Ошибка при вызове метода контекста authenticate

Ошибка при запуске теста

Модератор: Дмитрий Юхтимовский

Ошибка при запуске теста

Добрый день, Вячеслав!
Наши сисадмины установили сервер 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

   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)?

  

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 )

Найденные решения:

Нажатие на изображении увеличит его
1C 8 текст ошибки Аутентификация не прошла 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 в режиме обычного приложения.

Нажатие на изображении увеличит его
1C 8 ошибка при настройке почты в управляемом интерфейсе Аутентификация не прошла SMTP error code 535 5.7.0 NEOBHODIM parol prilozheniya
Рис. 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, где его найти или установить?

Благодаря обсуждению на форме сайта Инфостарт было облегчен поиск решения поставленных вопросов.

Нажатие на изображении увеличит его
1с 8 как исправить, устранить ошибку почты mail.ru Аутентификация не прошла SMTP error code 535 5.7.0 NEOBHODIM parol prilozheniya
Рис. 3. Скриншот обсуждения на форуме

Ссылка в обсуждении на форуме вела на страницу поддержки сервиса mail.ru с описанием в разделе безопасности того, как создать и узнать пароль приложения. Кстати, эта же ссылка содержится в описании самой ошибки: https://help.mail.ru/mail/security/protection/external. Т.е. если даже структура помощи сервиса mail.ru измениться, то автор этого материала предполагает, что и ссылка в описании ошибки должна быть обновлена разработчиками почтового сервиса. А пока текущая ссылка актуальна.

Нажатие на изображении увеличит его
1с 8 и настройка подключения к mail.ru ошибка NEOBHODIM parol prilozheniya, Application password is REQUIRED
Рис. 4. Общая инструкция в разделе «Помощь» почтового сервиса mail.ru

Если ссылка выше станет неактуальной (т.к. измениться структура ссылок на сайте help.mail.ru), то ищите в разделе помощи сервиса mail.ru через поиск что-то по типу «пароль для внешнего приложения».

Нажатие на изображении увеличит его
1С 8 как разрешить проблему при настройке в 1С подключения к mail.ru
Рис. 5. Пример поиска в «Помощи» сервиса mail.ru о настройке и получении пароля приложения.

Рассмотрим, как выглядит процесс получения пароля приложения. Примеры скриншотов приведены на момент данной публикации (ноябрь 2022), но даже спустя время смысл действий будет сохраняться.

Необходимо авторизоваться на сайте mail.ru в Вашем браузере.

1С 8 как получить пароль приложения в mail.ru, раздел настройки               как в mail.ru сделать, получить пароль приложения для настройки в 1С 8
Рис. 6, 7. Переход в «Настройки» и далее во «Все настройки» на mail.ru для получения пароля приложения для 1С 8

Далее переходим по ссылке в раздел «Безопасность».

как сгенерировать и где получить пароль приложения mail.ru для 1С 8
Рис. 8. Переход в раздел настроек «Безопасность» сервиса mail.ru

На странице «Безопасность» находим ссылку раздела «Пароли для внешних приложений» или по смыслу.

Нажатие на изображении увеличит его
mail.ru пароли внешних приложений для 1С 8, чтобы убрать ошибку NEOBHODIM parol prilozheniya
Рис. 9. Раздел «Безопасность» настроек почтового сервиса

Откроется страница «Пароли для внешних приложений». Если уже настроены и есть для других приложений, то они будут отображены на этой странице. Скорее всего, что у Вас нет пароля приложения для 1С, поэтому нужно его сгенерировать. Нажимаем кнопку «Добавить». Откроется страница с шагом «Новый пароль для внешнего приложения» — нужно будет в поле ввода ввести произвольное название, которое будет понятно для Вас в дальнейшем, для какой цели тот или иной создаваемый пароль. Можно просто ограничиться названием «Для 1С». Нажимаем кнопку «Продолжить».

mail.ru пароль для 1С 8, чтобы убрать ошибку необходим пароль приложенияmail.ru пароль для 1С 8, чтобы убрать ошибку Аутентификация не прошла SMTP error code 535 5.7.0
Рис. 10, 11. Добавление, генерация, указание названия для нового пароля приложения в mail.ru

Если адрес почты не привязан к номеру телефона, то придется выполнить привязку. В процессе настройки Вас об этом проинформирует надпись «К Вашему ящику не привязан номер телефона.» Перейдя по ссылке «Привяжите его» можно не прерывая процесс выполнить привязку а потом вернуть в это окно браузера и по кнопке «Продолжить» настройку.


Рис. 12. Необходимость привязки номера телефона при создании пароля приложения.

На следующем шаге потребуется подтвердить, что Вы — владелец почты и знаете пароль от нее и подтвердить, что Вы человек, «разгадав» капчу под заголовком «Проверка безопасности». После нажать кнопку «Продолжить».


Рис. 13. Проверка «на человека» при получении пароля приложения

После всего проделанного поздравляем Вас с результатом. Вы должны получить созданный пароль для внешнего приложения.

1С 8 как получить, создать пароль от mail.ru
Рис. 14. Успешно сформированный пароль для внешнего приложения.

Созданный этот пароль и другие теперь будет храниться в списке «Пароли для внешних приложений» настроек «Безопасности» почтового сервиса mail.ru. Но только просмотреть ранее созданные пароль не получиться. Так сделано, что (на момент написания данной публикации) пароль можно только перегенерировать. Если нажать на название уже ранее созданного пароля, то начнется «Создание нового пароля для приложения». Т.е. в будущем, если пароль не был записан, то придется его перегенерировать и указывать новый пароль в настройках почт в 1С 8.



Рис. 15. Список паролей для внешних приложений в настройках mail.ru и пересоздание.

Полученный пароль копируем-вставляем в соответствующее поле ввода «Пароль» в 1С как для SMTP-, так и для POP3-серверов.

1С 8 где указать пароль приложения от mail в настройке учетной записи почты
Рис. 16. Пароль приложения в поле «Пароль» справочника «Учетные записи электронной почты» в конфигурации обычного приложения.

В форме «Настройка почты» конфигураций 1С, работающих в режиме управляемого приложения «Пароль» указывается только в одном поле ввода.

1С 8 где вводить пароль приложения от mail.ru в настройке почты в управляемом приложении
Рис. 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)

Понравилась статья? Поделить с друзьями:
  • Ошибка при вызове метода контекста loadcomponentfromurl
  • Ошибка при вызове метода контекста add произошла исключительная ситуация
  • Ошибка при вызове метода контекста initialize
  • Ошибка при вызове метода контекста add неизвестная ошибка
  • Ошибка при вызове метода контекста getcorporationrequisitesbyinn