Как удалить записи из регистра сведений за определенный период?

1. Умочка 27.09.13 06:56 Сейчас в теме
Как удалить записи из регистра сведений за определенный период?
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. echo77 1880 27.09.13 07:05 Сейчас в теме
(1) выбрать запросом набор ключевых полей(период и все измерения) в цикле обрабатывать выборку
Запись = регистрысведений[твойрегистр].создатьменеджерзаписи();
Заполнитьзнначениясвойств(запись, выборка);
Запись.причитать();
Запись.удалить();
user1873698; rusmm93; marku; +3
3. peterxx 22 27.09.13 07:25 Сейчас в теме
НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.ВидСравнения = ВидСравнения.ИнтервалВключаяГраницы;
НаборЗаписей.Отбор.Период.ЗначениеС = НачалоПериода;
НаборЗаписей.Отбор.Период.ЗначениеПо = КонецПериода;
НаборЗаписей.Отбор.Использование = Истина;
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать(Истина);
Eugen-S; maksa2005; alexander-lubich; orekhov_rnd; dark_wolf; +5 2
6. AllexSoft 27.09.13 11:39 Сейчас в теме
(3) peterxx, НаборЗаписей.Отбор.Период.ВидСравнения = ВидСравнения.ИнтервалВключаяГраницы; для набора записей недоступен к сожалению.. только на равно
(4) Умочка, Нужно сделать вот так: запросом выбираешь все записи которые нужно удалить за период, ну а потом сделать то же самое что и в (3) но только обходить циклом результат выборки по каждой записи и удалять их по одной (или по дням)
ivs2000; echo77; mark_oilbass; alex-l19041; OksDallas; +5
9. peterxx 22 27.09.13 12:09 Сейчас в теме
(6) AllexSoft, да вы абсолютно правы, поленился проверить работает ли. Каюсь.
+
16. Blackspb 09.11.17 12:24 Сейчас в теме
В (3) дан почти верный ответ - корректный код будет выглядеть так:

НаборЗаписей = РегистрыСведений.ИмяРегистра.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.ЗначениеС = НачалоПериода;
НаборЗаписей.Отбор.Период.ЗначениеПо = КонецПериода;
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать(Истина);
dorofei85; sp1nfun; Zapal; marku; ekomova; 🅵🅾️🆇; +6 2
17. Power_0N 44 15.01.18 13:53 Сейчас в теме
(16)
Данный код стирает ВСЕ записи РС. Представляю, что будет, если этим кодом кто-то на рабочей базе попробует воспользоваться.
Да даже и на копии - копию придётся заново делать.

А всё дело в том, что вы забыли установить применение отбора
НаборЗаписей.Отбор.Период.Использование = Истина;
freeek; Дамир1; user598655_ilia-bers; SP2000; rustamdev1c; Drivingblind; gromozeka; N1ce; namazi74; Rustam10; Dmitri93; pm74; +12
42. necropunk 9 15.07.20 13:54 Сейчас в теме
(17) Б-ть, ну почему я сперва запустил этот код на проде, и только потом прочитал этот комментарий...
user2018771; freeek; SLukin; user2022329; Andreyka888; tokmakov1904; Дамир1; maxtomsk; user598655_ilia-bers; dimisa; user990914; user785225; SP2000; MrBukas; Mechanik21; leonidol; shatohin_uttist; slitov; Drivingblind; user1145086; IgorArhangel; Kolobash95; корум; Power_0N; +24
25. Kostik_ 31.08.18 12:17 Сейчас в теме
У меня (3) и (16) не работает.

Мой рабочий код, который удаляет в независимом периодическом (период год) регистре сведений отдельно по годам:

НаборЗаписей = РегистрыСведений.НазваниеРегистра.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Период.Установить(НачалоГода(ТекущаяДата()));
НаборЗаписей.Записать(Истина);
AgentNiCho; Meverix; 1c-kt; Xleo777; kaaasteeen; ErrorEd88; user591389_aska_rabota; user645801_yyyuuu123q; +8
48. user645801_yyyuuu123q 12.12.22 03:44 Сейчас в теме
(25) Самый точный и правильный ответ, странно что плюсов вообще нет. Мужик спасибо
Tatyana_012345; user1270109; +2
4. Умочка 27.09.13 09:13 Сейчас в теме
5. Ламия 27.09.13 11:22 Сейчас в теме
На данном сайте скачивала обработку для удаления записей, ссылку не помню, но, если вопрос еще актуален, могу переслать саму обработку, думаю, автор не должен обидеться.
Ленский; +1
10. Ленский 20.01.17 14:33 Сейчас в теме
(5) Добрый вечер! Можете обработкой поделиться плиз ??? После восстановления после повреждения базы отчет по кассе показывает объект не найден касса не идет, битую запись не могу удалить из регистра накопления Денежные средства.
+
40. azoo 08.11.19 13:10 Сейчас в теме
(5) а можете мне тоже присласть ?
+
7. mptt 16 27.09.13 11:43 Сейчас в теме
8. mptt 16 27.09.13 11:45 Сейчас в теме
Пардон, не та ссылка
Процедура ПойматьРезидента(ДатаНаКотруюВсеБылоНормально) 
 Запрос=Новый Запрос(); 
 Запрос.Текст="ВЫБРАТЬ 
 | СтатусФизЛицКакНалогоплательщиковНДФЛСрезПоследних.Период, 
 | СтатусФизЛицКакНалогоплательщиковНДФЛСрезПоследних.ФизЛицо, 
 | СтатусФизЛицКакНалогоплательщиковНДФЛСрезПоследних.Статус 
 |ИЗ 
 | РегистрСведений.СтатусФизЛицКакНалогоплательщиковНДФЛ.СрезПоследних(&ДатаНаКотруюВсеБылоНормально, ) КАК СтатусФизЛицКакНалогоплательщиковНДФЛСрезПоследних"; 
 Запрос.УстановитьПараметр("ДатаНаКотруюВсеБылоНормально",ДатаНаКотруюВсеБылоНормально); 
 НормальныеЗаписи=Запрос.Выполнить().Выгрузить(); 
 НаборЗаписейРегистра=РегистрыСведений.СтатусФизЛицКакНалогоплательщиковНДФЛ.СоздатьНаборЗаписей(); 
 //почистим регистр на всякий случай хотя можно и без этого 
 //записать сразу 
 НаборЗаписейРегистра.Прочитать(); 
 НаборЗаписейРегистра.Очистить(); 
 НаборЗаписейРегистра.Записать(Истина); 
 //запишем нормальные 
 НаборЗаписейРегистра.Загрузить(НормальныеЗаписи); 
 НаборЗаписейРегистра.Записать(); 
КонецПроцедуры
Показать
alexandr_astafiev; boldinov; rozhkovdmitriy; OksDallas; +4
11. user_2010 891 31.03.17 11:12 Сейчас в теме
Удалить все записи в регистре сведений можно с помощью двух строчек кода:
НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); // ИмяРегистра например "УчетнаяПолитика", "ЦеныНоменклатуры" и т.д

НаборЗаписей.Записать();
+
12. m-serg74 46 31.03.17 13:19 Сейчас в теме
(11)
Удалить все записи


вы вопрос то в (1) читали?
+
13. user_2010 891 31.03.17 13:49 Сейчас в теме
(12) извиняюсь - ошиблась
+
14. Troha 12.04.17 17:56 Сейчас в теме
Я делал так:
 ДатаДо = <Дата конца периода>;

	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	РС.Период
	|ИЗ
	|	РегистрСведений.<Имя регистра> КАК РС
	|ГДЕ
	|	РС.Период <= &Период";
	
	Запрос.УстановитьПараметр("Период",ДатаДо);
	
	Результат = Запрос.Выполнить();
	Выборка = Результат.Выбрать();	
	 	
	Пока Выборка.Следующий() Цикл
		ОбработкаПрерыванияПользователя();
		ДатаРаб = Выборка.Период;
		
		Пока Истина Цикл
			Попытка //На случай блокировки.
				НаборЗаписей = РегистрыСведений.<Имя регистра>.СоздатьНаборЗаписей();
				НаборЗаписей.Отбор.Период.Значение =  ДатаРаб;
				НаборЗаписей.Отбор.Период.Использование = Истина;
				НаборЗаписей.Записать(ИСТИНА);
				Прервать;
			Исключение
			//Можно добавить прерывание по количеству попыток	
			КонецПопытки;
		КонецЦикла;
	КонецЦикла;
Показать
ppdron; mrflatcher; kimskiysanya; John_Dow; laby; namazi74; inter1980; +7
15. user730384 12.04.17 18:47 Сейчас в теме
НаборЗаписей = РегистрыСведений.ТорговоеОборудование.СоздатьНаборЗаписей();
НаборЗаписей.Записать();
maxst22; +1
18. zDRONz 08.02.18 04:50 Сейчас в теме
Может вопрос не в теме и слишком туп, но все таки. как и где написать запрос чтобы его выполнить? нужно удалить все записи из РС.ОбъектыДоступаДокументов, а гугл на вопрос по написанию запросов отправляет меня в конструктор запросов.
+
19. catena 110 08.02.18 06:00 Сейчас в теме
(18)Запросы в 1С данных не удаляют. Такой запрос можно в скл написать :)
+
20. zDRONz 08.02.18 06:04 Сейчас в теме
(19) Тогда я чего-то не понимаю. Куда нужно написать эти две строчки кода?
11. Надежда (user_2010) 221 31.03.17 11:12
Удалить все записи в регистре сведений можно с помощью двух строчек кода:
НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей(); // ИмяРегистра например "УчетнаяПолитика", "ЦеныНоменклатуры" и т.д

НаборЗаписей.Записать();
+
21. catena 110 08.02.18 06:18 Сейчас в теме
(20) Так это не запрос, это код :) Написать можно в любом удобном месте. У меня для таких разовых действий есть консоль выполнения кода. При отсутствии можно набросать внешнюю обработку и запихнуть этот код туда.
zDRONz; +1
22. zDRONz 08.02.18 06:37 Сейчас в теме
23. Andrey_ezhi 16.02.18 15:43 Сейчас в теме
У меня вот такой код работает:
Выборка = РегистрыСведений.Цены.Выбрать(НачПериода, КонПериода);
Пока Выборка.Следующий() Цикл
	Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;
wauri; user862555; smewinka; rmarkovych; user591578_1c; V_Izzy; mariupol1c; snip; +8
24. kild 89 24.02.18 16:16 Сейчас в теме
НаборЗаписей.Отбор.Период.ЗначениеС = НачалоПериода;
НаборЗаписей.Отбор.Период.ЗначениеПо = КонецПериода;
+
26. mak2486 13 26.02.19 12:54 Сейчас в теме
Скорее всего проблема уже не актуальна. Но может кому-то и понадобится.
НаборЗаписей=РегистрыСведений.ПредварительныеНачисления.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ФизическоеЛицо.Установить(СсылкаНаФизЛицо);	
НаборЗаписей.Отбор.Должность.Установить(ДолжностьСсылка);
НаборЗаписей.Отбор.Подразделение.Установить(ПодразделениеСсылка);
НаборЗаписей.Отбор.Начисление.Установить(СсылкаНаНачисление);	
НаборЗаписей.Прочитать();
Для каждого запись из НаборЗаписей ЦИкл
	Если запись.Период>=Дата(периодС) и запись.Период<=Дата(периодПо) Тогда
		НаборЗаписей.Удалить(запись);
	КонецЕсли;
