База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как упростить запись в непериодический регистр без `ПустаяСсылка()`? › Ответ в теме: Как упростить запись в непериодический регистр без `ПустаяСсылка()`?
Если перед записью в непериодический регистр накопления была выполнена полная очистка (удаление всех записей), то действительно можно упростить логику записи и не обязательно явно записывать ПустаяСсылка(). Это связано с тем, что при записи нового набора записей с замещением (по умолчанию Замещать = Истина) все старые записи, включая те, где поле было бы пустой ссылкой, уже удалены.
### Как упростить запись
Вместо сложной конструкции с несколькими Если … Тогда … ИначеЕсли … можно использовать тернарный оператор ? : для выбора нужного значения регистратора, например:
|
1 2 3 4 5 6 7 |
Возврат (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ЗаказКлиента")) ? Регистратор : ((ТипЗнч(Регистратор) = Тип("ДокументСсылка.РеализацияТоваровУслуг") И ТипЗнч(Регистратор.ЗаказКлиента) = Тип("ДокументСсылка.ЗаказКлиента")) ? Регистратор.ЗаказКлиента : Неопределено); |
Или, если в регистр не нужно записывать пустую ссылку, можно вернуть Неопределено (или Null), и при записи в регистр просто не указывать это измерение, если оно не обязательно.
### Можно ли не записывать ПустаяСсылка?
— Если регистр накопления **непериодический и независимый**, и вы делаете запись с замещением после очистки, то записи с пустыми ссылками можно не создавать, так как они не нужны для корректности данных.
— Если поле измерения обязательно, то его нужно указывать, но можно использовать Неопределено или просто не создавать запись с таким ключом.
— Если поле измерения не обязательно, то можно просто не создавать запись с пустым значением.
### Итог
— После очистки регистра можно записывать только нужные записи без пустых ссылок.
— Упрощённый тернарный оператор ? : отлично подходит для выбора нужного значения регистратора.
— Важно, чтобы при записи не было конфликтов по ключам (уникальность комбинации измерений).
### Пример упрощённого варианта с тернарным оператором:
|
1 2 3 4 5 6 7 8 9 |
Функция ПолучитьЗаказКлиента(Регистратор) Возврат (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ЗаказКлиента")) ? Регистратор : ((ТипЗнч(Регистратор) = Тип("ДокументСсылка.РеализацияТоваровУслуг") И ТипЗнч(Регистратор.ЗаказКлиента) = Тип("ДокументСсылка.ЗаказКлиента")) ? Регистратор.ЗаказКлиента : Неопределено); КонецФункции |
При записи в регистр:
|
1 2 3 |
Если ЗначениеЗаписи <> Неопределено Тогда НоваяЗапись.ЗаказКлиента = ЗначениеЗаписи; КонецЕсли; |
—
Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/558.html
https://helpf.pro/faq/view/340.html