![]() |
![]() |
![]() |
|
быстрая очистка регистра бухгатерии | ☑ | ||
---|---|---|---|---|
0
MegaKent
13.10.10
✎
07:51
|
Здрасти.
как быстро очистить регистр бухгалтерии за опреденный период. по определенно организации примечание: движения делает только документ "ОперацияБух" Конфа: Бух 2.0 платформа 8.2 пояснение: как бы вообще я килю большое количество этих документов за ~2 месяца тут возникла идея не открывать у каждого дока движения вычищать их а потом килять документ. мож просто очистить все движения))) а то в рабочей базе это делается около часа. а загрузка доков и движений минут 20-30 сейчас работает вот так вот: Процедура ЗагрузкаБазЗаМесяц(ОчищатьОрганизации=истина) экспорт спрБазы=Справочники.Нов_ВнешниеБазы.Выбрать(); Пока спрБазы.Следующий() Цикл ДатаНач=НачалоМесяца(ДобавитьМесяц(ТекущаяДата(),-1)); ДатаКон=КонецДня(ТекущаяДата()); Если ОчищатьОрганизации Тогда СообщитьЭкранФаил("База ("+спрБазы.Наименование+"), очещается. время начала выборки данных - "+строка(ТекущаяДата())); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОперацияБух.Ссылка |ИЗ | Документ.ОперацияБух КАК ОперацияБух |ГДЕ | ОперацияБух.Дата >= &ДатаНач | И ОперацияБух.Дата <= &ДатаКон | И ОперацияБух.Организация = &Организация | |УПОРЯДОЧИТЬ ПО | ОперацияБух.Дата"; запрос.УстановитьПараметр("ДатаНач",ДатаНач); запрос.УстановитьПараметр("ДатаКон",ДатаКон); запрос.УстановитьПараметр("Организация",спрБазы.ссылка.Организация.ссылка); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); СообщитьЭкранФаил("База ("+спрБазы.Наименование+"), очещается. количество данных к очистки -"+ВыборкаДетальныеЗаписи.Количество()+". время начала очистки - "+строка(ТекущаяДата())); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл док=ВыборкаДетальныеЗаписи.ссылка; докО=док.получитьОбъект(); доко.Движения.Хозрасчетный.Очистить(); доко.Движения.Хозрасчетный.Записать(); доко.Записать(); доко.Удалить(); КонецЦикла; КонецЕсли; СообщитьЭкранФаил("База ("+спрБазы.Наименование+"), очещена. время окончания - "+строка(ТекущаяДата())); СообщитьЭкранФаил("База ("+спрБазы.Наименование+"), даты загрузки: " +Строка( ДатаНач)+" - "+ Строка(ДатаКон)); СообщитьЭкранФаил("База ("+спрБазы.Наименование+"), загружается. время начала - "+строка(ТекущаяДата())); ОбъБаза=спрБазы.ПолучитьОбъект(); обр=Обработки.Нов_ЗагрузитьВнешнююБазу.Создать(); обр.База=спрБазы.Ссылка; обр.ЗагрузитьПериодБазы(ДатаНач ,ДатаКон); ОбъБаза.ДатаПоследнейЗагрузки=ДатаКон; ОбъБаза.Записать(); СообщитьЭкранФаил("База ("+спрБазы.Наименование+"), загружена. время окончания -"+строка(ТекущаяДата())); конеццикла; КонецПроцедуры // ЗагрузитьМесяц() |
|||
1
MegaKent
13.10.10
✎
08:23
|
и тишина....
|
|||
2
asady
13.10.10
✎
08:57
|
(0) 1. нафига записывать объект если очищаешь только движения
2. рекомендую отключить использование итогов по очищаемым регистрам перед обработкой и включить их использование после. |
|||
3
Fragster
гуру
13.10.10
✎
09:01
|
truncate table... - работает быстрее всего
|
|||
4
MegaKent
13.10.10
✎
09:26
|
(2) а не надо ? да там при замере производительности не долго все делается (всмысле запись)
(3)хм.. ты имеешь ввиду запрос sql дать на сервер. пробывал так вот делать : Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОперацияБух.Ссылка как Док |ИЗ | Документ.ОперацияБух КАК ОперацияБух |ГДЕ | ОперацияБух.Дата >= &ДатаНач | И ОперацияБух.Дата <= &ДатаКон | И ОперацияБух.Организация = &Орг"; Запрос.УстановитьПараметр("ДатаКон", КонПериода); Запрос.УстановитьПараметр("ДатаНач", НачПериода); Запрос.УстановитьПараметр("Орг", Орг); Рез = Запрос.Выполнить(); тз=рез.Выгрузить(); мас=тз.ВыгрузитьКолонку("Док"); СпЗн=Новый СписокЗначений(); СпЗн.ЗагрузитьЗначения(мас); нз=РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); нз.Отбор.регистратор.ВидСравнения=ВидСравнения.ВСписке; нз.Отбор.регистратор.Использование=Истина; нз.Отбор.регистратор.Значение=СпЗн; нз.Прочитать(); нз.Очистить(); нз.Записать(); оказалось что список низя в отбор по регистратору цитирую СП : Тип: Отбор. Содержит объект Отбор, по которому осуществляется текущая фильтрация записей при считывании или записи набора. Позволяет отобрать записи с определенным регистратором при считывании или записи набора. Важно! Отбор может устанавливаться только на равенство. последняя строчка не порадовала (((( еще есть варианты делать через стандартные средства? |
|||
5
asady
13.10.10
✎
11:26
|
(4) при отключенных итогах всё залетает
|
|||
6
MegaKent
13.10.10
✎
11:54
|
(9)
просто баз у меня 9 штук.. отключение быстрое.. включение занимает порядка 20-50 минут выйгрыш не большой.. или "плохому танцору всегда что-то мешает" ?? ))))) |
|||
7
asady
13.10.10
✎
12:15
|
МР = РегистрыБухгалтерии.Хозрасчетный;
НЗБух = МР.СоздатьНаборЗаписей(); МР.УстановитьИспользованиеИтогов(Ложь); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОперацияБух.Ссылка как Док |ИЗ | Документ.ОперацияБух КАК ОперацияБух |ГДЕ | ОперацияБух.Дата >= &ДатаНач | И ОперацияБух.Дата <= &ДатаКон | И ОперацияБух.Организация = &Орг"; Запрос.УстановитьПараметр("ДатаКон", КонПериода); Запрос.УстановитьПараметр("ДатаНач", НачПериода); Запрос.УстановитьПараметр("Орг", Орг); Рез = Запрос.Выполнить(); Выборка=рез.Выбрать(); Пока Выборка.Следующий() Цикл нзБух.Отбор.регистратор.Установить(Выборка.Док); нзБух.Прочитать(); Если нзБух.Количество()>0 Тогда нзБух.Очистить(); нзБух.ОбменДанными.Загрузка=Истина; нзБух.Записать(Истина); Сообщить("Очистили движения по проводкам документа "+Выборка.Док); Конецесли; тОбъект = Выборка.Док.ПолучитьОбъект(); Сообщить("Одаляем документ "+Выборка.Док); тОбъект.Удалить(); КонецЦикла; МР.УстановитьИспользованиеИтогов(Истина); если документов много выигрыш будет большой |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |