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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 19.09.2008, 12:22   #1  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Отчеты,fetch
Добрый день. Сделал программу, сделал дизайн прочитал про отчеты, но не как не пойму что надо прописать в fetch.Вот программа.

X++:
[SIZE=2]static void Job49(Args _args)
{
    ProdJournalTable ProdJournalTable;
    ProdJournalRoute ProdJournalRoute;
    ProdJournalRoute ProdJournalRoute_1;
    ProdJournalRoute ProdJOurnalRoute_2;
    TmpProdJournalRouteOutTime tmpTable;
    tmpprodjournalrouteouttime tmpTable_1;
    tmpprodjournalrouteouttime tmpTable_2;
    ProdTable  ProdTable;
    int nDay;
    SysOperationProgress    sop;
    int                     cntItems;
    date fromDate = 01\09\2008;
    date toDate = 31\09\2008;
    ;
    delete_from tmpTable;




        select count (Recid)from Prodjournaltable
    exists join ProdJournalRoute
    where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
          ProdJournalTable.Createddate >= fromDate &&
          ProdJournalTable.createdDate <= toDate &&
         (ProdJournalRoute.WrkCtrId == '113' ||
          ProdJournalRoute.WrkCtrId == '135');

        cntItems = ProdJournalTable.RecId;

    sop = SysOperationProgress::newGeneral('','',cntItems); // преоброзование шкалы


    while select  createddate,journalid,posted,posteddate
    From ProdJournalTable
    exists join ProdJournalRoute
    where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
          ProdJournalTable.Createddate >= fromDate &&
          ProdJournalTable.createdDate <= toDate &&
         (ProdJournalRoute.WrkCtrId == '113' ||
          ProdJournalRoute.WrkCtrId == '135')
    {
        select ProdJournalRoute_1
        order by oprnum desc
        where
            ProdJournalRoute_1.JournalId == ProdJournalTable.JournalId;

        select ProdTable
        where
            ProdTable.ProdId == ProdJournalRoute_1.ProdId;

        select  ProdJournalRoute_2
        where
                ProdJournalRoute_2.OprId like '045*' &&
                ProdJournalRoute_2.JournalId == ProdJournalTable.JournalId;




       sop.incCount();

     /*           info
        (
            strfmt("%1,%2,%3",
            ProdJournalTable.createdDate,
            ProdJournalTable.JournalId,
            toDay() - ProdJournalTable.createdDate)
        );*/



        tmpTable.clear();

        tmpTable.ITEMID =ProdTable.ItemId;
        tmpTable.WRKCTRID=ProdjournalRoute_1.WrkCtrId;
        tmpTable.Qty=ProdJournalRoute_1.QtyGood+ProdJournalRoute_1.QtyError;

        if(ProdJournalTable.Posted==noyes::No)
        {
            tmpTable.Days= (toDay() - ProdJournalTable.createdDate)+1; //toDay() - ProdjournalRoute_1.transDate;
        }
        else
        {
            tmpTable.Days=(ProdJournalTable.PostedDate - ProdJournalTable.createdDate)+1 ;
        }

        tmpTable.Normal=noYes::No;


       if ( tmpTable.WRKCTRID == '135')
        {
            nDay = 1;
        }
        if ( tmpTable.WRKCTRID == '113')
        {
            if (ProdJournalRoute_2 != NULL)
            {
                 nDay=5;
            }
            else
            {
                nDay = 3;
            }
        }

        if (tmpTable.Days > nDay)
            tmpTable.Normal=NoYes::No;
        else
            tmpTable.Normal=NoYes::Yes ;

        tmpTable.insert();

       }

       while select tmpTable
       group by ItemId,WRKCTRID
      {
          select  sum(Qty)from tmpTable_1
          where  tmpTable_1.Normal==noyes::Yes &&
                  tmpTable_1.ItemId  == tmpTable.ItemId &&
                    tmpTable_1.WRKCTRID  == tmpTable.WRKCTRID;

          select sum (Qty) from tmpTable_2
          where tmpTable_2.Normal==noYes::No &&
                 tmpTable_2.ItemId  == tmpTable.ItemId &&
                  tmpTable_2.WRKCTRID  == tmpTable.WRKCTRID;








        info(strfmt("%1?%2?%3?%4",
        tmpTable.ITEMID,
        tmpTable.WRKCTRID,
        tmpTable_1.Qty,
        tmpTable_2.qty));



        }



}
[/SIZE]
Старый 19.09.2008, 12:56   #2  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
... прочитал про отчеты, но не как не пойму что надо прописать в fetch
Наверное плохо читали\разбирались.
Задача метода fetch() - выполнить поготовленный SQL запрос и послать результат в дизайн отчета, для отображения. Главный шаг в методе fetch() - это: вызов element.send(common);
Где common - это таблица, являющаяся датасорсом контрола(ов). Т.е. как только вы сделаете send(), то отчет напечатает одну строчку, много send() - много строчек. В общем
в вашем случае, весь этот код можно поместить в fetch(), и вместо
X++:
info(strfmt("%1?%2?%3?%4",
        tmpTable.ITEMID,
        tmpTable.WRKCTRID,
        tmpTable_1.Qty,
        tmpTable_2.qty));
делать
X++:
element.send(tmpTable);
element.send(tmpTable_1);
element.send(tmpTable_2);
при этом будут выводится те контролы, датасорсами которых являются соответствующие курсоры tmpTable_1, tmpTable_2, tmpTable.

Поправка. Как только выпонится element.send(tmpTable), сработают все секции, у которых прописана tmpTable. Т.е. секции реагируют не на датасорс, а на TableId

Последний раз редактировалось DSPIC; 19.09.2008 в 13:03. Причина: Поправ
Старый 19.09.2008, 13:04   #3  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Спасибо ща попробую
Старый 19.09.2008, 13:08   #4  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Все сделал, но выводит
Информация:Отчет не содержит данных, rptTable(ReportDesign1) - Отчет
Старый 19.09.2008, 13:12   #5  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
в меточе fetch уберите super();

++ и ещё добавьте в конце:
X++:
return true;
По поводу возвращаемого значения, почитайте в рекомендованных вам книгах, или поспотрите в других отчетах, как правильно fetch должна возвращать true or false. Там точно написано. А всегда возвращать true - не совсем корректно, но так, для теста

Последний раз редактировалось DSPIC; 19.09.2008 в 13:22.
Старый 19.09.2008, 13:14   #6  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Спасибо ща попробую
Старый 19.09.2008, 13:35   #7  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Вот как я записал все в fetch,после проверки появилась одна запись, в поле номенклатура.А что дальше то делать.Спасибо заранее

X++:
public boolean fetch()
{
      ProdJournalTable ProdJournalTable;
    ProdJournalRoute ProdJournalRoute;
    ProdJournalRoute ProdJournalRoute_1;
    ProdJournalRoute ProdJOurnalRoute_2;
    tmpProductionZGPTOTimeOut tmpTable;
    tmpProductionZGPTOTimeOut tmpTable_1;
    tmpProductionZGPTOTimeOut tmpTable_2;
    ProdTable  ProdTable;
    int nDay;
    SysOperationProgress    sop;
    int                     cntItems;
    date fromDate = 01\09\2008;
    date toDate = 31\09\2008;
    ;
    delete_from tmpTable;




        select count (Recid)from Prodjournaltable
    exists join ProdJournalRoute
    where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
          ProdJournalTable.Createddate >= fromDate &&
          ProdJournalTable.createdDate <= toDate &&
         (ProdJournalRoute.WrkCtrId == '113' ||
          ProdJournalRoute.WrkCtrId == '135');

        cntItems = ProdJournalTable.RecId;

    sop = SysOperationProgress::newGeneral('','',cntItems); // преоброзование шкалы


    while select  createddate,journalid,posted,posteddate
    From ProdJournalTable
    exists join ProdJournalRoute
    where ProdJournalRoute.JournalId==ProdJournalTable.JournalId&&
          ProdJournalTable.Createddate >= fromDate &&
          ProdJournalTable.createdDate <= toDate &&
         (ProdJournalRoute.WrkCtrId == '113' ||
          ProdJournalRoute.WrkCtrId == '135')
    {
        select ProdJournalRoute_1
        order by oprnum desc
        where
            ProdJournalRoute_1.JournalId == ProdJournalTable.JournalId;

        select ProdTable
        where
            ProdTable.ProdId == ProdJournalRoute_1.ProdId;

        select  ProdJournalRoute_2
        where
                ProdJournalRoute_2.OprId like '045*' &&
                ProdJournalRoute_2.JournalId == ProdJournalTable.JournalId;




       sop.incCount();

     /*           info
        (
            strfmt("%1,%2,%3",
            ProdJournalTable.createdDate,
            ProdJournalTable.JournalId,
            toDay() - ProdJournalTable.createdDate)
        );*/



        tmpTable.clear();

        tmpTable.ITEMID =ProdTable.ItemId;
        tmpTable.WRKCTRID=ProdjournalRoute_1.WrkCtrId;
        tmpTable.Qty=ProdJournalRoute_1.QtyGood+ProdJournalRoute_1.QtyError;

        if(ProdJournalTable.Posted==noyes::No)
        {
            tmpTable.Days= (toDay() - ProdJournalTable.createdDate)+1; //toDay() - ProdjournalRoute_1.transDate;
        }
        else
        {
            tmpTable.Days=(ProdJournalTable.PostedDate - ProdJournalTable.createdDate)+1 ;
        }

        tmpTable.Normal=noYes::No;


       if ( tmpTable.WRKCTRID == '135')
        {
            nDay = 1;
        }
        if ( tmpTable.WRKCTRID == '113')
        {
            if (ProdJournalRoute_2 != NULL)
            {
                 nDay=5;
            }
            else
            {
                nDay = 3;
            }
        }

        if (tmpTable.Days > nDay)
            tmpTable.Normal=NoYes::No;
        else
            tmpTable.Normal=NoYes::Yes ;

        tmpTable.insert();

       }

       while select tmpTable
       group by ItemId,WRKCTRID
      {
          select  sum(Qty)from tmpTable_1
          where  tmpTable_1.Normal==noyes::Yes &&
                  tmpTable_1.ItemId  == tmpTable.ItemId &&
                    tmpTable_1.WRKCTRID  == tmpTable.WRKCTRID;

          select sum (Qty) from tmpTable_2
          where tmpTable_2.Normal==noYes::No &&
                 tmpTable_2.ItemId  == tmpTable.ItemId &&
                  tmpTable_2.WRKCTRID  == tmpTable.WRKCTRID;






        //;
       // element.execute(1);
       // return true;


        element.send(tmpTable);
        //element.send(tmpTable_1);
        //element.send(tmpTable_2);
        return true;


        }

}
Старый 19.09.2008, 13:42   #8  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
...после проверки появилась одна запись
Сколько записей вы ожидаете ?
Записей появится столько, сколько раз выполнится element.send(tmpTable);
Ну а сколько раз он выполнится - зависит от логики выших select'ов
Цитата:
А что дальше то делать
Нужно напрячь голову
Старый 19.09.2008, 13:45   #9  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Спасибо ща попробую напрячь голову
Старый 19.09.2008, 14:12   #10  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Ну вроде таблицу я начал по немногу заполнять,StringControl.Но вот что, есть QTY оно должно записываться либо положительное, либо отрицательное, каким образом не это сделать. Приношу свои извинения за некорректные вопросы.
|_Количество дсе________(QTY) |
| положительное | отрицательное |
| | | подобие моей таблици
Старый 19.09.2008, 14:29   #11  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Приношу свои извинения за некорректные вопросы.
Вопросы могут быть некорректными, но вы уж подрудитесь хотябы задавать их правильно, чтобы собственно вопрос был понятен. Я не понял, что именно имеется ввиду? нужно текстом писать "положительное" либо "отрицательное" ? - ( в этом случае дисплэй метод+контрол к нему)
Старый 19.09.2008, 14:34   #12  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
Нет не текстом (галочками )
Старый 19.09.2008, 14:35   #13  
CRASH_505 is offline
CRASH_505
Участник
Аватар для CRASH_505
 
74 / 10 (1) +
Регистрация: 09.09.2008
QTY делиться на количество(в пределах норматива времени ) и (сверх норматива времени )
Старый 19.09.2008, 15:09   #14  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
айм сорри, умываю руки. Галочек на отчетах я ещё не видел.
Читайте литературу, учитесь глядя на стандартные отчеты, обратитесь к более опытным коллегам. Делать задачи, не понимая как делать - это крэш. А выполнить задачу с помощью форума, задавая абстрактные вопросы - потратите кучу чужого и своего времени.
За это сообщение автора поблагодарили: Lemming (1).
Старый 19.09.2008, 17:16   #15  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
А зачем вам чекбокс на репорте? или вы хотите, чтобы это картинка галочки просто была? по поводу fetch может стоит хотя бы в майкросовтовские тренинги глянуть.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Фин отчеты: может ли работать по нескольким компаниям сразу Arahnid DAX: Функционал 3 30.05.2007 17:46
Шаблонные отчеты Bug DAX: Программирование 2 18.10.2005 16:41
Отчеты по клиентам Anastasiya DAX: Функционал 2 19.03.2005 12:11
Отчет: перекрытие fetch() убивает буфер записи в display-методе Zabr DAX: Программирование 1 18.02.2005 18:45
CrystalReport и внутренние отчеты Anais DAX: Программирование 7 19.10.2004 16:26

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:27.