|
01.07.2009, 16:04 | #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)); К сожалению, просмотр других тем со словами "себестоимость" мне не помог. |
|
01.07.2009, 17:23 | #2 |
MCTS
|
Посмотрите метод findSum на таблице InventSum
|
|
|
За это сообщение автора поблагодарили: Silphidae (1). |
02.07.2009, 12:58 | #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)); } |
|
03.07.2009, 06:51 | #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). |
30.08.2010, 15:38 | #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. |
|
Теги |
себестоимость |
|
|