Пятница — лучший день для аншлагов по 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;
Если ЕстьВложение Тогда
СтруктураНовогоПисьма.СписокФайловВложений = СтруктураВложений;
КонецЕсли;
СтруктураНовогоПисьма.Тема = Тема;
СтруктураНовогоПисьма.Кому = СписокАдресов;
СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма, , , , , , , ЛОЖЬ);
Получатели_ = "";
Для каждого Адрес из СписокАдресов Цикл
Получатели_ = Получатели_ + Адрес.Значение + "; ";
КонецЦикла;
Возврат СтруктураПисьма;
КонецФункции
Но качать все равно придется!
… или самим лепить общий макет «АктивныеПользователи» 😉
Это всё от лени. Мог бы и без общего макета, просто через область слепить. Или через построитель+тз и вывести.
ЗЫ: а так, всё это решается административными мерами, на крайняк, объектами групповой политики.
И забивать почту директора ненужным спамом, моветон.
Зачем все так сложно, если Вашему директору заняться не чем, научите его в танки лучше играть ))
При выходе из базы пихаем в систему СКД флажок «нет препятствий для покидания работником пределов офиса». и все… 😉
А можно сделать обработку, которая бы отслеживала людей, которые не смывают за собой в туалете, и отправляла на почту директору?
Молодец, хорошая идея!
А чего чисто админскую задачу решать через 1С?
Например строчкой
получаем список пользователей, не закрывших терминальные сессии (за исключением vasya и petya) в файле userslist.txt
А вот так
получаем в файле userslist.txt логины пользователей, у которых запущена 1С
я не понял почему не наказан какой-то местный программист 🙁
База могла рухнуть если какие-то неместные программисты чего-то наковыряли удаленно. Требую всестороннего расследования!)
(8) Нифкоим_случае!!! Мы им базу уже 4 года от мефтных программастеров оберегаем и всячески спасаем. Но тут руководство поменялось, и местные снова просочились род шумок…
Девчонка оказывается не только красивая, но ещё и умная.
Прикольная штука конечно, но вот если бы кроме сообщения она бы ещё автоматически закрывала бы сессию, то было бы ещё круче!!!
Вводная совсем отсутствует. Какая база? Чем делался бэкап? Делался ли бэкап средствами сервера БД? Как отрубались сессии? Как отключение сессии может «положить» базу?
Может использовался какой-то известный софт, который любят ставить те же админы, так лучше сразу указать что зафиксированы проблемы.
И еще, директору в 5 ч. утра приходит письмо что бэкап мол не может отработать, т.к. Ина, Марина и Оля «сидят» в 1с. Директор, конечно же, быстренько всех обзванивает, чтобы закрыли 1с, т.к. нет возможности сделать бэкап. И в конце письма лучше инструкцию приложить как отрубать правильно сеансы, чтобы не положить базу (предполагаю, что это будет типа: «На компьютере Марины закрыть все окна 1с…»)
(12) Все не так. Про то, чем бэкапилось — не знаем действительно, что-то даже и не поинтересовались. А оно нужно? И в 5 часов ни кто никого обзванивать не будет. Но если менеджер оставил открытую сессию на ночь, а сам спит, то, проснувшись, он должен стать низкооплачиваемым менеджером.
(4) AlX0id,
Да. Можно. Только будет работать по-другому. Утром при включении компа — БАЦ! Синий экран и текст
*** Error hook up because
ЕСЛИ ТЫ НА**АЛ, ЗАРАЗА,
ДЕРНИ РУЧКУ УНИТАЗА!
ЕСЛИ РУЧКИ НЕТУ ТОЙ —
ПРОТОЛКНИ ГО**О РУКОЙ!
(13) именно все не так.. (это был стеб). Все должно быть не так. Главное в этой истории, что нет рабочего бэкапа. Административный ресурс не решит проблему бэкапа. Менеджеру проще будет уволиться чем восстанавливать базу за 3-5 лет. Гораздо ценнее была бы обработка по архивированию базы с отключением юзеров и т.п., всеми возможными способами (средствами SQL, выгрузка dt, копирование в сеть, периодически тестить бэкапы).
Вроде интересный рассказ, но что-то прям перекореживает на поворчать:) Видимо встал не с той ноги
1. от отключения сессий базы не падают
2. Бэкап должен делаться при любом раскладе, оставшиеся сеансы — не повод остаться без копии базы.
3. Понижать менеджера по чему-либо за незакрытые окна… ну извините, его труд надо оценивать не по умению окошки закрывать, а по, наверное, другим навыкам.
4. Не пускать местных программистов в базу? это вообще меня выбесило. Людям нужна оперативная помощь, а не решение проблем в течении недели «по умному»
5. ябедничать каждую ночь руководству, что кто-то не закрыл окно 1С? там реальной работы нет что ли у директора департамента? я бы эти письма быстро в спам направил бы:)
🙂 Знакомая тема.
Есть у заказчиков простенький сервер, на котором памяти кот всплакнул.
И есть любители открыть несколько баз на всякий случай, это утренняя процедура такая.
Чем больше баз открыто, тем выше ощущение собственной значимости.
Все работают в терминале на сервере, и каждое подключение основательно отъедает
и без того небольшую память.
Руководителя беспокоить не стали.
Отправляли на принтер раз в ночь служебную записку.
Уважаемый, <РуководительПредприятия>, я — сотрудница отдела <НазваниеОтдела>
<ФИОполностью> прошу отправить меня в отпуск без содержания. Я очень устала,
нет сил даже уходя с работы выключать компьютер…
Варианты были от курсов повышения зарплаты до увольнения по собственному желанию,
в зависимости от количества распечаток.
Сначала народ тупил, потом веселился, потом начал пускать в оборотки, потом эти распечатки стали всем надоедать.
Хватило месяца.
(16)
Ну вот с этим не согласен. Нас разделяет 900 км, но мы реагируем оперативнее, потому что весь день с ними онлайн работаем. В частности, как раз Лена. Это онлайн сопровождение (вопросы-ответы-помощь) + разные доработки по хотелкам.
(17) Вот! А в (16) господин — далеки от народа-с 🙂
Надо настроить автоотрубание рук менеджерам.
(18)
Целыми днями онлайн 4 года работаете и в том числе Лена трудится, а бухги все местного программиста зовут и зовут?
В первый раз слышу, чтобы от закрытия сессий база рухнула…. Сам обрываю сессии в скрипте перед бэкапом…
Решается подобная задача несколько иным способом. Никому ничего отсылать не нужно. Ябедничать ни на кого не надо. Никакого «аварийного» завершения.
Встраивается система передачи сообщений. Некоторые сообщения при поступлении пользователю, производят с его клиентом какие-либо вещи. Например выход из базы с предложением пользователю сохранить не сохранённые объекты; или выход из базы без каких либо запросов пользователю. Завести некоего пользователя (например stopsystem), который при старте передаёт это сообщение всем активным пользователям. В планировщик задач сервера (ну или…) добавить запуск 1Ски от этого пользователя в полночь.
(Ещё вместо сообщений, можно использовать встроенную систему Задач)
Вот и всё. Бонусом имеем систему передачи сообщений между пользователями, в т.ч. и с прикреплёнными объектами (Типа: «посмотри и исправь, в этом документе сумма с оригиналом не сходится»). У меня такие системы работают очень давно, ещё со времён семёрки. Будет время, выделю в отдельные модули и опубликую.
(16) monkbest,
Прогресс уже так далеко шагнул 🙂 , что уже не важно, где территориально находится программер. Пользуюсь Viber на телефоне и Skype на компе. В некоторых компаниях, некоторые сотрудники, общаясь со мной, даже не догадываются, что я нахожусь в семи часовых поясах от них. Это лишь мне неудобства доставляет, когда мне звонят в 4 утра с банальными вопросам.
(13) Низкооплачиваемым. Задача менеджера — продавать или сопровождать клиента. Это не его головная боль — бэкапы.
Примененное решение — плод больной фантазии «обычного программиста 1с», а не грамотного аналитика/внедренца, который должен работать с клиентом. Программистов до клиента допускать не положено.
Правильное решение уже вроде написали, но я повторюсь:
Бэкап должен был быть настроен силами админов, средствами СУБД, что бы открытые сеансы ничему не мешали. На крайний случай, силами тех же админов, должно быть настроено завершение терминальных сессий по ночам или по таймауту.
А кто даст все эти рекомендации админу? Внедренец.
А еще ругаете местных программистов. Для начала, поработайте над собой.
В бытность сисадмином делал следующим образом.
Каждую ночь по расписанию составлялся список не выключенных компов
, утром список просматривал и особо злостных нарушителей добавлял во второй список list2.txt. Для этих по ночам срабатывала другая команда
принудительное отключение компьютера
Утилита psshutdown от Марка Русиновича. У него много чего интересного, рекомендую. ))
(20) ZOMI,
Так на то и бухи, чтобы тупить!
(24) Мы — программисты 1С, не сисадмины. Не местные, аутсорсеры из Ульяновска. Сисадмин у них есть. Местный. Московский. И самое прикольное, это он поставил задачу нам решить вопрос с сессиями. Заметьте, автосохранение делали опять же, не мы, а местный кулибин. Если бы задачу поставили нам, то мы бы и решали, и учли бы все.
Проблема есть. Как аккуратно сделать бакап, перепровести документы, погонять иные всякие обработки, но кто-то работает или оставил сессию с открытыми окнами.
Итого. Что делать то?
Не позитивная ерунда:
— письма директору . Не понятно, что он должен делать при получении письма. Заявлять в прокуратуру? Ущемлять кого-то деньгами? Вообще говоря есть у нас конституция и кодекс о труде. Только в соответствии с ними можно приставать к людям с чем-то. Можно, конечно , вменять в обязанности и вписать в договор и потом контролировать, собирать объяснительные с тех кто не смог закрыть по объективным причинам. Короче ерунда полная.
— прибивать процессы и сессии пользователей. Они могут работать в разное время, из разных часовых поясов и из других мест планеты И вообще не с той базой, которую планируется бакапить.
— принудительный сброс соединений к файл серверу или соединений sql — сервера.
— иные способы «автоотрубания рук менеджерам». И другие глупые способы инфантильных программистов. Достигнутый эффект приведет к автоотрубанию головы программиста или посылания подрядчика-1с ника. Вообще вся административная борьба — ерунда.
Позитивные решения:
— sql — сервер (все может — не всем доступен).
Файловая база.
Типовой механизм файловой из БСП не работает или работает плохо?
Я слышу периодические жалобы — «зависание на утро» в залоченном виде. Оно вообще работает?
Решается подобная задача несколько иным способом. Никому ничего отсылать не нужно. Ябедничать ни на кого не надо. Никакого «аварийного» завершения.
Встраивается система передачи сообщений.
Самая хорошая идея. Есть здесь на infostart, готовое?
Надо только придумать как сделать все внешней обработкой к типовым, не типовым, на 8.1, 8.2, 8.3. К тем, где нет системы сообщений.
То есть вся система должна быть в обработке.
(13)
Он никому ничего не должен. По крайней мере, он к этому стремиться. Даже не смотря что 1С и ее данные — это важно для кого-то.
(17) OrsoBear,
Это незаконно и несерьезно.
(0) Сразу на ум приходит ситуация с японским поездом (из расследования катастроф). Машинист так переживал за то что два рейса назад его поезд опоздал по графику на две минуты, за что ему грозила «обучение» (где унижают), что в текущий рейс гнал на полную, думал об предстоящем кошмаре, не следил за дорогой, и не вписался в поворот……
Грош цена таким ИТ «специалистам», которые из за открытых окошек не могут бэкап сделать. Благо и для клиент-серверной, и для файловой это возможно.
Надо сразу, чтобы заявление на увольнение составлялось в формате xls и pdf и директору на почту. Автоматически ставилась печать оргаинзации и подпись сотрудника подтягивалась на печатную форму.
(12) Yimaida,
Вы будете смеяться но я сегодня услышал более интересную новость, моему клиенту предлагают в связи с появлением ЕГАИС 3 млн. расходов на оборудование. Долго смеялся)
Вот так и тут…незнание клиентов, основная движущая сила для таких внедренцев))
(33) 3 млн с появлением ЕГАИС? — нормально, если клиент — торговая сеть. Это примерно 50 наших касс, не считая работ по внедрению. Вы бдете смеяться. о местные им уже дважды (!) базу убили с момента написания этой статьи, пришлось восстанавливать.
(13) обработка чушь… как ваша фирма еще работает с такими идеями, в школу вас всех. Вместо того чтобы сделетать завершение сеансов в 12 ночи банальным скриптом, вы шлете что открыта 1С.
Админы, где моно минусы поставить?
(34) С чего вы взяли что из за открытых сеансов? И как вы поняли что местные убили, а не ваши «чудо доработки в рабочей базе»?
Афтора встудию! у меня точно такие «аншлаги» в пятницу, и работает 1с круглосуточно ночные операторы, мне что теперь ночным сказать ребят я пока бекапы делаю а вы идите по гуляйте… Вообщем уточните какая программа бекапила и ваше мнение как это должно быть с учётом что баз много..
Ps аглавное афтор так ине ответил, точней ответил что а какая разница, чем он и как делал бекап, они назначили виновного и все… Вам бы заново написать новый пост а как делать бекапы… А это чушь скрипт, дайте директору просто возможность открыть диспетчер задач где он в момент увидит кто сидит сейчас на сервере. Мне больше понравилась идея в коментах с печать на принтере сообщений. Да никто никогда не заставит юзеров выключать компьютер, он просто скажет забыл или уважительные причины придумает, или сделает это специально. Главное специальные программы бекапа 1с рубят открытые сессии,как они это делают хардкорно или ласково?
(38) Снова обнаружил, что живу с некоторыми 1С-никами на разных планетах. Вот буквально в декабре одна иностранная компания для российского офиса заказала учет рабочего времени сотров. Пришел — карточку на входе приложил, ушел — также приложил. Опоздал, переработал, не пошел на обед — все требовалось учитывать. И среди прочего было требование учитывать и то, выключил ли сотр рабочий компьютер в 18:30 или нет. И если выключил на 1 минуту позже или вообще забыл это сделать — отчет шефу и штраф.
(31) Все мы умеем флудить и других оценивать. А вот когда касается дела — сливаемся легко. Это хорошо делать бэкап, когда полные права. А если дали удаленку с ограничением прав из-за соображений безопасности, тогда что? Мы, к примеру, сопровождаем один банк удаленно достаточно известный. Доступ дают, но только с конкретного IP с ограниченным набором прав. Хотя база серверная, к администрированию sql доступа у нас нет. Попробуйте бэкапить в таких условиях скриптами и с открытыми сессиями.
(32) Да, думаю, сработает.
(28)
То есть вся система должна быть в обработке.
Можно запускать 1С с вызовом внешней обработки (отправить сообщение) указав в командной строке. Однако сообщение нужно сохранить в системе (ну можно намутить файлы txt или dbf), и главное обработать получение. Для обработки потребуется менять ярлыки запуска 1С, чтоб запускалась обработка, прятать её форму, чтоб юзер не прибил её… Ну и т.д.
Если кто всё это реализует таким образом, с удовольствием тоже буду пользоваться. Никак не найду время, чтоб самому сделать. У меня это всё в УТ, которая вся насквозь переписанная.