Отправляет email-рассылки с помощью сервиса Sendsay

1С и электронная коммерция

  Все выпуски  

1С и электронная коммерция Групповое проведение документов. Ускоряемся?




1С и электронная коммерция    Рассылка сайта Системная интеграция + 1С

Понедельник, 21 Апреля 2008 года (8 Апреля 2008 по ст.ст.)
Страстная седмица, Великий Понедельник


Великий пост. Апп. от 70-ти Иродиона, Агава, Асинкрита, Руфа, Флегонта, Ерма и иже с ними (I). Свт. Нифонта, еп. Новгородского (1156). Прп. Руфа послушливого, затворника Печерского, в Дальних пещерах (XIV). Мч. Павсилиппа (117-138). Свт. Келестина (Целестина), еп. Римского (432). Новомч. Иоанна (1669).

Групповое проведение документов. Ускоряемся?

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

Довольно часто при решении задач в системе 1С:Предприятие возникает необходимость в групповом проведении документов. Одна из основных причин – исправление ошибок, которые могут возникнуть за какой-либо прошлый период. Иногда это является частью алгоритма работы. Например, в течение одного месяца ведется только количественный оперативный учет, а затем, в конце месяца, формируются бухгалтерские проводки и суммовой учет в оперативной подсистеме. Есть еще много причин, но статья посвящена не этому.

Цель статьи – разобраться, как можно ускорить выполнение этой задачи в системе 1С:Предприятие 7.7 (версия для SQL). Довольно часто приходится слышать, что в этой версии групповое проведение работает значительно медленнее, чем в DBF-версии.

Сразу хочу заметить, что групповое проведение в 1С можно реализовать несколькими способами: своей обработкой, через меню «Операции – Проведение документов». При этом второй способ, как вы наверное могли заметить, работает быстрее, нежели проведение документов с помощью обработки (по сути это перепроведение документов с помощью метода Провести).

Дело в том, что, как мне кажется, в этом случае система оптимизирует расчет остатков при проведении документов. Во всяком случае, наблюдения за системой через Profiler, подтверждают такой вывод. Я не обнаружил сложных вычислений остатков, а также увидел некоторые «подозрительные» манипуляции с таблицей остатков. Долго разбираться не хватило сил – при проведении всего двух документов список сообщений в Profiler состоял  из нескольких десятков страниц.

Хотелось бы также заметить, что и в первом случае возможно оптимизированное проведение документов. Для этого можно использовать метод Актуальность. Прочтя документацию по V7 и дополнительные материалы, я, к сожалению, не нашел нигде упоминания об использовании этого метода для оптимизации проведения документов оперативного учета. То есть применять его (следуя документации) можно, но только для проведения документов использующих бухгалтерскую компоненту. Пример использования данного метода можно посмотреть в стандартной обработке бухгалтерских конфигураций 1С "ОбработкаДокументов".

На этом закончим рассмотрение стандартных способов оптимизации. Перейдем к основной части статьи – оптимизация с использованием собственных алгоритмов. Почему слово «ускоряемся» стоит под знаком вопроса? Да потому, что это всего лишь теоретические выкладки, которые нужно проверять на практике и, что самое главное – произвести сравнение со стандартными методами. Если вдруг случится такое невероятное событие, что у меня появится неделька свободного времени, то вполне возможно, что я проведу такие испытания и при их успешном завершении (то есть если будет получен значительный выигрыш производительности) включу данную возможность в свою компоненту ToySQL.

Итак, (наконец-то ;-) сам алгоритм.

Идея алгоритма заключается в следующем. При расчете итогов мы сохраняем их (то есть рассчитанные итоги) во временной таблице. При этом нужно выбрать периодичность сохранения остатков. Я предлагаю делать это с периодичностью в день. Можно, конечно, хранить остатки на каждый рассчитанные документ, но при этом объем данных будет слишком велик (особенно если документов много).

Хотя можно внести изменения в алгоритм так, чтобы лишние данные удалялись – проще всего это будет делать, если проведение документов идет в одном направлении (по времени). Обычно это так, но пока оставим рассмотрение данного момента на потом.

Остатки будем хранить только по тем позициям, для которых они рассчитываются в текущем документе. Этот момент очень важен. Например, если документы проводятся только по определенным позициям или если случилось так, что в этом периоде по документам «прошло» только какое-то подмножество измерения регистра, то расчет остатков существенно ускорится. Таким образом, достигается высокая гибкость алгоритма. Также важный момент алгоритма в том, что не обязательно проведение документов производить в одном направлении, так как остатки хранятся и за предыдущие дни.

Рассмотрим работу алгоритма на одном регистре.

Входные данные:

Регистр хранения остатков <ТабОст, ТабДвиж>,
ТабОст = ФО(Изм1, Изм2, .. ИзмН, Период) -> Рес,
ТабДвиж = ФД(Изм1, Изм2, .. ИзмН, Документ) -> Рес,

Последовательность проведения документов
ДП = {ДI = <Дата, Изм1, Изм2, .. ИзмН>}I = 1..N.

Вспомогательные данные:
Промежуточная таблица хранения итогов
ВремИтоги = ФВ( Область)->Рес. Область ={ <Изм1, Изм2, .. ИзмН, Период>}.

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

Функция расчета остатка на любую дату (документ)
Ф(Изм1, Изм2, .. ИзмН, Дата_Документ) =
?(Дата_Документ = КонМесяца(Дата_Документ),
ФО(Изм1, Изм2, .. ИзмН, Дата_Документ),
ФО(Изм1, Изм2, .. ИзмН, НачМесяца(Дата_Документ)-1) +
å ФД(Изм1, Изм2, .. ИзмН, Документ Î {Д|(Д.Дата >= НачМесяца(Дата_Документ)) и
(Д.Дата <= Дата_Документ)}))

Функция получения подмножества измерений
Изм({Изм1, Изм2, .. ИзмН, Период}) = {<Изм1, Изм2, .. ИзмН>}

 

Выходные данные:
Оптимизированное значение функции Ф = ФОПТ для последовательности документов ДП.

Алгоритм

Алгоритм будет выглядеть так:

Для И = 1 по Н Цикл
НадоСчитать = Изм(ДИ –ВремИтоги.Область * ДИ)
// Вычислить новое значение функции ФВ
Втаблице = { <Y,Z> Î ВремИтоги.Область |
$Y Î НадоСчитать "<Y,L> Î ВремИтоги.Область (L <= Z) }
ФВ(Х = <Y,Дата> Î Втаблице) = ФВ(Х) - ФД(Y;Документ Î {Д|(Д > Дата) и
(Д.Дата <= ДИ.Дата)}
ФВ(Х = <Y,ДИ.Дата>,Y Î (НадоСчитать –Изм(Втаблице))) = Ф(Y; ДИ.Дата)
// Все остатки для текущего документа
ФОПТ(Х = <Y,Дата> Î ДИ) = ФВ(Х) - ФД(Y;Документ Î {Д|(Д >= ДИ) и
(Д.Дата <= ДИ.Дата)}
КонецЦикла

 

Прошу прощения, если допустил какие-то грубые (или не очень грубые) ошибки в описании алгоритма таким образом. Очень хотелось записать алгоритм как можно короче – использование математического языка в этом случае очень помогает. Самое главное кто с ним знаком, то все понятно. Не ручаюсь за правильность использования данного языка – давно не было практики, а в учебники как-то лень заглядывать (для начала их еще найти надо ;-).

Пояснения для математически неграмотных ;-):

Таблица остатков и движений суть функции по измерениям и периоду (дате). Значение функции в общем случае числовой вектор. В моем случае ресурс один. Документ рассматриваем как множество кортежей, то есть реляционная таблица. Считаем, что все значения реквизитов и значение даты документа хранятся в одной таблице. Промежуточная таблица итогов похожа на таблицу остатков с той лишь разницей, что периодичность их хранения один день. Функция расчета остатка – понятно без объяснений (так считает остатки сама V7). На выходе мы должны получить функцию аналогичной Ф, результат вычисления которой для последовательности документов ДП будет более оптимальным с точки зрения производительности.

В процессе формулировки последнего предложения меня посетила мысль, что результатом данного алгоритма должна стать не более оптимальная функция, а просто функция. Не знаю есть ли такое понятие в математическом аппарате как оптимальность функции по отношению к другой, но то что существует оценка алгоритма, реализующего функцию это точно. К сожалению я не владею данным аппаратом, но думаю, что тем, кто с этим знаком не составит труда произвести оценку первого алгоритма реализующего функцию Ф (то есть простой ее вариант, рассмотренный в секции вспомогательные данные) и алгоритма реализующего эту же функцию, но названную как ФОПТ. То есть функция одна, а алгоритма два.

Пояснения к самому алгоритму. Для каждого документа мы находим множество измерений (НадоСчитать), которые отсутствуют во временной таблице. Затем в таблице итогов выбираем остатки, которые максимально близки к необходимым для расчета, содержащимся в множестве НадоСчитать. Добавляем во временные итоги вновь рассчитанные остатки. Первая часть по множеству измерений, которые «отталкиваются» от таблицы временных итогов, вторая часть рассчитывается с помощью «неоптимизированной функции». В конце считаем остатки на документ – из остатка на дату документам, которые берутся из временных итогов, вычитаем лишние движения.


Архив рассылки по адресу: www.anobis.ru
Пишите нам: altvix@mail.ru
ICQ: 322770372

Надежные серверы и графические станции на платформе Intel (Xeon) и AMD различного назначения. Большой выбор моделей. Сборка конфигураций на заказ. Трехлетняя гарантия, сервисное обслуживание серверов с выездом к Заказчику. Бесплатная доставка.

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


Экскурсия - прогулка по храму Новый Иерусалим всего в 1 часе от Москвы. Для тех кто едет в одиночестве, вдвоем, втроем, вчетвером или семьей, уникальная экскурсия - прогулка по храму и окрестностям, которую ведет преподаватель воскресной школы - интересный гид и собеседник, любящий храм и окружающую природу. Тех, кто приезжает на электричке - гид встретит на станции, тех кто приезжает на автобусе - на автобусной остановке и потом проводит до храма. Для заказа экскурсии можете написать на электронную почту: istra2004@mail.ru, ICQ 340-597-008
Эта прогулка - экскурсия ежедневно с 10.00 - 13.00 (договариваться нужно естественно заранее). Оплата по договоренности (деньги пойдут на обучение детишек и на помощь инвалидам).
На этой экскурсии - прогулке Вы побываете:
На утреннем богослужении в храме; сможете приложиться к мощам св. мученицы Татианы в Успенском приделе; в Архангельском приделе увидеть список Тихвинской чудотворной иконы Божией матери XVII века и гробницу патриарха Никона в Предтеченском приделе, возле которой происходят чудесные исцеления; в центральном приделе Воскресенского собора, где можно приложиться к святыне — кресту-мощевику, подаренному монастырю иерусалимскими монахами. Крест содержит частицы Креста Господня и мощей святых, включая евангелиста Марка; побывать в кувуклии - часовне в храме гроба Господня (место, где покоился после распятия Иисус); в действующей подземной церкви Константина и Елены с уникальным медным иконостасом; пройтись по монашеской территории - вдоль братских корпусов; побываете в деревянном зодчестве; сможете пройтись по крепостной стене и побывать в Гефсиманской, Сионской и Елизаветинской башнях и в надвратной Входоиерусалимской церкви над Золотыми воротами; у скита патриарха Никона; сможете увидеть реку Иордан (Истра) с ее купелью с рассказом о чудесных исцелениях. Прогулка по монастырскому полю и Гефсиманскому саду, а также вдоль монастырской стены, где можно увидеть два озера, именуемых Галилейским морем из которых вытекает Кедронский поток.
Не забудьте взять пустую бутылочку, чтобы набрать водички из святого "Силоамского" источника в Гефсиманском саду или из колодца под названием "Живоносный источник" в подземной церкви Константина и Елены.
Пишите мне: istra2004@mail.ru или ICQ: 340597008

Приглашаем Вас размещать любую информацию интересную людям, в виде статей, обзоров и новостей в наших рассылках и сайтах - более 31 034 подписчиков. Заявки присылайте по почте altvix@mail.ru и ICQ 322770372.

Подпишитесь на другие наши рассылки

Рассылки Subscribe.Ru
Секреты рекламы и создания интернет-магазинов
Скидки, подарки, призы...
1С и электронная коммерция
Серверы, сетевое оборудование, тесты, характеристики, советы
Рукопашный бой для девушек – выживание, психология, самозащита!
Милосердие. Чем ты можешь помочь ближнему.
Православные знакомства.
Здоровый образ жизни.

В избранное