|
Как удалить ТЧ дока в скуле с фильтром на дату? | ☑ | ||
---|---|---|---|---|
0
Обработка
07.09.22
✎
11:42
|
Доки в скуле удаляю так;
delete _Document13589 FROM _Document13589 where _Date_Time < '40210101' А как мне удалить ТЧ тоже с фильтром даты? Пример: delete _Document13383_VT13393 FROM _Document13383_VT13393 |
|||
1
mikecool
07.09.22
✎
11:43
|
иннер джойн шапка и отбор по дате
|
|||
2
mikecool
07.09.22
✎
11:44
|
а вообще - надо удалять ТЧ уже не существующих доков
|
|||
3
Обработка
07.09.22
✎
11:44
|
(1) Понмаю. Но можно пример?
В скуле очень редко что делаю. |
|||
4
Bigbro
07.09.22
✎
11:45
|
Delete From d From DT1813 d
INNER JOIN _1SJourn j on d.iddoc = j.iddoc and j.ismark = 1 WHERE j.Date_Time_IDDoc < '20220901' |
|||
5
Обработка
07.09.22
✎
11:45
|
(2) Задача для себя нариовалась. ТЧ много строк сам док делает всего 6 проводок.
В старых периодах хочу замочить ТЧ. Тем более базе копии для разработки. |
|||
6
Bigbro
07.09.22
✎
11:45
|
упс пардон тут снеговиков лепят.
|
|||
7
mikecool
07.09.22
✎
11:47
|
(5) сделай лефт джойн "шапки" по ИД
Где ИД "шапки" есть нулл |
|||
8
mikecool
07.09.22
✎
11:47
|
+7 удалишь ТЧ по удаленным "шапкам"
|
|||
9
Обработка
07.09.22
✎
11:48
|
(8) Я же шапки не удаляю.
|
|||
10
Обработка
07.09.22
✎
11:48
|
Я привел чисто пример по доку.
|
|||
11
mikecool
07.09.22
✎
11:50
|
тогда п1
|
|||
12
ptiz
07.09.22
✎
12:11
|
(0) В качестве заготовки:
Процедура УдалитьНепосредственноДокументы(ИмяДокумента, Дата1, Дата2) Экспорт Сообщить("удаление " + ИмяДокумента + " " + ТекущаяДата()); ОбъектМетаданных = Метаданные.Документы[ИмяДокумента]; МассивМД = Новый Массив; МассивМД.Добавить(ОбъектМетаданных); ТаблицаБД = ПолучитьСтруктуруХраненияБазыДанных(МассивМД, Истина); // Основная таблица ИмяТаблицыДокумента = ТаблицаБД.Найти("Основная", "Назначение").ИмяТаблицыХранения; Для каждого СтрокаТЗ Из ТаблицаБД Цикл Если СтрокаТЗ.Назначение = "ТабличнаяЧасть" Тогда // чистим таб.часть ИмяТаблицы = СтрокаТЗ.ИмяТаблицыХранения; ИмяПоляСсылки = ""; Для каждого СтрокаПолей Из СтрокаТЗ.Поля Цикл Если Найти(СтрокаПолей.ИмяПоляХранения, "_IDRRef") > 0 Тогда ИмяПоляСсылки = СтрокаПолей.ИмяПоляХранения; Прервать; КонецЕсли; КонецЦикла; Команда = "DELETE vt FROM " + ИмяТаблицы + " vt |INNER JOIN " + ИмяТаблицыДокумента + " t | ON vt." + ИмяПоляСсылки + " = t._IDRRef | WHERE t._Posted = 0 | and t._Date_Time <= " + ДатаСтрокойВSQL(КонецДня(Дата2)); Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1 Ссылка ИЗ " + СтрокаТЗ.ИмяТаблицы + " ГДЕ НЕ Ссылка.Проведен И Ссылка.Дата <= &Дата2"); Запрос.УстановитьПараметр("Дата1", Дата1); Запрос.УстановитьПараметр("Дата2", КонецДня(Дата2)); Результат = Запрос.Выполнить(); Пока НЕ Результат.Пустой() Цикл ВыполнитьКомандуSQL(Команда, ИмяДокумента); Результат = Запрос.Выполнить(); ОбработкаПрерыванияПользователя(); КонецЦикла; КонецЕсли; КонецЦикла; // сначала удалим записи из журналов СписокЖурналов = ПолучитьСписокЖурналовДокумента(ИмяДокумента); Для каждого ИмяЖурнала Из СписокЖурналов Цикл МассивМД = Новый Массив; МассивМД.Добавить(Метаданные.ЖурналыДокументов[ИмяЖурнала.Значение]); ТаблицаБД = ПолучитьСтруктуруХраненияБазыДанных(МассивМД, Истина); ИмяТаблицыЖурнала = ТаблицаБД.Найти("Основная", "Назначение").ИмяТаблицыХранения; Команда1 = "DELETE vt FROM " + ИмяТаблицыЖурнала + " vt |INNER JOIN " + ИмяТаблицыДокумента + " t | ON vt._DocumentRRef = t._IDRRef | and t._Posted = 0 | and t._Date_Time <= " + ДатаСтрокойВSQL(КонецДня(Дата2)); ВыполнитьКомандуSQL(Команда1, ИмяДокумента); КонецЦикла; // чистим документы Команда = "DELETE t FROM " + ИмяТаблицыДокумента + " t | WHERE t._Posted = 0 | and t._Date_Time <= " + ДатаСтрокойВSQL(КонецДня(Дата2)); ВыполнитьКомандуSQL(Команда, ИмяДокумента); КонецПроцедуры |
|||
13
TormozIT
гуру
07.09.22
✎
14:31
|
Ты там десятки миллионов документов удаляешь? Можно же без таких сложностей, но в несколько раз дольше удалить надежно и безопасно во встроенном языке.
А тему эту забанят? =) |
|||
14
Обработка
07.09.22
✎
14:35
|
(13) Всего лишь ТЧ одного документов при этом оставляя сам док и его движения.
Просто база большая. Для нужд "разработки!" хочу жирные таблицы убрать. Эта ТЧ занимает 70-80 ГБ всего записей в ТЧ 180 млн а самих документов где то 260 тыс. И проводок в нем тоде не много кадлый док длает 4-5 проводок и 2 записи РН и все. |
|||
15
TormozIT
гуру
07.09.22
✎
14:40
|
(14)
Объект = Документ.ПолучитьОбъект(); Объект.ТЧ.Очистить(); Объект.ОбмедДанными.Загрузка = Истина; // Ну еще авторегистраю можно отключить Объект.Записать(); |
|||
16
Конструктор1С
07.09.22
✎
18:00
|
Не зная броду, не суйся в воду (с) народное
Если такие вопросы задаешь, то рановато тебе скулём баловаться |
|||
17
Обработка
08.09.22
✎
06:33
|
(16) Ну зачем такие спешные выводы?
22 года в 1С. Еще в 1с77 в скуле много что делали. Свертка базы на 1с77 скульными методами делал. Не свое конечно а именно юзал то что в гуле умные ребята предлагали. Просто в скуле я не пишу никакие запросы всегда только в 1С. Но тем не менее отлично понимаю внутреннюю кухню! Все нормально получилось у меня (уменьшил базу на 160 ГБ удалив регистрации узлов и удалив ТЧ дока одно): DELETE vt FROM _Document13383_VT13393 vt INNER JOIN _Document13383 t ON vt._Document13383_IDRRef = t._IDRRef WHERE t._Date_Time <= '40220501' DBCC SHRINKDATABASE ('GO_LOG_OLD', 10); |
|||
18
Обработка
08.09.22
✎
06:39
|
В догонку...
Кстати в 2005м мой нач ИТ заставил запросы в скуль писать для каких то отчетов. Я отказался, сказал что только в рамках 1С. Для этой отчетности взяли другого спеца. И Через некоторое время успешно похоронили проект по отчетом в 1С через скуль. Никогда не любил и не интересовался все что снаружи 1С. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |