Как в Microsoft Axapta получить складской остаток на произвольную дату? В этом совете вы найдете ответ на этот вопрос.

Антон Кузнецов (kvan), kvan@rabota-na-rezultat.ru
Сергей Мазуркин (mazzy), mazzy@mazzy.ru
Авторы выражают благодарность Шатохину Святославу (slava09) за помощь при написании статьи.

Как получить складские остатки на произвольную дату в Microsoft Axapta

Загрузить
Стандартные отчеты
Как Аксапта получает складские остатки
Стандартные классы
Принцип работы с классами
Детальное описание работы классов
· InventSumDate
· InventSumDateDim
· InventSumDatePhysical
· InventSumDatePhysicalDim
· InventSumDateValue
· InventSumDateValueReport
· InventSumDateValueReportDim
Примечания

Загрузить

kvan_InventSum.xpo (Откомментированные Антоном Кузнецовым классы семейства inventSumDate, 504Kb, Для загрузки требуется регистрация на форуме у Mazzy)

 

Стандартные отчеты

Microsoft Axapta позволяет получить складские остатки на произвольную дату в разрезе складской аналитики. Так, вы можете получить остатки по некоторой номенклатуре на том или ином складе. Или остатки по номенклатуре определенного цвета на том или ином складе.

См. например, отчет Главное меню \ Управление запасами \ Отчеты \ Статус \ Физ.наличие \ Физ.наличие по складам.

Обратите внимание на то, что вы можете указать:

Обратите внимание, что складские аналитики в фильтре и группировке могут не совпадать.

Диалог отчета Физическое наличие по складам.Диалог отчета Физическое наличие по складам.

 

Как Аксапта получает складские остатки

Чтобы писать эффективный код, программист должен понимать как Microsoft Axapta получает складские остатки на произвольную дату:

  1. таблица Invent Sum (Запасы в наличии) содержит сумму всех складских проводок в разрезе всех аналитик
  2. чтобы получить остаток на произвольную дату, Аксапта вычитает из InventSum проводки после заданной даты.

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

Как правило, запрашиваются именно остатки за последние периоды. А это значит, что как бы ни выросла ваша база, за сколько бы лет не хранились проводки, SQL будет обрабатывать примерно одинаковое количество записей. Это значит, что скорость обработки не зависит от того, сколько проводок в прошедших периодах.

Принцип вычисления остатков на произвольную дату

На диаграмме заштрихованы данные, которые обрабатываются при получении остатков на дату. Объем обрабатываемых данных зависит только от того, насколько далеко от последней проводки находится запрашиваемая дата. Объем обрабатываемых данных НЕ зависит от того сколько лет работает система и сколько периодов находится в прошлом.

Программист! Никогда, НИКОГДА не суммируй складские проводки от начала времен. Такой запрос может выполняться ЧУДОВИЩНО долго и, скорее всего, не позволит работать остальным даже на самом мощном сервере. Пользуйся стандартными классами для получения остатков на произвольную дату. И даже стандартные используй с умом.

 

Стандартные классы

Иерархия классов inventsumMicrosoft Axapta содержит специальные классы, которые позволяют получить складские остатки на произвольную дату в разрезе складской аналитики. Так, вы можете получить остатки по некоторой номенклатуре на том или ином складе. Или остатки по номенклатуре определенного цвета на том или ином складе.

Приведем краткую характеристику классов. Детальное описание будет приведено ниже.

1. InventSumDate – базовый класс для всего семейства. Содержит базовые методы, которые развиваются в дальнейшем. Сам класс позволяет получить только количественные остатки по разнесенным проводкам в разрезе номенклатуры на произвольную дату. Складская аналитика не учитывается.

2. InventSumDateDim – наследник базового класса. Дополнительно к родителю позволяет указать складские аналитики

3. InventSumDatePhysical – наследник базового класса. Работает не только по разнесенным проводкам и не учитывает складские аналитики. Учитывает статусы Зарегистрировано и Скомплектовано. Для этих статусов используется дата DateInvent (Складская дата ).

4. InventSumDatePhysicalDim – наследник класса InventSumDatePhysical. Дополнительно работает со складскими аналитиками.

5. InventSumDateValue – наследник класса InventSumDatePhysical. Считает не только количественные остатки, но и себестоимость на указанную дату. Считает только в разрезе номенклатуры, складская аналитика не учитывается. Класс является базовым для двух потомков InventSumDateValueReport, InventSumDateValueReportDim. Сам по себе практически никогда не используется.

6. InventSumDateValueReport,
7. InventSumDateValueReportDim – именно эти классы используются для работы отчетов Физ. наличие по группам и Физ. наличие по складам. Кроме количественных остатков и себестоимости, рассчитывают значение физически разнесенной себестоимости (разнесено физически).

Класс InventSumDateValueReportDim отличается от InventSumDateValueReport тем, что работает со складскими аналитиками и корректно рассчитывает значения, если для номенклатуры включена стоимость по комбинациям аналитик (для чего в него добавлена хитрая работа со складскими аналитиками). ТОЛЬКО этот класс позволяет корректно рассчитывать остатки, если заданы фильтры по аналитикам, которые не включены для отображения. (см. метод fetch() отчета Физ. наличие по складам)

В таблице ниже то, что учитывает и что рассчитывает каждый класс семейства InventSumDate*:

Класс

1.

2.

3.

4.

5.

6.

7.

Расчет по аналитикам

 

+

 

+

 

 

+

Количество

 

Разнесеное количество

PostedQty

+

+

+

+

+

+

+

Получено

ReveivedQty

+

+

+

+

+

+

+

Отпущено

DeductedQty

+

+

+

+

+

+

+

Зарегистрировано

RegisteredQty

 

 

+

+

+

+

+

Скомплектовано

PickedQty

 

 

+

+

+

+

+

Известное количество

KnownFloatQty

 

 

 

 

+

+

+

Плавающее количество

UnknownFloatQty

 

 

 

 

+

+

+

Себестоимость

 

Стоимость запасов

PostedValue

 

 

 

 

+

+

+

Известная величина

KnownFloatValue

 

 

 

 

+

+

+

Плавающая величина

UnknownFloatValue

 

 

 

 

+

+

+

Разнесено физически

PostedPhysicalValue

 

 

 

 

 

+

+

Где,

Обозначение

Name

Описание

Разнесенное количество

PostedQty

Отфактурованное количество. По этому количеству известна точная себестоимость.

Получено

ReceivedQty

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

Отпущено

DeductedQty

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

Зарегистрировано

RegisteredQty

Зарегистрировано на склад, но никаких документов от поставщика еще не было.

Скомплектовано

PickedQty

Скоплектовано для отгрузки. Но никаких документов клиенту еще не выписано.

Физически доступно

PhysicalQuantity

Это расчетный метод. Именно это количество показывается в форме В Наличии в колонке Физически доступно.

Стоимость запасов

PostedValue

Себестоимость отфактурованного количества.

Известное количество

KnownFloatQty

Разнесенное количество. (Вспомогательное количество, появляется только при расчете внутри семейства классов inventSumDate)

Известная себестоимость (Известная величина)

KnownFloatValue

Физическая себестоимость разнесенного количества. (Возникает если дата накладной больше даты отборочной накладной.)

Плавающее количество

UnknownFloatQty

Количество, для которого себестоимость точно неизвестна.

Плавающее количество = (получено + зарегистрировано) - (отпущено + известное количество + скомплектовано)

Плавающая себестоимость (Плавающая величина)

UnknownFloatValue

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

Плавающая себестоимость = плавающее количество * стоимость номенклатуры из карточки

Разнесено физически

PostedPhysicalValue

Разнесенная физически себестоимость. Рассчитывается, если отборочные накладные разносились с включенным созданием проводок в ГК по отборочной накладной.

 

Принцип работы с классами

Принцип простой.


inventSumDate*    inventSum;

while(…) // Цикл по номенклатуре и складским аналитикам
{
    …
    // считаем остаток на дату по номенклатуре и складским аналитикам
    inventSum = inventSumDate*::newParameters(myDate,myItemId,…);


    // получаем количество и себестоимость (в соответствующих классах)
    myQty     = inventSum.physicalQuantity();
    myQtyReg  = inventSum.registeredQty();
    …
    myValue   = inventSum…
    …
}

Кроме того, обратите внимание, что в классах InventSumDatePhysical и InventSumDatePhysicalDim есть статический метод OnHandQty. Этот метод быстро возвращает Доступное количество. Этот метод можно использовать в том случае, если вам нужно только это количество и не нужны другие параметры. Значение, возвращаемое методом OnHandQty() полностью совпадает со значением метода PhysicalQuantity().

Обратите внимание, что: классы были бы гораздо проще, если бы разработчики не занимались оптимизацией производительности. Где-то их работа вызывает благодарность, а где-то недоумение - на какой же набор данных они рассчитывали... Можно сказать только одно - о быстродействии разработчики думали.

 

Детальное описание работы классов

Класс InventSumDate в семействеInventSumDate

Класс рассчитывает остатки по номенклатуре на указанную дату.

Сначала из InventSum (Запасы в наличии) берутся текущие остатки по номенклатуре, которые затем уменьшаются на количество, которое было разнесено позже указанной даты.

Напрямую класс нигде не используется.

 

InventSumDate
  NewParameters
    Init
      SetValueQty
        SelectInventSum
          AddInventSum
        SelectInventTransPostingPhysical
          AddInventTransPhysical
        SelectInventTransPostingFinancial
          AddInventTransFinancial

NewParameters
Входящие параметры: номенклатура и дата
ParmItemId и ParmPerDate
методы эмулируют свойства (property) для класса. Методы принимают/возвращают значения Номенклатура и Дата соответственно.
SelectInventSum
Расчет текущих остатков по открытым записям в InventSum (Запасы в наличии). В запросе суммируются поля:
postedQty - разнесенное количество,
received - получено,
deducted - отпущено.
AddInventSum
Принимает в качестве аргумента запись inventSum. Увеличивает значения переменных postedQty, received, deducted на соответствующие значения полей в записи inventSum.
SelectInventTransPostingPhysical
Cуммирует количество (qty) в складских проводках (InventTrans) для которых есть физическая разноска (InventTransPosting) И дата физической разноски больше указанной. Метод группирует движения по статусам прихода и расхода, по дате регистрации/комплектрации номенклатуры (DateInvent).

Обратите внимание на группировку по DateInvent в этом методе. Эта группировка не используется в данном классе. Группировка по полю DateInvent, видимо, оставлена по аналогии с классом InventSumDatePhysical. Там это поле анализируется. Если вы используете этот класс, то группировку по DateInvent можно убрать, чтобы повысить производительность.

AddInventTransPhysical
Уменьшает или увеличивает физическое количество received, deducted в зависимости от статусов прихода/расхода складской проводки.
В результате работы этого метода из текущих остатков будет вычтены физически разнесенные движения.
SelectInventTransPostingFinancial
Суммирует количество (qty) в складских проводках (InventTrans) для которых есть финансовая разноска (InventTransPosting) И дата финансовой разноски больше указанной.
AddInventTransFinancial
Уменьшает финансово разнесенное количество (postedQty), если проводка не возвратная (PackingSlipReturned = Yes).
Попутно возвращает значения в физически разнесенное количество (receivedQty, deductedQty). Предполагается, что у любой финансово разнесенной проводки есть запись о физической разноске. Для финансово разнесенных складских проводок receivedQty и deductedQty будет уменьшена при анализе физических движений и тут же увеличена при анализе финансовых движений. Таким образом, receivedQty и deductedQty будут показывать только физические движения, не закрытые финансовой разноской.
PostedQty, ReceivedQty, DeductedQty
Эти методы возвращают рассчитанные на заданную дату значения - Разнесенное количество, Получено, Отпущено (дата указывается при инициализации класса).

 

Класс InventSumDateDim в семействеInventSumDateDim

Класс рассчитывает остатки по номенклатуре на указанную дату в разрезе указанных аналитик.

Сначала из InventSum (Запасы в наличии) берутся текущие остатки по номенклатуре, которые затем уменьшаются на количество, которое было разнесено позже указанной даты.

Напрямую класс нигде не используется.

InventSumDateDim (extends InventSumDate)
  NewParameters
    Init (InventSumDate)
      SetValueQty (InventSumDate)
        SelectInventSum
          AddInventSum (InventSumDate)
        SelectInventTransPostingPhysical
          AddInventTransPhysical (InventSumDate)
        SelectInventTransPostingFinancial
          AddInventTransFinancial (InventSumDate)

NewParameters
Входящие параметры: номенклатура, дата, складская аналитика, параметры кодов аналитики.
ParmInventDim и ParmInventDimParm
методы эмулируют свойства (property) для класса. Методы принимают/возвращают значения складской аналитики и параметры (вкл/выкл) для каждой складской аналитики. Методы дополняют свойства ParmItemId и ParmPerDate базового класса.
SelectInventSum
Расчет текущих остатков по открытым записям в InventSum (Запасы в наличии) с группировкой по складской аналитике. В запросе суммируются поля:
postedQty - разнесенное количество
received - получено
deducted - отпущено
postedValue - финансовая сумма (В данном классе не используется)
picked - скомплектовано (В данном классе не используется)
registered - зарегистрировано (В данном классе не используется)

Метод не строит запрос самостоятельно, а использует InventSum:: findSum() для того, чтобы полученить запись с суммой. Именно поэтому в результате суммирования информации получается больше, чем необходимо.

SelectInventTransPostingPhysical
Работает аналогично такому же методу класса–предка, только с группировкой по складской аналитике. Использует макрос InventDimJoin.

Метод пытается применить оптимизацию запроса, если используется аналитика Паллета, Партия или Серийный номер. Методика оптимизации достаточно спорна. Но если вы будете следовать этой методике, не забудьте добавить ГТД и, может быть, ячейки в метод inventDimParm.isFlagSelective().

SelectInventTransPostingFinancial
Работает аналогично такому же методу класса–предка, только с группировкой по складской аналитике. Использует макрос InventDimJoin.

Метод пытается применить оптимизацию запроса, если используется аналитика Паллета, Партия или Серийный номер. Методика оптимизации достаточно спорна. Но если вы будете следовать этой методике, не забудьте добавить ГТД и, может быть, ячейки в метод inventDimParm.isFlagSelective().

 

Класс InventSumDatePhysical в семействеInventSumDatePhysical

Класс рассчитывает физические остатки по номенклатуре на заданную дату.

Сначала из InventSum (Запасы в наличии) берутся текущие остатки по номенклатуре, которые затем уменьшаются на количество, которое было разнесено позже указанной даты.

Напрямую используется только статический метод OnHandQty.

InventSumDatePhysical (extends InventSumDate)
  NewParameters
    Init (InventSumDate)
      SetValueQty
          SetValueQty (InventSumDate) – super()
            SelectInventSum
              AddInventSum
                AddInventSum (InventSumDate) – super()
            SelectInventTransPostingPhysical
              AddInventTransPhysical
                AddInventTransPhysical (InventSumDate) – super()
            SelectInventTransPostingFinancial (InventSumDate)
              AddInventTransFinancial (InventSumDate)
          SelectInventTransPicked
          SelectInventTransRegistered

NewParameters
Входящие параметры: номенклатура, дата.
SelectInventSum
Расчет текущих остатков по открытым записям в InventSum (Запасы в наличии). В запросе суммируются поля:
postedQty - разнесенное количество
received - получено
deducted - отпущено
picked - скомплектовано
registered - зарегистрировано
AddInventSum
Дополнительно к super-методу работает с переменными pickedQty, registeredQty.
SelectInventTransPostingPhysical
полностью повторяет код метода класса-предка.

В этом классе группировка по складской дате нужна.

AddInventTransPhysical
Увеличивает/уменьшает значения registeredQty, pickedQty в зависимости от складской даты (DateInvent) и знака количества.
SelectInventTransPicked
 
Суммирует количество (qty) в открытых складских проводках (InventTrans) со статусом расхода "скомплектовано", пустым статусом прихода и складской датой (dateInvent) больше заданной. Уменьшает значение pickedQty (скомплектовано) на полученное значение.
SelectInventTransRegistered
Суммирует количество (qty) в открытых складских проводках (InventTrans) со статусом расхода "зарезервировано", пустым статусом расхода и складской датой (dateInvent) больше заданной. Уменьшает значение registeredQty (зарегистрировано) на полученное значение.
PickedQty, RegisteredQty
Методы возвращают значения Скомплектовано, Зарегистрировано на указанную дату соответственно. (дата указывается при инициализации класса). Эти методы дополняют методы PostedQty, ReceivedQty, DeductedQty.
PhysicalQuantity
возвращает значение Физическое наличие. Используется наиболее часто.
OnHandQty (статический)
Статический метод позволяет сократить количество кода при расчете складских остатков на дату. В конечном итоге, возвращает Физическое наличие такое же, что и в методе PhysicalQuantity.

 

Класс InventSumDatePhysicalDim в семействеInventSumDatePhysicalDim

Класс рассчитывает физические остатки по номенклатуре на заданную дату в разрезе складских аналитик.

Сначала из InventSum (Запасы в наличии) берутся текущие остатки по номенклатуре, которые затем уменьшаются на количество, которое было разнесено позже указанной даты.

Напрямую используется только статический метод OnHandQty.

 

InventSumDatePhysicalDim (extends InventSumDatePhysical)
  NewParameters
    Init (InventSumDate)
      SetValueQty (InventSumDatePhysical)
        SetValueQty (InventSumDate)
          SelectInventSum
            AddInventSum (InventSumDatePhysical)
          SelectInventTransPostingPhysical
            AddInventTransPhysical (InventSumDatePhysical)
          SelectInventTransPostingFinancial
            AddInventTransFinancial (InventSumDatel)
      SelectInventTransPicked
      SelectInventTransRegistered

NewParameters
Входящие параметры: номенклатура, дата, складская аналитика, параметры кодов аналитики.
ParmInventDim и ParmInventDimParm
принимают\возвращают соответственно значения - складская аналитика и параметры кодов аналитики.
SelectInventSum
Расчет по открытым проводкам в InventSum (Запасы в наличии) текущих значений количества для номенклатуры с группировкой по складской аналитике. В запросе суммируются поля:
postedQty - разнесенное количество
postedValue - финансовая сумма (В данном классе не используется)
received - получено
deducted - отпущено
picked - скомплектовано
registered - зарегистрировано

Метод не строит запрос самостоятельно, а использует InventSum:: findSum() для того, чтобы полученить запись с суммой. Именно поэтому в результате суммирования информации получается больше, чем необходимо.

SelectInventTransPostingPhysical
Работает аналогично такому же методу класса–предка, только с группировкой по складской аналитике.
Использует макросы InventDimJoin, InventDimSelect.

Метод пытается применить оптимизацию запроса, если используется аналитика Паллета, Партия или Серийный номер. Метод пытается быть более интеллектуальным в вопросе оптимизации, чем базовый класс. Но методика оптимизации по прежнему достаточно спорна. Если вы будете следовать этой методике, не забудьте добавить ГТД и, может быть, ячейки в метод inventDimParm.isFlagSelective().

SelectInventTransPostingFinancial
Работает аналогично такому же методу класса–предка, только с группировкой по складской аналитике.
Использует макросы InventDimJoin, InventDimSelect. (Метод класса-предка здесь InventSumDate\SelectInventTransPostingFinancial)

Метод пытается применить оптимизацию запроса, если используется аналитика Паллета, Партия или Серийный номер. Метод пытается быть более интеллектуальным в вопросе оптимизации, чем базовый класс. Но методика оптимизации по прежнему достаточно спорна. Если вы будете следовать этой методике, не забудьте добавить ГТД и, может быть, ячейки в метод inventDimParm.isFlagSelective().

SelectInventTransPicked
Логика работы данного метода аналогична методу класса-предка, только с группировкой по складской аналитике.
Использует метод InventTrans::qtyPickedDate() и в нем макросы InventDimJoin, InventDimSelect.

Метод InventTrans::qtyPickedDate() также пытается применить достаточно спорную оптимизацию запроса. Будьте внимательны с быстродействием.

SelectInventTransRegistered
Логика работы данного метода аналогична методу класса-предка, только с группировкой по складской аналитике
Использует метод InventTrans::qtyRegisteredDate() и в нем макросы InventDimJoin, InventDimSelect.

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

OnHandQty (статический)
Полностью аналогичен методу класса-предка, только с группировкой по складской аналитике.

Класс InventSumDateValue в семействеInventSumDateValue

Класс рассчитывает финансовые остатки и себестоимость по номенклатуре на заданную дату.

Сначала из InventSum (Запасы в наличии) берутся текущие остатки и себестоимость по номенклатуре, которые затем уменьшаются на количество и себестоимость, которое была разнесена позже указанной даты.

Напрямую нигде не используется.

InventSumDateValue (extends InventSumDatePhysical)
  NewParameters
    Init (InventSumDate)
      SetValueQty
        SetValueQty (InventSumDatePhysical) – super()
          SetValueQty (InventSumDatel) – super()
            SelectInventSum
              AddInventSum
                AddInventSum (InventSumDatePhysical) – super()
            SelectInventTransPostingPhysical
              AddInventTransPhysical
                AddInventTransPhysical (InventSumDatePhysical) – super()
            SelectInventTransPostingFinancial
              AddInventTransFinancial
                AddInventTransFinancial (InventSumDate) – super()
        SelectInventSettlement

NewParameters
Входящие параметры: номенклатура, дата.
SetValueQty
Расчет значений unknownFloatQty (плавающее количество) и unknownFloatValue (плавающая величина).
SelectInventSum
Расчет по открытым проводкам в InventSum (Запасы в наличии) текущих значений количества и себестоимости для номенклатуры. В запросе суммируются поля:
postedQty - разнесенное количество
postedValue - финансовая сумма
received - получено
deducted - отпущено
picked - скомплектовано
registered - зарегистрировано
AddInventSum
Основную работу выполняет метод класса-предка. Здесь выполняется только увеличение значения postedValue.
SelectInventTransPostingPhysical
Расчитывает физическую сумму (costAmountPhysical), финансовую сумму (costAmountPosted), коррекцию (costAmountAdjustment) и количество (qty) по складским проводкам (InventTrans), для которых есть финансовая разноска (InventTransPosting) И дата финансовой разноски больше указанной.. Обратите внимание, что costAmountPhysical не используется в дальнейших расчетах.
AddInventTransPhysical
Основную работу выполняет метод класса-предка. Здесь выполняется только расчет значений knownFloatValue (известное количество) и knownFloatQty (известная величина)
SelectInventTransPostingFinancial
 
Расчитывает физическую сумму (costAmountPhysical), финансовую сумму (costAmountPosted), коррекцию (costAmountAdjustment) и количество (qty) по складским проводкам (InventTrans), для которых есть финансовая разноска И дата финансовой разноски больше указанной.
AddInventTransFinancial
Основную работу выполняет метод класса-предка. Здесь выполняется только расчет значения postedValue (стоимость запасов) и расчет значений knownFloatValue (известное количество) и knownFloatQty (известная величина).
SelectInventSettlement
Уменьшает postedValue на сумму коррекций, разнесенных при сопоставлениях, которые были выполнены после заданной даты. Значение берется из таблицы складского сопоставления (InventSettlement). В результате мы видим себестоимость номенклатуры на заданную дату без учета последующих сопоставлений.
PostedValue
Метод возвращает Себестоимость запасов на указанную дату (дата указывается при инициализации класса).
PostedPhysicalValue
Метод возвращает значение - 0 так как значение нигде в этом классе не рассчитывается.
KnownFloatQty
Метод возвращает значение - Известное количество.
KnownFloatValue
Метод возвращает значение - Известная себестоимость (Известная величина).
UnknownFloatQty
Метод возвращает значение - Плавающее количество.
Плавающее количество = (Получено + Зарегистрировано) - (Отпущено + Известное количество + Скомплектовано).
UnknownFloatValue
Метод возвращает значение - Плавающая себестоимость (Плавающая величина).
Плавающая себестоимость (Плавающая величина) = Плавающее количество * Стоимость номенклатуры - Номенклатурный справочник\ закладка "Цена\Скидка"/ Группа Стоимость/ поле "Цена".

 

Класс InventSumDateValueReport в семействеInventSumDateValueReport

Используется в отчете "Физическое наличие по группам".

InventSumDateValueReport(extends InventSumDateValue)
  NewParameters
    Init(InventSumDate)
      SetValueQty(InventSumDateValue)
        SetValueQty (InventSumDatePhysical) – super()
          SetValueQty (InventSumDate) – super()
            SelectInventSum
              SelectInventSum (InventSumDateValue) – super()
              SelectSumPostedPhysicalValue
            SelectInventTransPostingPhysical
              A ddInventTransPhysical (InventSumDateValue)
            SelectInventTransPostingFinancial
              A ddInventTransFinancial (InventSumDateValue)

NewParameters
Входящие параметры: номенклатура, дата.
SelectSumPostedPhysicalValue
Рассчитывает разнесенную в главную книгу сумму по физическим разноскам.

Будьте предельно внимательны. Этот метод использует суммирование складсикх проводок от начала времен поскольку в InventSum предыдущих версий эта сумма не хранилась. А рефакторинг этого метода не сделали. Если вас интересует именно эта сумма, то стоит сделать рефакторинг. Если вы не используете физическую разноску и вас не интересует эта сумма, то лучше закомментировать этог метод от греха подальше...

SelectInventTransPostingPhysical
Работает аналогично методу класса-предка, но добавлена группировка по полю isPosted (разнесено) в таблице InventTransPosting (Разноска складских проводок), для уменьшения значения postedPhysicalValue (разнесено физически).
SelectInventTransPostingFinancial
Расчитывает по складским проводкам (InventTrans) физическую сумму (costAmountPhysical), финансовоую сумму (costAmountPosted), коррекцию (costAmountAdjustment) и количество (qty) для проводок с финансовым типом разноски, у которых дата больше заданной даты. Также корректирует значение postedPhysicalValue (разнесено физически) по разнесенным в ГК складским проводкам с финансовым типом разноски.
PostedPhysicalValue
возвращает значение Разнесено физически.
UnknownFloatValue
возвращает значение Плавающая величина.

 

Класс InventSumDateValueReportDim в семействеInventSumDateValueReportDim

Используется в отчетах "Физическое наличие по складам" и "Физическое наличие по группам".

InventSumDateValueReportDim (extends InventSumDateValue)
  NewParameters
    Init (InventSumDate)
      SetValueQty
        SetValueQty (InventSumDateValue) – super()
          SetValueQty (InventSumDatePhysical) – super()
            SetValueQty (InventSumDate) – super()
              SelectInventSum
                SelectSumPostedPhysicalValue
              SelectInventTransPostingPhysical
                AddInventTransPhysical (InventSumDateValue)
              SelectInventTransPostingFinancial
                AddInventTransFinancial (InventSumDateValue)
            SelectInventTransPicked
            SelectInventTransRegistered
          SelectInventSettlement

NewParameters
Входящие параметры: номенклатура, дата, складская аналитика, параметры кодов аналитики.
ParmInventDim и ParmInventDimParm
принимают\возвращают соответственно значения - складская аналитика и параметры кодов аналитики.
SetValueQty
расчет значений unknownFloatQty (плавающее количество) и unknownFloatValue (плавающая величина). Используется конструкция, которая позволяет корректно рассчитывать остатки, если заданы фильтры по аналитикам, которые не включены для отображения.
SelectInventSum
Расчет по открытым проводкам в InventSum (Запасы в наличии) текущих значений количества и суммы для номенклатуры с группировкой по складской аналитике:
postedQty - разнесенное количество
postedValue - финансовая сумма
received - получено
deducted - отпущено
picked - скомплектовано
registered - зарегистрировано

Использует метод InventSum:: findSum() и в нем макросы InventDimJoin, InventDimSelect.
SelectSumPostedPhysicalValue
работает аналогично методу SelectSumPostedPhysicalValue класса InventSumDateValueReport, только с группировкой по складской аналитике. Использует макрос InventDimJoin.
SelectInventTransPostingPhysical
работает аналогично методу SelectInventTransPostingPhysical класса InventSumDateValueReport, только с группировкой по складской аналитике. Использует макросы InventDimJoin и InventDimSelect.
SelectInventTransPostingFinancial
работает аналогично методу SelectInventTransPostingFinancial класса InventSumDateValueReport, только с группировкой по складской аналитике. Использует макросы InventDimJoin и InventDimSelect.
SelectInventTransPicked
работает аналогично методу SelectInventTransPicked класса InventSumDatePhysical, только с группировкой по складской аналитике. Использует метод InventTrans::qtyPickedDate() и в нем макросы InventDimJoin, InventDimSelect.
SelectInventTransRegistered
работает аналогично методу SelectInventTransPicked класса InventSumDatePhysical, только с группировкой по складской аналитике. Использует метод InventTrans::qtyRegisteredDate() и в нем макросы InventDimJoin, InventDimSelect.
SelectInventSettlement
работает аналогично методу SelectInventSettlement класса InventSumDateValueReport, только с группировкой по складской аналитике Использует метод InventSettlement::dateCostAmountAdjustment (использует join с InventTrans (Складские проводки ) для подключения складской аналитики) и в нем макросы InventDimJoin, InventDimSelect.

 

Примечания

Макросы InventDimJoin, InventDimSelect упоминаются в связи с тем, что в следующей версии от них обещали отказаться и возможно данный механизм изменится или приобретет совсем другой вид.

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

 

Антон Кузнецов (kvan), kvan@rabota-na-rezultat.ru
Сергей Мазуркин (mazzy), mazzy@mazzy.ru