Столкнулся сегодня с интересным явлением: на базе конфигурации ERP 2.2.3 (платформа 8.3.10.2252, файловый режим) создал свой регистр сведений (непериодический, независимый), в модуле набора записей данного регистра прописал свой код в обработчик ПередЗаписью(). При проверке путем ручного добавления/изменения записей регистра обнаружил, что, при интерактивном изменении записи, обработчик ПередЗаписью() вызывается дважды. При первом вызове процедуры параметр Замещение = Истина, а при втором - Ложь.
Кто сталкивался с таким эффектом может подсказать с чем это связано?
Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
Есть обработчики, которые возникают при записи, и в случае удаления или корректировки данных происходит множество изменений, в зависимости от того удалена запись или нет.
Поэтому чтобы
1) Обработчики выполнялись 1 раз. В случае удаления сразу же, в случае перезаписи во 2-м (Уже +)
2) При 2-й записи данные уже не валидные, поскольку при очищении некорректно сработали обработчики.
Как было сказано, создается 2 набора, а это значит, что даже ДополнительныеСвойства нет возможности использовать
(7) Не очень понял проблему.
Но вы можете перед записью набора записей регистра сведений, сначала в соседнюю переменную выполнить чтение набора с таким же отбором и узнать, есть ли данные в регистре. Если есть, сначала явно записать пустой набор по данному отбору, а потом уже записать набор с данными.
Но вы можете перед записью набора записей регистра сведений, сначала в соседнюю переменную выполнить чтение набора с таким же отбором и узнать, есть ли данные в регистре. Если есть, сначала явно записать пустой набор по данному отбору, а потом уже записать набор с данными.
Проблема в том, что данные могут изменяться, путем записью наборов, а могут пользователи вручную.
Даже если, я подкорректирую форму, то не факт, что какой нибудь менеджер записи еще где нибудь прячется.
(8) Ситуация: перед записью нужно проверить некое условие (на отказ), которое зависит от записываемых данных. Если происходит добавление новых данных в регистр - обработка выполняется 1 раз - здесь доступ к записываемым данным есть - можно проверить условие. Если идет изменение данных, то новые данные появляются только во 2-й обработке - проверка должна быть здесь, в 1-й по-сути идет удаление старых данных - проверка здесь некорректна. Но при удалении данных - обработка происходит только 1 раз - и здесь уже нужна проверка. Вот и вопрос: как отличить запись пустого набора (Замещение=Истина) удаления данных от 1-й обработки изменения данных, чтобы не провести/провести проверку?
Суть в том, что ПередЗаписью можно сделать проверку и прокинуть допСвойство:
Если ЭтотОбъект.Количество() = 0 и ЭтотОбъект.Модифицированность() = Ложь Тогда
ЭтотОбъект.ДополнительныеСвойства.Вставить("clear", Истина);
КонецЕсли;
А уже ПриЗаписи проверять:
Если ЭтотОбъект.ДополнительныеСвойства.Свойство("clear") Тогда
//Что-то
КонецЕсли;