Не срабатывает "Отказ" в "ПередЗаписью" документа #733951


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

В этой группе 1С