Как в 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 получает складские остатки на произвольную дату:
- таблица Invent Sum (Запасы в наличии) содержит сумму всех складских проводок в разрезе всех аналитик
- чтобы получить остаток на произвольную дату, Аксапта вычитает из InventSum проводки после заданной даты.
Такой подход работает быстро и хорошо, если часто запрашиваются последние остатки – остатки на прошлую неделю, остатки на прошлый месяц, остатки на прошлый год. Такой подход работает плохо, если вы часто запрашиваете очень давние остатки.
Как правило, запрашиваются именно остатки за последние периоды. А это значит, что как бы ни выросла ваша база, за сколько бы лет не хранились проводки, SQL будет обрабатывать примерно одинаковое количество записей. Это значит, что скорость обработки не зависит от того, сколько проводок в прошедших периодах.

На диаграмме заштрихованы данные, которые обрабатываются при получении остатков на дату. Объем обрабатываемых данных зависит только от того, насколько далеко от последней проводки находится запрашиваемая дата. Объем обрабатываемых данных НЕ зависит от того сколько лет работает система и сколько периодов находится в прошлом.
Программист! Никогда, НИКОГДА не суммируй складские проводки от начала времен. Такой запрос может выполняться ЧУДОВИЩНО долго и, скорее всего, не позволит работать остальным даже на самом мощном сервере. Пользуйся стандартными классами для получения остатков на произвольную дату. И даже стандартные используй с умом.
Стандартные классы
Microsoft 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. |
|
Расчет по аналитикам |
|
+ |
|
+ |
|
|
+ |
|
Количество |
|
|||||||
+ |
+ |
+ |
+ |
+ |
+ |
+ |
||
+ |
+ |
+ |
+ |
+ |
+ |
+ |
||
+ |
+ |
+ |
+ |
+ |
+ |
+ |
||
|
|
+ |
+ |
+ |
+ |
+ |
||
|
|
+ |
+ |
+ |
+ |
+ |
||
|
|
|
|
+ |
+ |
+ |
||
|
|
|
|
+ |
+ |
+ |
||
Себестоимость |
|
|||||||
|
|
|
|
+ |
+ |
+ |
||
|
|
|
|
+ |
+ |
+ |
||
|
|
|
|
+ |
+ |
+ |
||
|
|
|
|
|
+ |
+ |
||
Где,
Обозначение |
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
Класс рассчитывает остатки по номенклатуре на указанную дату.
Сначала из 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).
- AddInventTransPhysical
- Уменьшает или увеличивает физическое количество received, deducted в зависимости от статусов прихода/расхода складской проводки.
В результате работы этого метода из текущих остатков будет вычтены физически разнесенные движения.
- SelectInventTransPostingFinancial
- Суммирует количество (qty) в складских проводках (InventTrans) для которых есть финансовая разноска (InventTransPosting) И дата финансовой разноски больше указанной.
- AddInventTransFinancial
- Уменьшает финансово разнесенное количество (postedQty), если проводка не возвратная (PackingSlipReturned = Yes).
Попутно возвращает значения в физически разнесенное количество (receivedQty, deductedQty). Предполагается, что у любой финансово разнесенной проводки есть запись о физической разноске. Для финансово разнесенных складских проводок receivedQty и deductedQty будет уменьшена при анализе физических движений и тут же увеличена при анализе финансовых движений. Таким образом, receivedQty и deductedQty будут показывать только физические движения, не закрытые финансовой разноской.
- PostedQty, ReceivedQty, DeductedQty
- Эти методы возвращают рассчитанные на заданную дату значения - Разнесенное количество, Получено, Отпущено (дата указывается при инициализации класса).
Обратите внимание на группировку по DateInvent в этом методе. Эта группировка не используется в данном классе. Группировка по полю DateInvent, видимо, оставлена по аналогии с классом InventSumDatePhysical. Там это поле анализируется. Если вы используете этот класс, то группировку по DateInvent можно убрать, чтобы повысить производительность.
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 - зарегистрировано (В данном классе не используется) - SelectInventTransPostingPhysical
- Работает аналогично такому же методу класса–предка, только с группировкой по складской аналитике. Использует макрос InventDimJoin.
- SelectInventTransPostingFinancial
- Работает аналогично такому же методу класса–предка, только с группировкой по складской аналитике. Использует макрос InventDimJoin.
Метод не строит запрос самостоятельно, а использует InventSum:: findSum() для того, чтобы полученить запись с суммой. Именно поэтому в результате суммирования информации получается больше, чем необходимо.
Метод пытается применить оптимизацию запроса, если используется аналитика Паллета, Партия или Серийный номер. Методика оптимизации достаточно спорна. Но если вы будете следовать этой методике, не забудьте добавить ГТД и, может быть, ячейки в метод inventDimParm.isFlagSelective().
Метод пытается применить оптимизацию запроса, если используется аналитика Паллета, Партия или Серийный номер. Методика оптимизации достаточно спорна. Но если вы будете следовать этой методике, не забудьте добавить ГТД и, может быть, ячейки в метод inventDimParm.isFlagSelective().
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
Класс рассчитывает физические остатки по номенклатуре на заданную дату в разрезе складских аналитик.
Сначала из 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 - зарегистрировано - SelectInventTransPostingPhysical
- Работает аналогично такому же методу класса–предка, только с группировкой по складской аналитике.
Использует макросы InventDimJoin, InventDimSelect. - SelectInventTransPostingFinancial
- Работает аналогично такому же методу класса–предка, только с группировкой по складской аналитике.
Использует макросы InventDimJoin, InventDimSelect. (Метод класса-предка здесь InventSumDate\SelectInventTransPostingFinancial) - SelectInventTransPicked
- Логика работы данного метода аналогична методу класса-предка, только с группировкой по складской аналитике.
Использует метод InventTrans::qtyPickedDate() и в нем макросы InventDimJoin, InventDimSelect. - SelectInventTransRegistered
- Логика работы данного метода аналогична методу класса-предка, только с группировкой по складской аналитике
Использует метод InventTrans::qtyRegisteredDate() и в нем макросы InventDimJoin, InventDimSelect. - OnHandQty (статический)
- Полностью аналогичен методу класса-предка, только с группировкой по складской аналитике.
Метод не строит запрос самостоятельно, а использует InventSum:: findSum() для того, чтобы полученить запись с суммой. Именно поэтому в результате суммирования информации получается больше, чем необходимо.
Метод пытается применить оптимизацию запроса, если используется аналитика Паллета, Партия или Серийный номер. Метод пытается быть более интеллектуальным в вопросе оптимизации, чем базовый класс. Но методика оптимизации по прежнему достаточно спорна. Если вы будете следовать этой методике, не забудьте добавить ГТД и, может быть, ячейки в метод inventDimParm.isFlagSelective().
Метод пытается применить оптимизацию запроса, если используется аналитика Паллета, Партия или Серийный номер. Метод пытается быть более интеллектуальным в вопросе оптимизации, чем базовый класс. Но методика оптимизации по прежнему достаточно спорна. Если вы будете следовать этой методике, не забудьте добавить ГТД и, может быть, ячейки в метод inventDimParm.isFlagSelective().
Метод InventTrans::qtyPickedDate() также пытается применить достаточно спорную оптимизацию запроса. Будьте внимательны с быстродействием.
Также будьте внимательны с оптимизацией быстродействия.
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(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
- Рассчитывает разнесенную в главную книгу сумму по физическим разноскам.
- SelectInventTransPostingPhysical
- Работает аналогично методу класса-предка, но добавлена группировка по полю isPosted (разнесено) в таблице InventTransPosting (Разноска складских проводок), для уменьшения значения postedPhysicalValue (разнесено физически).
- SelectInventTransPostingFinancial
- Расчитывает по складским проводкам (InventTrans) физическую сумму (costAmountPhysical), финансовоую сумму (costAmountPosted), коррекцию (costAmountAdjustment) и количество (qty) для проводок с финансовым типом разноски, у которых дата больше заданной даты. Также корректирует значение postedPhysicalValue (разнесено физически) по разнесенным в ГК складским проводкам с финансовым типом разноски.
- PostedPhysicalValue
- возвращает значение Разнесено физически.
- UnknownFloatValue
- возвращает значение Плавающая величина.
Будьте предельно внимательны. Этот метод использует суммирование складсикх проводок от начала времен поскольку в InventSum предыдущих версий эта сумма не хранилась. А рефакторинг этого метода не сделали. Если вас интересует именно эта сумма, то стоит сделать рефакторинг. Если вы не используете физическую разноску и вас не интересует эта сумма, то лучше закомментировать этог метод от греха подальше...
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

