Имя: Пароль:
1C
1С v8
Не срабатывает "Отказ" в "ПередЗаписью" документа
,
0 daringer
 
12.02.15
17:22
Здравствуйте. Делаю в подписке на события проверку перед записью документа, получаю Отказ = Истина. После выхода из процедуры должна быть прекращена запись документа с ошибкой, но док. все равно записывается. Причем если записывать уже созданный документ, то все отрабатывает нормально. Кто сталкивался с такой проблемой?
1С:Предприятие 8.3 (8.3.5.1098)
1 ДенисЧ
 
12.02.15
17:25
Ещё одна подписка потом срабатывает, где сбрасывается этот флаг
2 daringer
 
12.02.15
17:27
Подписка где отказ = истина - последняя в списке, т.е. выполняется последней. Проверил подписки "ПриЗаписи", там  нигде флаг не сбрасывается. И вообще тогда и уже созданный объект тоже бы проводился
3 ShoGUN
 
12.02.15
17:29
(2) Порядок выполнения подписок - НЕ ОПРЕДЕЛЕН.
4 daringer
 
12.02.15
17:32
Вообще то ОПРЕДЕЛЕН. Подписки выполняются в порядке следования их в конфигураторе.
5 ShoGUN
 
12.02.15
17:33
(4) Ссылку, желательно на официальную документацию, а не на собственные измышления.
6 ДенисЧ
 
12.02.15
17:34
(4) Вообще-то НЕ определён. Нигде не декларируется их последовательность.
Если есть конфиденциальная информация - поделись
7 Goggy
 
12.02.15
17:35
Мне тоже было бы интересно узнать такое.
8 daringer
 
12.02.15
17:36
Нафиг тебе ссылка? Открой конфигуратор, сделай 2 подписки ПередЗаписью например и запиши документ.
9 ShoGUN
 
12.02.15
17:36
10 ShoGUN
 
12.02.15
17:37
(8) Только Шерлок Холмс мог правильно юзать дедуктивный метод. И то - не в 1С.
11 daringer
 
12.02.15
17:38
Я говорю не про "ПриУстановкеНовогоНомера срабатывает ПОСЛЕ ПриЗаписи" я говорю в разрезе одного события. Если у вас много подписок на событие "ПередЗаписью" на один документ, то они будут выполняться в порядке их следования.
12 hhhh
 
12.02.15
17:41
(11) ну и в чем вопрос? отладчиком фигачь пока не дойдешь до места, где Отказ = Ложь. А лучше сразу просмотреть те подписки, которые ваши г.нокодеры наваяли.
13 ShoGUN
 
12.02.15
17:41
(11) Почитай целиком. Порядок выполнения подписок на события - не определён. Об этом явно написано много где, и обычно об этом говорят на курсах.
Если ты в частном случае получил результат, который принял за истину - это твои персональные проблемы.
14 hhhh
 
12.02.15
17:43
(13) не, ну на практике действительно идет подряд. Я менял их местами, действительно порядок поменялся.
15 GROOVY
 
12.02.15
17:43
Порядок выполнения подписок на событие в рамках одного события объекта не определен. Об этом и на партнерских форумах неоднократно писали сами разработчики платформы и не на партнерских форумах кучу раз.
16 Гёдза
 
12.02.15
17:44
Порядок определен, но не зафиксирован
17 GROOVY
 
12.02.15
17:45
(14) Мы как-то поменяли язык интерфейса платформы и порядок вызова поменялся.
18 hhhh
 
12.02.15
17:46
(15) Попробуйте взять типовую любую и расположить в ней подписки в произвольном порядке.
19 ShoGUN
 
12.02.15
17:46
(14) Это верно только при неизменных прочих условиях.
20 daringer
 
12.02.15
17:49
Спор о порядке, а вопрос не решен.
21 ShoGUN
 
12.02.15
17:49
(20) Вопрос решается отладчиком.
22 ShoGUN
 
12.02.15
17:49
+(21) Поскольку чудес не бывает.
23 daringer
 
12.02.15
17:51
В общем есть подписки, в которых отказ переходит из одной в другую. Затем доходит до УстановитьПрефиксИнформационнойБазыИОрганизации(Источник, СтандартнаяОбработка, Префикс) - здесь видимо теряется значение "Отказ", далее ЗаписатьВерсиюОбъекта(Источник, Отказ) - здесь отказ уже ложь!
24 hhhh
 
12.02.15
17:54
поищите поиском по конфе

Отказ = Ложь
25 Dmitrii
 
гуру
12.02.15
17:55
(0) >> Делаю в подписке на события проверку перед записью документа, получаю Отказ = Истина.

Уверен, что получаешь? В отладке доходил до этой строчки кода?

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

Может ты проверяешь реквизиты не в объекте, а в базе данных?
Тогда всё сходится - при записи существующего документа в базе данных проверяемые реквизиты есть, а при записи нового документа в базе данных еще ничего нет и ты до строки Отказ=Истина не доходишь.
26 Dmitrii
 
гуру
12.02.15
17:58
У меня все мои обработчики подписок начинаются с кода

Если Отказ ИЛИ Источник.ОбменДанными.Загрузка Тогда
   Возврат;
КонецЕсли;
27 daringer
 
12.02.15
17:59
(26) У меня тоже.
28 daringer
 
12.02.15
18:00
Я полагаю, это связано с префиксацией. Уже записанные объект проходит проверку, т.к. не вызывается обработчик "ПриУстановкеНовогоНомера"
29 daringer
 
12.02.15
18:33
Верно ли что если среди последовательности выпроняющихся подписок на события, имеющих в составе параметр отказ выполняется событие, не имеющее этого параметра, то значение параметра слетает?
30 Гёдза
 
12.02.15
18:35
номер никак не влияет на отказ.
сделай замер и увидешь где меняется
31 daringer
 
13.02.15
08:56
Решил протестить. Создал документ, сделал 2 подписки на события "ПередЗаписью" и одну "ПриУстановкеНовогоНомера". В первом обработчике поставил Отказ = Истина. Значение Отказ передается в вторую подписку. Как бы все нормально. Но после того как отработало событие ПриУстановкеНовогоНомера, значение Отказ "слетает", док проводится.
32 daringer
 
13.02.15
09:13
Проверил на другой базе - там после отработки обработчика "ПередЗаписью" и подписок "ПерезЗаписью" сразу выдается ошибка проведения. У меня почему то ошибка не выдается, а продолжают отрабатывать следующие события.
33 hhhh
 
13.02.15
09:27
а после второй подписки, если нажимаешь в отладчике f11 сразу идет на ПриУстановкеНомера()
34 daringer
 
13.02.15
09:29
(33) Ну да, ПриУстановкеНомера вообще не должна отрабатываеть, т.к. перед записью был отказ = истина.
35 daringer
 
13.02.15
09:46
Походу с базой что то.
36 hhhh
 
13.02.15
09:47
тексты этих подписок можно посмотреть?
37 daringer
 
13.02.15
09:52
Там нет текста. Просто в первой подписке ПередЗаписью установил отказ = Истина. После отработки всех подписок ПередЗаписью запись должна быть прервана. но у меня она не прерывается. В ложь нигде не может устанавиваться, т.к. я создал новый документ и поставил на него 3 подписки.
38 hhhh
 
13.02.15
09:55
(37) не после всех, а на вторую подписку уже не должно входить. Посмотрите, может "отказ" по английски. Или Истина в кавычках. И почему маленькими буквами? Лучше возьмите и копипастом перенесите откуда нибудь.
39 daringer
 
13.02.15
10:10
" не после всех, а на вторую подписку уже не должно входить" - нет, на вторую подписку должно переходить, проверьте сами (в рамках одного события) Регистр не влияет. Все написано верно. В базе  наверно косяк, делаю тестирование и исправление, может поможет
40 hhhh
 
13.02.15
10:12
(39) а какая логика? Почему вдруг должно помочь тестирование и исправление?
41 daringer
 
13.02.15
10:16
Логики нет. Я просто не знаю что делать в такой ситуации
42 daringer
 
13.02.15
10:21
Таких проблем вообще никогда небыло, никогда не заморачивался. Ставил перед записью отказ = истина и все всегда отрабатывало. А тут вот заметил что перестало работать, причем именно в моей базе. Тестил в новой пустой базе -  все ок.
43 WF72
 
13.02.15
10:39
конфа случаем не на УФ?
44 daringer
 
13.02.15
10:40
УФ
45 hhhh
 
13.02.15
10:43
(42) но причина должна быть. Или есть еще подписки ПередЗаписью, про которые вы не знаете, или еще что-то.
46 daringer
 
13.02.15
10:45
О них невозможно не знать, я тестил на новом доке, сам создал подписки, ничего типового не использовал. Проверил поиском ссылок на объект(на всякий случай). Есть документ и 3 подписки. Все.
47 ktvladimir
 
13.02.15
10:46
судя по моей практике однотипыне подписки выполняются в порядке расположения их в конфигураторе. не знаю может и неопределен, но работает все время во всех конфигурациях в порядке следования их в конфигураторе
48 hhhh
 
13.02.15
10:47
(46) там в подписке может вообще написано быть "ДокументСсылка". То есть на все документы распространяется. Причем тут ваш поиск?
49 stonewolf
 
13.02.15
10:49
(0) Демоническое обновление + кэш?
50 daringer
 
13.02.15
10:50
(49) Походу да
51 stonewolf
 
13.02.15
10:53
(50) Видел забавный глюк, как после такого обновления пропадал код в обработках, которые никто не трогал. Конфигуратор показывает, что текста модуля нет. Чистим кэш - текст появляется, как у Амаяка Акопяна.
52 daringer
 
13.02.15
10:54
(48) Про ДокументОбъект не подумал, но врядли причина в этом. Т.к. есть 2 базы - рабочая клиент-серверная и локальная для разработки. В рабочей все норм работает, в "для разработки" глючит.
53 daringer
 
13.02.15
11:04
Щас кеш почищу, посмотрим
54 daringer
 
13.02.15
11:15
Не, чистка кеша не помогла.
55 hhhh
 
13.02.15
11:18
ну сделайте сравнение конфигураций, рабочей и тестовой
56 daringer
 
13.02.15
11:22
(55) Все короче. Я затупил конкретно. Вы все это время верно говорили. У меня была подписка на ДокументОбъект, где признак в ложь устанавливался. Спасибо!
57 ShoGUN
 
13.02.15
11:55
(56) Спорил ведь. Не верил.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан