Каталог решений - Еще один взгляд на проблему «жизнь без последовательностей»

Еще один взгляд на проблему «жизнь без последовательностей»

Еще один взгляд на проблему «жизнь без последовательностей»

В наличии

Предлагаю свой взгляд на решение проблемы "документы без последовательности". Решение навеяно обсуждениями http://infostart.ru/public/62785/ и http://infostart.ru/forum/forum11/topic28666/. Даже попытался описать его там (152). Теперь думаю, что оно может быть опубликовано и самостоятельно. Я считаю это решение теоретически исчерпывающим и готовым к практическому воплощению, а что скажете Вы?

Категория:

Описание

Для краткости и ясности используем язык математики.

Обозначим номенклатуру i, приход j, расход k. 

Функция X(i,j,k) определяет структуру списания, сложившуюся в интересующий нас момент t. 

То есть отвечает на вопрос — сколько номенклатуры i из прихода j было списано при расходе k. 

Функцию можно представить в виде куба со сторонами: Номенклатура, Приход, Расход. 

Исправление задним числом можно представить как функцию dX(i,j,k). Так что Xt+1(i,j,k)=Xt(i,j,k)+dX(i,j,k). 

То есть корректировка документа не должна быть перепроведением, а должна рассчитывать дельту структуры списания. 

 

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

В этом случае используется структура Y(l,k), где l=i*N+j. N — количество номенклатуры. 

А уравнение превращается в Yt+1(l,k)=Yt(l,k)+dY(l,k).

 

Как решается задача определения dX? 

 

Куб X делится на слои номенклатуры i: Z=X(i=i,j,k). В каждом слое применяется изменение d (уменьшается или увеличивается приход или расход или изменяется их порядок). 

Затем решается частный случай ТРАНСПОРТНОЙ ЗАДАЧИ (это разновидность задач линейного программирования) с ограничениями: 

 

Σj Zjk = Rk

 

(общий расход из всех приходов равен количеству Rk в расходной накладной k)

 

Σk Zjk <= Sj

 

 

(общий приход из всех расходов ограничен количеством Sj прихода j)

 

и целевой функцией:

 

Σjk Zjk * Cjk -> min

 

При этом для метода ФИФО, например,  коэффициенты Сjk будут определяться правилом

 

Cjk = 1/(T(k) — T(j)), если T(k) > T(j) и  Cjk = ∞, если T(k) <= T(j),

где T(j), T(k) — время прихода и расхода соответственно.

 

В качестве опорного решения берется текущее значение Z. 

Правда, так мы фактически вычисляем не dX, а непосредственно Xt+1.

 

Почему же тогда 1С использует перепроведение и последовательность? 

Потому что в этом случае не нужен отдельный алгоритм расчета dX и структуры данных под него. 

dX определяется последовательным повторением элементарных проведений одного документа, 

начиная с момента нарушения последовательности. 

Такие алгоритмы называются решением методом «грубой силы». 

Можно предложить различные частичные усовершенствования. Например, «softpoint», в котором восстановление последовательности проводится отдельно по каждому слою номенклатуры.

Можно оптимизировать хранение структуры списания. 

Хотя сам собой напрашивается регистр сведений с измерениями: Номенклатура, Приход, Расход и ресурсом Количество. 

Так раньше и хранили разреженные матрицы.

Можно поставить задачу найти самый быстрый алгоритм расчета dX. 

Сам алгоритм решения ТРАНСПОРТНОЙ ЗАДАЧИ (метод потенциалов, симплекс-метод) хорошо исследован, 

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

Или уже учесть особенности реализации: самый быстрый с использованием промежуточных записей в БД, самый быстрый в оперативной памяти, 

самый быстрый при использовании структур данных 77 и т.п. 

 

Только сначала нужно определиться: зачем? 

 

Дело в том, что генезис платформ 1С — от бухгалтерии, от учетных задач, нацеливает решения не на отражение настоящего, а на рисование прошлого. 

Бухгалтер раскладывает на столе первичку и решает: в какой момент произвести списание? 

Когда товар был подороже или подешевле? Показывать или нет авансы? 

Ну и пусть попробует один вариант, восстановит последовательность (пересчитает себестоимость), подождет. 

Вам хочется, чтобы это делалось максимально быстро? Стоит ли овчинка выделки? Раз в месяц, раз в квартал

— компьютер не перетрудится! 

В общем, к управлению, к отражению настоящего, эта задача «рисования прошлого» не относится, а значит, ИМХО не требует высокой скорости расчетов.

has been added to your cart:
Оформление заказа