gifts2017

Автоперестановка границы рассчитанных итогов

Опубликовал Евгений (jake_qwert) в раздел Администрирование - Тестирование и исправление

Для больших баз данных 1С, например, более 80 ГБ, актуальным является вопрос авто пересчета итогов каждый месяц по всем регистрам, чтобы дата актуальности итогов всегда была на конец предыдущего месяца. Сторонние средства за ночь не успевают рассчитать итоги, например, по регистрам бухгалтерии очень долго происходит расчет итогов. Стандартные средства 1С требуют монопольный режим работы.
Я создал фоновое задание, которое выполняется каждую ночь и итоги всегда актуальны. Если кому-то пригодится такое решение, буду очень рад.

Смысл кода заключается в том, что последовательно по каждому регистру фоновое задание пытается двинуть на 1 месяц вперед границу итога и фиксирует транзакцию. В конфигурации необходимо создать новое регламентное задание, задать расписание его выполнения, например, каждую ночь, выбрать вызов функции из общего модуля, содержащей представленный в приложении код. 

Скачать файлы

Наименование Файл Версия Размер
Автоперестановка границы рассчитанных итогов 4
.txt 5,18Kb
29.02.16
4
.txt 1.0.5 5,18Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Антон Тоник (artichoke) 18.01.12 08:19
Пояснений по ходу текста нет, впрочем всё понятно из кода - последовательно обходятся регистры накопления и бухгалтерии, выполняется метод "УстановитьПериодРассчитанныхИтогов", во избежание проблем по окончанию работы с каждым регистром транзакция фиксируется, в 2-х словах описаны и ингредиенты регл.задания.
С первой публикацией, товарисч!
jake_qwert; +1 Ответить
2. alexpa (alexpa2005) 19.01.12 01:25
Всё красиво написано! Немного смущает ситуация, когда часть регистров пересчитается, а часть (или даже один) попадут под исключение и их дата итогов останется на месте.
Обработку можно ускорить, если убрать понятие МинДата и первый цикл. ТЗРассчитываемыхРегистров составить один раз и дальше работать с ней. Если транзакция прошла успешно, в ТЗРассчитываемыхРегистров увеличить дату ПредпочтительнаяДатаРасчетаИтоговМесяц для этого регистра на один месяц. Если новая дата больше ПредпочтительнаяДатаРасчетаИтогов - эту строку таблицы удалить. Если регистр попал под исключение - строку удалить. И так пока количество строк в ТЗРассчитываемыхРегистров не станет равным 0.
Правда по сравнению со временем расчета итогов данное ускорение будет крайне незначительным.
artichoke; +1 Ответить
3. Евгений (jake_qwert) 19.01.12 21:42
"Если новая дата больше ПредпочтительнаяДатаРасчетаИтогов - эту строку таблицы удалить. Если регистр попал под исключение - строку удалить. И так пока количество строк в ТЗРассчитываемыхРегистров не станет равным 0." ТЗ вынести за цикл заполнять 1 раз, согласен тогда улучшиться производительность, возьму себе на заметку. У меня была проблема что регистр бухгалтерии за ночь пол года успевает пересчитаться, база 109 Гб SQL Server 2008, стандартным средством очень долго, а тут на автомате скока успеет за ночь, на стока и двинет, очень удобно, уже с год даже не смотрю как там итоги, а до этого ночами пересчитывал сидел, то вылетет. Теперь вот собираюсь написать фоновое которое удаляло бы помеченные объекты на удаление, на которые нет ссылок, а то много всего помечено, а типовое средство требует монопольного режима, обработку нашел в интернете, но она почему-то вылетает при удаление, еще так и не разобрался почему, планирую фоновым тоже сделать универсально.
4. Карина Веселова (karinamt) 02.03.12 00:55
спасибо, теперь мне не придется ломать голову над тем как это сделать, совсем не ожидала, что кто то реализовал уже это! еще раз большое спасибо.
jake_qwert; +1 Ответить
5. Kostya Zhurov (It-developer) 20.08.13 13:58
Забавность ситуации в том, что пересчитывать их надо, но после изменения данных (перепроведение док-в в заднем периоде) их нужно пересчитать еще раз. Но в штатных средствах нет ничего, следящего за этим
jake_qwert; +1 Ответить
6. Осипов Сергей (fixin) 17.07.14 16:40
(3) есть переписанный код?