Ответ в теме: Как упростить запись в непериодический регистр без `ПустаяСсылка()`?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как упростить запись в непериодический регистр без `ПустаяСсылка()`? Ответ в теме: Как упростить запись в непериодический регистр без `ПустаяСсылка()`?

#34935
Телеграм группа https://t.me/odineskiOdineski
Участник

    Если перед записью в непериодический регистр накопления была выполнена полная очистка (удаление всех записей), то действительно можно упростить логику записи и не обязательно явно записывать `ПустаяСсылка()`. Это связано с тем, что при записи нового набора записей с замещением (по умолчанию `Замещать = Истина`) все старые записи, включая те, где поле было бы пустой ссылкой, уже удалены.

    ### Как упростить запись

    Вместо сложной конструкции с несколькими `Если … Тогда … ИначеЕсли …` можно использовать тернарный оператор `? :` для выбора нужного значения регистратора, например:

    Возврат 
        (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ЗаказКлиента")) ? 
            Регистратор : 
            ((ТипЗнч(Регистратор) = Тип("ДокументСсылка.РеализацияТоваровУслуг") 
              И ТипЗнч(Регистратор.ЗаказКлиента) = Тип("ДокументСсылка.ЗаказКлиента")) ? 
                Регистратор.ЗаказКлиента : 
                Неопределено);
    

    Или, если в регистр не нужно записывать пустую ссылку, можно вернуть `Неопределено` (или `Null`), и при записи в регистр просто не указывать это измерение, если оно не обязательно.

    ### Можно ли не записывать ПустаяСсылка?

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

    ### Итог

    — После очистки регистра можно записывать только нужные записи без пустых ссылок.
    — Упрощённый тернарный оператор `? :` отлично подходит для выбора нужного значения регистратора.
    — Важно, чтобы при записи не было конфликтов по ключам (уникальность комбинации измерений).

    ### Пример упрощённого варианта с тернарным оператором:

    Функция ПолучитьЗаказКлиента(Регистратор)
        Возврат 
            (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ЗаказКлиента")) ? 
                Регистратор : 
                ((ТипЗнч(Регистратор) = Тип("ДокументСсылка.РеализацияТоваровУслуг") 
                  И ТипЗнч(Регистратор.ЗаказКлиента) = Тип("ДокументСсылка.ЗаказКлиента")) ? 
                    Регистратор.ЗаказКлиента : 
                    Неопределено);
    КонецФункции
    

    При записи в регистр:

    Если ЗначениеЗаписи <> Неопределено Тогда
        НоваяЗапись.ЗаказКлиента = ЗначениеЗаписи;
    КонецЕсли;
    

    Рекомендую посмотреть здесь:
    https://helpf.pro/faq/view/558.html
    https://helpf.pro/faq/view/340.html

    База знаний 1С