Как выгонять пользователей из 1с 7.7?

1. кольщик 15.04.13 09:24 Сейчас в теме
У кого какие навыки, как выгонять пользователей из 1с 7.7.
А именно. Пользователи не закрывают 1с, а только терминальную сессию.
Когда уже дома по удаленке начинаю что-то делать, вижу, что никто не закрыл 1с.
Как то можно сделать, чтобы после скажем часа простоя, документы закрывались и закрывалась 1с?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
30. lexkex 107 16.04.13 13:28 Сейчас в теме
(1) кольщик, Терминальные сессии сбрась, самый лучший вариант ПКМ и Сброс или Выход из системы, тогда все клиентские соединения с БД завершаются не аварийно.

(21) dusha0020, не проще ли константу залепить?
42. dusha0020 1107 17.04.13 09:22 Сейчас в теме
(30) lexkex, В первом приближении кажется, что лучше константу. Но константа:
Во первых - изменяет значение только из 1С в режиме предприятие (а вот представьте что какой-то удод залез в базу монопольно).
Во вторых - не очень годится для блокировки входа, так как после входа ее нужно успеть вернуть в разрешительное положение. А это значит в базу нужно таки пускать или на время или по набору прав, по имени пользователя или еще по какому-нибудь условию. То есть упростив в одном месте константой - усложняем условиями входа при взведенной блокировке.
В третьих - процедура блокировки становится не универсальной, так как требует наличия в конфигурации константы и других необходимых атрибутов (как то по п.2 определенных наборов прав или пользователей) - то есть ее нужно подгонять под каждую конфигурацию (или конфигурацию под нее), а вот процедура выгона и блокировки с файлом флага - универсальна и не требует переделки себя и метаданных. Просто кладете в каталог с базой нужный файл, копипастите ее в глобальник и она работает на другой конфигурации.
43. smaharbA 17.04.13 09:49 Сейчас в теме
(42)

Спр=СоздатьОбъект("Справочник.СтавкиНДС");
Спр.ВыбратьЭлементы();
Спр.ПолучитьЭлемент();
Если Спр.Блокировка()=1 Тогда
	ЗавершитьРаботуСистемы(0);
КонецЕсли;
46. lexkex 107 17.04.13 11:39 Сейчас в теме
(42) dusha0020, Согласен, работает по типу как у 1С 8, тогда могу к Вашему варианту добавить только то, что в файл было бы удобнее вносить значение имени пользователя, которого нужно пропускать при старте
dusha0020; +1 Ответить
47. dusha0020 1107 17.04.13 12:45 Сейчас в теме
(46) lexkex, Хорошая идея про пользователя. Так у себя и сделаю. Спасибо.
2. AlexInqMetal 77 15.04.13 09:31 Сейчас в теме
1. Средствами винды закрыть сессию
2. Есть доработки позволяющие организовать выброс пользователей средствами 1с, но придется предварительно доработать конфу
3. кольщик 15.04.13 09:38 Сейчас в теме
Средствами винды закрыть 1cv7.exe?
Просто средствами винды, как не закрываешь, так потом долгая индексация..
4. Martinian 10 15.04.13 09:42 Сейчас в теме
(3) кольщик, все верно. Индексация будет требоваться всегда, когда закрытие базы 7.7 происходит нестандартным образом. Порекомендую образумить пользователей.
50. natarezn 09.09.16 08:26 Сейчас в теме
(3) кольщик, можно ведь не индексировать ?
5. neyaka 15.04.13 09:44 Сейчас в теме
мы делали так - в константах задавалось время, после которого всех кто в 1с остался выгоняло. выгонялка висела на таймере в глобальном модуле. как условия выполняются - без вопросов закрыть 1с. В большинстве случаев работало, только одна проблема - если у пользователя что-то открыто модально, например окошко предупреждения, то не срабатывает. поэтому всегда и везде на предупреждения ставить таймер, чтобы не висело вечно и не злоупотреблять модальными формами)
8. dvk09 2 15.04.13 09:49 Сейчас в теме
(5) Natgrey,
если у пользователя что-то открыто модально то использую такой код:

Если Число(НеудачнаяПопыткаЗакрытия)=10 Тогда
WShell=СоздатьОбъект("WScript.Shell");
WShell.SendKeys("{ESC}");
//Предупреждение("Закрываю 1С",5);
WShell.SendKeys("%{F4}");
КонецЕсли;
15. neyaka 15.04.13 10:05 Сейчас в теме
(8) dvk09, интересное решение. но в случае с dbf базой это приведет же к переиндексации? а в случае с sql возможно к зависанию сиквельной сессии, и всё равно потребуетя вмешательство человека?
26. dvk09 2 15.04.13 11:37 Сейчас в теме
(15) Natgrey, у меня sql (раньше был dbf), единственная выявленная проблема за год использования - иногда пропадают пароли на компах пользователей от терминалов. пока сильно не напрягает.
61. abrafaks 24.09.19 21:56 Сейчас в теме
(8)
WShell=СоздатьОбъект("WScript.Shell");
WShell.SendKeys("{ESC}");
//Предупреждение("Закрываю 1С",5);
WShell.SendKeys("%{F4}");
КонецЕсли;


А можно пример всего кода? Не могу понять, как прикрутить.
62. dvk09 2 25.09.19 03:36 Сейчас в теме
(61)
кода

Таймер создаю из внешней компоненты FormEx.dll. (Ну или использую объект Сервис от туда же, и его обработку ожидания)
В глобальном модуле прописываю процедуру:
Автозакрытие:
Процедура Автозакрытие()
	Перем текЧас, ТекМин;
	ТекущееВремя(текЧас, ТекМин);
	Если текЧас * 60 + ТекМин >1410 Тогда
		Сообщить("Тут надо выходить из системы ;-)");
		Если Число(НеудачнаяПопыткаЗакрытия) = 10 Тогда
			WShell = СоздатьОбъект("WScript.Shell");
			WShell.SendKeys("{ESC}");
			WShell.SendKeys("%{F4}");
		КонецЕсли;
		ЗавершитьРаботуСистемы(0);
		НеудачнаяПопыткаЗакрытия=10;
	КонецЕсли;
КонецПроцедуры
Показать

НеудачнаяПопыткаЗакрытия - Переменная глобального модуля
При начале работы системы ей присваивается значение 0,
создается объект Таймер - тоже переменная глобального модуля,
Таймер = СоздатьОбъект("Таймер");
Указывается процедура выполняемая таймером:
Таймер.ЗадатьОбработчикВГлобальномМодуле("Автозакрытие");
Запускается таймер
Таймер.Запустить(60 * 1000);

или создается объект Сервис
Сервис = СоздатьОбъект("Сервис");//Тоже переменная глобального модуля
И запускается его обработка ожидания
Сервис.ОбработкаОжидания("Автозакрытие", 60 * 1000);

60 * 1000 = 60000 милисекунд или 60 секунд или 1 минута.
Вы можете указать другой интервал.
abrafaks; +1 Ответить
63. dvk09 2 25.09.19 03:42 Сейчас в теме
(62)
1410

В принципе Это же можно использовать и для принудительного выхода из 1С.
Проверять наличие какого-то файла в каталоге например, и если он есть - автоматически выходить...
Или проверять значение константы.
Дальше всё в Ваших руках.
6. AlexInqMetal 77 15.04.13 09:45 Сейчас в теме
можно настроить для пользователя "автоматическое завершение сеанса при простое" вроде как то так называется, можно для пользователя выход из системы сделать если срочно нужно выкинуть. Да, реиндексацию иногда попросит сделать, от нее можно и отказаться. Не скажу что это лучший вариант - скорее простой, второй вариант что я предложил как раз от этого избавлен, обработок таких в свое время я очень много видел.
9. кольщик 15.04.13 09:52 Сейчас в теме
Еще бы не получилось так, что бы если вдруг бухгалтера вызвали на ковер на часик, а она не записала документ. Приходит а там ничего нет)
10. dusha0020 1107 15.04.13 09:58 Сейчас в теме
(9) кольщик, Вот это как раз меньшая из проблем. У меня 1С пользователям рубится через 3-5 минут после предупреждения. Если не сидишь за компом - не видишь предупреждения и досвидос. Две недели они ругались и жаловались начальству, клялись, что предупреждения не было, а потом как-то научились отходя от компьютера сохранять документы. Никому от этого в итоге хуже не стало:)
13. neyaka 15.04.13 10:03 Сейчас в теме
(9) кольщик, ну время ставится позднее, когда уже никого нет. или ночью - перед запуском архивации. потому что если пользователи в базе, архив, естественно не сделается.
11. AlexInqMetal 77 15.04.13 10:00 Сейчас в теме
Как то можно сделать, чтобы после скажем часа простоя, документы закрывались и закрывалась 1с?


Еще бы не получилось так, что бы если вдруг бухгалтера вызвали на ковер на часик, а она не записала документ. Приходит а там ничего нет)


вы уж определитесь сохранять или не сохранять, а вдруг сохраните то что не нужно было, просто для просмотра бухгалтер открыл и случайно подправил, потом концов не найти...
12. кольщик 15.04.13 10:00 Сейчас в теме
Или может как-нибудь сделать, чтобы ровно в 5 вечера, появлялось сообщение: Мол не забудь выключить 1с. Со временем это отложится у пользователей.
20. dusha0020 1107 15.04.13 11:06 Сейчас в теме
(12) кольщик,
Со временем это отложится у пользователей
Без поощрения и/или наказания рефлекс не вырабатывается и навыки не прививаются. Это еще в позапрошлом веке убедительно доказали физиолог Павлов и дрессировщик Дуров.
(17) Natgrey,
если нужен именно архив 1с
На скуле самый простой (имхо) способ быстро освободить базу от пользователей это остановка службы SQL сервера. В 23-30 каждую ночь батником останавливаю на минуту сервер, затем стартую и делаю 1с-овский бэкап. Этот способ результат месяца экспериментов и борьбы с незавершенными сессиями, мешающими бэкапу.
14. кольщик 15.04.13 10:03 Сейчас в теме
вы уж определитесь сохранять или не сохранять, а вдруг сохраните то что не нужно было, просто для просмотра бухгалтер открыл и случайно подправил, потом концов не найти...

Я как раз об этом подумал, и уже представил либо крики, что ничего не сохранилось, либо бардак в учете из-за того что сохранилось, а не надо было..
16. AlexInqMetal 77 15.04.13 10:13 Сейчас в теме
ну если в целях архивации, то все решаемо, акронис, кобиан и т.п. вам в помощь, и не нужно ничего закрывать, а если для целей "ночных доработок из дома", то уж извините если оставили документ открытый на ночь... все закрыть и никого не щадить.
17. neyaka 15.04.13 10:19 Сейчас в теме
(16) AlexInqMetal, в случае с базой sql, если нужен именно архив 1с (а не бэкап сиквельный), нужно выгонять. ну и потом с утра ни одного пользователя - для доработок.
18. Rokky78 40 15.04.13 11:02 Сейчас в теме
Всем добрый день. У себя использую внешнюю компоненту NoSlip.dll (возвращает число секунд простоя открытого сеанса 1С-Предприятия (т.е. время, в течении которого не было движений мышки и нажатий клавиш клавиатуры не вообще в системе, а в окне этого экземпляра окна 1С-Предприятия)). В глобальном модуле
ОбработкаОжидания("глПроверкаНеобходимостиЗакрытияБазы",60);
в процедуре, соответственно, проверки на необходимость закрытия базы, окна предупреждений и вопросов - с таймерами (как уже упоминалось выше).

P.S. база SQL
19. кольщик 15.04.13 11:04 Сейчас в теме
(18) А если база ДБФ? Не получится?
22. Rokky78 40 15.04.13 11:16 Сейчас в теме
(19) кольщик,
На ДБФ не пробовал (не было необходимости), но думаю, что должно работать, т.к. программа закрывается штатно.
Если (глНеСпать.GetLastInputInfo() >= 570) и (глНеСпать.GetLastInputInfo() <= 630) Тогда
	Сообщить("База простаивает и через 10 минут будет закрыта.");
ИначеЕсли (глНеСпать.GetLastInputInfo() >= 990) и (глНеСпать.GetLastInputInfo() <= 1050) Тогда
	Сообщить("База простаивает и через 3 минуты будет закрыта.");
ИначеЕсли глНеСпать.GetLastInputInfo() > 1200 Тогда
	ЗавершитьРаботуСистемы(0);
Иначе
	ОчиститьОкноСообщений();
КонецЕсли;
Показать

Ну и в ПриЗавершенииРаботыСистемы() Вопрос с таймером
38. ITEkb 16.04.13 20:30 Сейчас в теме
(18) Rokky78, Можете поделиться компонентой? Очень удобная, судя по описанию.
39. smaharbA 16.04.13 20:33 Сейчас в теме
(38) посмотрите Ваню и Якубовича про пипец
48. Rokky78 40 17.04.13 12:46 Сейчас в теме
21. dusha0020 1107 15.04.13 11:15 Сейчас в теме
В дбф базе сделайте завершение по флагу и все.
В папке с базой создаете файл, допустим endSession.txt. В этом файле пишите "Нет" или "Да". Соответственно в глобальной обработке ожидания ставьте проверку содержимого этого файла. Как только появится "Да":
ЗавершитьРаботуСистемы(0); 

Захотели удаленно поработать - написали в файле флага буквы "Да" и через период, установленный для обработки ожидания все вываливаются из базы.
Можно, кстати, этот же флаг использовать в ПриНачалеРаботыСистемы(). Чтобы никто не залез, пока Вы не закончили работу в конфигураторе.
23. кольщик 15.04.13 11:20 Сейчас в теме
(21) Вариант конечно интересный, но вываливаются это не тоже самое что я просто по отрубаю всем 1с а потом проиндексирую?
25. AlexInqMetal 77 15.04.13 11:35 Сейчас в теме
(23) кольщик, нет, не тоже самое, эта процедура "корректно" закрывает 1с не сохраняя открытых документов, нет риска повреждения данных
27. dusha0020 1107 15.04.13 12:36 Сейчас в теме
(23) кольщик, см. (25) ЗавершитьРаботуСистемы(0) - это как закрытие крестиком всех открытых форм с автоматическим ответом "Нет" на запрос сохранения и затем закрытие самой 1С-ны. Никакой переиндексации и повреждения данных это не вызывает - штатная команда 1С для корректного завершения работы.
28. кольщик 15.04.13 12:40 Сейчас в теме
35. smaharbA 16.04.13 20:03 Сейчас в теме
(27)

Процедура Х()
	Сообщить("Ну чо, закрыл ???");
	ЗавершитьРаботуСистемы(0);
КонецПроцедуры	// Х

Процедура ПриОткрытии()
	Форма.ОбработкаОжидания("Х",5);
КонецПроцедуры	// ПриОткрытии

Процедура ПриЗакрытии()
	СтатусВозврата(0);
КонецПроцедуры	// 
Показать
natarezn; +1 Ответить
41. ITEkb 17.04.13 07:38 Сейчас в теме
(35) smaharbA, Не лучший вариант :)
Будут звонить юзеры, и жаловаться, что не могут закрыть окно,
вываливается какое то сообщение.
Мысль прочитать им даже в голову не придет :)
24. 11k65m 6 15.04.13 11:26 Сейчас в теме
Решений уйма "на сайте поройся" найдешь что тебя интересует.
29. Kulik2 15.04.13 16:42 Сейчас в теме
31. AlexInqMetal 77 16.04.13 13:41 Сейчас в теме
Терминальные сессии сбрась, самый лучший вариант ПКМ и Сброс или Выход из системы, тогда все клиентские соединения с БД завершаются не аварийно
Только в том случае, если программа на спросит "Вы точно хотите выйти" :)
не проще ли константу залепить?

а как назад воротать ее будете? тогда придется еще проверку делать чтоб хотя бы админа пускал всегда независимо от константы.
32. brunet 39 16.04.13 19:47 Сейчас в теме
можно в конфигураторе написать выганялку пользователей:

Процедура ПриНачалеРаботыСистемы()
Если (Константа.ВыгнатьИз1С = Перечисление.Булево.Да) Тогда
Предупреждение("Пока работать в 1С нельзя!!!!",5);
ЗавершитьРаботуСистемы(0);
КонецЕсли;
ОбработкаОжидания("ВыгнатьПользователейИз1С",60);
КонецПроцедуры

Процедура ВыгнатьПользователейИз1С()
Если (Константа.ВыгнатьИз1С = Перечисление.Булево.Да) Тогда
Если БылоПредупреждение <> Перечисление.Булево.Да Тогда
Предупреждение("Уважаемый(ая) прошу Вас прекратить работу и выйти из 1C",60);
БылоПредупреждение = Перечисление.Булево.Да;
Иначе
ЗавершитьРаботуСистемы(0);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
34. smaharbA 16.04.13 19:57 Сейчас в теме
(32) запускаю 1с (ДОРОГО) - никто не выгонит.
33. smaharbA 16.04.13 19:56 Сейчас в теме
про индексацию пишут неучи
36. _liana 16.04.13 20:05 Сейчас в теме
тоже боролись с таким
нали 2 решения:
1. в настройках пользователя на сервере на закладке Сеансы параметр Отключение отключенного сеанса - поставить = 5 мин (завершается нормально база, ни разу не полетела, но индексацию в половине случаев просит)
2. классный вариант, который нам подошёл: убрали крестик утилиткой с ярлычка терминального подключения .. таким образом пока не закроешь 1с терминальная сессия ваще не закроется ... и даже больше, компьютер через кнопку Пуск тоже не выключится, заругается на незакрытую сессию (только если жестоко выключить комп кнопкой Пауэр) . Пользователи долго матерились, но зато в базе никто не зависал на ночь ))))

кому надо, могу выслать утилитку по закрытию крестика
37. smaharbA 16.04.13 20:08 Сейчас в теме
(36) скажи спасибо Мише - но и то не панацея - закрою 1с и рдп (ДОРОГО и штатно)
Graf_Leon; +1 Ответить
40. МихаилМ 16.04.13 23:46 Сейчас в теме
для скл версии для обновлений
пользователей можно не выгонять накогда.

конфигурацию MD можно можно подменить, предварительно закрыв все соединения с файлом.
данные таблиц в скл обновить из копии.

если поля удаляются - временно заменить таблицу на view с этим полем c пустым значением.

последние года 2, когда работал с 1с77, никого не выгонял из бд для обновлений.
44. vcv 89 17.04.13 10:48 Сейчас в теме
(40) Если очень хочется подменять конфигурацию "на лету", не выгоняя пользователей, то есть внешняя компонента MD_CHANGER.
Программа для "горячей" замены конфигурации без необходимости завершать работу
всех пользователей. Достаточно скопировать в папку с конфигурацией (в подпапку MD_CHNG)
файл 1cv7_1.md, 1cv7_2.md и т.д., чтобы вновь входящие пользователи "видели"
новый (последний по номеру) MD в качестве файла конфигурации.

Пользователь, который хочет увидеть изменения, должен будет выйти и заново
войти в 1С. Таким способом можно заменить, например, глобальный модуль,
общие таблицы, картинки, интерфейсы (меню и т.д.), перечисления, отчеты и
обработки. Другие пользователи при этом могут продолжать свою работу в 1С.
45. imba85 17.04.13 11:27 Сейчас в теме
Добрый день!
У нас реализовано так: в глобальном модуле с периодичностью запускается функция, которая проверяет константу на необходимость завершения. Если константа установлена то на клиентских машинах с правами отличными от Администратор запускается процедура, содержащая метод ЗавершитьРаботуСистемы();
49. G.P. 11 03.02.14 10:52 Сейчас в теме
+45, в белорусской типовой конфигурации Аверсон так и сделано
faker1980tyumen; +1 Ответить
51. natarezn 09.09.16 08:32 Сейчас в теме
СохранитьЗначение("НеЗапрашиватьПодтверждениеПриВыходе",1);
ЗавершитьРаботуСистемы();
Возврат 0;
52. natarezn 09.09.16 08:35 Сейчас в теме
в процедуру приначалеработысистемы() поставить Предупреждение("Доступ в систему временно запрещен");
СтатусВозврата(0);
Возврат;
53. natarezn 09.09.16 08:50 Сейчас в теме
Если ФС.СуществуетФайл("с:\dconnect.all")=1 Тогда
ЗавершитьРаботу=1;
Предупреждение("Через 30 секунд база будет закрыта.
|Сохраните изменения!",5);
КонецЕсли;
56. varelchik 09.09.16 12:13 Сейчас в теме
(53) natarezn,
Интересное решение с диском с:
А если его нету?
и а есть только d:
И вообще а если база не локально а по сети?
57. корум 287 12.09.16 13:03 Сейчас в теме
(56) расположение флаг-файла можно записать в константу.

Чтобы не было проблем с реиндексацией, можно в планировщик задач поставить вход робота на 5 утра в монопольном режиме, приНачалеРаботыСистемы сразу на фыход. Реиндексирует и отвалится.

А при возможности надо работать в базе SQL.
54. KontoraB 09.09.16 09:35 Сейчас в теме
как выгонять? поджопником
55. varelchik 09.09.16 12:10 Сейчас в теме
Вставлю свои пять.
В глобальнигу актививуем ОбработкуОжидания скажем процедура:
ВыходИзБазы().
У меня базы SQL.
Создаем Внешнюю таблицу, ну или справочник.
С определенной структурой.
Пользователь,Блокировать.
У меня еще куча служебных полей,но это так для себя.
Далее
В приначалеработысистемы()
Проверяем наличие записи об входящем пользователе.
Если нету то добавляем.
ЕСли есть проверяем Блокировать на 1.
Если да то
Статусвозврата(0);Возврат;

В ВыходИзБазы()
ПРоверяем значение Блокировать на 1.
если 1 ТО
ЗаверщитьРаботуСистемы()
58. varelchik 13.09.16 11:33 Сейчас в теме
МДА.
Вот только если в базе кто-то сидит?
Однозначное предупреждение:
Ошибка блокировки метаданных.
Возможно используются другой задачей!
Эт хорошо если планировщик nncron,то можно это сообщение увидить.
А вот если виндовозный,то фиг вы его увидите!
59. корум 287 13.09.16 14:13 Сейчас в теме
(58) у меня пользователи сидели в терминале.
В 3 часа ночи все подключённые сессии закрывались.
В 5 утра приходил робот и наводил порядок.
В 9 утра приходили пользователи.
60. imax26 91 01.10.16 15:23 Сейчас в теме
shutdown -r -t 1 -f
ну или sudo shutdown -r now
64. user1950534 27.03.24 12:13 Сейчас в теме
Я делал через константу "ВсеВон" (булево) и таймер глобального модуля
Вызывал ЗавершитьРаботуСистемы()

Работает плохо.
Большинство пользователей держат открытыми документы, при попытке завершения система выдает вопрос сохранить да/нет. Как бороться с этим - я не нашел. Но есть топорный метод, который работает вроде бы ничё:

1. Киляю таски с админа через taskkill /im 1cv7*
2. Таймаут секунд 60
3. Запускаем из командной строки - как именно описано тут https://forum.mista.ru/topic.php?id=884801
4. Таймаут секунд 60

Усё работает
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот