gifts2017

Свёртка базы

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

Традиционная свёртка предполагает следующий алгоритм: вычисление остатков на дату свёртки, формирование документов начальных данных и удаление предшествующих. Есть и другой подход:  создать распределённую информационную базу, выгрузить с определённой даты данные в подчинённый узел и отвязать его от базы.
Идея предлагаемой обработки несколько иная.

       Традиционная свёртка предполагает следующий алгоритм: вычисление остатков на дату свёртки, формирование документов начальных данных и удаление предшествующих. Если база велика, а она велика, иначе нет смысла её сворачивать, процесс может затянуться. Важно отметить, что в процессе свёртки штатная работа с базой не проводится, дабы не нарушить целостность и непротиворечивость данных. Есть и другой подход:  создать распределённую информационную базу, выгрузить с определённой даты данные в подчинённый узел и отвязать его от базы. Но и в этом случае процесс длительный и не предполагает штатную работу пользователей.


     Учетная система 1С:Предприятия построена на регистрах, которые, как правило, наполняются документами при их проведении. Если мы удалим документ, то удалим и движения этого документа. Чтобы сохранить движения при удалении документа мы можем подменить стандартный реквизит регистра - "Регистратор" на другой документ. При этом вся важная учетная информация не изменится. Не изменятся ни остатки на складах или задолженности контрагентов, ни текущее сальдо по счетам бухгалтерского учета, ни курс условной единицы, ни размер начислений и удержаний, ни отработанное время сотрудников. В качестве документа-подмены необходимо использовать те, у которых свойство "Проведение" имеет значение "Запретить". Такие документы в типовых конфигурациях есть, например "Операция" или "Корректировка записей регистров накопления". Однако существует ограничение в  использовании документов вроде "Корректировка записей регистров накопления" - далеко не все регистры имеют в качестве регистратора документы этого типа. Чтобы убрать это ограничение можно указать документ "Корректировка записей регистров накопления" в качестве регистратора для всех регистров. Можно и по другому - создать еще один документ такого типа и тем самым избежать проблем при обновлении типовых конфигураций.


    Что дает такой подход к свёртке? Прежде всего мы можем запустить перманентный (перманентный — постоянный, непрекращающийся, нескончаемый, неуклонный, систематический, методический, методичный, хронический, неустанный, безустанный, бесперебойный, безостановочный...) процесс свёртки, не оказывающий заметного влияния на штатную работу пользователей. Мы можем в любой момент запустить свёртку и в любой момент прекратить её. мы можем отобрать для свёртки документы определенного типа или какой-то конкретной организации.  Написать такую обработку, причем универсальную, для любых конфигураций, не составляет большого труда. Но корректно свёртывать в общем случае она не сможет. Почему? Дело в том, что довольно часто проведение документов зависит от "окружающей среды". Как пример можно рассмотреть проведение документа "Поступление товаров и услуг" в БП 2.0. Если у такого документа уже введен счет-фактура, то записи формируются одни, если нет - то другие. Поэтому при удалении документов свертываемого периода важно удалить сначала счет-фактуру.


    Чтобы идентифицировать подобного рода проблемы, для дальнейшего анализа и разрешения введен специальный режим: "Отладка".  При включенной отладке запоминается состояние регистров перед удалением документа и сравнивается с состоянием после удаления и подмены. Если состояние изменилось, свертка прекращается с выдачей соответствующего сообщения. Режим отладки можно не использовать, ускоряя ход выполнения свертки, однако в этом случае требуется тщательная сверка остатков на начало периода. Документы можно удалять непосредственно, включением соответствующего режима или только помечать на удаление. Переключение режимов осуществляется двойным кликом по надписи на форме.

    Инструкция по применению. Скачиваем файл _Свёртка_.cf и объединяем со своей конфигурацией. В результате появятся два новых объекта — документ "_УниверсальныйРегистраторЗаписейРегистров_" и обработка "_СвёрткаБазыДанных_". Документ следует назначить регистратором всех регистров конфигурации (закладка Движения), а в обработке реквизиту "Организация" назначить соответствующий тип данных. При включенном режиме непосредственного удаления, возможны конфликтные ситуации с правами доступа, в том числе на уровне записей.

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

Наименование Файл Версия Размер
Свертка 146
.cf 32,92Kb
26.12.13
146
.cf 32,92Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Юрий Былинкин (ardn) 26.12.13 14:00
2. indigo_ (indigo_) 26.12.13 14:03
(1) Нажмите на красную звездочку внизу публикации
3. Егор Серветник (day_light) 26.12.13 14:30
Интересная идея. в шапке статьи заявлено что для платформы 1с 8.2. Для 7.7 такой подход не подойдет?

И второй вопрос, этот метод уже использовался на практике? Можете расписать преимущества перед обычной сверткой?

Немного не ясно, что дает подмена регистратора? Потом удаляются документы которые делали движения, а "новый документ регистратор" остается? Как тогда будут работать алгоритмы завязанные на регистраторе?
4. Анянов Михаил (insurgut) 26.12.13 15:07
Объем данных уменьшится только на количество документов, в регистрах как все было, так и останется (а зачем нам старые обороты, когда важны только итоги на дату свертки?). Половинная свертка получается.
Taktic; mikhailovaew; +2 Ответить
5. Азбука Морзе 27.12.13 10:51
(3) day_light,

Интересная идея. в шапке статьи заявлено что для платформы 1с 8.2. Для 7.7 такой подход не подойдет?

Формы обработки и документа управляемая, поэтому только для 8.2(8.3) Для 7.7 есть свои свертки, например http://infostart.ru/public/65228/

И второй вопрос, этот метод уже использовался на практике? Можете расписать преимущества перед обычной сверткой?

Эту свертку тестировал на реальной бухгалтерии 2.0 и демо 3.0, ЗУП 2.5. Использую для многократно пиленой УТ 10.2 с кучей доморощенных регистров и документов. Преимущество перед обычной сверткой в случае с УТ 10.2 в том что она работает. Кроме того не нужен монопольный запуск, для каждого вида документа можно установить свой период свертки. Одни документы оставляются за последний год, другие за два, третьи вообще не удаляются.

Как тогда будут работать алгоритмы завязанные на регистраторе?

Если алгоритмы завязаны на регистратор определенного типа, тогда такие документы придется оставить, свертка позволяет, как отмечено выше, задать свой период для каждого вида документа.

(3) insurgut,

Объем данных уменьшится только на количество документов, в регистрах как все было, так и останется (а зачем нам старые обороты, когда важны только итоги на дату свертки?). Половинная свертка получается.

В рамках регистратора записи регистров накопления и бухгалтерии сворачиваются. В периодических регистрах сведений хранится вся история, хотя можно оставлять срез на дату регистратора. В дальнейшем, возможно, будет для этого специальная настройка. Данные регистров расчета пока не сворачиваются. Вопрос на стадии изучения. Скорее всего их нужно просто удалять вместе с документами.
mikhailovaew; +1 Ответить
6. Александр Зубцов (iov) 27.12.13 15:09
Делал немного иначе
свертка итогов - ввод начальных остатков. (это монопольно)
корректировкой записей вводил противоположные записи в нужных регистрах. получалась пара записей с разным значением. в сумме дает 0. (и это монопольно)

далее удалял парные записи из регистров нужных мне с транзакциями. (это уже с пользователями можно) (берите маленькими партиями и блокировки вас не будут беспокоить).
в итоге остаются документы необходимые для специфических систем учета взаиморасчетов и прочее.
остальные документы не имеющие записи по регистрам - удалял через стандартную пометку и удаление.

процедуры не влияют на работу пользователей кроме замедления на больших объемах. Но задержка по времени вам в помощь.

Если красяво оформить прогресс бары то на недельку (при реально больших объемах) у вас будет что показать руководству и коллегам.
Не забываем делать бекапы.
7. Rustam Aitzhanov (PYCTAM) 03.01.14 14:16
БП 2.0
Объединяться захотела только под платформой 8.3.
Думает ооочень долго причем использует только 1 процессор из 8 причем по началу обрабатывает документы быстро а потом по 1 за 2-4 секунды.
9. Азбука Морзе 10.01.14 10:00

(7) PYCTAM, Разве можно ожидать, чтобы скромная обработка управляла загрузкой процессоров. Воспользуйтесь советом Билла Гейтса и обратитесь к системному администратору:)

Что касается скорости, то да, действительно, поначалу пока набор записей регистратора невелик, работает намного шустрее. Так ведь и алгоритм такой - читается набор записей подчиненный регистратору, добавляются новые записи от очередного документа, по мере возможности свертываются и записываются в базу. Соответственно чем больше становится набор, тем дольше он читается и записывается. Для того чтобы, ограничить его размер воспользуйтесь соответствующей опцией:



У меня обработка запускается еженедельно(!), регламентным заданием в ночь на воскресенье и сворачивает данные одной недели двухлетней давности.
10. Rustam Aitzhanov (PYCTAM) 10.01.14 11:55
(9) Азбука Морзе, Да извиняюсь по поводу процессора это не в тему. А так база свернулась на ура. Спасибо за труды!
11. Viktor Smirnov (vsmirnov6) 14.01.14 17:40
Идея интересная, хотел протестить, но объеденяется только под 1С 8.3, А есть на 8.2??? Если нет, то измените заголовок!!!
12. Азбука Морзе 15.01.14 11:49
(11) vsmirnov6, одно из свойств конфигурации называется режим совместимости. Чтобы cf-ник для 8.3 превратить в cf-ник для 8.1/8.2 следует изменить режим совместимости (Конфигурация-Свойства-РежимСовместимости-Версия 8.1 или Версия 8.2.13 или ...) После этого сохранить конфигурацию в файле _Свертка_82.cf.
13. Viktor Smirnov (vsmirnov6) 15.01.14 16:36
14. Андрей Т (Twirus) 15.01.14 16:48
Отличная обработка. Автору большущее спасибо
15. Сергей Болбачан (sergbsv) 11.02.14 02:48
Требует 8.3 а заявленна как для 8.2 ;((
16. Азбука Морзе 11.02.14 09:10
(15) sergbsv, прочтите сообщение под номером 12 и ваши слёзы высохнут:)
17. Дмитрий Иванов (ivanov.dn) 08.04.14 19:38
(12) Азбука Морзе,прочитал сообщение под номером 12.Можно подробнее для чайников...Хочу свернуть базу 8.2.18.109.
18. Азбука Морзе 09.04.14 09:52
(17) ivanov.dn, Пожалуйста.

1.Скачиваем с сайта 1с платформу 8.3 и устанавливаем на свой компьютер.
2.Создаем пустую базу, в стартере которой указываем: Версия 1С:Предприятия 8.3
3.В эту базу грузим конфигурацию из файла _Свертка_.cf
4.Меняем режим совместимости: выделяем наименование конфигурации (например: БухгалтерияПредприятия...) - правая кнопка мыши -Свойства (в самом низу, открывшегося окна) - Режим совместимости - Версия 8.2.16
5.Сохраняем конфигурацию в файле _Свертка_8216.cf, который можно затем использовать для интеграции с вашей базой на платформе 8.2.18
19. Дмитрий Иванов (ivanov.dn) 10.04.14 11:48
(18) Азбука Морзе,БОЛЬШОЕ спасибо.Буду пробовать!
20. Makc O (beckss) 11.04.14 13:00
Пробовал на ут 10.3.27.2, ошибка при выполнение
{Обработка._СверткаБазыДанных_.Форма.ФормаУправляемая.Форма(177)}: Ошибка при вызове метода контекста (ПолучитьОбъект)
		МетаданныеДвижения = Обработка.КорректировкаЗаписейСсылка.ПолучитьОбъект().Метаданные().Движения;
по причине:
Элемент не выбран!
...Показать Скрыть
21. Азбука Морзе 14.04.14 09:16
Проверьте заполнен ли у вас реквизит формы "Документ-регистратор". Если заполнен, тогда поможет очистка кэша.
22. Владимир Клименко (KliMich) 30.06.14 21:08
Спасибо! Неплохой ликбез по свертке...
23. Илья Н (ilya.n) 18.01.15 12:25
Добрый день! У нас база УТ 10.3 на sql, объем около 10 Гб. В базе незначительные доработки.
Хотим провести свертку базы, типовая с итс "висит" сутки и результатов нет.
Подойдет ли нам Ваша обработка ?
24. Азбука Морзе 19.01.15 08:33
(23) ilya.n, Подходит для любой конфигурации. Действуйте согласно инструкции и все получится. Свертку можно осуществлять не останавливая работы пользователей, можно свернуть какие-то определенные типы документов, разные периоды для разных документов. Рекомендую на тестовой базе свернуть за 2-3 месяца в режиме "Отладка", чтобы убедится, что в правильности работы.
25. Владимир Клименко (KliMich) 03.02.15 23:06
Спасибо!
Хочу попробовать свернуть БГУ 2.0
Отнозначно плюс!
26. Stas Bobkov (stas1kbob) 20.02.15 14:05
вы сворачиваете 10.2 ут на какой платформе?
27. Азбука Морзе 24.02.15 08:11
28. Дмитрий Бабкин (DimaBab) 28.03.15 00:16
Добрый день!

На платформе 8.1.15.14 не получается это выполнить. Пишет "структура конфигурации несовместима с текущей версией платформы". Делал всё по подробной инструкции в 18 сообщении.
29. Гость 23.07.15 08:12
Азбука Морзе, скажите пож-та, у меня есть конфигурация "Зарплата и Управление Персоналом для Казахстана, редакция 2.0, ", сама конфигурация в 8.1, но оболочка в 8.2 подойдет ли ваша обработка?
30. Виктория Ушакова (Arbitrium) 12.09.16 03:34
Выдает ошибку
{Обработка._СверткаБазыДанных_.Форма.ФормаУправляемая.Форма(196)}: Ошибка при вызове метода контекста (УстановитьПометкуУдаления)
ДокументОбъект.УстановитьПометкуУдаления(Истина);
по причине:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{ОбщийМодуль.НастройкаПравДоступа.Модуль(138)}: Ошибка при получении значения атрибута контекста (ГраницыЗапретаИзмененияДанных)
СоответствиеГраницЗапрета = ПараметрыСеанса.ГраницыЗапретаИзмененияДанных.Получить();
по причине:
Попытка получения неинициализированного значения параметра сеанса