6.14 Что произойдёт, если удалить запись регистра сведений и создать новую с такими же полями?
Опубликовано: Обновлено:
❓ 6.14 Что произойдёт, если удалить запись регистра сведений и создать новую с такими же полями (измерениями, ресурсами, реквизитами)?
📚 Документация
Заголовок раздела «📚 Документация»-
ИТС: О регистрах сведений — почти все что нужно знать о регистрах сведений.
🧠 Краткая теория
Заголовок раздела «🧠 Краткая теория»Объектные и необъектные данные
Заголовок раздела «Объектные и необъектные данные»Здесь речь о данных информационной базы, а не об объектах встроенного языка.
Объектные данные имеют собственную ссылку. Это элементы справочников, документы, элементы планов видов характеристик и другие объекты.
Если удалить элемент и обычным способом создать новый с теми же реквизитами, ссылки будут разными. Одинаковое содержимое не делает их одним объектом.
Записи регистров собственной ссылки не имеют. Для них используется другой принцип: запись определяется значениями ключевых полей.
У объекта идентичность определяется ссылкой, у записи регистра — ключом записи.
Ключ записи и уникальность
Заголовок раздела «Ключ записи и уникальность»Ключ записи — это комбинация полей, значения которых обеспечивают уникальность записи регистра.
Платформа не позволяет существовать двум записям с одинаковыми значениями ключевых полей.
Состав ключа зависит от периодичности и подчиненности регистра:
| Регистр сведений | Ключ записи |
|---|---|
| Непериодический | Измерения |
| Периодический | Измерения и Период |
| Периодичность «По позиции регистратора» | Измерения, Период и Регистратор |
Ресурсы и реквизиты хранят содержание записи, но в ключ записи не входят.
Например, если в непериодическом регистре измерениями являются Организация и Номенклатура:
Организация = РомашкаНоменклатура = СтолЦена = 1000то ключ записи:
Организация + НоменклатураКлюч записи позволяет однозначно идентифицировать запись регистра по значениям ключевых полей.
А как же НомерСтроки?
Заголовок раздела «А как же НомерСтроки?»У регистра сведений, подчинённого регистратору, существует поле НомерСтроки, но оно не входит в ключ записи регистра сведений.
Поэтому разные номера строк не позволяют сохранить несколько записей с одинаковыми значениями ключевых полей.
Это важно не путать с регистрами накопления, где НомерСтроки входит в ключ записи.
Набор записей — порция изменения данных
Заголовок раздела «Набор записей — порция изменения данных»Добавление, изменение и удаление данных регистра выполняются наборами записей.
- У независимого регистра область набора ограничивается отбором, в частности по измерениям.
- У подчинённого регистра набор связан с регистратором.
При записи с замещением существующие данные в пределах отбора заменяются содержимым набора.
Отбор определяет, какие записи будут заменены, а содержимое набора — что останется вместо них.
Что произойдёт при записи без отбора
Заголовок раздела «Что произойдёт при записи без отбора»Особенно важно понимать работу отбора при записи независимого регистра сведений.
Допустим, в регистре ЦеныНоменклатуры находятся записи:
| Номенклатура | Цена |
|---|---|
| Стол | 10 000 |
| Стул | 5 000 |
| Шкаф | 30 000 |
Создадим пустой набор записей без отбора:
НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Записать();Получается:
Отбор не установлен ↓Область записи — весь регистр ↓Набор пустой ↓Все записи регистра удаляютсяЕсли в набор без отбора добавить одну запись, то при записи с замещением существующие записи будут заменены содержимым набора.
Поэтому запись независимого регистра без отбора с замещением может затронуть весь регистр.
Что делает менеджер записи
Заголовок раздела «Что делает менеджер записи»Для работы с отдельной записью независимого регистра можно использовать РегистрСведенийМенеджерЗаписи.
Через него выполняются:
- программная запись менеджером записи;
- интерактивная запись из формы записи;
- интерактивное редактирование записи в форме списка.
Сам менеджер работает с данными регистра через наборы записей.
Почему обработчики вызываются дважды при записи менеджера записи?
Заголовок раздела «Почему обработчики вызываются дважды при записи менеджера записи?»При записи существующей записи через менеджер записи платформа последовательно записывает два набора:
- Пустой набор (
Количество = 0) — для удаления прежней записи. - Набор с записью (
Количество = 1) — для записи новых значений.
Для каждого набора выполняются обработчики модуля набора записей:
ПередЗаписью → запись в базу → ПриЗаписиПоэтому в этом случае обработчики ПередЗаписью и ПриЗаписи модуля набора записей выполняются дважды: сначала для пустого набора, затем для набора с новой записью.
Сначала обработчик получает пустой набор, затем — набор с новой записью.
Пустой набор — это ноль строк, а не строка с пустыми значениями. Код модуля набора должен учитывать этот случай.
Например:
Процедура ПередЗаписью(Отказ, Замещение)
Если Количество() = 0 Тогда Возврат; КонецЕсли;
// Работа с записями набора
КонецПроцедуры🧠 Ключевая мысль
Заголовок раздела «🧠 Ключевая мысль»У записи регистра нет собственной ссылки. Она определяется ключом записи — комбинацией полей, обеспечивающих её уникальность.
Ключ определяет запись. Отбор определяет область записей, с которой работает набор. Именно эту область платформа заменяет при записи набора с замещением.