壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3707|回复: 6

JDE版主帮助Navision版块添加人气,对Navision报表感兴趣的请进来指点

[复制链接]
发表于 2009/1/8 23:10:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服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);
发表于 2009/4/5 15:31:29 | 显示全部楼层
学习了!
发表于 2009/4/22 16:35:25 | 显示全部楼层
好像比JDE复杂,看你找个语句的,写的这么繁琐,呵呵

兄弟几时回来搞JDE啊?兄弟们都等着呢!哈
发表于 2009/6/2 17:58:30 | 显示全部楼层
完整的需求是怎样的?不是太能够完全懂是干嘛的。

Nav提供有Date数据表,可以设置DateFilter来得到年/月/日/星期等信息。另外做这种类型报表,你也可以用Integer,使用Number来控制数据记录数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 01:36 , Processed in 0.017452 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表