Кому: Администратор / Программист
Тип: Внешняя обработка (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); КонецЕсли;|
основное окно обработки |
Поставьте плюс, если вы рекомендуете данную публикацию к прочтению и использованию.
Плюс добавляет публикацию в Мои рекомендации.
[+] Рекомендую
[−] Не тратить время
Если рейтинг упадет до -5, то публикация автоматически скроется.