|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
本帖最后由 柳生静云 于 2009-1-8 23:12 编辑
最近不怎么搞JDE,忙于开发Navision的报表。所以我差点被JDE版块开除了:)不过谁要是愿意和我探讨JDE,我也非常欢迎!我来描述一下我正在开发的一个简单报表的需求:一个报表,要求依次显示Item No.、Item Description、 Qty on hand、Selling Qty、Days on hand五个字段。这五个字段中,只有QtyOH在表“Artikel”里独有;同时,只有QtySelling在另一个表“Geb. Verkaufsrechnungszeile”里独有。因此为了让每一个Section都显示出记录,需要在两个表中分别从另一个表中调用那个不存在的字段。同时,这个报表要求显示的是一定时期的销售量,所以应该设定发票的销售日期,销售日期是以InvHeader里的Buchungsdatum字段作为参考的。InvHeader是个新表,在C/AL Global里作为Record数据类型调用,Subtitle是Geb. Verkaufsrechnungskopf。目前我的问题是:1、即使我加入了一些SETRANGE和SETFILTER,报表仍然运行非常慢,而且这次一点结果都出不来了,就是不停地运,停不下来;2、我不知道如何把日期和Annual Sellling Qty建立联系。我附上代码,请大家帮帮忙,谢谢了。
OnPreDataItem()
InvHeader.RESET;
InvHeader.INIT;
InvHeader.SETRANGE(InvHeader.Buchungsdatum,VonDatum,BisDatum);
InvHeader.SETRANGE(InvHeader.Nummer,Artikel.Nummer);
OnAfterGetRecord()
ItemNo:= Artikel.Nummer;
Description := Artikel.Bezeichnung;
QtyOH := Artikel.Lagerbestand;
"Geb. Verkaufsrechnungszeile".RESET;
"Geb. Verkaufsrechnungszeile".INIT;
"Geb. Verkaufsrechnungszeile".SETFILTER("Geb. Verkaufsrechnungszeile".Menge,'>=0');
"Geb. Verkaufsrechnungszeile".SETRANGE("Geb. Verkaufsrechnungszeile".Nummer, Artikel.Nummer);
"Geb. Verkaufsrechnungszeile".SETRANGE("Geb. Verkaufsrechnungszeile".Bezeichnung, Artikel.Bezeichnung);
IF "Geb. Verkaufsrechnungszeile".FIND('-')
THEN
BEGIN
REPEAT
QtySelling := "Geb. Verkaufsrechnungszeile".Menge;
IF QtySelling <> 0
THEN
Daysonhand := ROUND(QtyOH * 260 / QtySelling,0.01)
ELSE
Daysonhand := 0;
UNTIL "Geb. Verkaufsrechnungszeile".NEXT = 0;
END
ELSE
BEGIN
END;
在Geb. Verkaufsrechnungszeile里的代码如下:
OnPreDataItem()
InvHeader.RESET;
InvHeader.INIT;
InvHeader.SETRANGE(InvHeader.Buchungsdatum,VonDatum,BisDatum);
InvHeader.SETRANGE(InvHeader.Nummer,"Geb. Verkaufsrechnungszeile".Nummer);
OnAfterGetRecord()
ItemNo := "Geb. Verkaufsrechnungszeile".Nummer;
Description := "Geb. Verkaufsrechnungszeile".Bezeichnung;
QtySelling := "Geb. Verkaufsrechnungszeile".Menge;
IF QtySelling <> 0
THEN
BEGIN
Artikel.RESET;
Artikel.INIT;
Artikel.SETFILTER(Artikel.Lagerbestand,'>=0');
Artikel.SETRANGE(Artikel.Nummer, "Geb. Verkaufsrechnungszeile".Nummer);
Artikel.SETRANGE(Artikel.Bezeichnung, "Geb. Verkaufsrechnungszeile".Bezeichnung);
IF Artikel.FIND('-')
THEN
BEGIN
REPEAT
QtyOH := Artikel.Lagerbestand;
Daysonhand := ROUND(QtyOH * 260 / QtySelling,0.01);
UNTIL Artikel.NEXT = 0;
END
ELSE
BEGIN
END;
END
ELSE
Daysonhand := 0;
在Geb. Verkaufsrechnungskopf里的代码如下:
OnPreDataItem()
InvHeader.RESET;
InvHeader.INIT;
InvHeader.SETRANGE(InvHeader.Buchungsdatum,"Geb. Verkaufsrechnungskopf".Buchungsdatum);
InvHeader.SETRANGE(InvHeader.Nummer,"Geb. Verkaufsrechnungskopf".Nummer);
"Geb. Verkaufsrechnungszeile".RESET;
"Geb. Verkaufsrechnungszeile".INIT;
"Geb. Verkaufsrechnungszeile".SETRANGE("Geb. Verkaufsrechnungszeile".Nummer,"Geb. Verkaufsrechnungskopf".Nummer); |
|