gifts2017

К вопросу о регламентном задании – восстановлении последовательности

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

В связи с тем, что, когда передо мной стояла подобная задача, материала в интернете я нашел очень мало. Попытаюсь немного компенсировать этот пробел.
Заранее предупреждаю – информация для начинающих разработчиков :)

К вопросу о регламентном задании – восстановлении последовательности.
В связи с тем, что, когда передо мной стояла подобная задача, материала в интернете я нашел очень мало. Попытаюсь немного компенсировать этот пробел.
Заранее предупреждаю – информация для начинающих разработчиков :)
1. Необходимо создать в конфигурации модуль «ИмяМодуля», со флажками, как показано на рисунке.
 
2. Создадим процедуру, которая будет восстанавливать последовательность и писать сообщение в лог на диске.

	 Процедура РоботВосстановлениеПоследовательностей () Экспорт
   глТекущийПользователь = Справочники.Пользователи.НайтиПоНаименованию("Сис. админ");
   ПолныеПрава.УстановитьПараметрыСеанса();
   Док = Новый ТекстовыйДокумент;  
   Док.Вывод = ИспользованиеВывода.Разрешить;
   Док.ДобавитьСтроку("Вход в обработку: Восстановление последовательностей: " + ТекущаяДата());
   Док.ДобавитьСтроку("Текущее состояние: ");
   Док.ДобавитьСтроку("Точка актуальности: " + Последовательности.ПартионныйУчет.ПолучитьГраницу().Дата);
   Док.ДобавитьСтроку(Последовательности.ПартионныйУчет.ПолучитьГраницу().Ссылка);
   Попытка
       Последовательности.Восстановить();
       Док.ДобавитьСтроку("Обновлено состояние:");
       Док.ДобавитьСтроку("Точка актуальности: " + Последовательности.ПартионныйУчет.ПолучитьГраницу().Дата);
       Док.ДобавитьСтроку("Последний правильный документ: " + Последовательности.ПартионныйУчет.ПолучитьГраницу().Ссылка);
   Исключение
       Док.ДобавитьСтроку("Зафиксирована ошибка: " + ОписаниеОшибки() + Символы.ПС + "Возможно, в базе имеются работающие пользователи");
       Док.ДобавитьСтроку("--------------- users -------------------");
       МассивС = ПолучитьСоединенияИнформационнойБазы();
       Для Каждого тмп Из МассивС Цикл
           Док.ДобавитьСтроку(Строка(тмп.ИмяКомпьютера) + " | " +
           Строка(тмп.ИмяПриложения) + " | " +
           Строка(тмп.НачалоСеанса) + " | " +
           Строка(тмп.Пользователь.Имя) 
           );
       КонецЦикла;
   КонецПопытки; 
   Док.ДобавитьСтроку("--------------------------------------------------");
   Док.Записать("d:\sms_.txt", "windows-1251");
КонецПроцедуры 


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

3. Создаем в конфигурации новое регламентное задание и настраиваем его, в т.ч. указываем расписание выполнения данного регламентного задания.
 
4. При желании можно настроить отправку сообщения на почту администратору. Я это сделал на базе AutoMate, код скрипта очень прост (файл отправляется в виде вложения, сам скрипт собирается из шаблонов в течении минуты).  В результате на почту будем получать подобные файлы:

Вход в обработку: Восстановление последовательностей: 11.01.2009 4:00:07
Текущее состояние:
Точка актуальности: 01.01.2009 08:07:50
Реализация товаров и услуг 1/26077 от 01.01.2009 08:07:50
Обновлено состояние:
Точка актуальности: 10.01.2009 12:09:50
Последний правильный документ: Реализация товаров и услуг 1/26177 от 10.01.2009 12:09:50

 Обновлено: По поводу прав пользователя USR1CV81 нашел интересную информацию. (Может кому и пригодиться).

Безопасность каталога данных приложения
В каталоге данных приложения при установке кластера серверов 1С:Предприятия 8.1 создается специальный каталог, предназначенный только для файлов кластера серверов 1С:Предприятия:
Пользователю USR1CV81, от имени которого стартует по умолчанию агент сервера, назначаются полные права на этот каталог. Другим пользователям доступ в этот каталог запрещается. Запуск менеджера кластера выполняет агент сервера от имени того же самого пользователя, от которого запущен он сам.
Пользователь USR1CV81 обладает только одним правом – «Log on as service».
Запуск рабочих процессов также осуществляет агент сервера. По умолчанию рабочий процесс запускается от имени того пользователя, от которого запущен агент сервера. Однако предусмотрена возможность создания дополнительного пользователя операционной системы, от имени которого стартуют только рабочие процессы. Это позволяет предотвратить непосредственный доступ программного кода конфигураций к служебным данным.
Для того, чтобы рабочий процесс запускался не от имени того же пользователя, что и агент сервера, в каталоге данных приложений, относящемся к пользователю агента сервера, может быть размещен файл swpuser.ini следующего формата:
user=<имя пользователя операционной системы>
password=<пароль пользователя операционной системы>
Например, файл swpuser.ini может содержать следующие данные:
user=\\server_comp\uuuu
password=1234567
В этом случае рабочие процессы, запускаемые на данном рабочем сервере, будут запускаться от имени заданного пользователя (\\server_comp\uuuu), зарегистрированного в операционной системе.

 

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Сергей Ожерельев (Поручик) 23.06.09 01:00
я дeлaл пoдoбнoe для пapтионного учёта, нo c иcпoльзoвaниeм штaтныx пpoцeдуp УТ. лoг y мeня пишeтcя в жypнaл peгиcтpaции. выкладывать не стал, но если есть интерес.
2. Артур Аюханов (artbear) 23.06.09 08:19
(0) Лучше оформить в виде отдельного класса-обработки, в которой решать проблемы по выводу информации и т.п.
Например. вместо
Док.ДобавитьСтроку(Сообщение)
намного лучше будет смотреться вызов спец.метода
ВывестиСообщение(Сообщение)

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

У меня в подобных задачах юзается следующий интерфейс, т.е. методы типа
Инит
Сброс
ВывестиСообщение
ВывестиСостояние
ОсновнаяОбработка (или типа ВыполнитьВыгрузку_КокаКола, ВыполнитьВыгрузку_Мултон, ВыполнитьВыгрузку_Сладко, ВыполнитьВыгрузку_Лебедянь, Балтика и т.д. )
ПолучитьТекстЛог
3. Dmitry Dmitry (Dimasik2007) 23.06.09 09:14
(2) Разумеется. В рабочей конфигурации так и сделано. Это же, повторяю, был пример для начинающих разработчиков.
(1) Чем больше информации в открытом доступе, тем лучше. Сам я начинал с сборника ЕСИС, т.к. с работы доступ к интернету был очень ограничен. :)
4. Сергей Ожерельев (Поручик) 23.06.09 14:14
(3) Кстати, код процедуры лучше разукрась. Разукрашка для инфостарта здесь валяется.
5. Dmitry Dmitry (Dimasik2007) 23.06.09 14:55
(4) Да я бы разукрасил, тем более что саму "разукрашку" нашел. Но! Скачать не могу, лимит исчерпан :))) Так что завтра наверное :)
6. Артур Аюханов (artbear) 23.06.09 18:53
(3) Даже для начинающих разработчиков пример слишком уж упрощен :(
1. Сохранение данных в файл не лучший вариант.
а) В случае нескольких выполнений предыдущее содержание файла удалится.
б) У пользователя Винды, от чьего имени запускается и работает клиент-сервер, просто может не быть прав на каталог C:\ (при обычной установке 1С без доп.настройки прав прав на этот каталог не будет точно !! )

В итоге запись будет невозможна и задание просто не будет работать.

Я, например, на днях на подобное нарвался - у пользователя Usr1C81, под чьим именем работал сервер 1С, не было прав на каталог на сервере домена.

ИМХО журнал регистрации гарантированно лучше.

2. Для начинающих пользователей еще было очень полезно получить код по непосредственному запуску регламентного задания из клиентского кода, без ожидания срабатывания по расписанию, например, для отладки и/или проверки выполнения
Код
РЗ = РегламентныеЗадания.СоздатьРегламентноеЗадание(Метаданные.РегламентныеЗадания.артВыгрузкаКокаКола);
РЗ.Использование = Истина;
РЗ.Наименование = "Создали программно для немедленного запуска";
РЗ.Записать();
Показать полностью
7. Dmitry Dmitry (Dimasik2007) 23.06.09 20:28
(6) Чем больше информации в одном месте, тем лучше :) Опыт лишним не бывает. А что касается файла, то я его делал исходя из личного опыта, т.к. работаю по удаленке, и мне лучше посмотреть электроннку с очетом, который приходит каждое утро, чем лезть по удаленке, загружать базу, смотреть журнал регистрации и т.п.
8. gunslinger (gunslinger) 01.07.10 18:48
У меня выдает в текстовый файл
Ошибка при вызове метода контекста (Восстановить): Операция не выполнена!
Возможно, в базе имеются работающие пользователи

Хотя в базе никого нет