КонецЦикла;
НаборЗаписей.Записать(Истина);
Показать
AliMR; vladyko_kiu; Izumov; rmarkovych; Goggy; natik_82; request4t; +7
30. FetisovAN 01.03.19 12:10 Сейчас в теме
(26) А не будут пропущенные записи, за счет того что удаление идет прямо в цикле обхода ?
kuzz; +1
31. mak2486 13 01.03.19 12:56 Сейчас в теме
(30) На том что тестировал пропусков вроде не было.

В крайнем случае (врядли) можно новый набор создавать и в него добавлять записи в зависимости от условия (но это на костыль похоже еще больше).
+
32. FetisovAN 01.03.19 13:06 Сейчас в теме
(31) ну я вот так сделал:
 Для каждого запись из НаборЗаписей Цикл
		Если запись.Дата<=Дата(ПериодПо) Тогда
			МассивЗаписейНаУдаление.Добавить(Запись);	
		КонецЕсли;
	КонецЦикла;
	
	Для каждого текЗап Из МассивЗаписейНаУдаление Цикл
		НаборЗаписей.Удалить(текЗап);
	КонецЦикла;
Показать
kentavr27; andrey7617; emilliya; request4t; kuzz; +5
33. mak2486 13 01.03.19 13:11 Сейчас в теме
(32) Попробую протестировать если время будет оба варианта. Я тестировал на регистре где мало записей :)
+
35. kuzz 05.06.19 18:18 Сейчас в теме
(32) Это рабочий вариант
+
34. kuzz 05.06.19 18:13 Сейчас в теме
(30) Будут. Я проверил
+
27. SantiouS 28.02.19 16:44 Сейчас в теме
Для одной записи
НаборЗаписей=РегистрыСведений.Заявки.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.id_заявки.Использование=Истина;
НаборЗаписей.Отбор.id_заявки.Значение=ЗначениеПоиска; 		
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать(Истина);


Для набора записей:
Для каждого ЭлементМассива Из МассивЗаявокНаУдаление Цикл
       НаборЗаписей=РегистрыСведений.Заявки.СоздатьНаборЗаписей();
       НаборЗаписей.Отбор.id_заявки.Использование=Истина;
       НаборЗаписей.Отбор.id_заявки.Значение=ЭлементМассива;		
       НаборЗаписей.Прочитать();
       НаборЗаписей.Очистить();
       НаборЗаписей.Записать(Истина);	
КонецЦикла;
Показать
+
28. dhurricane 28.02.19 16:51 Сейчас в теме
(27) Позволю себе немного поправить Вас и прочих коллег, ответивших автору поста. Читать набор записей перед записью нет необходимости, и даже вредно, т.к. напрасно тратятся ресурсы сервера.
ivnik; freeek; leonidol; kimskiysanya; Meson; pavlo; +6
29. SantiouS 28.02.19 17:20 Сейчас в теме
(28) Только сегодня освоил данный механизм и долго думал о необходимости именно этой строчки, но все же не решился на эксперименты.
Спасибо большое что ответили! Учту, протестирую и исправлю :)
+
44. Deimich 19.04.21 06:50 Сейчас в теме
(28) Не стоит делать таких безаппеляционных заявлений. Да - если документ создается и записывается разово - то вы правы.
Но если документобъект запрашивается по ссылке, а заполнение движений идёт накопительное, то без чтения набора записей, вы будете просто перезаписывать содержимое. Так-же, при внесении накопительных изменений - не стоит забывать записать движение, перед записью документа.
+
45. dhurricane 19.04.21 11:12 Сейчас в теме
(44)
Не стоит делать таких безаппеляционных заявлений. Да - если документ создается и записывается разово - то вы правы.
В данном топике речь идет не о создании документа и записи его движений, а об удалении записей некоего регистра. Непосредственном перед записью пустого набора (т.е. перед удалением) читать записи нет необходимости.
(44)
Так-же, при внесении накопительных изменений - не стоит забывать записать движение, перед записью документа.
Движения будут записаны вместе с документом, если у нужных наборов записей взвести флаг "Записывать". Если не требуется что-нибудь вроде контроля записанных движений, то такой подход даже будет более корректным.
+
36. sanson2002 08.07.19 15:26 Сейчас в теме
Можно упростить:

Для каждого ЭлементМассива Из МассивЗаявокНаУдаление Цикл
НаборЗаписей=РегистрыСведений.Заявки.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.id_заявки.Установить(ЭлементМассива);
НаборЗаписей.Очистить();
НаборЗаписей.Записать(Истина);
КонецЦикла;
+
37. DenisMiheykin 16.09.19 14:03 Сейчас в теме
(36) Подскажите, а зачем вызывать метод набора записей Очистить()? Ведь набор записей и так пустой на каждой итерации цикла.
+
38. sanson2002 24.09.19 12:35 Сейчас в теме
Вы правы, очищать пустой набор записей нет необходимости.(37)
+
39. Fisha 114 11.10.19 04:18 Сейчас в теме
Выборка = РегистрыСведений.ИмяРегистра.Выбрать();
Пока Выборка.Следующий() Цикл
	Если Выборка.Период < Дата Тогда
		Запись = Выборка.ПолучитьМенеджерЗаписи();
		Запись.Удалить();
	КонецЕсли; 
КонецЦикла; 
Показать
Yasasha; санясоку; korpas; +3
41. ovasiliev 6 28.03.20 21:18 Сейчас в теме
У меня итератор после удаления в результате перескакивал через строчку, поэтому я зарёкся так делать.
ubnkfl; pavlo; +2
43. rhtr 90 18.04.21 14:42 Сейчас в теме
Запрос = Новый Запрос;
		Запрос.Текст = 
		"ВЫБРАТЬ
		|	*
		|ИЗ
		|	РегистрСведений."+ИмяРегистра+" КАК КР_ОстаткиТТ
		|ГДЕ
		|	КР_ОстаткиТТ.Период > &КонецПериода";
		
		Запрос.УстановитьПараметр("КонецПериода", ДатаОкончания);
		
		ЗапросВып = Запрос.Выполнить();
		
		Если ЗапросВып.Пустой() тогда Возврат КонецЕсли;
		
		РезультатЗапроса = ЗапросВып.Выгрузить();
		
		НаборЗаписейУд = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
		НаборЗаписейУд.Записать(Истина);
		
		НаборЗаписейЗап = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
		НаборЗаписейЗап.Загрузить(РезультатЗапроса);
		НаборЗаписейЗап.Записать(Истина);
Показать
+
46. Manonegro 09.07.21 12:52 Сейчас в теме
Извините, удалил запись, ибо код не работает.
+
47. Manonegro 09.07.21 13:29 Сейчас в теме
Процедура УдалитьЗаписиЗаПериод1(ИмяРегистра, дНачало, дКонец, Интервал=86400)
	
	Дата1 = НачалоДня(дНачало);
	
	Пока Дата1 <= дКонец Цикл
		
		НаборЗаписей = РегистрыСведений[ИмяРегистра].СоздатьНаборЗаписей();
		НаборЗаписей.Отбор.Период.Установить(Дата1);
		НаборЗаписей.Записать();
		
		Дата1 = Дата1 + Интервал;
		
	КонецЦикла;

КонецПроцедуры
Показать
+
49. ArMellon 16.04.23 00:07 Сейчас в теме
В копилку:
	
Выборка=РегистрыСведений.ИмяРегистра.Выбрать(ДатаНачала,ДатаОкончания);
Пока Выборка.Следующий() Цикл
	Выборка.ПолучитьМенеджерЗаписи().Удалить();
КонецЦикла;	
+
50. пользователь 16.04.23 00:33
Сообщение было скрыто модератором.
...
51. ArMellon 16.04.23 10:28 Сейчас в теме
(50) Сам-то как в этой ветке оказался?))
+
Внимание! Тема сдана в архив

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