Доброго времени суток!

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

Описание:

Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
---
Смирись с этим.
---
РегистрСведенийМенеджерЗаписи

Описание:

Позволяет читать, записывать и удалять отдельную запись регистра сведений. Используется только для регистров сведений, неизменяемых регистраторами, т.е. для которых в Конфигураторе установлен режим записи "Независимый".
Предназначен для интерактивной работы с записью регистра сведений.
Доступ (чтение и запись) к записям регистра сведений производится объектом РегистрСведенийНаборЗаписей.<Имя регистра сведений> на системном уровне. При этом, в общем случае, используются два набора записей: один предназначен для удаления "старой" записи, другой - для записи данных, определенных менеджером записи. Это проявляется, например, в том, что при выполнении записи могут дважды вызываться события ПередЗаписью и ПриЗаписи объекта РегистрСведенийНаборЗаписей.<Имя регистра сведений>, сначала для пустого набора записей удаляющего "старую" запись, а затем для набора записей с новыми данными.
---
Более важный вопрос. Как понять будет ли использоваться 2 набора или 1 из самого менеджера?
---
Зачем? Озвучьте задачу полностью.
---
Зачем? Озвучьте задачу полностью.

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

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

Как было сказано, создается 2 набора, а это значит, что даже ДополнительныеСвойства нет возможности использовать
---
Не очень понял проблему.
Но вы можете перед записью набора записей регистра сведений, сначала в соседнюю переменную выполнить чтение набора с таким же отбором и узнать, есть ли данные в регистре. Если есть, сначала явно записать пустой набор по данному отбору, а потом уже записать набор с данными.
---
Но вы можете перед записью набора записей регистра сведений, сначала в соседнюю переменную выполнить чтение набора с таким же отбором и узнать, есть ли данные в регистре. Если есть, сначала явно записать пустой набор по данному отбору, а потом уже записать набор с данными.

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

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

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

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

Суть в том, что ПередЗаписью можно сделать проверку и прокинуть допСвойство:

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

А уже ПриЗаписи проверять:

```1c
    Если ЭтотОбъект.ДополнительныеСвойства.Свойство("clear") Тогда
    //Что-то
    КонецЕсли;
```
---
Спасибо!
Стыдно, что сам не нашел это в синтакс-помощнике(
---
Чего тут стыдиться, если синтаксис помощник сделан как попало, зачастую без примеров и структура его максимально неудобная.