AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.07.2009, 16:04   #1  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Себестоимость номенклатуры
Добрый день.
Помогите, пожалуйста, решить задачу - нужно вывести все номенклатуры с 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));
Проблема в том, что считается себестоимость по одному складу (который первый попадается в inventSum), а нужно посчитать по всем, аналогично тому, как считается на форме "В наличии", если там поснимать все флаги аналитик.

К сожалению, просмотр других тем со словами "себестоимость" мне не помог.
Старый 01.07.2009, 17:23   #2  
twilight is offline
twilight
MCTS
MCBMSS
 
867 / 237 (9) ++++++
Регистрация: 17.10.2004
Адрес: Королёв
Посмотрите метод findSum на таблице InventSum
За это сообщение автора поблагодарили: Silphidae (1).
Старый 02.07.2009, 12:58   #3  
Silphidae is offline
Silphidae
Участник
 
96 / 15 (1) ++
Регистрация: 17.11.2008
Огромное спасибо, 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  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Silphidae Посмотреть сообщение
Все работает. Конечный вариант выглядит так:
тогда уж лучше так (одинм запросом + используйте стандартный метод):
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/


И еще: использовать группы, по названиям бухгалтерских счетов - плохая практика.
Такие группы смогут указать только бухи. Вот если бы вы назвали группы, например, Товары и ПроизвПродукция, то сильно повышаете шанс, что небухи смогут правильно указать группы.
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: Silphidae (1).
Старый 30.08.2010, 15:38   #5  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
Для запроса
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));
    }
в AX 2009 http://axapta.mazzy.ru/lib/inventsumdate/ какой метод будет аналогичной результат возвращать? (Себестоимость номенклатуры, без учета складских аналитик. По аналогии форма "В наличии", вкладка "В наличии" поле "Себестоимость")

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.
Теги
себестоимость

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Denis Fedotenko: Себестоимость и длинные производственные заказы Blog bot DAX Blogs 13 21.11.2013 16:57
Denis Fedotenko: Себестоимость и закрытие склада Blog bot DAX: База знаний и проекты 44 29.03.2010 14:54
Планирование номенклатуры с типом Основное средство AlexeyBP DAX: Функционал 19 29.01.2009 07:42
Списание себестоимости, финансовая и физическая себестоимость tony DAX: Функционал 4 09.02.2004 16:14
Как организовать среднюю себестоимость по разделенному складу Елена Сысовская DAX: Функционал 27 29.08.2003 20:01
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:18.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.