Имя: Пароль:
1C
1С v8
Системное перепроведение документов
0 trv5
 
02.07.13
14:40
Попытаюсь обрисовать ситуацию.

Есть подписка на событие "ПередЗаписью" для определенного набора документов.
В обработчике устанавливается некий реквизит документа. При этом реквизит должен устанавливаться только если пользователь сам меняет документ.

Работает все отлично, но... есть групповое перепроведение документов.
Групповое перепроведение пользователи могут вызывать следующими способами:
1. через "групповое перепроведение документов"
2. меню "операции - проведение документов"

Для первого варианта решение следующее:
- Создал Параметры сеанса "СистемноеПерепроведение"
- В обработке ГрупповоеПерепроведениеДокументов параметр устанавливаю в Истина в начале выполнения, и в Ложь после окончания выполнения
- В подписке на событие проверяю значение ПараметрыСеанса.СистемноеПерепроведение, ну и соответственно понимаю что это, действие пользователя или перепроведение.

Работает отлично...
Но вот когда пользователь вызывает меню "операции - проведение документов" начинаются проблемы.
Данная штука встроена в саму платформу, а следовательно я не могу установить ПараметрыСеанса.СистемноеПерепроведение в Истину, ну и
соответственно в Подписке на события выполняется не совсем то что я хочу...

Может кто подскажет решение...
1 Maxus43
 
02.07.13
14:41
Из формы дока устанавливай ДополнительныеСвойства объекта. Будешь знать что это проведение из формы, т.е. интерактивно
2 trv5
 
02.07.13
14:55
(1) Дело в том что события формы ПередЗаписью и ПриЗаписи тоже вызываются с обработки
3 Maxus43
 
02.07.13
14:57
что? обработки не открывают формы, с чего они вызываются?
4 mikecool
 
02.07.13
14:58
(2) из обработки тоже можно допсвойства объекта установить
5 Maxus43
 
02.07.13
14:59
(4) Групповое перепроведение пользователи могут вызывать следующими способами:
1. через "групповое перепроведение документов"
2. меню "операции - проведение документов"

тут можно?
6 mikecool
 
02.07.13
15:00
(5) а тут допсвойство устанавливаться не будет, что будет признаком группового перепроведения
7 trv5
 
02.07.13
15:01
(3) Все разобрался, спасибо.
Только придется каждую форму править ((((
8 trv5
 
02.07.13
15:02
(6) правда и допсвойства в подписке на событие тоже не будет..
9 Maxus43
 
02.07.13
15:03
(8) будет, оно живёт на всю жизнь объекта
10 Maxus43
 
02.07.13
15:03
(7) ну ты же хочешь отловить именно интерактивное. А оно из форм
11 mikecool
 
02.07.13
15:06
(9) если его добавили
12 trv5
 
02.07.13
15:08
(10) А как ты предлагаешь добавить допсвойство?
13 Maxus43
 
02.07.13
15:09
в форме перед записью
ЭтотОбъект.ДополнительныеСвойства.Вставить("КривымиРучкамиЗаписываетЮзер")
14 trv5
 
02.07.13
15:12
(13) так я и говорю (7) придется КАЖДУЮ форму править...
В таком случае подписка на событие "ПередЗаписью" без смысленна, все равно надо каждый документ править...
15 Maxus43
 
02.07.13
15:13
(14) да. Интерактивное проведение не правя формы не отловишь.
А подписка имеет смысл чтобы не править модуль объекта, а только форму
16 trv5
 
02.07.13
15:15
(15) ну так с таким успехом нужный код можно вписать в ПередЗаписью модуля формы.
17 kosts
 
02.07.13
15:16
В форме вызывается куча общих модулей, посмотри, может какой вызывается для каждого документа, там и поставишь нужный флаг.
18 mikecool
 
02.07.13
15:17
(17) одна строка или кусок из 500 строк копировать - это одно и то же?
19 Maxus43
 
02.07.13
15:18
(16) можно.
Я просто говорю что невидать надёжного метода кроме этого.

З.ы. а встроенное в платформу "операции - проведение документов" - она на клиенте проводит или нет? если на сервере - опять же можно вычислить
20 Aprobator
 
02.07.13
15:18
(0) убрать меню операции нафиг )
21 Maxus43
 
02.07.13
15:19
кстати да, (17) прав. в ПриОткрытии вызывается куча процедур, там заполнить правилььно и всё
22 Defender aka LINN
 
02.07.13
15:27
(10) А если в форме списка?
23 Maxus43
 
02.07.13
15:27
(22) зачем всё портить то?
24 trv5
 
02.07.13
15:29
Шеф, все пропало )))))

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

Походу выхода нет.... придется из меню операции убирать перепроведение....
25 Defender aka LINN
 
02.07.13
15:39
(24) Потому что на самом деле не должно быть никакой разницы - как записывает документ.
26 Конфигуратор1с
 
02.07.13
15:40
(25) +1
27 Aprobator
 
02.07.13
15:41
Устанавливай реквизит в форме документа, событие ПередЗаписью.
28 Aprobator
 
02.07.13
15:42
вообще странная мода, менять реквизиты документа при его проведении.
29 mikecool
 
02.07.13
15:44
(25) тото везде отлуп в подписках на Загрузка = Истина
30 Конфигуратор1с
 
02.07.13
15:46
вообще задай пользователям в правах администрирование данных и системное перепроведение станет недоступным
31 Defender aka LINN
 
02.07.13
15:46
(29) Обмен - отдельная история
32 trv5
 
02.07.13
15:56
(25) (28) там реквизит ДатаМодификации используется для отслеживания изменений по документам для выгрузки в другую базу.
Вот только бухи минимум раз в неделю доки перепроводят, при этом могу провести и за пару месяцев.
При этом устанавливается ДатаМодификации и соответственно их типа надо выгружать...
а документов много, и в них то ниче не меняется...
Вот и хотелось бы эту ситуацию исключить...
33 Aprobator
 
02.07.13
16:00
(32) извращение. План обмена - раз и контроль при записи документа. Если Новый или объект был модифицирован - в обмен.
34 trv5
 
02.07.13
16:01
(33) базы мягко выражаясь АБСОЛЮТНО разные
35 Aprobator
 
02.07.13
16:03
(34) да какая разница? План обмена фиксирует какие объекты надо выгружать.
36 Aprobator
 
02.07.13
16:05
Чистишь его при удачной выгрузке. Как уж там контролируется прием данных - я хз.
37 trv5
 
02.07.13
16:07
(35) а как план обмена решит проблему с групповым перепроведением?
38 Aprobator
 
02.07.13
16:08
(37) а какая проблема то? Интересует же, чтобы в обмен попадали только измененные документы7 План обмена эту проблему решит. Что еще надо?
39 trv5
 
02.07.13
16:10
(38) При групповом перепроведении - они тоже попадут в обмен...
40 Aprobator
 
02.07.13
16:10
там правда, фиксацию то в плане обмена придется ручками прописать в данном случае. Автоматом то он там много лишнего пихать будет.
41 Aprobator
 
02.07.13
16:11
не ставь автоматическую фиксацию, а прописывай попадание в обмен, там где ты установку своего хитрого реквизита делаешь.
42 trv5
 
02.07.13
16:13
(41) )))))
так обратно же встанет вопрос...
А как узнать, это групповое перепроведение? или пользователь что-то сделал?
43 PCcomCat
 
02.07.13
16:13
(0) Может нужно проверять на то, открыта форма или нет, и в случае, когда форма открыта, менять то, что нужно?
44 Aprobator
 
02.07.13
16:15
(42) да какая фиг разница? Смысл - писать только если было изменение объекта. Если Объект.Модифицированность() тогда в обмен.
45 Конфигуратор1с
 
02.07.13
16:18
(42) так если идет групповое перепроведение то движения тоже меняются, не?
46 PCcomCat
 
02.07.13
16:19
(0) Что означает "пользователь сам меняет документ" с вашей точки зрения?
47 trv5
 
02.07.13
16:22
(44) Проверил... При проведении документа из "операции - Проведение документов" Объект.Модифицированность()тоже Истина
48 trv5
 
02.07.13
16:23
(46) редактирует, проводит, помечает на удаление, отменяет проведение и тд.
49 Конфигуратор1с
 
02.07.13
16:29
(48) ну так а групповое проведение чем лучше?
50 Конфигуратор1с
 
02.07.13
16:30
то есть если пользователь Вася пупкин наклепал сотню документов, потом понял что тупанул и забыл, что не тот склад надо было выбрать, открыл групповую обработку, поменял с помощью обработки все реквизиты и провел так же, то это не надо фиксировать?
51 PCcomCat
 
02.07.13
16:31
(48) на "помечает на удаление", "отменяет проведение" можно навесить автоматически изменение реквизита. А на проведение -  считаю, что есть необходимость изменять этот самый реквизит только, если форма открыта, а если из списка проводят, то как и при групповом перепроведении, никаких изменений не происходит.
52 Aprobator
 
02.07.13
16:32
(47) значит механизм придется делать чуть хитрее. Идею я дал - думай.
53 trv5
 
02.07.13
16:32
(50) эти действия он может сделать с помощью обработки "Групповая обработка справочников и документов" и там все фиксируется.
Речь идет о перепроведении документов с помощью "Операции - Проведение документов" а там менять реквизиты нельзя...
54 PCcomCat
 
02.07.13
16:33
(50) А вот про групповую обработку - это да!
55 Конфигуратор1с
 
02.07.13
16:33
(53) но движения документа то меняются при перепроведении
56 trv5
 
02.07.13
16:35
(55) движения документа в другой базе все равно свои, так что простое изменение движений мне не надо
57 PCcomCat
 
02.07.13
16:35
(55) Не считаю, что пользователь должен отвечать за движения.
58 Aprobator
 
02.07.13
16:35
(53) при проведении из операции Стек вызовов в отладчике что то показывает?
59 Конфигуратор1с
 
02.07.13
16:41
(56) ну так тогда раз перепроведение тебе не интересно, то ставишь проверку в обработчике при записи - если документ проведен и режим записи проведения тогда не фиксировать реквизит и все. В чес проблема?
60 trv5
 
02.07.13
16:43
(59) ))))
а если пользователь зашел в проведенный документ и например поменял количество?
61 Конфигуратор1с
 
02.07.13
16:44
(60) а если пользователь открыл документ в форме, и не меняя ничего нажал провести или записать?)
62 trv5
 
02.07.13
16:47
(61) ну если он так проведет 10 документов - это одно,
а если бухгалтер проведет обработкой 5 тысяч это совсем другое )))
63 PCcomCat
 
02.07.13
16:50
(61) Открыл, нажал кнопку - попался!
64 Конфигуратор1с
 
02.07.13
16:51
(62) ну вот. Тебе либо надо отслеживать изменение документов либо в форме при записи реквизит свой фиксируешь, а пометку на удаление и проведение непроведенного документа в обработчике события с проверкой как я сказал на проведен документ и все.
65 trv5
 
02.07.13
16:54
(64) в форме в событии ПриЗаписи нельзя, это противоречит (50) ))))
66 trv5
 
02.07.13
16:54
Лан, всем спасибо за участие...
вопрос снят...
67 PCcomCat
 
02.07.13
16:56
Есть еще вариант, только его нужно разобрать.
В общем идея такая: ПередЗаписью у тебя есть записываемый объект, у которого можно получить ссылку в базе, а из ссылки получить объект, записанный в базе; эти два объект и сравнить.
Как-то так.
68 PCcomCat
 
02.07.13
17:00
+(67) скорее сравнить данные записываемого объекта и ссылки.
69 hhhh
 
02.07.13
17:16
объекты могут быть одинаковые, а движения поменяются.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший