gifts2017

Направляем список пользователей, не закрывающих терминальные сессии 1С, на почту ИТ директору

Опубликовал Олег Пономаренко (O-Planet) в раздел Администрирование - Сервисные утилиты

Пятница - лучший день для аншлагов по 1С. У Лены он начался с того, что у одного нашего московского клиента рухнула база по банальной причине ...

Пятница - лучший день для аншлагов по 1С. У Лены он начался с того, что у одного нашего московского клиента рухнула база по банальной причине: у бухгалтера завелся какой-то местный программист, который поставил автосохранение в 5 утра, но не учел, что менеджеры в этой компании оставляют не закрытыми свои сессии (хотя их, между тем, много раз предупреждали). В результате, автосохранение этого программиста поступило как-то очень хардкорно: оно просто молча вырубило все открытые сессии и добросовестно сделало свое дело. И база рухнула...

Вот тогда-то и возникла эта до гениальности простая идея: набросать регламентное задание, призванное положить конец менеджерским вольностям. Оно просто каждую ночь будет формировать и направлять на почту ИТ-директору этой компании в xls-файле список всех пользователей, у которых висят незакрытые сессии. А он уже знает, что с этими менеджерами делать...

У нашей Лены всегда хорошее настроение, а в пятницу - просто отличное, потому она посчитала, что кому-то из коллег это фишка может пригодиться, и решила ее дать... ;)

 

А вот и сам модуль, кому качать лень.

РЕГЛАМЕНТНОЕ ЗАДАНИЕ НА РАССЫЛКУ

Процедура ОПланет_РассылкаАктивныхПользователей() Экспорт
	ТабДок =Новый ТабличныйДокумент;	
	Макет = ПолучитьОбщийМакет("АктивныеПользователи");   
	Шапка = Макет.ПолучитьОбласть("Шапка");
	ТабДок.Вывести(Шапка);
	Строка = Макет.ПолучитьОбласть("Строка");
	//ПолучаемДанные
	СоединенияИнформационнойБазы = ПолучитьСоединенияИнформационнойБазы();
	Для Каждого Соединение Из СоединенияИнформационнойБазы Цикл                 
		Строка.Параметры.Пользователь=Соединение.Пользователь.Имя;                              
		Строка.Параметры.Приложение=ПредставлениеПриложения(Соединение.ИмяПриложения);          
		Строка.Параметры.НачалоРаботы=Соединение.НачалоСеанса;                                  
		Строка.Параметры.Компьютер=Соединение.ИмяКомпьютера;                                    
		Строка.Параметры.Соединение=Соединение.НомерСоединения;  
		ТабДок.Вывести(Строка);
	КонецЦикла;   				
	
	ИмяФ							=	"Polzovateli.xls";
	ИмяВремФайла					=	""+КаталогВременныхФайлов()+ИмяФ;
	Попытка
		ТабДок.Записать(ИмяВремФайла, ТипФайлаТабличногоДокумента.XLS);
	Исключение
		Возврат;
	КонецПопытки;
	
	МассивФайловДляОтправки = Новый Массив;
	МассивФайловДляОтправки.Добавить(Новый Структура ("ПутьВложения,ИмяФайлаВложения,НаименованиеВложения", ИмяВремФайла, ИмяФ, ИмяФ));
	АдресаДляОтправкиНаСклад        = Строка("_______@list.ru");  // тут можно через константу указать
	
	МассивАдресов = ОбщегоНазначения.РазложитьСтрокуВМассивПодстрок(АдресаДляОтправкиНаСклад, ",");
	
	ЭлАдреса = Новый СписокЗначений;
	Для каждого ЭлАдрес из МассивАдресов Цикл
		ЭлАдреса.Добавить(ЭлАдрес, ЭлАдрес);
	КонецЦикла;
	Тема = "Пользователи базы";
	ТекстПисьма = "Пользователи базы";
	
	СтруктураПисьма = СформироватьПисьмоНовая(Тема, МассивФайловДляОтправки, ТекстПисьма, ЭлАдреса, Ложь);
	
	УчетныеЗаписи = Новый Массив;
	УчетныеЗаписи.Добавить(СтруктураПисьма.ПисьмоСсылка.УчетнаяЗапись);
	Письма = Новый Соответствие;
	Об = СтруктураПисьма.ПисьмоСсылка.ПолучитьОбъект();
	Об.СтатусПисьма = Перечисления.СтатусыПисем.Исходящее;
	Об.Записать();
	Письма.Вставить(Об.Ссылка, Об);
	УправлениеЭлектроннойПочтой.ПолучениеОтправкаПисем(глЗначениеПеременной("глСоответствиеТекстовЭлектронныхПисем"), глЗначениеПеременной("глТекущийПользователь"), УчетныеЗаписи, Письма, Истина);	
КонецПроцедуры

Функция СформироватьПисьмоНовая(Тема, МассивСтруктурФайловВложений = Неопределено, ТекстПисьма, Адрес = Неопределено, Открывать = ЛОЖЬ)
	ЕстьВложение = (ТипЗнч(МассивСтруктурФайловВложений) = Тип("Массив")) И (МассивСтруктурФайловВложений.Количество() > 0);
	
	Если ЕстьВложение Тогда
		
		СтруктураВложений  = Новый СписокЗначений;
		
		Для каждого ТекФайл из МассивСтруктурФайловВложений Цикл
			
			Вложение           = Новый Структура("Наименование, ИмяФайла, Хранилище", ТекФайл.НаименованиеВложения, ТекФайл.ИмяФайлаВложения, "");
			Вложение.Хранилище = Новый ДвоичныеДанные(ТекФайл.ПутьВложения);
			
			СтруктураВложений.Добавить(Вложение);
			
		КонецЦикла;
		
	КонецЕсли;
	
	Если ТипЗнч(Адрес) = Тип("СписокЗначений") Тогда
		СписокАдресов = Адрес;
	Иначе
		СписокАдресов = Новый СписокЗначений;
		Если НЕ Адрес = Неопределено Тогда
			СписокАдресов.Добавить(Адрес, Адрес);
		КонецЕсли;
	КонецЕсли;
	
	ТекстПисьмаHTML = "<HTML><HEAD><META http-equiv=Content-Type content=""text/html; charset=utf-8""><META content=""MSHTML 6.00.2800.1476"" name=GENERATOR></HEAD><BODY><P>";
	ТекстПисьмаHTML = ТекстПисьмаHTML + СтрЗаменить(ТекстПисьма, Символы.ПС, "</P><P>");
	ТекстПисьмаHTML = ТекстПисьмаHTML + "</P></BODY></HTML>";
	
	СтруктураНовогоПисьма                      = Новый Структура("Тело, Тема, СписокФайловВложений, Кому");
	СтруктураНовогоПисьма.Тело                 = ТекстПисьмаHTML;
	Если ЕстьВложение Тогда
		СтруктураНовогоПисьма.СписокФайловВложений = СтруктураВложений;
	КонецЕсли;
	СтруктураНовогоПисьма.Тема                 = Тема;
	СтруктураНовогоПисьма.Кому                 = СписокАдресов;

	СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма, , , , , , , ЛОЖЬ);
		
	Получатели_ = "";
	Для каждого Адрес из СписокАдресов Цикл
		Получатели_ = Получатели_ + Адрес.Значение + "; ";
	КонецЦикла;
		
	Возврат СтруктураПисьма;
КонецФункции

Но качать все равно придется!

... или самим лепить общий макет "АктивныеПользователи" ;)

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Модуль регламентного задания Рассылка отчета по активным пользователям
.zip 2,51Kb
16.03.15
18
.zip 2,51Kb 18 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Епрст (Ёпрст) 16.03.15 09:17
Это всё от лени. Мог бы и без общего макета, просто через область слепить. Или через построитель+тз и вывести.

ЗЫ: а так, всё это решается административными мерами, на крайняк, объектами групповой политики.
И забивать почту директора ненужным спамом, моветон.
2. LavBabay (LavinVadik) 16.03.15 09:55
Зачем все так сложно, если Вашему директору заняться не чем, научите его в танки лучше играть ))
kuzyara; Alexey_A; ffgnebel; gmn1791; Константин С.; ojiojiowka; daMaster; iiivvvaaannn; +8 Ответить
3. Сергей (Che) Коцюра (CheBurator) 16.03.15 10:01
При выходе из базы пихаем в систему СКД флажок "нет препятствий для покидания работником пределов офиса". и все... ;-)
Stim213; ZOMI; +2 Ответить
4. Алексей 1 (AlX0id) 16.03.15 10:23
А можно сделать обработку, которая бы отслеживала людей, которые не смывают за собой в туалете, и отправляла на почту директору?
Andreyyy; denis_aka_wolf; 1v7; trumanl; АндрейКр; Stim213; kuzyara; students; Serg3141; Alexey_A; ffgnebel; Shooroopik111; ojiojiowka; monkbest; j_rubin; daMaster; Taktic; goodwill; b-dm; +19 Ответить 1
5. Dmitry Bas (b-dm) 16.03.15 11:23
6. Владислав Чинючин (vcv) 16.03.15 12:49
А чего чисто админскую задачу решать через 1С?
Например строчкой
for /F "tokens=1 skip=1 delims=> " %i in ('query user ^|findstr /V "vasya petya"') do echo %i>userslist.txt

получаем список пользователей, не закрывших терминальные сессии (за исключением vasya и petya) в файле userslist.txt

А вот так
for /f "tokens=7 delims=," %i in ('tasklist /V /FO CSV ^| findstr /I "1cv8.exe"') do @echo %i>userslist.txt

получаем в файле userslist.txt логины пользователей, у которых запущена 1С
Tarlich; Terve!R; artbear; Трям; DeD MustDie; ojiojiowka; CatMix; +7 Ответить
7. kolya_tlt kolya_tlt (kolya_tlt) 16.03.15 13:04
я не понял почему не наказан какой-то местный программист :(
8. Михаил Зотов (ZOMI) 16.03.15 14:46
База могла рухнуть если какие-то неместные программисты чего-то наковыряли удаленно. Требую всестороннего расследования!)
Serega-artem; Katren; monkbest; +3 Ответить 1
9. Олег Пономаренко (O-Planet) 16.03.15 15:33
(8) Нифкоим_случае!!! Мы им базу уже 4 года от мефтных программастеров оберегаем и всячески спасаем. Но тут руководство поменялось, и местные снова просочились род шумок...
10. Бесёнок Инфостарта (Бесёнок Инфостарта) 16.03.15 16:14
Девчонка оказывается не только красивая, но ещё и умная.
11. Оракул Айметдинов (jhfrek) 16.03.15 16:16
Прикольная штука конечно, но вот если бы кроме сообщения она бы ещё автоматически закрывала бы сессию, то было бы ещё круче!!!
12. Павел (Yimaida) 16.03.15 23:14
В результате, автосохранение этого программиста поступило как-то очень хардкорно: оно просто молча вырубило все открытые сессии и добросовестно сделало свое дело. И база рухнула...

Вводная совсем отсутствует. Какая база? Чем делался бэкап? Делался ли бэкап средствами сервера БД? Как отрубались сессии? Как отключение сессии может "положить" базу?

Может использовался какой-то известный софт, который любят ставить те же админы, так лучше сразу указать что зафиксированы проблемы.

И еще, директору в 5 ч. утра приходит письмо что бэкап мол не может отработать, т.к. Ина, Марина и Оля "сидят" в 1с. Директор, конечно же, быстренько всех обзванивает, чтобы закрыли 1с, т.к. нет возможности сделать бэкап. И в конце письма лучше инструкцию приложить как отрубать правильно сеансы, чтобы не положить базу (предполагаю, что это будет типа: "На компьютере Марины закрыть все окна 1с...")
Serg3141; gmn1791; +2 Ответить 2
13. Олег Пономаренко (O-Planet) 16.03.15 23:45
(12) Все не так. Про то, чем бэкапилось - не знаем действительно, что-то даже и не поинтересовались. А оно нужно? И в 5 часов ни кто никого обзванивать не будет. Но если менеджер оставил открытую сессию на ночь, а сам спит, то, проснувшись, он должен стать низкооплачиваемым менеджером.
14. Олег Пономаренко (O-Planet) 16.03.15 23:49
(4) AlX0id,
Да. Можно. Только будет работать по-другому. Утром при включении компа - БАЦ! Синий экран и текст
*** Error hook up because
ЕСЛИ ТЫ НА**АЛ, ЗАРАЗА,
ДЕРНИ РУЧКУ УНИТАЗА!
ЕСЛИ РУЧКИ НЕТУ ТОЙ -
ПРОТОЛКНИ ГО**О РУКОЙ!
15. Павел (Yimaida) 17.03.15 08:57
(13) именно все не так.. (это был стеб). Все должно быть не так. Главное в этой истории, что нет рабочего бэкапа. Административный ресурс не решит проблему бэкапа. Менеджеру проще будет уволиться чем восстанавливать базу за 3-5 лет. Гораздо ценнее была бы обработка по архивированию базы с отключением юзеров и т.п., всеми возможными способами (средствами SQL, выгрузка dt, копирование в сеть, периодически тестить бэкапы).
16. Антон Антонов (monkbest) 17.03.15 09:13
Вроде интересный рассказ, но что-то прям перекореживает на поворчать:) Видимо встал не с той ноги

1. от отключения сессий базы не падают
2. Бэкап должен делаться при любом раскладе, оставшиеся сеансы - не повод остаться без копии базы.
3. Понижать менеджера по чему-либо за незакрытые окна... ну извините, его труд надо оценивать не по умению окошки закрывать, а по, наверное, другим навыкам.
4. Не пускать местных программистов в базу? это вообще меня выбесило. Людям нужна оперативная помощь, а не решение проблем в течении недели "по умному"
5. ябедничать каждую ночь руководству, что кто-то не закрыл окно 1С? там реальной работы нет что ли у директора департамента? я бы эти письма быстро в спам направил бы:)
Serega-artem; Accident; denis_aka_wolf; 1v7; dour-dead; АндрейКр; Net.Bear; Vextel; sasasasa; HitGroove; BorovikSV; Terve!R; artbear; Award; StellaDeMare; didkovskij; kuzyara; exciter; Jenya78; astrius; vlad.frost; students; Chif13; Dimkasan; FrLenok; DrSender; Katren; disnos; Alexey_A; sys1c; illUMI; FSerg; AlX0id; ZOMI; +34 Ответить 2
17. Alex Steiner (OrsoBear) 18.03.15 10:47
:-) Знакомая тема.
Есть у заказчиков простенький сервер, на котором памяти кот всплакнул.
И есть любители открыть несколько баз на всякий случай, это утренняя процедура такая.
Чем больше баз открыто, тем выше ощущение собственной значимости.
Все работают в терминале на сервере, и каждое подключение основательно отъедает
и без того небольшую память.

Руководителя беспокоить не стали.
Отправляли на принтер раз в ночь служебную записку.

Уважаемый, <РуководительПредприятия>, я - сотрудница отдела <НазваниеОтдела>
<ФИОполностью> прошу отправить меня в отпуск без содержания. Я очень устала,
нет сил даже уходя с работы выключать компьютер...

Варианты были от курсов повышения зарплаты до увольнения по собственному желанию,
в зависимости от количества распечаток.

Сначала народ тупил, потом веселился, потом начал пускать в оборотки, потом эти распечатки стали всем надоедать.
Хватило месяца.
18. Олег Пономаренко (O-Planet) 18.03.15 11:56
(16)
4. Не пускать местных программистов в базу? это вообще меня выбесило. Людям нужна оперативная помощь, а не решение проблем в течении недели "по умному"

Ну вот с этим не согласен. Нас разделяет 900 км, но мы реагируем оперативнее, потому что весь день с ними онлайн работаем. В частности, как раз Лена. Это онлайн сопровождение (вопросы-ответы-помощь) + разные доработки по хотелкам.

(17) Вот! А в (16) господин - далеки от народа-с :)
jhfrek; ne_en; +2 2 Ответить 1
19. Убийца Джедаев (vakham) 18.03.15 15:53
Надо настроить автоотрубание рук менеджерам.
20. Михаил Зотов (ZOMI) 19.03.15 01:34
(18) O-Planet,
Целыми днями онлайн 4 года работаете и в том числе Лена трудится, а бухги все местного программиста зовут и зовут?
RuslanKhanow; Terve!R; +2 Ответить 1
21. Дмитрий Дидковский (didkovskij) 19.03.15 08:30
В первый раз слышу, чтобы от закрытия сессий база рухнула.... Сам обрываю сессии в скрипте перед бэкапом...
22. Neman Entorin (ne_en) 19.03.15 08:35
Решается подобная задача несколько иным способом. Никому ничего отсылать не нужно. Ябедничать ни на кого не надо. Никакого "аварийного" завершения.
Встраивается система передачи сообщений. Некоторые сообщения при поступлении пользователю, производят с его клиентом какие-либо вещи. Например выход из базы с предложением пользователю сохранить не сохранённые объекты; или выход из базы без каких либо запросов пользователю. Завести некоего пользователя (например stopsystem), который при старте передаёт это сообщение всем активным пользователям. В планировщик задач сервера (ну или...) добавить запуск 1Ски от этого пользователя в полночь.
(Ещё вместо сообщений, можно использовать встроенную систему Задач)
Вот и всё. Бонусом имеем систему передачи сообщений между пользователями, в т.ч. и с прикреплёнными объектами (Типа: "посмотри и исправь, в этом документе сумма с оригиналом не сходится"). У меня такие системы работают очень давно, ещё со времён семёрки. Будет время, выделю в отдельные модули и опубликую.
nickperel; +1 Ответить
23. Neman Entorin (ne_en) 19.03.15 08:44
(16) monkbest,
4. Не пускать местных программистов в базу? это вообще меня выбесило. Людям нужна оперативная помощь, а не решение проблем в течении недели "по умному"

Прогресс уже так далеко шагнул :) , что уже не важно, где территориально находится программер. Пользуюсь Viber на телефоне и Skype на компе. В некоторых компаниях, некоторые сотрудники, общаясь со мной, даже не догадываются, что я нахожусь в семи часовых поясах от них. Это лишь мне неудобства доставляет, когда мне звонят в 4 утра с банальными вопросам.
24. Николай Крылов (Nikola23) 19.03.15 09:06
(13) O-Planet, Низкооплачиваемым. Задача менеджера - продавать или сопровождать клиента. Это не его головная боль - бэкапы.
Примененное решение - плод больной фантазии "обычного программиста 1с", а не грамотного аналитика/внедренца, который должен работать с клиентом. Программистов до клиента допускать не положено.

Правильное решение уже вроде написали, но я повторюсь:
Бэкап должен был быть настроен силами админов, средствами СУБД, что бы открытые сеансы ничему не мешали. На крайний случай, силами тех же админов, должно быть настроено завершение терминальных сессий по ночам или по таймауту.

А кто даст все эти рекомендации админу? Внедренец.

А еще ругаете местных программистов. Для начала, поработайте над собой.
25. Марат Хафизов (Painted) 19.03.15 09:45
В бытность сисадмином делал следующим образом.
Каждую ночь по расписанию составлялся список не выключенных компов
net view >> list1.txt
, утром список просматривал и особо злостных нарушителей добавлял во второй список list2.txt. Для этих по ночам срабатывала другая команда
psshutdown.exe -f -s -u АдминДомена -p Пароль @list2.txt
принудительное отключение компьютера
Утилита psshutdown от Марка Русиновича. У него много чего интересного, рекомендую. ))
26. Олег Пономаренко (O-Planet) 19.03.15 13:56
(20) ZOMI,
Так на то и бухи, чтобы тупить!
27. Олег Пономаренко (O-Planet) 19.03.15 14:09
(24) Мы - программисты 1С, не сисадмины. Не местные, аутсорсеры из Ульяновска. Сисадмин у них есть. Местный. Московский. И самое прикольное, это он поставил задачу нам решить вопрос с сессиями. Заметьте, автосохранение делали опять же, не мы, а местный кулибин. Если бы задачу поставили нам, то мы бы и решали, и учли бы все.
Vlasenko.Oleg; jhfrek; Irina2283; +3 Ответить
28. Николай Переляев (nickperel) 01.04.15 13:00
Проблема есть. Как аккуратно сделать бакап, перепровести документы, погонять иные всякие обработки, но кто-то работает или оставил сессию с открытыми окнами.

Итого. Что делать то?

Не позитивная ерунда:

- письма директору . Не понятно, что он должен делать при получении письма. Заявлять в прокуратуру? Ущемлять кого-то деньгами? Вообще говоря есть у нас конституция и кодекс о труде. Только в соответствии с ними можно приставать к людям с чем-то. Можно, конечно , вменять в обязанности и вписать в договор и потом контролировать, собирать объяснительные с тех кто не смог закрыть по объективным причинам. Короче ерунда полная.

- прибивать процессы и сессии пользователей. Они могут работать в разное время, из разных часовых поясов и из других мест планеты И вообще не с той базой, которую планируется бакапить.

- принудительный сброс соединений к файл серверу или соединений sql - сервера.

- иные способы "автоотрубания рук менеджерам". И другие глупые способы инфантильных программистов. Достигнутый эффект приведет к автоотрубанию головы программиста или посылания подрядчика-1с ника. Вообще вся административная борьба - ерунда.

Позитивные решения:
- sql - сервер (все может - не всем доступен).

Файловая база.

Типовой механизм файловой из БСП не работает или работает плохо?
Я слышу периодические жалобы - "зависание на утро" в залоченном виде. Оно вообще работает?

22. ne_en 19.03.2015 08:35
Решается подобная задача несколько иным способом. Никому ничего отсылать не нужно. Ябедничать ни на кого не надо. Никакого "аварийного" завершения.
Встраивается система передачи сообщений.


Самая хорошая идея. Есть здесь на infostart, готовое?
Надо только придумать как сделать все внешней обработкой к типовым, не типовым, на 8.1, 8.2, 8.3. К тем, где нет системы сообщений.
То есть вся система должна быть в обработке.


29. Николай Переляев (nickperel) 01.04.15 13:09
(13) O-Planet,
Он никому ничего не должен. По крайней мере, он к этому стремиться. Даже не смотря что 1С и ее данные - это важно для кого-то.
30. Николай Переляев (nickperel) 01.04.15 13:10
(17) OrsoBear,
Это незаконно и несерьезно.
31. Сергей Боровик (BorovikSV) 20.04.15 09:29
(0) Сразу на ум приходит ситуация с японским поездом (из расследования катастроф). Машинист так переживал за то что два рейса назад его поезд опоздал по графику на две минуты, за что ему грозила "обучение" (где унижают), что в текущий рейс гнал на полную, думал об предстоящем кошмаре, не следил за дорогой, и не вписался в поворот......

Грош цена таким ИТ "специалистам", которые из за открытых окошек не могут бэкап сделать. Благо и для клиент-серверной, и для файловой это возможно.
32. Александр Журавлев (apostal86) 23.04.15 12:50
Надо сразу, чтобы заявление на увольнение составлялось в формате xls и pdf и директору на почту. Автоматически ставилась печать оргаинзации и подпись сотрудника подтягивалась на печатную форму.
33. trade70 19.10.15 13:05
(12) Yimaida,
Как отключение сессии может "положить" базу?

Вы будете смеяться но я сегодня услышал более интересную новость, моему клиенту предлагают в связи с появлением ЕГАИС 3 млн. расходов на оборудование. Долго смеялся)

Вот так и тут...незнание клиентов, основная движущая сила для таких внедренцев))
34. Олег Пономаренко (O-Planet) 01.03.16 03:20
(33) 3 млн с появлением ЕГАИС? - нормально, если клиент - торговая сеть. Это примерно 50 наших касс, не считая работ по внедрению. Вы бдете смеяться. о местные им уже дважды (!) базу убили с момента написания этой статьи, пришлось восстанавливать.
35. vasja ivanov (vasja_yar) 17.04.16 00:49
(13) O-Planet, обработка чушь... как ваша фирма еще работает с такими идеями, в школу вас всех. Вместо того чтобы сделетать завершение сеансов в 12 ночи банальным скриптом, вы шлете что открыта 1С.
Админы, где моно минусы поставить?
36. vasja ivanov (vasja_yar) 17.04.16 00:51
(34) O-Planet, С чего вы взяли что из за открытых сеансов? И как вы поняли что местные убили, а не ваши "чудо доработки в рабочей базе"?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа