|
|
#1 |
|
Участник
|
Себестоимость номенклатуры
Добрый день.
Помогите, пожалуйста, решить задачу - нужно вывести все номенклатуры с 41 и 43 счетов, у которых себестоимость (берется из поля "Себестоимость" на форме "В наличии", на вкладке "В наличии") больше заданной. Вот код (использую дисплейный метод этой формы): X++: InventTable inventTable;
InventSum inventSum;
CostPriceAverage costPrice;
InventItemUnitConvert inventItemUnitConvert;
UnitId unitIdInvent, unitIdSecondary;
ItemId itemIdUnits;
;
inventItemUnitConvert = InventItemUnitConvert::newNoParameters();
while select inventTable
where inventTable.ItemGroupId == "41.01.00" ||
inventTable.ItemGroupId == "43.00.00"
{
select inventSum where inventSum.ItemId == inventTable.ItemId;
if (!itemIdUnits || inventSum.ItemId != itemIdUnits)
{
itemIdUnits = inventSum.ItemId;
unitIdInvent = inventSum.inventTable().inventUnitId();
if (!unitIdInvent || !unitIdSecondary)
unitIdSecondary = unitIdInvent;
else
if (!UnitConvert::canConvert(unitIdInvent, unitIdSecondary, inventTable.ItemId))
unitIdSecondary = unitIdInvent;
}
costPrice = inventItemUnitConvert.qty(inventSum.costPricePcs(),
unitIdSecondary,
unitIdInvent,
inventSum.ItemId);
if(costPrice > )
info(strfmt("ItemId = %1, Price = %2", inventTable.ItemId, costPrice));К сожалению, просмотр других тем со словами "себестоимость" мне не помог. |
|
|
|
|
#2 |
|
MCTS
|
Посмотрите метод findSum на таблице InventSum
|
|
|
|
| За это сообщение автора поблагодарили: Silphidae (1). | |
|
|
#3 |
|
Участник
|
Огромное спасибо, Twilight.
Все работает. Конечный вариант выглядит так: X++: while select inventTable where inventTable.ItemGroupId == "41.01.00" || inventTable.ItemGroupId == "43.00.00" { select sum(PostedQty),sum(PostedValue) from inventSum where inventSum.ItemId == inventTable.ItemId && inventSum.Closed == NoYes::No; costPrice = inventSum.PostedQty ? inventSum.PostedValue / inventSum.PostedQty : 0; if(costPrice > ) info(strfmt("itemId = %1, costPrice = %2", inventTable.ItemId, costPrice)); } |
|
|
|
|
#4 |
|
Участник
|
тогда уж лучше так (одинм запросом + используйте стандартный метод):
X++: while select sum(PostedQty),sum(PostedValue) from inventSum where inventSum.Closed == NoYes::No join count(recid) from inventTable where (inventTable.ItemGroupId == "41.01.00" || inventTable.ItemGroupId == "43.00.00") && inventSum.ItemId == inventTable.ItemId { costPrice = inventSum.costPricePcs(); if(costPrice > ) info(strfmt("itemId = %1, costPrice = %2", inventTable.ItemId, costPrice)); } Вообще говоря, Аксапта рассчитывает себестоимость в разрезе складских аналитик, для которых указана галочка финансовый. Как правило, включается различная себестоимость по складам. Совсем правильно использовать стандартные классы. http://axapta.mazzy.ru/lib/inventsumdate/ И еще: использовать группы, по названиям бухгалтерских счетов - плохая практика. Такие группы смогут указать только бухи. Вот если бы вы назвали группы, например, Товары и ПроизвПродукция, то сильно повышаете шанс, что небухи смогут правильно указать группы. |
|
|
|
| За это сообщение автора поблагодарили: Silphidae (1). | |
|
|
#5 |
|
Модератор
|
Для запроса
X++: while select sum(PostedQty),sum(PostedValue) from inventSum where inventSum.Closed == NoYes::No join count(recid) from inventTable where inventSum.ItemId == inventTable.ItemId { costPrice = inventSum.costPricePcs(); info(strfmt("itemId = %1, costPrice = %2", inventTable.ItemId, costPrice)); } P.S. Для AX 2009 описание http://axapta.mazzy.ru/lib/inventsumdate/ устарело. Некоторых методов нет в классах.
__________________
This posting is provided "AS IS" with no warranties, and confers no rights. Последний раз редактировалось Poleax; 30.08.2010 в 15:41. |
|
|
| Теги |
| себестоимость |
|
|
|