1с тис последовательность слетает
Ускорение процесса восстановления последовательности взаиморасчетов в БП КОРП
В систему регулярно поступают документы задним числом, что приводит к сбросу границы последовательности взаиморасчетов и потере актуальности расчетов. Для восстановления последовательности необходимо за ограниченное время перепровести все документы, начиная с даты этого документа и до сегодняшнего дня. При вводе документа месячной давности (что случается в системе практически ежедневно) необходимо будет перепровести около 100 000 документов за ночь.
По состоянию на начало проекта документы перепроводятся в среднем со скоростью 4.32сек. Таким образом, для перепроведения всех документов понадобится 120 часов (5суток), что совершенно неприемлемо с точки зрения бизнес-процессов предприятия.
Для того, чтобы ускорить систему до необходимого уровня (100 000 документов за 8часов) необходимо, чтобы один документ в среднем проводился 0.288 сек. Достигнуть такой производительности за разумный срок не представляется возможным.
Предложенное решение
Общая идея
Основная идея: разбить документы на независимые группы и перепроводить эти группы в несколько потоков, увеличивая таким образом скорость обработки данных за счет параллельности, а не ускорения проведения документа.
Для реализации такой схемы необходимо разделить документы на независимые группы, которые удовлетворяют следующим требованиям:
- При проведении документов одной группы не используются результаты проведения документов любой другой группы
- При проведении документов одной группы не происходит обращение к ресурсам (остаткам регистров и т.п.), которые могут затрагиваться при проведении документов из любой другой группы
Был проведен анализ бизнес-процессов данного предприятия и прдложено следующее решение: группировать документы по договору контрагента.
Анализ деталей реализации
Для физической реализации этой группировки было решено добавить в последовательность взаиморасчетов новое измерение: договор контрагента. В рамках проекта ЦКТП были проведены консультации с разработчиками типовой Бухгалтерии КОРП, которые подтвердили корректность такого решения. Из логики бизнес-процессов системы было очевидно, что документы, относящиеся к разным договорам являются независимыми. Были так же проведены эксперименты, которые показали, что при параллельном восстановлении последовательности по разным договорам контрагента не возникает обращений к общим ресурсам, то есть разные потоки не блокируются. Таким образом, предложенная группировка соответствует предъявляемым требованиям.
Были проведены эксперименты для вычисления оптимального количества параллельных потоков при восстановлении последовательности. Необходимо было выбрать такое количество потоков, которое обеспечивало бы максимальную загруженность оборудования и, соответственно, максимальную общую скорость восстановления последовательности. Это число потоков оказалось равным десяти. Таким образом, была найдена возможность ускорения процесса восстановления последовательности в 10 раз. Если раньше один документ проводился в среднем за 4.32 секунды, то теперь за это же время будет проводиться 10 документов, однако этого будет все еще недостаточно для достижения целевой производительности, поскольку 100 000 документов перепроведутся за 12 часов (вместо 8 требуемых).
Однако, выделение независимых групп документов за счет добавления нового измерения в последовательность позволяет так же сократить общее количество документов, которые необходимо перепровести. Раньше последовательность имела одну общую границу, и любое проведение задним числом влияло на все документы. Для восстановления такой последовательности(то есть, для перемещения границы на актуальную дату) необходимо было перепровести все документы. При добавлении в последовательность нового измерения ситуация кардинально изменилась. Теперь проведение документа задним числом влияет только на документы, имеющие такой же договор контрагента. Следовательно, теперь нужно перепроводить только документы с этим договором. Все остальные документы никак не затрагиваются и не должны перепероводится. Иначе говоря, у последовательности появилось множество разных границ (каждая граница - по своему договору контрагента), которые можно и нужно перемещать независимо друг от друга.
Анализ данных рабочей системы показал, что максимальное количество документов, которые необходимо будет перепровести с учетом этого нового фактора составляет около 30%от общего числа. То есть, вместо 100 000 документов необходимо перепровести всего около 33 000. Таким образом появилась реальная возможность уложиться в требования клиента по производительности и даже превысить их - восстановить последовательность всего за 4 часа.
Более углубленный анализ данных системы позволил выявить документы, которые нарушали построенную схему, так как мог относиться к нескольким договорам одновременно - это документы "Корректировка долга" и "Авансовый отчет". Документы этих типов присутствовали в системе, однако их количество было относительно невелико. В качестве решения проблемы был предложен следующий подход. Если в восстанавливаемом периоде времени присутствует документ содержащий более одного договора, то процесс восстановления выполняется следующим образом:
- Перепроводятся документы от начала нужного периода до момента времени документа "Корректировка долга" или "Авансовый отчет"
- Перепроводится документ "Корректировка долга" или "Авансовый отчет"
- Перепроводятся документы от момента времени документа "Корректировка долга" или "Авансовый отчет" до конца нужного периода
То есть, документы "Корректировка долга" и "Авансовый отчет" как бы разделяют весь временной отрезок перепроведения документов на меньшие подотрезки, внутри которых документы по-прежнему можно перепроводить параллельно. Это должно в целом несколько замедлить процесс восстановления последовательности, однако, с учетом имеющегося запаса (4 часа при требовании 8 часов) времени должно хватить.
Реализация механизма параллельного перепроведения
Реализованный механизм включает в себя обработку , которая позволяет пользователю настроить и запустить процесс восстановления последовательности. При запуске процесса обработка создает управляющее фоновое задание (см. ниже) и включает обработчик ожидания. При каждом срабатывании обработчика, обработка отображает ход восстановления последовательности и контролирует окончание процесса восстановления.
Управляющее фоновое задание анализирует текущее состояние последовательности и выделяет группы документов (по отдельным договорам), которые необходимо перепровести. При необходимости (если в заданном периоде присутствуют документы "Корректировка долга") группы по отдельным договорам дополнительно делятся на подгруппы по периодам между документами "Корректировка долга".
После этого управляющее фоновое задание запускает до 10 исполнительных фоновых заданий , каждому из которых выдается своя группа документов. Список исполнительных фоновых заданий контролируется с определенной периодичностью. После завершения фонового задания (что происходит после того, как группа обработана), запускается новое фоновое задание и ему выдается новая группа.
Исполнительное фоновое задание получает на входе номер группы документов (из списка, составленного управляющим фоновым заданием), которые необходимо перепровести. После завершения перепроведения всех документов группы, исполнительное фоновое задание помечает группу, как обработанную, и завершается.
Результат
По данным, полученным на рабочей базе после внедрения нового механизма восстановления последовательности, он позволяет актуализировать данные по взаиморасчетам за время, не превышающее 7.5 часов.
Дата публикации 12.07.2017
Использован релиз 2.2.2
Отдельного инструмента восстановления последовательности движений документов, как в предыдущих поколениях программ (например, в прикладном решении "Управление производственным предприятием"), нет. В новых редакциях "1С:КА" и "1С:ERP" такой механизм не требуется. Восстановление последовательности движений по документам осуществляется автоматически при выполнении регламентных заданий в рамках закрытия месяца.
Если после выполнения регламентных заданий выполнить перепроведение документов, то регламентное задание необходимо выполнить заново. Поэтому если в документах не меняются данные, а требуется только изменить их хронологию, то выполнять групповое перепроведение не нужно.
Если необходимо запустить выполнение регламентного задания с определенной даты, допускается ручное добавление записи в регистр заданий. Для добавления записи в регистр заданий необходимо выполнить следующее:
- Меню: Главное меню – Все функции – Регистры сведений (рис. 1).
- Если команда "Все функции" не отображается, то следует включить ее использование с помощью команды "Главное меню" – "Сервис" – "Параметры".
- Выбрать нужный регистр из доступных:
- Задания к закрытию месяца.
- Задания к заполнению этапов производства.
- Задания к отражению в бюджетировании.
- Задания к отражению экземпляров бюджета.
- Задания к погашению стоимости ТМЦ в эксплуатации.
- Задания к распределению расчетов с клиентами.
- Задания к распределению расчетов с поставщиками.
- Задания к расчету графика производства.
- Задания к расчету нормативной длительности производства.
- Задания к расчету себестоимости.
- Задания к формированию записей книги покупок/продаж.
- Например, регистр сведений "Задания к закрытию месяца" (рис. 2).
- Кнопка "Создать".
- В новой форме "Задания к закрытию месяца" укажите месяц и организацию. Операцию, номер задания и документ указывать необязательно.
- Кнопка "Записать и закрыть".
После добавления записи в регистр заданий необходимо выполнить запуск выполнения регламентного задания в рабочем месте "Закрытие месяца" в разделе "Финанасовый результат и контроллинг – Закрытие месяца".
Смотрите также
Читайте также: