Как в 1С 8 быстро удалить все доки (непосредственно не хочу)

8. orsprog 25.11.11 16:02 Сейчас в теме
Для Инд=1 по Метаданные.Документы.Количество()-1 Цикл 
Док=Метаданные.Документы.Получить(Инд); 
Всего = 0; 
//Сообщить(""+Док.Имя); 
НачатьТранзакцию(); 
Счетчик=0; 
Выборка = Документы[Док.Имя].Выбрать(); 
Пока Выборка.Следующий() Цикл 
Всего = Всего + 1; 
Счетчик=Счетчик+1; 
ВыборкаОбъект = Выборка.ПолучитьОбъект(); 
ВыборкаОбъект.Удалить(); 
Состояние(""+Док.Имя+" - "+Всего); 


Если Счетчик=300 Тогда 
ЗафиксироватьТранзакцию(); 
НачатьТранзакцию(); 
Счетчик=0; 
КонецЕсли; 
КонецЦикла; 
Если Всего <> 0 Тогда 
Сообщить(""+Док.Имя+" - "+Всего); 
КонецЕсли; 
КонецЦикла; 
ЗафиксироватьТранзакцию();

Показать



сейчас так пробую удалить вообще как долго удаляет один день
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
35. Vaiora 18.04.19 08:11 Сейчас в теме
9. aspiid 9 26.11.11 12:39 Сейчас в теме
Используйте групповую обработку объектов, не изобретайте велосипед!
Она на диске ИТС находится.
10. lonsby 68 26.11.11 13:56 Сейчас в теме
aspiid пишет:

Используйте групповую обработку объектов, не изобретайте велосипед!

Она на диске ИТС находится.

Тоже соглашусь зачем что-то писать, если во всех типовых есть обработка Групповая обработка справочников и документов.
11. serginios 28.11.11 18:04 Сейчас в теме
Вытащить жесткий диск и выбросить в окно!
Al3x; KoC_one; LeXXeR; maksa2005; shakil200; +5 Ответить
12. umka2008 23 27.04.12 09:59 Сейчас в теме
Спасибо - и мне помог совет 8
13. spa07 27.04.12 10:04 Сейчас в теме
Да ну это ерунда. Если база большая гораздо быстрее будет развернуть чистую базу из cf-ника и перенести нужные объекты с помощью обработки ВыгрузкаЗагрузкаДанныхXML
14. Гость 27.04.12 10:49
Для Инд=1 по Метаданные.Документы.Количество()-1 Цикл
Док=Метаданные.Документы.Получить(Инд);
Всего = 0;
//Сообщить(""+Док.Имя);
НачатьТранзакцию();
Счетчик=0;
Выборка = Документы[Док.Имя].Выбрать();
Пока Выборка.Следующий() Цикл
Всего = Всего + 1;
Счетчик=Счетчик+1;
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.УстановитьПометкуУдаления(Истина);
Состояние(""+Док.Имя+" - "+Всего);
Если Счетчик=300 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
Счетчик=0;
КонецЕсли;
КонецЦикла;
Если Всего <> 0 Тогда
Сообщить(""+Док.Имя+" - "+Всего);
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Показать
15. Dekan79 08.06.12 12:55 Сейчас в теме
Интересно чем все закончилось, т.к. у самого есть потребность в удалении документов.
16. 1С_Мастер 61 08.06.12 17:43 Сейчас в теме
Таки не мучайтесь с удалением документов. Воспользуйтесь советом из пятого поста и перегрузить все, что вам от этой базы надо в базу чистую. Выйдет гораздо быстрее
17. CERBER 02.01.16 06:43 Сейчас в теме
Все эти обработки с ИТС, как правило работают на типовых базах.
Стоит в базу внести свои 5 копеек и все становится сложным.
Обработка по переносу справочников и доков между идентичными базами уже не хочет загружать.
У меня уперлась в то, что у элемента справочника Родитель не проставлен, а этот родитель есть элемент другого справочника, где есть ссылка на элемент третьего, внутри которого первые в наборе. Вот и колечко получилось. Всё !!! обработка в ступоре. Загрузить не может.

Доки удаляю то же самописной обработкой, перебором методанных.
Тут подгялдел про транзакции. Возьму на заметку. А то у меня в натуре, запустил на сутки можно свалить по личнм делам.

База 3 года. Управление торговлей 10.3
в файловом варианте она занимает 10 гиг. в PostgreSQL 18 Гигов.

Большие обемы доков, сразу ломают механизм создание РИБ узла. При создании первоначального образа, база пытается все сразу запихнуть в первоначальный образ. А оперативы на компе не так много. Всего 3 гига. Вот и вылет происходит.
Выкручиваюсь созданием узла из копии с переделкой на узел.

в 77 было хорошо в DBF варианте. файлики чистые подсунул, переиндексировал и все в порядке.

И особо напрягает, что Пользователи созданные в базе, переносятся по узлам только справочные данные. А вот сами пользователи ИБ с паролями не хотят.
Хотя не искал решения.
18. CaptainMorgan 02.01.16 14:29 Сейчас в теме
(1) Алгоритм удаления всех документов прост, но есть много нюансов.

Выполнение в транзакции ускоряет, но могут возникнуть межссылочные коллизии.
Часть документов можгут быть в принципе неудаляемые без установки параметра ОбменДанными
Объект.ОбменДанными.Загрузка = ФлЗагрузкаДанных;
//Действие
Объект.ОбменДанными.Загрузка = Ложь;


Так же ускорит обработка документов в обратной последовательности.
Писал я такую работающую обработку. В принципе можно было бы её тут опубликовать за 1$m но не знаю как это сделать и не понятно надо ли это кому нибудь...
EugeneR1c; +1 Ответить
19. Jokester 28.08.16 08:57 Сейчас в теме
Друзья, почему вы указываете Инд=1? Надо Инд=0 , иначе выбор пропустит первый в списке вид документов...
20. fantasy2 14.11.09 10:50 Сейчас в теме
Как в 1с 8 быстро удалить все доки (непостредственно не хочу)
21. fantasy2 14.11.09 10:56 Сейчас в теме
Для Инд=1 по Метаданные.Документы.Количество()-1 Цикл
	Док=Метаданные.Документы.Получить(Инд);
	Всего = 0;
	  //Сообщить(""+Док.Имя);
  Выборка = Документы[Док.Имя].Выбрать();
  Пока Выборка.Следующий() Цикл
	  Всего = Всего + 1;
	   ВыборкаОбъект = Выборка.ПолучитьОбъект();
	  ВыборкаОбъект.УстановитьПометкуУдаления(Истина);
	  Состояние(""+Док.Имя+" - "+Всего);
  КонецЦикла;	 
  Если  Всего <> 0 Тогда
   Сообщить(""+Док.Имя+" - "+Всего); 
  КонецЕсли; 
КонецЦикла;

Показать

так метит второй день уже
Stepan_1c; +1 Ответить
22. ssn1978 71 15.11.09 21:41 Сейчас в теме
fantasy2 пишет:

   Для Инд=1 по Метаданные.Документы.Количество()-1 Цикл

	Док=Метаданные.Документы.Получить(Инд);

	Всего = 0;

	  //Сообщить(""+Док.Имя);

  Выборка = Документы[Док.Имя].Выбрать();

  Пока Выборка.Следующий() Цикл

	  Всего = Всего + 1;

	   ВыборкаОбъект = Выборка.ПолучитьОбъект();

	  ВыборкаОбъект.УстановитьПометкуУдаления(Истина);

	  Состояние(""+Док.Имя+" - "+Всего);

  КонецЦикла;	 

  Если  Всего <> 0 Тогда

   Сообщить(""+Док.Имя+" - "+Всего); 

  КонецЕсли; 

КонецЦикла;

Показать




так метит второй день уже



У вас не используется транзакция, думаю будет намного быстрее, например вот так

Для Инд=1 по Метаданные.Документы.Количество()-1 Цикл
Док=Метаданные.Документы.Получить(Инд);
Всего = 0;
//Сообщить(""+Док.Имя);
НачатьТранзакцию();
Счетчик=0;
Выборка = Документы[Док.Имя].Выбрать();
Пока Выборка.Следующий() Цикл
Всего = Всего + 1;
Счетчик=Счетчик+1;
ВыборкаОбъект = Выборка.ПолучитьОбъект();
ВыборкаОбъект.УстановитьПометкуУдаления(Истина);
Состояние(""+Док.Имя+" - "+Всего);
Если Счетчик=300 Тогда
ЗафиксироватьТранзакцию();
НачатьТранзакцию();
Счетчик=0;
КонецЕсли;
КонецЦикла;
Если Всего <> 0 Тогда
Сообщить(""+Док.Имя+" - "+Всего);
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
Показать
23. I_G_O_R 70 16.11.09 09:04 Сейчас в теме
fantasy2 пишет:
Как в 1с 8 быстро удалить все доки (непостредственно не хочу)
если не хочешь, тогда жди...
24. I_G_O_R 70 16.11.09 09:18 Сейчас в теме
если документов много, тогда быстрее перенести справочники в новую базу, чем удалять все документы. Например поможет эта обработка ВыгрузкаЗагрузкаДанныхXML81.epf
user1160916; shr_karabalta; +2 Ответить
25. dvv01 120 16.11.09 10:25 Сейчас в теме
Все уже написано за нас: в Торговле: сервис\ГрупповаяОбработкаСправочниковИДокументов - установить пометку удаления, долее удалить через Операции
26. alexk-is 6546 16.11.09 16:11 Сейчас в теме
(1) К использованию транзакций можно добавить перенос рассчитанных итогов в период до первого удаляемого документа. Это позволит избежать пересчета итогов. А перед удалением помеченных объектов базу нужно сжать.
32. ger_kar 28.12.17 09:26 Сейчас в теме
(26)И после тотального удаления сжать еще раз.
27. espero 26 21.07.17 12:59 Сейчас в теме
Очень актуальная идея. Помогла для управляемого приложения, так как в обработке "Групповое изменение реквизитов" в отборе список объектов смешан (справочники, документы и др. и отфильтрован по имени), выбирать, что есть документ, что не документ - муторно. Подредактировал для управляемого приложения, добавив реквизиты "НачПериода" и "КонПериода" и сообщение в конце о выполнении.

&НаКлиенте
Процедура ПометитьНаУдалениеДокументы(Команда)
	ПометитьНаУдалениеДокументыНаСервере();
КонецПроцедуры

&НаСервере
Процедура ПометитьНаУдалениеДокументыНаСервере()
	
	Для Инд = 1 по Метаданные.Документы.Количество()-1 Цикл 
		Док = Метаданные.Документы.Получить(Инд); 
		Всего = 0; 
		НачатьТранзакцию(); 
		Счетчик = 0; 
		Выборка = Документы[Док.Имя].Выбрать(Объект.НачПериода, КонецДня(Объект.КонПериода)); 
		Пока Выборка.Следующий() Цикл 
			Всего 	= Всего + 1; 
			Счетчик	= Счетчик+1; 
			ВыборкаОбъект = Выборка.ПолучитьОбъект(); 
			ВыборкаОбъект.УстановитьПометкуУдаления(Истина); 
			Если Счетчик = 300 Тогда 
				ЗафиксироватьТранзакцию(); 
				НачатьТранзакцию(); 
				Счетчик = 0; 
			КонецЕсли; 
		КонецЦикла; 
		Если Всего <> 0 Тогда 
			Сообщить(""+Док.Имя+" - "+Всего); 
		КонецЕсли; 
	КонецЦикла;
	
	ЗафиксироватьТранзакцию();
	
	Сообщить("Выполено!");
	
КонецПроцедуры
Показать
28. MerwMebel 27.12.17 12:22 Сейчас в теме
Не знаю как и где применить))) думаю стоило-бы для людей не слишком хорошо знающих описать что то типа что надо создать обработку так то так, и пошагово описать все процессы для проверки работы данного кода!
29. catena 110 27.12.17 12:41 Сейчас в теме
(28)Людям не слишком хорошо знающим я б не стала давать в руки механизм удаления документов.
30. MerwMebel 27.12.17 15:10 Сейчас в теме
(29) Ну как бы правильно так сказать что бы было понятно, смысла в написании кода без уточнение как и где его вставить тоже наверное не будет хорошим решением!
Если у меня ручки кривые то я наверное этот код добавлю в какой то модуль например общий конфигурации и будет огромный бубин для работы конфы в дальнейшем! Может Вы от части и правы но так Вы дали код механизм которого понятен но не понятно куда его вставлять))) и какой то умник если его вставит или пропишет там где не надо без вазелина уже точно будет не справится)))
31. catena 110 28.12.17 05:36 Сейчас в теме
(30)Любой код вставляется в то место, из которого его удобно будет вызывать согласно поставленной задачи.
Изначально же, в данной теме, вопрос стоял об опитимизации операции удаления. Вы предлагает требовать готового под ключ решения от людей, которые бесплатно дают рекомендации на форуме и ничем, собственно, даже не подтверждают свою квалификацию? Рыть решения в интернете на форуме для разработчиков - подразумевает, что либо человек достаточно хорошо владеет предметом, чтобы не просто скопипастить, но и оценить предложенный листинг на предмет рисков и соответствия. Либо достаточно глуп, чтобы запустить первое попавшееся решение в первом попавшемся месте на боевой базе. И вот тут, простите, гранатой может стать что угодно.
Rustavelli; user611208_ilnur.shay; iov; ger_kar; +4 Ответить
33. MerwMebel 29.12.17 23:51 Сейчас в теме
(31) ВОТ ТЕПЕРЬ ОТВЕТ ВЕРЕН!!! СТАВЛЮ ПЛЮС )))))))))))
36. user970589 10 06.08.19 17:39 Сейчас в теме
хм. а если надо удалить все документы только по одной организации?
37. l2qweit 20.12.19 12:44 Сейчас в теме
&НаКлиенте
Процедура УдалитьДокументы(Команда)
	
	
	лДата = ДатаНачинаяСКоторойУдалитьДокументы;
	
	текстЗапроса = ПолучитьТекстЗапросаПовсемДкоументам();
	
	Пока лДата <= КонецМесяца(ТекущаяДата()) Цикл
		Состояние("",,лДата);
		УдалитьДокументыНаСервере(текстЗапроса,лДата);
		лДата = КонецДня(лДата) +1;
	КонецЦикла;
КонецПроцедуры

&НаСервереБезКонтекста
Процедура УдалитьДокументыНаСервере(текстЗапроса,дата)
	// Вставить содержимое обработчика.
	Запрос = Новый Запрос;
	Запрос.Текст = текстЗапроса;
	Запрос.УстановитьПараметр("ДатаН", НачалоДня(дата));
	Запрос.УстановитьПараметр("ДатаК", КонецДня(дата));
	
	рез = Запрос.Выполнить().Выбрать();
	
	Пока рез.Следующий() Цикл
		оДок = рез.Ссылка.ПолучитьОбъект();
		Если ЛОЖЬ Тогда оДок = Документы.АвансовыйОтчет.СоздатьДокумент(); КонецЕсли;
		оДок.ОбменДанными.Загрузка = Истина;
		оДок.Удалить();
	КонецЦикла;
	
КонецПроцедуры


&НаСервереБезКонтекста
Функция ПолучитьТекстЗапросаПоВсемДкоументам()
	
	мИсключения = Новый Массив;
	мИсключения.Добавить("УстановкаЦенНоменклатуры");
	
	ТекстЗапроса = "ВЫБРАТЬ * ИЗ (";
	ТекстЗапроса = ТекстЗапроса + Символы.ПС + "ВЫБРАТЬ TOP 0 null КАК Ссылка, null КАК Дата";
	Для Каждого Док из Метаданные.Документы Цикл 
		
		Если мИсключения.Найти(Док.Имя) <> НЕОПРЕДЕЛЕНО Тогда
			Продолжить;
		КонецЕсли;
		
		ТекстЗапроса = ТекстЗапроса + Символы.ПС
			+ "UNION ALL"
			+ Символы.ПС
			+ "ВЫБРАТЬ Ссылка, Ссылка.Дата ИЗ Документ."+Док.Имя+" ГДЕ Дата >= &ДатаН И Дата <= &ДатаК";
		
	конецЦикла;	
	ТекстЗапроса = ТекстЗапроса + Символы.ПС
		+ ") Т"
		+ Символы.ПС
		+ "ORDER BY Т.Дата"
	;
		
	Возврат ТекстЗапроса;
конецФункции
Показать



В функе "ПолучитьТекстЗапросаПоВсемДкоументам" добавляем любые кондиции (по организации или чему угодно)
Djo82; anton_k; svmix; +3 Ответить
39. ketr 129 30.03.24 12:30 Сейчас в теме
(37) А как потом быть с битыми ссылками в регистрах накоплений и сведений?
42. CheBurator 2725 15.01.25 17:15 Сейчас в теме
(39)
в регистрах накоплений

если удалены все доки, то и в регистрах накоплений при поддержании ссылочной целостности, будет пусто (наверное?). поэтому можно тупо грохнуть/занулить все битые регистры.
40. Djo82 12 15.01.25 14:23 Сейчас в теме
38. ByByKa 3 20.10.20 11:40 Сейчас в теме
(37)
Объект.ОбменДанными.Загрузка = Истина;
В разы ускоряет процесс. Спасибо
41. CheBurator 2725 15.01.25 17:13 Сейчас в теме
Если спец знает архитектуру конфигурации - то проще напрямую в СУБД грохнуть таблицы журналов, документов, регистров етц. И скриптом в той же СУБД "почистить" ссылки и прочее, относящееся к удаленным докам. Проблема в том, что у нас спецов не осталось почти, только умеющие пришивать лдевый рукав...
Оставьте свое сообщение

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