Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ЗавершитьРаботуПользователей #5

Open
mefalcongit opened this issue Nov 24, 2020 · 2 comments
Open

ЗавершитьРаботуПользователей #5

mefalcongit opened this issue Nov 24, 2020 · 2 comments

Comments

@mefalcongit
Copy link

mefalcongit commented Nov 24, 2020

Здравствуйте.

Сообщаю, что метод ЗавершитьРаботуПользователей работает некорректо.
Посмотрел исходный код и увидел причину: завершаются соединения. Но не завершаются сеансы. Таким образом метод бесполезен.

прикладываю протестированный неоднократно код, необходимый для выполнения ДО отключения соединений скриптом Вашего метода "ЗавершитьРаботуПользователей".

То есть логика такая: сначала рубим сеансы и только затем соединения. Иначе смысла никакого нет в действии, например при необходимости потом выгрузить- загрузить файл 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);
Возврат ИмяБазы;
КонецФункции

@mefalcongit
Copy link
Author

ТЗапуск1С.zip

Сделал вставку в модуль , завершающую сеансы. Стр. 262

@Eremkinig
Copy link

Добрый день. Тоже наткнулся на эту ошибку. Спасибо за исправленный вариант

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants