Не работает отбор на регистр сведений

1. pusal 08.10.24 18:24 Сейчас в теме
Коллеги, помогите разобраться, не понимаю в чём дело:

У РС есть два измерения - УникальныйИдентификатор (строка) и ЗаявкаНаРасходованиеДС (документ ссылка).
Перед записью табличной части документа пытаюсь очистить записи РС по установленному в отборе УИД и записать новые. В итоге, РС очищается полностью - то есть не срабатывает отбор по УИД.
УИД в отбор передаётся, но отбор не срабатывает. В отладчике смотрел, что Количество() записей в РС после отбора равно нулю.

В чём может быть дело?

	Если Не Отказ Тогда
	
		УИДСвойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "УникальныйИдентификатор_f28953a6b0b647efaaf66265232aaea7");
		УИД = УправлениеСвойствами.ЗначениеСвойства(Объект.Ссылка, УИДСвойство);	
		
		Если УИД <> Неопределено Тогда
			Запрос = Новый Запрос;
			Запрос.Текст = 
				"ВЫБРАТЬ
				|	псПакетыЗаявок.УникальныйИдентификатор КАК УникальныйИдентификатор,
				|	псПакетыЗаявок.ЗаявкаНаРасходованиеДС КАК ЗаявкаНаРасходованиеДС
				|ИЗ
				|	РегистрСведений.псПакетыЗаявок КАК псПакетыЗаявок
				|ГДЕ
				|	псПакетыЗаявок.УникальныйИдентификатор = &УникальныйИдентификатор";
			
			Запрос.УстановитьПараметр("УникальныйИдентификатор", УИД);
			
			РезультатЗапроса = Запрос.Выполнить(); 
			
			Если Не РезультатЗапроса.Пустой() Тогда 
				
				// очищаем старые записи РС по УИД
				РС = РегистрыСведений.псПакетыЗаявок.СоздатьНаборЗаписей();
				РС.Отбор.УникальныйИдентификатор.Установить(УИД);					
				РС.Записать(Истина);	
			
				ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
				
				// записываем новые 
				РС = РегистрыСведений.псПакетыЗаявок.СоздатьНаборЗаписей();
				Для Каждого Строка Из ЭтаФорма.ТаблицаЗаявок Цикл 
					
					НоваяЗапись = РС.Добавить();
					НоваяЗапись.ЗаявкаНаРасходованиеДС = Строка.ЗаявкаНаРасходованиеДС;
					НоваяЗапись.УникальныйИдентификатор = Строка.УникальныйИдентификатор;
					
				КонецЦикла;
				
				РС.Записать();
			КонецЕсли;	
		КонецЕсли;
Показать
По теме из базы знаний
Найденные решения
4. SlavaKron 08.10.24 18:43 Сейчас в теме
(3) Ну так работают РС. Вы записываете набор без отбора, стало быть перезаписываете весь регистр.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. SlavaKron 08.10.24 18:35 Сейчас в теме
(1)
В отладчике смотрел, что Количество() записей в РС после отбора равно нулю.
Это не доказывает, что РС очищается полностью. Записывая пустой набор с отбором по определенному измерению, вы лишь удаляете записи с этим измерением.
Далее вы создаете набор вовсе без отбора, так что весь РС перезаписывается этим набором.
3. pusal 08.10.24 18:40 Сейчас в теме
(2) а зачем далее создавать отбор при записи нового набора, не совсем понимаю?
4. SlavaKron 08.10.24 18:43 Сейчас в теме
(3) Ну так работают РС. Вы записываете набор без отбора, стало быть перезаписываете весь регистр.
8. pusal 08.10.24 19:12 Сейчас в теме
5. DENSKR 16 08.10.24 18:44 Сейчас в теме
Да, много инфы так было потерто, признаю и сам когда то такими вещами грешил...
SlavaKron; +1 Ответить
6. SlavaKron 08.10.24 18:48 Сейчас в теме
(5) Уверен, по неопытности все перезатирали хотя бы раз регистр сведений.
7. user2033930 08.10.24 19:01 Сейчас в теме
(6) Да мне рассказывали, что даже чуть учебник не вышел с листингом кода, затирающим регистр... Вовремя заметили.
Сам автор и рассказывал.
9. DENSKR 16 08.10.24 20:51 Сейчас в теме
10. user2033930 08.10.24 20:58 Сейчас в теме
(9) У меня? Когда осваивал - было дело, конечно, "на кошках". Когда с нуля разрабатывал что-то проскакивало тоже иногда на ранних порах. В рабочих каких-то конфигах - не припоминаю за 20 лет таких случаев.
А вот то, что восстанавливал регистры за другими "хакерами" в рабочих базах - точно было дело.
11. DENSKR 16 08.10.24 21:06 Сейчас в теме
(10) А какое дело точнее было?
12. user2033930 08.10.24 21:11 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот