Обрезание или свертка базы (оперативный учет)

Опубликовал ahmet в раздел Обработки - Свертка базы

Документ ОБРЕЗКА. Формирует при проведении фиксацию остатков на определенную дату по всем регистрам оперативного учета. Универсален - конфигурация может быть любой (стандартной или самодельной). Обрезание по полной программе - база 10 гиг. ТОРГОВЛИ обрезается за 15 мин.

Формирует при проведении фиксацию остатков на определенную дату по всем регистрам оперативного учета.
Универсален - конфигурация может быть любой (стандартной или самодельной).
Очень быстр - обрабатывает 10 гиг. базу за 5 мин.

Вообщем сам режу и другим обрезаю...

Обрезание по полной программе
Проводится только один раз - последний
Все документы до этого необходимо удалить!!!
Проведение документа необратимо
- поэтому все пробуем на копии
- в отчетах могут появиться надписи типа
страшного в этом нет
Наверное есть и недостатки

22.11.2011 г.

Порядок обрезки

- Запускаем обработку

- У меня база 20 гиг обработка отработала 30 мин. Сервер 4 ядра 8 гиг

- Далее переносим ТА на самый первый документ - Переносилось окло 20 мин

- Удаляем все доки до дакумента Обрезки - заняло 4 часа.

- Переносим ТА на документ ОБРЕЗКА. -  по времени еще 2-3 часа...

Вот и все.

 

Этот код полностью устраняет ошибку битых ссылок, но он заточен под мою конфигурацию.
 
[CODE]   //Расчитываем регистры
    СписокРег = СоздатьОбъект("СписокЗначений");
    СписокРег.ИзСтрокиСРазделителями(СокрЛП(РегистрОстатка));
    Если Проведен() = 0 Тогда
        ВремРег=СоздатьОбъект("Регистры");
        //Пробезаем по всем регистрам, которые отмечаны галочкой
        Для й=1 по СписокРег.РазмерСписка() Цикл
            РегОст = Строка(СокрЛП(СписокРег.ПолучитьЗначение(й,"")));    
            Рег=ВремРег.ПолучитьАтрибут(РегОст);
           // Рег=СоздатьОбъект("Регистр."+РегОст);
            Рег.Временныйрасчет(1);
            // РассчитатьРегистрыНа(ДатаДок);
            ВремРег.РассчитатьРегистрыНа(ТекущийДокумент());           
            //Присваеваем значений переменным
            РегистрПроведения = Метаданные.Регистр(РегОст);
            ГлавРег = Регистр.ПолучитьАтрибут(РегОст);
            КолИзмерений = РегистрПроведения.Измерение();
            КолРесурсов = РегистрПроведения.Ресурс();
            КолРеквизитов = РегистрПроведения.Реквизит();
            ТЗ = СоздатьОбъект("ТаблицаЗначений");
   Сообщить("регистр "+РегОст+" измерений "+КолИзмерений+" ресурсов "+КолРесурсов+" реквизитов "+КолРеквизитов);
            Рег.ВыгрузитьИтоги(ТЗ);
   КолСтрок = ТЗ.КоличествоСтрок();
          
   Если  КолСтрок = 0 Тогда
    Сообщить("регистр "+РегОст+" нет данных по движению - ПРОПУСКАЕМ..." );
    Продолжить;
   КонецЕсли;
   // взаиморасчеты свернем чего копить
   Если РегОст="Взаиморасчеты" Тогда
    Сообщить(""+ТекущееВремя()+" свертка взаиморасчетов "+КолСтрок);
    ТЗ.Свернуть("Клиент,Фирма","Сумма");
    ТЗ.ВставитьКолонку("КредДокумент",3,"Документ");
    КолСтрок = ТЗ.КоличествоСтрок();
   КонецЕсли;
   Если РегОст="ТП" Тогда
    Сообщить(""+ТекущееВремя()+" свертка долгов ТП "+КолСтрок);
    ТЗ.Свернуть("ТП,Клиент","Сумма");
    ТЗ.ВставитьКолонку("КредДокумент",2,"Документ");
    КолСтрок = ТЗ.КоличествоСтрок();
   КонецЕсли;
   Если РегОст="ОстаткиТоваров" Тогда
    Сообщить(""+ТекущееВремя()+" ДО свертка остатков товаров "+КолСтрок);
    ТЗ.Свернуть("Товар,Склад,Фирма","Остаток,Сумма");
    //ТЗ.ВставитьКолонку("КредДокумент",2,"Документ");
    КолСтрок = ТЗ.КоличествоСтрок();
    Сообщить(""+ТекущееВремя()+" после свертка остатков товаров "+КолСтрок);
   КонецЕсли;
   Сообщить(""+ТекущееВремя()+" начинаем обработку регистра "+РегОст+" всего  строк "+КолСтрок);
   //
   Если ИдетТест=1 Тогда
    ТЗ.ВыбратьСтроку();
    Продолжить;
   КонецЕсли;
   
   //
          // 
            //Делаем движение по этим остаткам, тем самым делаем полную копиб регистров на данное число
            Для А=1 по ТЗ.КоличествоСтрок() Цикл
                Состояние("Обрабатывается "+Строка(А)+" из "+Строка(КолСтрок));
                Для А1=1 по КолИзмерений Цикл
                    Рег=РегистрПроведения.Измерение(А1);
     Значение = ТЗ.ПолучитьЗначение(А,А1);
     Если ТипЗначения(Значение)=12 Тогда
      // документ всё равно будет удален подменяем текущим
      Значение  = ТекущийДокумент();
     КонецЕсли;
     
                    ГлавРЕГ.УстановитьАтрибут(Рег.Идентификатор,ТЗ.ПолучитьЗначение(А,А1));
                КонецЦикла;  
                Для А2=1 по КолРесурсов Цикл
                    Рег=РегистрПроведения.Ресурс(А2);
                    ГлавРЕГ.УстановитьАтрибут(Рег.Идентификатор,ТЗ.ПолучитьЗначение(А,А2+КолИзмерений));
    КонецЦикла;
    
                ГлавРЕГ.ДвижениеПриходВыполнить();
            КонецЦикла;
  КонецЦикла;
  Сообщить(""+ТекущееВремя()+" завершено");
    Иначе
        Предупреждение("Данный документ нельзя перепровести !!!");
        СтатусВозврата(0);
    КонецЕсли;[/CODE]
