Имя: Пароль:
1C
1С v8
Как отловить факт выполнения регламентного задания?
0 suvolod
 
05.04.13
09:41
Клиент-сервер, есть несколько подписок на событие, запрещающие "обычным" юзерам изменять некоторые документы, служебные элементы справочников и т.д... Но хотелось бы добавить в исключения регламентное заданию, которое выполняет обмен со сторонней ИБ.

Если бы обмен был по COM, я мог бы в подписке написать следующее:
Если ПараметрыСеанса.ТекущийПользователь.Код <> "COM" ТОгда
Отказ = Истина;
КонецЕсли;

Но у регламентного задания нет параметровсеанса... тогда отловить тот факт, что объект изменяет именно мое РЗ?
1 Sammo
 
05.04.13
09:44
Например, регламентное выполняется на сервере.
Например, какой пользователь ставится при работе данного регламентного задания? (в параметры сеанса)
2 suvolod
 
05.04.13
09:49
(1) Твой комментарий непонятен.

При выполнении на сервере РЗ запускается от имени USR1CV82, но в режиме 1С пользователь (и его параметры) не определены. В списке Активные пользователи колонка Пользователь при выполненении РЗ пустая.
3 Maxus43
 
05.04.13
09:54
в доп свойства засунь "Это РЗ, мне можно"
4 Maxus43
 
05.04.13
09:56
в подписке пиши Если Источник.ДопослнительныеСвойства.Свойство("Это РЗ, мне можно") Тогда ...
5 suvolod
 
05.04.13
09:57
сейчас попробую.. спасибо
6 suvolod
 
05.04.13
10:09
Что-то не получается.. непонятно как подсунуть РЗ параметр. У меня РЗ предопределенное, обработчик - фция ВыполнитьОбменSМаркет() - без параметров.... куда/как зашить доп. свойство при вызове - не вижу...
7 Maxus43
 
05.04.13
10:10
(6) в объект доп свойство пиши, а не в само РЗ.
Объект.ДополнительныеСвойства.Вставить(...);
Объект.Записать()
8 Sammo
 
05.04.13
10:16
(2) Раз пользователь не заполнен - отлавливай при подписке, что ПараметрыСеанса.Пользователь пустой.
Но это не очень красиво, имхо.
Через консоль заданий можно установвить - под каким пользователем 1с будет запускаться регламентное задание (т.е. пользователя под которым будет все его действия писаться в журнал регистрации)
9 suvolod
 
05.04.13
10:17
(7) точно.. что-то я тупанул :).., РЗ как таковое здесь не при чем.
Но тогда не очень кашерно получается. У меня РЗ за раз обрабатывает до 100.000 объектов. Писать в каждое доп. параметр, только чтобы отловить его в подписке на событие, не слишком оптимально. Возьму на заметку, но пока подожду с реализацией. Спасибо
10 Sammo
 
05.04.13
10:18
+ классика - делать записи докуметов, справочников в режиме ОбменДанными.Загрузка = Истина и в подписках проверять на это.
11 Maxus43
 
05.04.13
10:19
(9) наоборот кошерно всё, подписка один фиг сработает на каждый твой док, на все 100000 объектов. Где преступление не пойму
12 Sammo
 
05.04.13
10:20
+10 важное замечание, в этом режиме невозжомжно проводить документы. Т.е. Док.записать(РежимЗаписи.Проведение) будет выпадать по ошибке.
Для этого делают экпортные функции СформироватьДвиженияРегистров.

(9) запись в режиме 10 получается немного быстрее, в том числе засчет отказа от некоторых подписок и проверок уникальности.
13 suvolod
 
05.04.13
10:21
(8, 10) Спасибо за подсказки. Про режим обмена данными знаю, но не очень его люблю. Чуть не доглядел - у тебя справочники с задублированными кодами могут появиться. Чисть их потом
14 Maxus43
 
05.04.13
10:21
(10) это хорошо, если не надо определять что именно рег задание делает это. возможно будет достаточно
15 suvolod
 
05.04.13
10:24
(11) Мое имхо - что фция добавления параметра к 100000 объектов все равно по ресурсам затратная. Тогда уж лучше регистр сведений с флагом какой-нибудь сделать. РЗ перед выполнением взводит его и пишет данные.. после снимает. Хотя в этом решении тоже не все кашерно - юзеры в момент, когда флаг взведен,  тоже могут что-то записать
16 Maxus43
 
05.04.13
10:25
(15) доп свойства работают очень быстро, и проверяются тоже. Они в базе не хранятся, живут только в процессе жизни самого объекта
17 suvolod
 
05.04.13
10:27
спасибо.. главное что узнал - напрямую факт изменения объекта РЗ не отследить, нужно писать костыть.. типа доп. параметра, который предложил предложил ув. Maxus43