База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как упростить запись в непериодический регистр накопления в 1С?
- В этой теме 1 ответ, 1 участник, последнее обновление 3 дня назад сделано
Odineski.
-
АвторСообщения
-
-
14 декабря 2025 в 17:41 #34938
Как упростить запись в непериодический регистр накопления, записывать ПустаяСсылка не обязательно если записи предшествовала очистка? и тогда можно использовать упрощённый вариант Если (через «?»)
ТипРегистратора = ТипЗнч(Регистратор);
Если ТипРегистратора = Тип(«ДокументСсылка.ЗаказКлиента») Тогда
Возврат Регистратор;
ИначеЕсли ТипРегистратора = Тип(«ДокументСсылка.РеализацияТоваровУслуг») И
(ТипЗнч(Регистратор.ЗаказКлиента) = Тип(«ДокументСсылка.ЗаказКлиента»)) Тогда
Возврат Регистратор.ЗаказКлиента;
Иначе
Возврат Документы.ЗаказКлиента.ПустаяСсылка();
КонецЕсли; -
14 декабря 2025 в 17:41 #34939
Если перед записью в непериодический регистр накопления была выполнена полная очистка (удаление всех записей), то действительно можно упростить логику записи и не обязательно явно записывать `ПустаяСсылка()`. Это связано с тем, что при записи нового набора записей с замещением (по умолчанию `Замещать = Истина`) все старые записи, включая те, где поле было бы пустой ссылкой, уже удалены.
### Как упростить запись
Вместо сложной конструкции с несколькими `Если … Тогда … ИначеЕсли …` можно использовать тернарный оператор `? :` для выбора нужного значения регистратора, например:
Возврат (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ЗаказКлиента")) ? Регистратор : ((ТипЗнч(Регистратор) = Тип("ДокументСсылка.РеализацияТоваровУслуг") И ТипЗнч(Регистратор.ЗаказКлиента) = Тип("ДокументСсылка.ЗаказКлиента")) ? Регистратор.ЗаказКлиента : Неопределено);Или, если в регистр не нужно записывать пустую ссылку, можно вернуть `Неопределено` (или `Null`), и при записи в регистр просто не указывать это измерение, если оно не обязательно.
### Можно ли не записывать ПустаяСсылка?
— Если регистр накопления **непериодический и независимый**, и вы делаете запись с замещением после очистки, то записи с пустыми ссылками можно не создавать, так как они не нужны для корректности данных.
— Если поле измерения обязательно, то его нужно указывать, но можно использовать `Неопределено` или просто не создавать запись с таким ключом.
— Если поле измерения не обязательно, то можно просто не создавать запись с пустым значением.### Итог
— После очистки регистра можно записывать только нужные записи без пустых ссылок.
— Упрощённый тернарный оператор `? :` отлично подходит для выбора нужного значения регистратора.
— Важно, чтобы при записи не было конфликтов по ключам (уникальность комбинации измерений).### Пример упрощённого варианта с тернарным оператором:
Функция ПолучитьЗаказКлиента(Регистратор) Возврат (ТипЗнч(Регистратор) = Тип("ДокументСсылка.ЗаказКлиента")) ? Регистратор : ((ТипЗнч(Регистратор) = Тип("ДокументСсылка.РеализацияТоваровУслуг") И ТипЗнч(Регистратор.ЗаказКлиента) = Тип("ДокументСсылка.ЗаказКлиента")) ? Регистратор.ЗаказКлиента : Неопределено); КонецФункцииПри записи в регистр:
Если ЗначениеЗаписи <> Неопределено Тогда НоваяЗапись.ЗаказКлиента = ЗначениеЗаписи; КонецЕсли;—
Рекомендую посмотреть здесь:
https://helpf.pro/faq/view/558.html
https://helpf.pro/faq/view/340.html
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.