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