Конференция INFOSTART EVENT EVOLUTION 2013

См. все

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

15.08.2007 [28.11.2011 17:07] ahmet 16 [+] [−] Перейти к комментариям (26) Просмотров: 2033

Кому: Администратор / Программист
Тип: Внешняя обработка (ert,epf)
Платформа: 1С:Бухгалтерский учет 7.7 / 1С:Оперативный учет 7.7 / 1С:Расчет 7.7
Конфигурация: Не имеет значения / Все на 1С: 7.7
Вид учета: Не имеет значения
Раздел учета: Не имеет значения
Налоги: Не имеет значения
Отрасль: Не имеет значения
Страна: Россия
Операционная система: Не имеет значения

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

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

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

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

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

22.11.2011 г.

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

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

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

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

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

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

Вот и все.

 

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

http://ahmt.net

основное окно обработки

основное окно обработки

На публикацию ссылаются:

Оценка сообщества

16

Поставьте плюс, если вы рекомендуете данную публикацию к прочтению и использованию.
Плюс добавляет публикацию в Мои рекомендации.

[+] Рекомендую   [−] Не тратить время
Если рейтинг упадет до -5, то публикация автоматически скроется.