Здравствуйте.
Сообщаю, что метод ЗавершитьРаботуПользователей работает некорректо.
Посмотрел исходный код и увидел причину: завершаются соединения. Но не завершаются сеансы. Таким образом метод бесполезен.
прикладываю протестированный неоднократно код, необходимый для выполнения ДО отключения соединений скриптом Вашего метода "ЗавершитьРаботуПользователей".
То есть логика такая: сначала рубим сеансы и только затем соединения. Иначе смысла никакого нет в действии, например при необходимости потом выгрузить- загрузить файл dt.
&НаСервере
Процедура ЗавершитьВсеСеансы() Экспорт
COMСоединитель = Новый COMОбъект("V83.COMConnector");
СоединениеСАгентомСервера = COMСоединитель.ConnectAgent(ПолучитьИмяСервера());
Clusters = СоединениеСАгентомСервера.GetClusters();
Cluster = Clusters.GetValue(0);
СоединениеСАгентомСервера.Authenticate(Cluster,"","");
InfoBases = СоединениеСАгентомСервера.GetInfoBases(Cluster);
For each InfoBase in InfoBases do
if InfoBase.name = ПолучитьИмяИнформационнойБазы() then break; EndIf;
EndDo;
Sessions = СоединениеСАгентомСервера.GetInfoBaseSessions(Cluster,InfoBase);
For each Session IN Sessions Do
СоединениеСАгентомСервера.TerminateSession(Cluster,Session);
EndDo;
КонецПроцедуры
&НаСервере
функция ПолучитьИмяСервера() Экспорт
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
//Вставка Сокол 16.07.2018 13:15:26
Если Найти(СтрокаСоединенияИнформационнойБазы,"File") > 0 Тогда
ВызватьИсключение "Данная обработка предназначена для контроля сеансов работы пользователей в клиент-серверном варианте работы."
+ Символы.ПС + "Текущая база является файловой";
КонецЕсли;
//Вставка Сокол КОНЕЦ 16.07.2018 13:15:26
СтрокаСервер = Лев(СтрокаСоединенияИнформационнойБазы,Найти(СтрокаСоединенияИнформационнойБазы,";"));
ИмяСервера = Сред(СтрокаСервер,Найти(СтрокаСервер,"=")+2);
ИмяСервера = Лев(ИмяСервера,СтрДлина(ИмяСервера)-2);
Если Найти(ИмяСервера,":")<>0 Тогда
НомерПорта = Сред(ИмяСервера,Найти(ИмяСервера,":")+1);
НомерПорта = формат(Число(НомерПорта) - 1,"ЧГ=0");
СтрокаПорта = ":" + НомерПорта;
ИмяСервера = Лев(ИмяСервера,Найти(ИмяСервера,":")-1);
Иначе СтрокаПорта = "";
КонецЕсли;
ИмяСервера = ИмяСервера + СтрокаПорта;
Возврат ИмяСервера;
КонецФункции
&НаСервере
Функция ПолучитьИмяИнформационнойБазы() Экспорт
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
СтрокаБаза = Сред(СтрокаСоединенияИнформационнойБазы,Найти(СтрокаСоединенияИнформационнойБазы,";")+1);
СтрокаБаза = лев(СтрокаБаза,СтрДлина(СтрокаБаза)-1);
ИмяБазы = Сред(СтрокаБаза,Найти(СтрокаБаза,"=")+2);
ИмяБазы = Лев(ИмяБазы,СтрДлина(ИмяБазы)-1);
Возврат ИмяБазы;
КонецФункции
Здравствуйте.
Сообщаю, что метод ЗавершитьРаботуПользователей работает некорректо.
Посмотрел исходный код и увидел причину: завершаются соединения. Но не завершаются сеансы. Таким образом метод бесполезен.
прикладываю протестированный неоднократно код, необходимый для выполнения ДО отключения соединений скриптом Вашего метода "ЗавершитьРаботуПользователей".
То есть логика такая: сначала рубим сеансы и только затем соединения. Иначе смысла никакого нет в действии, например при необходимости потом выгрузить- загрузить файл dt.
&НаСервере
Процедура ЗавершитьВсеСеансы() Экспорт
КонецПроцедуры
&НаСервере
функция ПолучитьИмяСервера() Экспорт
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
//Вставка Сокол 16.07.2018 13:15:26
Если Найти(СтрокаСоединенияИнформационнойБазы,"File") > 0 Тогда
ВызватьИсключение "Данная обработка предназначена для контроля сеансов работы пользователей в клиент-серверном варианте работы."
+ Символы.ПС + "Текущая база является файловой";
КонецЕсли;
//Вставка Сокол КОНЕЦ 16.07.2018 13:15:26
СтрокаСервер = Лев(СтрокаСоединенияИнформационнойБазы,Найти(СтрокаСоединенияИнформационнойБазы,";"));
ИмяСервера = Сред(СтрокаСервер,Найти(СтрокаСервер,"=")+2);
ИмяСервера = Лев(ИмяСервера,СтрДлина(ИмяСервера)-2);
Если Найти(ИмяСервера,":")<>0 Тогда
НомерПорта = Сред(ИмяСервера,Найти(ИмяСервера,":")+1);
НомерПорта = формат(Число(НомерПорта) - 1,"ЧГ=0");
СтрокаПорта = ":" + НомерПорта;
ИмяСервера = Лев(ИмяСервера,Найти(ИмяСервера,":")-1);
Иначе СтрокаПорта = "";
КонецЕсли;
ИмяСервера = ИмяСервера + СтрокаПорта;
Возврат ИмяСервера;
КонецФункции
&НаСервере
Функция ПолучитьИмяИнформационнойБазы() Экспорт
СтрокаСоединенияИнформационнойБазы = СтрокаСоединенияИнформационнойБазы();
СтрокаБаза = Сред(СтрокаСоединенияИнформационнойБазы,Найти(СтрокаСоединенияИнформационнойБазы,";")+1);
СтрокаБаза = лев(СтрокаБаза,СтрДлина(СтрокаБаза)-1);
ИмяБазы = Сред(СтрокаБаза,Найти(СтрокаБаза,"=")+2);
ИмяБазы = Лев(ИмяБазы,СтрДлина(ИмяБазы)-1);
Возврат ИмяБазы;
КонецФункции