Подписки на события. Как проконтролировать отказ

1. Zixxx 30.11.14 19:28 Сейчас в теме
Для справочника использую событие подписки "ПриЗаписи", в момент которого справочник переносится в удаленную базу с идентификатором текущей базы. Проблема заключается в том что в Модуле формы справочника если в событии "ПриЗаписи" не заполнен вес происходит Отказ = Истина и объект не записывается.

Из-за этого происходит дублирование справочников, так как обмен идет по уникальным идентификаторам.

Как решит этот момент, у кого какие мысли?
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Zixxx 30.11.14 20:20 Сейчас в теме
Собственно в событии ПриЗаписи есть уже ссылка следовательно и ID, событие ПриЗаписи в подписке выполняется первым, событие ПриЗаписи в модуле формы выполняется вторым и отменяет запись объекта.
3. THXO 30.11.14 20:27 Сейчас в теме
ПередЗаписью(), СсылкаНового(), Объект.ДополнительныеСвойства.Вставить("АЕслиОткатить","Ога")

что-то из этого неказистого списка должно решить проблему
5. Zixxx 30.11.14 20:39 Сейчас в теме
(3) THXO, Нет, из предложенного ничего не поможет

1. Перед записью вызывается до При записи
2. Ссылка нового ввиду имелось ввиду установить, но не имеет никакого смысла
3. Дополнительные свойства также ничего не решат

Так как есть некий порядок который я указал в (2)

Есть дурацкий совсем вариант в подписке ПриЗаписи помещать ссылку в регистр сведений, а по этому регистру идти регламентным заданием, смысл регламентного задания перезаписать объект, если успешно перезаписан тогда указываем статус обработан. Все что обработано уйдет в обмен, то что не обработано просто исчезнет из базы само собой по правилу описанному в (2)
4. THXO 30.11.14 20:33 Сейчас в теме
можно так

Объект.ДополнительныеСвойства.Вставить("МодульПодпискиУспех","Ога")
Объект.ДополнительныеСвойства.Вставить("МодульФормыУспех","НеЗнаюНеБылоЯТамаПрограммноШпилю")
Объект.ДополнительныеСвойства.Вставить("МодульФормыУспех","ОгаЯТутаБылоВсеОк")

и далее шаманство с кейсами и значениями свойств, можно с уидами конеш

Если Объект.ДополнительныеСвойства.МодульФормыУспех = "ОгаЯТутаБылоВсеОк" И 
Объект.ДополнительныеСвойства.МодульФормыУспех = "Ога"
....


такой стиль изложения понятнее, хотя и вальяжный, я в курсе)
6. THXO 30.11.14 20:46 Сейчас в теме
что мешает помещать ссылку в доп. свойства объекта во всех вариантах ПриЗаписи(): подписчик, модуль объекта, модуль формы и во всех проверять валидность этого свойства на существование объекта, т.е. если уже создан не откатывать?
7. Zixxx 30.11.14 20:52 Сейчас в теме
(6) THXO, В том то и дело что объект будет существовать, а после события ПриЗаписи в модуле форму он просто исчезнет. Советую внимательно перечитать (2) и попробовать самому. Причина почему нельзя что-то вставить во все модули во все формы очень проста, во первых это не правильный подход, во вторых обмен станет не надежным, после того как кто-то решит для новой формы возвести отказ в истина.
8. THXO 30.11.14 21:15 Сейчас в теме
делать ставку на события формы в любом случае абсурдно

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

думать за час до зимы тжело, согласен. будем ждать утра
9. Zixxx 30.11.14 21:22 Сейчас в теме
(8) THXO, Как раз на события формы я ставку и не делаю, так было до меня, и может повториться. Нужно понять есть какой-нибудь метод чтобы такие события предотвратить. Я нашел один и описал его в (5). Других вариантов похоже что нет
10. Zixxx 30.11.14 21:27 Сейчас в теме
С планами обмена та же песня. Предположим что пользователю при записи система выдала предупреждение, если он ответит нет будет Отказ = Истина. Пользователь получил предупреждение и пошел по своим делам. В этот момент происходит чтение изменений для РБД и записи улетают в другую базу. Пользователь приходит и нажимает "нет". Получаем ситуацию когда в источнике нет данных а в приемнике есть.
11. Zixxx 30.11.14 21:31 Сейчас в теме
Еще раз повторюсь, что для меня проблема если какой-то программист напишет в модуле формы Отказ = Истина, тогда у меня будут дубли, а так как обмен в реальном времени и 1с не поддерживает распределенные транзакции, то становиться печально. Причем дубли уже выявились на этапе тестирования.
12. Zixxx 30.11.14 21:40 Сейчас в теме
Получаем следующее... При использовании обменов данными не рекомендуется использовать в событии МФ ПриЗаписи Отказ = Истина.

А в каких ситуациях бывает потребность сделать отказ при записи а не перед записью?
13. WaReZ_MEN 07.05.21 14:57 Сейчас в теме
Доброго дня!. Вот прошло много лет а проблема не решена сталкивался с схожей задачей. Нашли какое то решение или может по другому все сделали?
14. Zixxx 07.05.21 15:09 Сейчас в теме
(13) Что-то хитрого не стали придумывать, просто все перепроверили чтобы при записи никто не писал отказов. Редко но иногда приходиться сталкиваться с такими ошибками
15. WaReZ_MEN 07.05.21 16:14 Сейчас в теме
(14) ясно не мой вариант. Буду думать дальше. Спасибо.
16. herfis 498 07.05.21 17:19 Сейчас в теме
(15) У вас тоже обычные формы до сих пор, что ли? Ну тогда действительно самое простое не отказываться в форме в ПриЗаписи().
Либо отказываться от синхронной отправки данных и работать через планы обмена.
17. Zixxx 07.05.21 18:34 Сейчас в теме
(15) А зачем при записи делать отказ?
18. WaReZ_MEN 11.05.21 08:10 Сейчас в теме
(17) Это надо у разработчиков спросить зачем и где они его наставили. Сроки поджимают по этому искать все места нет времени...
19. Zixxx 11.05.21 12:01 Сейчас в теме
(18) Если нет возможность изменить события, то можно попробовать при выборке изменений получать только те у которых ссылка не битая
20. SlavaKron 11.05.21 13:08 Сейчас в теме
(19) Так в ПриЗаписи объект уже записан в базу, ссылка не будет битой.
21. Zixxx 11.05.21 15:09 Сейчас в теме
(20) Немного не так. Он там записан на время выполнения процедуры и может быть удален непосредственно если будет отказ. В этот же момент идет регистрация изменений. Далее происходит отказ и объект удаляется из базы, а в регистрации изменений остается битая ссылка.
22. FatPanzer 11.05.21 15:43 Сейчас в теме
(21) Контролировать Отказ после записи - это извращение.
23. Zixxx 11.05.21 20:57 Сейчас в теме
(22) Да, про это и идет речь, и непонятно зачем вообще разработчики 1с дали такую возможность.
24. FatPanzer 11.05.21 21:10 Сейчас в теме
(23) Для того, чтобы иметь возможность откатывать транзакции.
Может я неправильно выразился - я имел ввиду, что логика вашего решения - извращена. Вероятнее всего необходимо записывать документ в режиме обмена данными. А после окончания всех контроле запускать процедуру регистрации объектов в планах обмена.
25. Zixxx 11.05.21 23:59 Сейчас в теме
(24) Напомните, какое именно у меня решение? Да и логика решения совершенно не моя. Причем тут после записи, если вопрос при записи.
26. FatPanzer 12.05.21 07:00 Сейчас в теме
(25)
Напомните, какое именно у меня решение?
Например - контроллить Отказ и непосредственно удалять объект уже после того, как объект записан в БД, и начались связанные действия. Непосредственное удаление - вообще зло.
(25)
Да и логика решения совершенно не моя.
Ну так сделайте свою, нормальную.
27. Zixxx 12.05.21 11:04 Сейчас в теме
(26) Ты неправильно понял. Это не мое решение, мне не нужно было это контролировать и это никак не решается. Я столкнулся с этим в чужой самописной где были зарегистрированы такие ошибки. Причина их была в Отказ = Истина в событии ПриЗаписи. При использовании планов обмена не должно быть отказа при записи иначе будут битые ссылки. Просто перенесли проверки в событие ПередЗапиью.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот