问题描述
采购单订单查询。业务需求:查询期间采购订单汇总数据。屏幕输入:订单创建日期(必输),采购组织(多选选输),订单类型(单选选输),物料(多选选输)输出:按采购组织+供应商+日期汇总的数据,含字段:采购组织,创建日期,订单类型,物料,物料描述,供应商代码,供应商描述,汇总的数量用到的数据表:EKKO,EKPO,MAKT,LFA1,需排除字段EKKO-LOEKZ,EKPO-LOEKZ打上删除标记的数据程序检查没有错误、但是运行的时候只能输出“采购组织”等,而T_OUT的内容输不出来。感觉应该是T_OUT里面没有数据。但是SELECT明明就写入了数据,实在找不到错在哪里了。。REPORTZHMH_TR002_1.TABLES:EKKO,EKPO,MAKT,LFA1.DATA:BEGINOFT_OUTOCCURS0,PURCLIKEEKKO-EKORG,DESCLIKEMAKT-MAKTX,SUPPLIKELFA1-LIFNR,SUPDLIKELFA1-NAME1,DATELIKEEKPO-AEDAT,SUM1LIKEEKPO-MENGE,ENDOFT_OUT.DATA:BEGINOFT_OUT1OCCURS0,SUPPLIKELFA1-LIFNR,SUPDLIKELFA1-NAME1,ENDOFT_OUT1.PARAMETERS:DATETYPED.SELECT-OPTIONSPURCFOREKKO-EKORG.SELECT-OPTIONSTYPEFOREKKO-BSARTNOINTERVALS.SELECT-OPTIONSCODEFORMAKT-MATNR.START-OF-SELECTION.SELECTEKKO~EKORGMAKT~MAKTXEKKO~LIFNREKKO~AEDATEKPO~MENGEINTOCORRESPONDINGFIELDSOFTABLET_OUTFROMEKKOINNERJOINEKPOONEKPO~AEDAT=EKKO~AEDATANDEKPO~EBELN=EKKO~EBELNINNERJOINMAKTONEKPO~MATNR=MAKT~MATNRANDMAKT~SPRAS=1WHEREEKKO~AEDAT=DATEANDEKKO~EKORGINPURCANDEKKO~BSARTINTYPEANDMAKT~MATNRINCODEANDEKKO~LOEKZ=''ANDEKPO~LOEKZ=''ORDERBYEKKO~LIFNRASCENDING.IFSY-SUBRC<>0.WRITE:/'Nodata.'.EXIT.ENDIF.SELECTLFA1~LIFNRLFA1~NAME1INTOTABLET_OUT1FROMLFA1INNERJOINEKKOONLFA1~LIFNR=EKKO~LIFNRFORALLENTRIESINT_OUTWHERELFA1~LIFNR=T_OUT-SUPP.END-OF-SELECTION.LOOPATT_OUT.READTABLET_OUT1WITHKEYSUPP=T_OUT-SUPP.T_OUT-SUPD=T_OUT1-SUPD.MODIFYT_OUT.CLEART_OUT1.CLEART_OUT.ENDLOOP.LOOPATT_OUT.WRITE:/'物料描述:',T_OUT-DESC.SKIP.WRITE:/'采购组织',11'供应商',26'供应商描述',58'订单创建日期'.WRITE:/3T_OUT-PURC,11T_OUT-SUPP,22T_OUT-SUPD,59T_OUT-DATE.ULINE.SKIP.ATLAST.ULINE.SKIP.SUM.WRITE:/'汇总的数量:',T_OUT-SUM1.ULINE.ENDAT.ENDLOOP.
解决方案
解决方案二:
求解答~
解决方案三:
你的查询有问题,将你的select语句中innerjoin语句好好修改下。第一,将EKKO和EKPO中数据取出来放到内表中;第二,forallentriesin内表,将makt中的相关字段也取到内表中;第三,输出至屏幕。还有,你的选择屏幕中查询条件建议取对应表中的主键,这样查询起来会快很多
解决方案四:
取出字段的名字必须和内表的名字一致你取个别名吧ekko~ekorgASPURCmakt~maktxASDESCekko~lifnrASSUPPekko~aedatASDATEekpo~mengeASSUM1
解决方案五:
先帮顶俺也须系学习
解决方案六:
这种复杂SQL就不应该出现在ABAP程序中,很多项目都是禁止三个表上以的JOIN的,效率低且易出错,用forentriesin吧.