Двойной вызов процедуры ПередЗаписью() в модуле набора записей регистра сведений

1. s_lim 18.07.17 15:26 Сейчас в теме
Доброго времени суток!

Столкнулся сегодня с интересным явлением: на базе конфигурации ERP 2.2.3 (платформа 8.3.10.2252, файловый режим) создал свой регистр сведений (непериодический, независимый), в модуле набора записей данного регистра прописал свой код в обработчик ПередЗаписью(). При проверке путем ручного добавления/изменения записей регистра обнаружил, что, при интерактивном изменении записи, обработчик ПередЗаписью() вызывается дважды. При первом вызове процедуры параметр Замещение = Истина, а при втором - Ложь.
Кто сталкивался с таким эффектом может подсказать с чем это связано?
По теме из базы знаний
Найденные решения
2. r.moschenskiy 23 18.07.17 15:30 Сейчас в теме
РегистрСведенийМенеджерЗаписи

Описание:

Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
Necytij; neo-ti; Goggy; user1303515; user1776020; walp; CodeNull; SagittariusA; PEHATA; lnnr; sergpogo; +11 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. sergpogo 2 18.07.17 15:58 Сейчас в теме
2. r.moschenskiy 23 18.07.17 15:30 Сейчас в теме
РегистрСведенийМенеджерЗаписи

Описание:

Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
Necytij; neo-ti; Goggy; user1303515; user1776020; walp; CodeNull; SagittariusA; PEHATA; lnnr; sergpogo; +11 Ответить
5. KilloN 59 08.09.21 13:14 Сейчас в теме
(2) Более важный вопрос. Как понять будет ли использоваться 2 набора или 1 из самого менеджера?
6. Sashares 35 08.09.21 13:23 Сейчас в теме
(5)Зачем? Озвучьте задачу полностью.
7. KilloN 59 08.09.21 14:28 Сейчас в теме
(6)
Зачем? Озвучьте задачу полностью.


Есть обработчики, которые возникают при записи, и в случае удаления или корректировки данных происходит множество изменений, в зависимости от того удалена запись или нет.

Поэтому чтобы
1) Обработчики выполнялись 1 раз. В случае удаления сразу же, в случае перезаписи во 2-м (Уже +)
2) При 2-й записи данные уже не валидные, поскольку при очищении некорректно сработали обработчики.

Как было сказано, создается 2 набора, а это значит, что даже ДополнительныеСвойства нет возможности использовать
8. Sashares 35 08.09.21 14:36 Сейчас в теме
(7) Не очень понял проблему.
Но вы можете перед записью набора записей регистра сведений, сначала в соседнюю переменную выполнить чтение набора с таким же отбором и узнать, есть ли данные в регистре. Если есть, сначала явно записать пустой набор по данному отбору, а потом уже записать набор с данными.
9. KilloN 59 08.09.21 14:41 Сейчас в теме
(8)
Но вы можете перед записью набора записей регистра сведений, сначала в соседнюю переменную выполнить чтение набора с таким же отбором и узнать, есть ли данные в регистре. Если есть, сначала явно записать пустой набор по данному отбору, а потом уже записать набор с данными.


Проблема в том, что данные могут изменяться, путем записью наборов, а могут пользователи вручную.

Даже если, я подкорректирую форму, то не факт, что какой нибудь менеджер записи еще где нибудь прячется.

Просто хотел найти универсальное красивое решение
10. gustpa 12.08.22 08:21 Сейчас в теме
(8) Ситуация: перед записью нужно проверить некое условие (на отказ), которое зависит от записываемых данных. Если происходит добавление новых данных в регистр - обработка выполняется 1 раз - здесь доступ к записываемым данным есть - можно проверить условие. Если идет изменение данных, то новые данные появляются только во 2-й обработке - проверка должна быть здесь, в 1-й по-сути идет удаление старых данных - проверка здесь некорректна. Но при удалении данных - обработка происходит только 1 раз - и здесь уже нужна проверка. Вот и вопрос: как отличить запись пустого набора (Замещение=Истина) удаления данных от 1-й обработки изменения данных, чтобы не провести/провести проверку?
12. A84epH 05.09.23 17:39 Сейчас в теме
(10) Понимаю что вопрос старый, но тоже сейчас искал этот признак. Оставлю ответ тут, может кому-то пригодиться.

Помогла статья: ссылка

Суть в том, что ПередЗаписью можно сделать проверку и прокинуть допСвойство:
Если ЭтотОбъект.Количество() = 0 и ЭтотОбъект.Модифицированность() = Ложь Тогда
	ЭтотОбъект.ДополнительныеСвойства.Вставить("clear", Истина);
КонецЕсли;

А уже ПриЗаписи проверять:
Если ЭтотОбъект.ДополнительныеСвойства.Свойство("clear") Тогда
	//Что-то
КонецЕсли;
curdate; Egor_Bu4a; SagittariusA; link_l; +4 Ответить
3. s_lim 18.07.17 15:42 Сейчас в теме
Спасибо!
Стыдно, что сам не нашел это в синтакс-помощнике(
11. Zurfik 30.06.23 15:28 Сейчас в теме
(3) Чего тут стыдиться, если синтаксис помощник сделан как попало, зачастую без примеров и структура его максимально неудобная.
Оставьте свое сообщение

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