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

Пятница — лучший день для аншлагов по 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;
Если ЕстьВложение Тогда
СтруктураНовогоПисьма.СписокФайловВложений = СтруктураВложений;
КонецЕсли;
СтруктураНовогоПисьма.Тема                 = Тема;
СтруктураНовогоПисьма.Кому                 = СписокАдресов;

СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма, , , , , , , ЛОЖЬ);

Получатели_ = "";
Для каждого Адрес из СписокАдресов Цикл
Получатели_ = Получатели_ + Адрес.Значение + "; ";
КонецЦикла;

Возврат СтруктураПисьма;
КонецФункции

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

… или самим лепить общий макет «АктивныеПользователи» 😉

42 Comments

  1. Ёпрст

    Это всё от лени. Мог бы и без общего макета, просто через область слепить. Или через построитель+тз и вывести.

    ЗЫ: а так, всё это решается административными мерами, на крайняк, объектами групповой политики.

    И забивать почту директора ненужным спамом, моветон.

    Reply
  2. LavinVadik

    Зачем все так сложно, если Вашему директору заняться не чем, научите его в танки лучше играть ))

    Reply
  3. CheBurator

    При выходе из базы пихаем в систему СКД флажок «нет препятствий для покидания работником пределов офиса». и все… 😉

    Reply
  4. AlX0id

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

    Reply
  5. b-dm

    Молодец, хорошая идея!

    Reply
  6. vcv

    А чего чисто админскую задачу решать через 1С?

    Например строчкой

    for /F «tokens=1 skip=1 delims=> » %i in (‘query user #k8SjZc9Dxk|findstr /V «vasya petya»‘) do echo %i>userslist.txt
    

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

    А вот так

    for /f «tokens=7 delims=,» %i in (‘tasklist /V /FO CSV #k8SjZc9Dxk| findstr /I «1cv8.exe»‘) do @echo %i>userslist.txt
    

    получаем в файле userslist.txt логины пользователей, у которых запущена 1С

    Reply
  7. kolya_tlt

    я не понял почему не наказан какой-то местный программист 🙁

    Reply
  8. ZOMI

    База могла рухнуть если какие-то неместные программисты чего-то наковыряли удаленно. Требую всестороннего расследования!)

    Reply
  9. O-Planet

    (8) Нифкоим_случае!!! Мы им базу уже 4 года от мефтных программастеров оберегаем и всячески спасаем. Но тут руководство поменялось, и местные снова просочились род шумок…

    Reply
  10. Бесёнок Инфостарта

    Девчонка оказывается не только красивая, но ещё и умная.

    Reply
  11. jhfrek

    Прикольная штука конечно, но вот если бы кроме сообщения она бы ещё автоматически закрывала бы сессию, то было бы ещё круче!!!

    Reply
  12. Yimaida
    В результате, автосохранение этого программиста поступило как-то очень хардкорно: оно просто молча вырубило все открытые сессии и добросовестно сделало свое дело. И база рухнула…

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

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

    И еще, директору в 5 ч. утра приходит письмо что бэкап мол не может отработать, т.к. Ина, Марина и Оля «сидят» в 1с. Директор, конечно же, быстренько всех обзванивает, чтобы закрыли 1с, т.к. нет возможности сделать бэкап. И в конце письма лучше инструкцию приложить как отрубать правильно сеансы, чтобы не положить базу (предполагаю, что это будет типа: «На компьютере Марины закрыть все окна 1с…»)

    Reply
  13. O-Planet

    (12) Все не так. Про то, чем бэкапилось — не знаем действительно, что-то даже и не поинтересовались. А оно нужно? И в 5 часов ни кто никого обзванивать не будет. Но если менеджер оставил открытую сессию на ночь, а сам спит, то, проснувшись, он должен стать низкооплачиваемым менеджером.

    Reply
  14. O-Planet

    (4) AlX0id,

    Да. Можно. Только будет работать по-другому. Утром при включении компа — БАЦ! Синий экран и текст

    *** Error hook up because

    ЕСЛИ ТЫ НА**АЛ, ЗАРАЗА,

    ДЕРНИ РУЧКУ УНИТАЗА!

    ЕСЛИ РУЧКИ НЕТУ ТОЙ —

    ПРОТОЛКНИ ГО**О РУКОЙ!

    Reply
  15. Yimaida

    (13) именно все не так.. (это был стеб). Все должно быть не так. Главное в этой истории, что нет рабочего бэкапа. Административный ресурс не решит проблему бэкапа. Менеджеру проще будет уволиться чем восстанавливать базу за 3-5 лет. Гораздо ценнее была бы обработка по архивированию базы с отключением юзеров и т.п., всеми возможными способами (средствами SQL, выгрузка dt, копирование в сеть, периодически тестить бэкапы).

    Reply
  16. monkbest

    Вроде интересный рассказ, но что-то прям перекореживает на поворчать:) Видимо встал не с той ноги

    1. от отключения сессий базы не падают

    2. Бэкап должен делаться при любом раскладе, оставшиеся сеансы — не повод остаться без копии базы.

    3. Понижать менеджера по чему-либо за незакрытые окна… ну извините, его труд надо оценивать не по умению окошки закрывать, а по, наверное, другим навыкам.

    4. Не пускать местных программистов в базу? это вообще меня выбесило. Людям нужна оперативная помощь, а не решение проблем в течении недели «по умному»

    5. ябедничать каждую ночь руководству, что кто-то не закрыл окно 1С? там реальной работы нет что ли у директора департамента? я бы эти письма быстро в спам направил бы:)

    Reply
  17. OrsoBear

    🙂 Знакомая тема.

    Есть у заказчиков простенький сервер, на котором памяти кот всплакнул.

    И есть любители открыть несколько баз на всякий случай, это утренняя процедура такая.

    Чем больше баз открыто, тем выше ощущение собственной значимости.

    Все работают в терминале на сервере, и каждое подключение основательно отъедает

    и без того небольшую память.

    Руководителя беспокоить не стали.

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

    Уважаемый, <РуководительПредприятия>, я — сотрудница отдела <НазваниеОтдела>

    <ФИОполностью> прошу отправить меня в отпуск без содержания. Я очень устала,

    нет сил даже уходя с работы выключать компьютер…

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

    в зависимости от количества распечаток.

    Сначала народ тупил, потом веселился, потом начал пускать в оборотки, потом эти распечатки стали всем надоедать.

    Хватило месяца.

    Reply
  18. O-Planet

    (16)

    4. Не пускать местных программистов в базу? это вообще меня выбесило. Людям нужна оперативная помощь, а не решение проблем в течении недели «по умному»

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

    (17) Вот! А в (16) господин — далеки от народа-с 🙂

    Reply
  19. vakham

    Надо настроить автоотрубание рук менеджерам.

    Reply
  20. ZOMI

    (18)

    Целыми днями онлайн 4 года работаете и в том числе Лена трудится, а бухги все местного программиста зовут и зовут?

    Reply
  21. didkovskij

    В первый раз слышу, чтобы от закрытия сессий база рухнула…. Сам обрываю сессии в скрипте перед бэкапом…

    Reply
  22. ne_en

    Решается подобная задача несколько иным способом. Никому ничего отсылать не нужно. Ябедничать ни на кого не надо. Никакого «аварийного» завершения.

    Встраивается система передачи сообщений. Некоторые сообщения при поступлении пользователю, производят с его клиентом какие-либо вещи. Например выход из базы с предложением пользователю сохранить не сохранённые объекты; или выход из базы без каких либо запросов пользователю. Завести некоего пользователя (например stopsystem), который при старте передаёт это сообщение всем активным пользователям. В планировщик задач сервера (ну или…) добавить запуск 1Ски от этого пользователя в полночь.

    (Ещё вместо сообщений, можно использовать встроенную систему Задач)

    Вот и всё. Бонусом имеем систему передачи сообщений между пользователями, в т.ч. и с прикреплёнными объектами (Типа: «посмотри и исправь, в этом документе сумма с оригиналом не сходится»). У меня такие системы работают очень давно, ещё со времён семёрки. Будет время, выделю в отдельные модули и опубликую.

    Reply
  23. ne_en

    (16) monkbest,

    4. Не пускать местных программистов в базу? это вообще меня выбесило. Людям нужна оперативная помощь, а не решение проблем в течении недели «по умному»

    Прогресс уже так далеко шагнул 🙂 , что уже не важно, где территориально находится программер. Пользуюсь Viber на телефоне и Skype на компе. В некоторых компаниях, некоторые сотрудники, общаясь со мной, даже не догадываются, что я нахожусь в семи часовых поясах от них. Это лишь мне неудобства доставляет, когда мне звонят в 4 утра с банальными вопросам.

    Reply
  24. Nikola23

    (13) Низкооплачиваемым. Задача менеджера — продавать или сопровождать клиента. Это не его головная боль — бэкапы.

    Примененное решение — плод больной фантазии «обычного программиста 1с», а не грамотного аналитика/внедренца, который должен работать с клиентом. Программистов до клиента допускать не положено.

    Правильное решение уже вроде написали, но я повторюсь:

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

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

    А еще ругаете местных программистов. Для начала, поработайте над собой.

    Reply
  25. Painted

    В бытность сисадмином делал следующим образом.

    Каждую ночь по расписанию составлялся список не выключенных компов

    net view >> list1.txt

    , утром список просматривал и особо злостных нарушителей добавлял во второй список list2.txt. Для этих по ночам срабатывала другая команда

    psshutdown.exe -f -s -u АдминДомена -p Пароль @list2.txt

    принудительное отключение компьютера

    Утилита psshutdown от Марка Русиновича. У него много чего интересного, рекомендую. ))

    Reply
  26. O-Planet

    (20) ZOMI,

    Так на то и бухи, чтобы тупить!

    Reply
  27. O-Planet

    (24) Мы — программисты 1С, не сисадмины. Не местные, аутсорсеры из Ульяновска. Сисадмин у них есть. Местный. Московский. И самое прикольное, это он поставил задачу нам решить вопрос с сессиями. Заметьте, автосохранение делали опять же, не мы, а местный кулибин. Если бы задачу поставили нам, то мы бы и решали, и учли бы все.

    Reply
  28. nickperel

    Проблема есть. Как аккуратно сделать бакап, перепровести документы, погонять иные всякие обработки, но кто-то работает или оставил сессию с открытыми окнами.

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

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

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

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

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

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

    Позитивные решения:

    — sql — сервер (все может — не всем доступен).

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

    Типовой механизм файловой из БСП не работает или работает плохо?

    Я слышу периодические жалобы — «зависание на утро» в залоченном виде. Оно вообще работает?

    22. ne_en 19.03.2015 08:35

    Решается подобная задача несколько иным способом. Никому ничего отсылать не нужно. Ябедничать ни на кого не надо. Никакого «аварийного» завершения.

    Встраивается система передачи сообщений.

    Самая хорошая идея. Есть здесь на infostart, готовое?

    Надо только придумать как сделать все внешней обработкой к типовым, не типовым, на 8.1, 8.2, 8.3. К тем, где нет системы сообщений.

    То есть вся система должна быть в обработке.

    Reply
  29. nickperel

    (13)

    Он никому ничего не должен. По крайней мере, он к этому стремиться. Даже не смотря что 1С и ее данные — это важно для кого-то.

    Reply
  30. nickperel

    (17) OrsoBear,

    Это незаконно и несерьезно.

    Reply
  31. BorovikSV

    (0) Сразу на ум приходит ситуация с японским поездом (из расследования катастроф). Машинист так переживал за то что два рейса назад его поезд опоздал по графику на две минуты, за что ему грозила «обучение» (где унижают), что в текущий рейс гнал на полную, думал об предстоящем кошмаре, не следил за дорогой, и не вписался в поворот……

    Грош цена таким ИТ «специалистам», которые из за открытых окошек не могут бэкап сделать. Благо и для клиент-серверной, и для файловой это возможно.

    Reply
  32. apostal86

    Надо сразу, чтобы заявление на увольнение составлялось в формате xls и pdf и директору на почту. Автоматически ставилась печать оргаинзации и подпись сотрудника подтягивалась на печатную форму.

    Reply
  33. (12) Yimaida,

    Как отключение сессии может «положить» базу?

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

    Вот так и тут…незнание клиентов, основная движущая сила для таких внедренцев))

    Reply
  34. O-Planet

    (33) 3 млн с появлением ЕГАИС? — нормально, если клиент — торговая сеть. Это примерно 50 наших касс, не считая работ по внедрению. Вы бдете смеяться. о местные им уже дважды (!) базу убили с момента написания этой статьи, пришлось восстанавливать.

    Reply
  35. vasja_yar

    (13) обработка чушь… как ваша фирма еще работает с такими идеями, в школу вас всех. Вместо того чтобы сделетать завершение сеансов в 12 ночи банальным скриптом, вы шлете что открыта 1С.

    Админы, где моно минусы поставить?

    Reply
  36. vasja_yar

    (34) С чего вы взяли что из за открытых сеансов? И как вы поняли что местные убили, а не ваши «чудо доработки в рабочей базе»?

    Reply
  37. user1145143

    Афтора встудию! у меня точно такие «аншлаги» в пятницу, и работает 1с круглосуточно ночные операторы, мне что теперь ночным сказать ребят я пока бекапы делаю а вы идите по гуляйте… Вообщем уточните какая программа бекапила и ваше мнение как это должно быть с учётом что баз много..

    Reply
  38. user1145143

    Ps аглавное афтор так ине ответил, точней ответил что а какая разница, чем он и как делал бекап, они назначили виновного и все… Вам бы заново написать новый пост а как делать бекапы… А это чушь скрипт, дайте директору просто возможность открыть диспетчер задач где он в момент увидит кто сидит сейчас на сервере. Мне больше понравилась идея в коментах с печать на принтере сообщений. Да никто никогда не заставит юзеров выключать компьютер, он просто скажет забыл или уважительные причины придумает, или сделает это специально. Главное специальные программы бекапа 1с рубят открытые сессии,как они это делают хардкорно или ласково?

    Reply
  39. O-Planet

    (38) Снова обнаружил, что живу с некоторыми 1С-никами на разных планетах. Вот буквально в декабре одна иностранная компания для российского офиса заказала учет рабочего времени сотров. Пришел — карточку на входе приложил, ушел — также приложил. Опоздал, переработал, не пошел на обед — все требовалось учитывать. И среди прочего было требование учитывать и то, выключил ли сотр рабочий компьютер в 18:30 или нет. И если выключил на 1 минуту позже или вообще забыл это сделать — отчет шефу и штраф.

    Reply
  40. O-Planet

    (31) Все мы умеем флудить и других оценивать. А вот когда касается дела — сливаемся легко. Это хорошо делать бэкап, когда полные права. А если дали удаленку с ограничением прав из-за соображений безопасности, тогда что? Мы, к примеру, сопровождаем один банк удаленно достаточно известный. Доступ дают, но только с конкретного IP с ограниченным набором прав. Хотя база серверная, к администрированию sql доступа у нас нет. Попробуйте бэкапить в таких условиях скриптами и с открытыми сессиями.

    Reply
  41. O-Planet

    (32) Да, думаю, сработает.

    Reply
  42. ne_en

    (28)

    Надо только придумать как сделать все внешней обработкой к типовым, не типовым, на 8.1, 8.2, 8.3. К тем, где нет системы сообщений.

    То есть вся система должна быть в обработке.

    Можно запускать 1С с вызовом внешней обработки (отправить сообщение) указав в командной строке. Однако сообщение нужно сохранить в системе (ну можно намутить файлы txt или dbf), и главное обработать получение. Для обработки потребуется менять ярлыки запуска 1С, чтоб запускалась обработка, прятать её форму, чтоб юзер не прибил её… Ну и т.д.

    Если кто всё это реализует таким образом, с удовольствием тоже буду пользоваться. Никак не найду время, чтоб самому сделать. У меня это всё в УТ, которая вся насквозь переписанная.

    Reply

Leave a Comment

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