19.09.2008, 12:22 | #1 |
Участник
|
Отчеты,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 |
Боец
|
Цитата:
... прочитал про отчеты, но не как не пойму что надо прописать в 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); Поправка. Как только выпонится element.send(tmpTable), сработают все секции, у которых прописана tmpTable. Т.е. секции реагируют не на датасорс, а на TableId Последний раз редактировалось DSPIC; 19.09.2008 в 13:03. Причина: Поправ |
|
19.09.2008, 13:04 | #3 |
Участник
|
Спасибо ща попробую
|
|
19.09.2008, 13:08 | #4 |
Участник
|
Все сделал, но выводит
Информация:Отчет не содержит данных, rptTable(ReportDesign1) - Отчет |
|
19.09.2008, 13:12 | #5 |
Боец
|
в меточе fetch уберите super();
++ и ещё добавьте в конце: X++: return true; Последний раз редактировалось DSPIC; 19.09.2008 в 13:22. |
|
19.09.2008, 13:14 | #6 |
Участник
|
Спасибо ща попробую
|
|
19.09.2008, 13:35 | #7 |
Участник
|
Вот как я записал все в 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 |
Боец
|
Цитата:
...после проверки появилась одна запись
Записей появится столько, сколько раз выполнится element.send(tmpTable); Ну а сколько раз он выполнится - зависит от логики выших select'ов Цитата:
А что дальше то делать
|
|
19.09.2008, 13:45 | #9 |
Участник
|
Спасибо ща попробую напрячь голову
|
|
19.09.2008, 14:12 | #10 |
Участник
|
Ну вроде таблицу я начал по немногу заполнять,StringControl.Но вот что, есть QTY оно должно записываться либо положительное, либо отрицательное, каким образом не это сделать. Приношу свои извинения за некорректные вопросы.
|_Количество дсе________(QTY) | | положительное | отрицательное | | | | подобие моей таблици |
|
19.09.2008, 14:29 | #11 |
Боец
|
Цитата:
Приношу свои извинения за некорректные вопросы.
|
|
19.09.2008, 14:34 | #12 |
Участник
|
Нет не текстом (галочками )
|
|
19.09.2008, 14:35 | #13 |
Участник
|
QTY делиться на количество(в пределах норматива времени ) и (сверх норматива времени )
|
|
19.09.2008, 15:09 | #14 |
Боец
|
айм сорри, умываю руки. Галочек на отчетах я ещё не видел.
Читайте литературу, учитесь глядя на стандартные отчеты, обратитесь к более опытным коллегам. Делать задачи, не понимая как делать - это крэш. А выполнить задачу с помощью форума, задавая абстрактные вопросы - потратите кучу чужого и своего времени. |
|
|
За это сообщение автора поблагодарили: Lemming (1). |
19.09.2008, 17:16 | #15 |
Участник
|
А зачем вам чекбокс на репорте? или вы хотите, чтобы это картинка галочки просто была? по поводу fetch может стоит хотя бы в майкросовтовские тренинги глянуть.
|
|