Наименование Файл Дата Размер Кол. Скачив.
svertka_MD.rar
.1187159305 27.02.13 7,84Kb 439 Бесплатно
18

См. также

Softonit Control - система удаленной поддержки пользователей для платформы 1С:Предприятие
Обработка для удаления данных с отбором и построением дерева ссылок в базах 1С 8.1-8.3 (обычное и управляемое приложение...
[1С 8] Мегапрайс: Помощник закупок (анализ продаж, анализ остатков, анализ прайсов) Планирование и автоматизация закупок...
Удаленная поддержка из 1С
Монтажная организация. Конфигурация для управленческого учета в строительно-монтажной организации (тендеры, наряды, заяв...
КОНЦЕПТУАЛЬНЫЕ РЕШЕНИЯ: CRM-система для холодного обзвона клиентов + ВИДЕООБЗОР
Мобильное приложение "Личные Финансы". Руководство пользователя
Использование терминала сбора данных
Пример работы с весами под управлением терминала МАССА через драйвер ScalesMassaK v1.1
Мегапрайс PRO: подсистема импорта, обработка и анализ прайсов в 1С УТ10 и УТ 11
CloudConf - облачный Конфигуратор
[1С8 УТ11] Мегапрайс: Рабочее место менеджера по продажам (подбор номенклатуры, помощник продаж, МОНИТОР ЗАКАЗОВ) для УТ...

Комментарии

Показать все сообщения
17. serguson 05.05.2009 06:28
Стандартная свертка предпринимателя думала над базой 6 гиг больше недели, после чего счастливо загнулась. Вашим документом свернулась за 4 часа.
Пусть не за 5 минут - все равно плюс.
# Ответить
18. maos 13.08.2009 14:01
Как раз то, что я искал
По поводу <объект не найден> - снова, как раз то что нужно
Мне необходимо было удалить всё-всё кроме остатков, другие обработки оставляют документы по ссылкам, а они мне тоже не нужны.
Большое спасибо!!!
# Ответить
19. Svetos 14.04.2010 08:31
А как ей установить? Я объединила конфигурацию, закинула компоненту DD в папку с базой, но теперь мой предприниматель стал называться сверткой 1.0 СКЛ и воще не запускается?
# Ответить
20. ahmet 14.04.2010 10:15
Думаю что Вам лучше пригласить специалиста!
# Ответить
21. yuraos 22.11.2011 06:56
Сhe Burashka пишет:
> в отчетах могут появиться надписи типа <объект не найден>
страшного в этом нет
Есть! Как пример: обрезал базу. После обрезки есть документ "возврат от покупателя", который ссылался документом-основанием на уже удаленную расходную накладную. Подмену ссылок удаленных объектов ты не проводишь. В результате будешь иметь возратную партию по нулевой себестоимости = косяк в учете.
..
надо четко понимать, что делая "быстрые" обрезки базы - следует ясно представлять себе последствия таких обрезок в ОБЩИХ СЛУЧАЯХ. А не только в своем частном. Ты, судя по всему, последствия представляешь не совсем верно. Так что - выкладывая такие "универсальные" док - надо писать достаточно четко область применимости, возможные проблемы и прочее - чего в этом случае не сделано. Фраза "Наверное есть и недостатки" - таковым описанием не считается - это есть у всех программм.
По хорошему, конечно, надо вкатать минус именно за пункт
"в отчетах могут появиться надписи типа <объект не найден>
страшного в этом нет" - особенно если учесть что ПустоеЗначение(СсылканаДокКоторыйОбъектНенайден)=0 - что может привести к тяжелым поискам глюкавости алгоритмов...

полностью согласен с Сhe Burashka!
<объект не найден> - это другими словами "битая ссылка"... и это не есть хорошо.
Это есть скорее плохо.
Для этого в конфигураторе есть тестирование-исправлении! :)))))
# Ответить
22. ahmet 22.11.2011 08:27
имеющий руки да сотворит лучшее!
Вот вариант проц. для рукасто головастых - ну а остальные... могут купить подобное здесь есть что то продажное.

Этот код полностью устраняет ошибку битых ссылок, но он заточен под мою конфигурацию.

   //Расчитываем регистры
    СписокРег = СоздатьОбъект("СписокЗначений");
    СписокРег.ИзСтрокиСРазделителями(СокрЛП(РегистрОстатка));
    Если Проведен() = 0 Тогда
        ВремРег=СоздатьОбъект("Регистры");
        //Пробезаем по всем регистрам, которые отмечаны галочкой
        Для й=1 по СписокРег.РазмерСписка() Цикл
            РегОст = Строка(СокрЛП(СписокРег.ПолучитьЗначение(й,"")));     
            Рег=ВремРег.ПолучитьАтрибут(РегОст);
           // Рег=СоздатьОбъект("Регистр."+РегОст);
            Рег.Временныйрасчет(1);
            // РассчитатьРегистрыНа(ДатаДок);
            ВремРег.РассчитатьРегистрыНа(ТекущийДокумент());            
            //Присваеваем значений переменным
            РегистрПроведения = Метаданные.Регистр(РегОст);
            ГлавРег = Регистр.ПолучитьАтрибут(РегОст);
            КолИзмерений = РегистрПроведения.Измерение();
            КолРесурсов = РегистрПроведения.Ресурс();
            КолРеквизитов = РегистрПроведения.Реквизит();
            ТЗ = СоздатьОбъект("ТаблицаЗначений");
			Сообщить("регистр "+РегОст+" измерений "+КолИзмерений+" ресурсов "+КолРесурсов+" реквизитов "+КолРеквизитов);
            Рег.ВыгрузитьИтоги(ТЗ);
			КолСтрок = ТЗ.КоличествоСтрок();
           
			Если  КолСтрок = 0 Тогда
				Сообщить("регистр "+РегОст+" нет данных по движению - ПРОПУСКАЕМ..." );
				Продолжить;
			КонецЕсли; 
			// взаиморасчеты свернем чего копить
			Если РегОст="Взаиморасчеты" Тогда
				Сообщить(""+ТекущееВремя()+" свертка взаиморасчетов "+КолСтрок);
				ТЗ.Свернуть("Клиент,Фирма","Сумма");
				ТЗ.ВставитьКолонку("КредДокумент",3,"Документ");
				КолСтрок = ТЗ.КоличествоСтрок();
			КонецЕсли;
			Если РегОст="ТП" Тогда
				Сообщить(""+ТекущееВремя()+" свертка долгов ТП "+КолСтрок);
				ТЗ.Свернуть("ТП,Клиент","Сумма");
				ТЗ.ВставитьКолонку("КредДокумент",2,"Документ");
				КолСтрок = ТЗ.КоличествоСтрок();
			КонецЕсли;
			Если РегОст="ОстаткиТоваров" Тогда
				Сообщить(""+ТекущееВремя()+" ДО свертка остатков товаров "+КолСтрок);
				ТЗ.Свернуть("Товар,Склад,Фирма","Остаток,Сумма");
				//ТЗ.ВставитьКолонку("КредДокумент",2,"Документ");
				КолСтрок = ТЗ.КоличествоСтрок();
				Сообщить(""+ТекущееВремя()+" после свертка остатков товаров "+КолСтрок);
			КонецЕсли;
			Сообщить(""+ТекущееВремя()+" начинаем обработку регистра "+РегОст+" всего  строк "+КолСтрок);
			//
			Если ИдетТест=1 Тогда
				ТЗ.ВыбратьСтроку();
				Продолжить;
			КонецЕсли;
			
			//
          //  
            //Делаем движение по этим остаткам, тем самым делаем полную копиб регистров на данное число
            Для А=1 по ТЗ.КоличествоСтрок() Цикл
                Состояние("Обрабатывается "+Строка(А)+" из "+Строка(КолСтрок));
                Для А1=1 по КолИзмерений Цикл
                    Рег=РегистрПроведения.Измерение(А1);
					Значение = ТЗ.ПолучитьЗначение(А,А1);
					Если ТипЗначения(Значение)=12 Тогда
						// документ всё равно будет удален подменяем текущим
						Значение  = ТекущийДокумент();
					КонецЕсли;
					
                    ГлавРЕГ.УстановитьАтрибут(Рег.Идентификатор,ТЗ.ПолучитьЗначение(А,А1));
                КонецЦикла;   
                Для А2=1 по КолРесурсов Цикл
                    Рег=РегистрПроведения.Ресурс(А2);
                    ГлавРЕГ.УстановитьАтрибут(Рег.Идентификатор,ТЗ.ПолучитьЗначение(А,А2+КолИзмерений));
				КонецЦикла;
				
                ГлавРЕГ.ДвижениеПриходВыполнить();
            КонецЦикла;
		КонецЦикла;
		Сообщить(""+ТекущееВремя()+" завершено");
    Иначе
        Предупреждение("Данный документ нельзя перепровести !!!");
        СтатусВозврата(0);
    КонецЕсли;
...Показать Скрыть
# Ответить
23. victuan 30.11.2011 06:50
(0) Ты уж определись 10 Гиг у тебя сворачиваются за 5 мин или за 15 мин? Такую противоречивую информацию ты даешь в кратком и полном описании своей обработки.

(7) "А давайте вместе доведем её до ума". А с чего ты решил, что она достойна доведения до ума? Зачем это делать вообще, если есть аналогичные достойные обработки, "доведенные до ума"?
# Ответить
24. nkvg_a 13.12.2011 19:42
Спасибо. Мне помогла ваша обработка. Подработал и свернул комплексную.
# Ответить
25. vas5780 19.04.2012 07:58
Попробую ей потренироваться на Аспект-Ювелир
# Ответить
26. vas5780 10.05.2012 11:53
не подошла обработка :(
# Ответить
Логин:
Пароль:
Текст сообщения*
Прикрепить файл
18
Другие публикации автора:

Создание 15.08.07 00:00

Обновление 28.11.11 17:07

№ Публикации 15011

Статистика:

Просмотры 3196

Загрузки 439

Комментарии 27