2017-10-12 136 views
2

我正在编写一个程序,并且我有三列可以在其中一个列没有数据时复制下一列的内容,反之亦然。为什么列正在复制邻居列?值在相邻的列中重复

photo.jpg

这里列用红色圈正在复制从列蓝色圈的内容,这是不赖特。红色的列应该有0个值。

REPORT Z_KABAP_STATUS_COMENZI. 

TABLES T003P. 
TABLES AFKO. 
TABLES AFPO. 
TABLES AUFM. 
TABLES AUFK. 
TABLES MAKT. 
TABLES AFVV. 



TYPE-POOLS: slis. " SLIS contains all the ALV data types 

DATA: MyGridTitle TYPE LVC_TITLE. 
DATA: report_id LIKE sy-repid. 
DATA: MyLayout TYPE slis_layout_alv. "alv layout 
DATA: afield TYPE slis_fieldcat_alv. "wa_fieldcat 
*DATA: it_sort TYPE slis_t_sortinfo_alv. 
DATA: it1_sort TYPE slis_t_sortinfo_alv. 
*DATA: wa_sort TYPE slis_sortinfo_alv. 
DATA: it_filter TYPE slis_t_filter_alv. 
Data: ls_filter TYPE slis_filter_alv. 
DATA: FIELDCATALOG TYPE slis_t_fieldcat_alv, "WITH HEADER LINE, 
     GD_LAYOUT TYPE slis_layout_alv, 
     G_SAVE TYPE C VALUE 'X', 
     G_VARIANT TYPE DISVARIANT, 
     GX_STOC TYPE DISVARIANT, 
     G_EXIT TYPE C. 
DATA: MyEvents TYPE slis_t_event. 

DATA: it_sort  TYPE slis_t_sortinfo_alv, 
     wa_sort  TYPE slis_sortinfo_alv.. 



TYPES: BEGIN OF tables_fields, 


    AUFNR TYPE AUFK-AUFNR, "Nr comanda productie 
    AUART TYPE AUFK-AUART, "Tip comanda /Sectie 
    WERKS TYPE AUFK-WERKS, "Unitate logistica 
    TXT TYPE T003P-TXT, "Nume sectie 
    "MENGE TYPE AUFM-MENGE, "Cantitate buc predata 
    GAMNG TYPE AFKO-GAMNG, "Cantitatea totala vrac in kg 
    GMEIN TYPE AFKO-GMEIN, "Unitatea de masura cantitate totala 
    "WEMNG TYPE AFPO-WEMNG, "Cantitatea totala livrata 
    ERFMG TYPE AUFM-ERFMG, "Cantitatea kg totala livrata defalcata 
    GSTRP Type AFKO-GSTRP, "Data lansarii comenzii 
    GLTRP TYPE AFKO-GLTRP, "Data estimativa a finalizarii comenzii 
    BLDAT TYPE AUFM-BLDAT, "Data finalizarii comenzii 
    MGVRG TYPE AFVV-MGVRG, "Bucati pe comanda-cant de baza 
    "MEINS TYPE AUFM-MEINS,"Unitate bucati pe comanda-rectificat 
    MEINH TYPE AFVV-MEINH, "Unitate bucati pe comanda 
    MENGE TYPE AUFM-MENGE, "Cantitate buc predata 

    MATNR TYPE AUFM-MATNR, "Cod material 
    MAKTX TYPE MAKT-MAKTX, "Descriere material 
    MBLNR TYPE AUFM-MBLNR, 
    ZEILE TYPE AUFM-ZEILE, 
    BMSCH TYPE AFVV-BMSCH, 

    SPRAS TYPE T003P-SPRAS,"Restrictionare limba 
    ZILEDEP TYPE I,"AFKO-GLTRP, "Filtru date intre care s-au realizat comenzi 
    COMDEP(10) TYPE C,"Nr zile comanda depasita 
    COMINTRE TYPE AFKO-GSTRP,"Data comenzi termen depasit 

    line_color(4) TYPE c, 

    END OF tables_fields. 



DATA: lt_join TYPE STANDARD TABLE OF tables_fields, 
     wa_join TYPE tables_fields. 



FIELD-SYMBOLS : <wa_join> TYPE tables_fields. 

SELECTION-SCREEN BEGIN OF BLOCK BLOCK1 WITH FRAME TITLE text-001. 
SELECT-OPTIONS NrCom FOR AUFK-AUFNR. "AUFK-AUFNR. "Comanda proces 
SELECT-OPTIONS Material FOR AUFM-MATNR."AFKO-PLNBEZ. "Cod material 
SELECT-OPTIONS UnitLog FOR AUFK-WERKS. " Unitate logistica 
SELECT-OPTIONS TipCom FOR AUFK-AUART. "Tip comanda/Sectie 
SELECT-OPTIONS COMINTRE FOR AFKO-GSTRP. "modif id m1. "Date intre care s-au lansat comenzi 
SELECTION-SCREEN END OF BLOCK BLOCK1. 

SELECTION-SCREEN BEGIN OF BLOCK BLOCK2 WITH FRAME TITLE text-001. 
SELECTION-SCREEN COMMENT /1(79) label_4. 
PARAMETERS: btn1 RADIOBUTTON GROUP RAD1 USER-COMMAND chk DEFAULT 'X', 
      btn2 RADIOBUTTON GROUP RAD1, 
      btn3 RADIOBUTTON GROUP RAD1. 
SELECTION-SCREEN END OF BLOCK BLOCK2. 


START-OF-SELECTION. 



    PERFORM Selectare. 
    PERFORM BUILD_FIELDCATALOG. 
    PERFORM sort_catalog. 


    LOOP AT lt_join INTO wa_join. 

    IF wa_join-MEINH = 'ST'. 
     wa_join-MEINH ='BUC'. 
    ENDIF. 


    IF wa_join-MEINH = 'KG'. 
     wa_join-MGVRG = '0'. 
     wa_join-MEINH = '0'. 
     wa_join-MENGE = '0'. 
    endif. 

    IF wa_join-GMEIN = 'ST'. 
     wa_join-GMEIN ='KG'. 
    ENDIF. 


    IF wa_join-erfmg = wa_join-menge. 
     wa_join-GMEIN ='0'. 
     wa_join-gamng = '0'. 
     wa_join-ERFMG = '0'. 
    ENDIF. 



    IF wa_join-bldat > wa_join-gltrp." 
     wa_join-comdep = 'Depasit'." Comenzi termen depasit. 
    ELSE. 
     wa_join-comdep = 'Nedepasit'. 
    ENDIF. 


    IF wa_join-bldat > wa_join-gltrp."" comanda nr zile depasite fata de data estimata . 
     wa_join-ziledep = wa_join-bldat - wa_join-gltrp. 
    ELSE. 
     wa_join-ziledep = ''. 
    ENDIF. 

    MODIFY lt_join FROM wa_join TRANSPORTING MEINH MGVRG MENGE GMEIN GAMNG ERFMG COMDEP BLDAT ZILEDEP."COMINTRE. " WEMNG MEINS 

    ENDLOOP. 

    LOOP AT lt_join ASSIGNING <wa_join>. 
    IF <wa_join>-aufnr EQ '2001'. 
     MOVE 'C410' TO <wa_join>-line_color. 
    ELSE. 
     MOVE 'C510' TO <wa_join>-line_color. 
    ENDIF. 

    ENDLOOP. 

    MyLayout-zebra = 'X'. 
    MyLayout-colwidth_optimize = 'X'. 
    MyLayout-info_fieldname =  'LINE_COLOR'. 

    Refresh it_filter. 
    if btn1 = 'X'. 
    ls_filter-fieldname = 'COMDEP'. "Filtru data comanda intre doua date calendaristice pentru Depasit radiobuton " 
    ls_filter-tabname = 'LT_JOIN'. 
    ls_filter-sign0 = 'I'. 
    ls_filter-optio = 'EQ'. 
    ls_filter-valuf_int = 'Depasit'. 
    APPEND ls_filter TO It_filter. 
    ELSEIF btn3 = 'X'. 
    ls_filter-fieldname = 'COMDEP'. "Filtru data comanda intre doua date calendaristice pentru Nedepasit radiobuton " 
    ls_filter-tabname = 'LT_JOIN'. 
    ls_filter-sign0 = 'I'. 
    ls_filter-optio = 'EQ'. 
    ls_filter-valuf_int = 'Nedepasit'. 
    APPEND ls_filter TO It_filter. 
    EndIf. 


    PERFORM DISPLAY_ALV_REPORT TABLES lt_join. 



FORM Selectare. 


    ##too_many_itab_fields 
    SELECT a~aufnr 
     "e~aufnr 
     a~auart 
     a~werks 
     b~txt 
     c~gamng "cant kg pe comanda 
     c~gmein " unit masura kg 
     "d~wemng 
     e~erfmg " cant kg pe comanda predata 
     c~gstrp 
     c~gltrp 
     e~bldat 
     g~mgvrg "cant buc pe comanda 
     g~meinh " unit masura buc 
     "e~meins 
     e~menge " cant buc pe comanda predata 
     e~matnr"c~plnbez 
     f~maktx 
     e~mblnr 
     e~zeile 
     g~bmsch 



    FROM AUFK AS a 
inner JOIN T003P AS b 
    ON a~auart = b~auart 
inner JOIN AFKO as c 
    ON a~aufnr = c~aufnr 
inner JOIN AFPO as d 
    ON a~aufnr = d~aufnr 
inner JOIN AUFM as e 
    ON a~aufnr = e~aufnr 
inner JOIN MAKT as f 
    ON d~matnr = f~matnr 
inner JOIN AFVV as g 
    ON c~aufpl = g~aufpl 


INTO TABLE lt_join 
"FOR ALL ENTRIES IN lt_join 
    WHERE a~aufnr IN NrCom AND " 
      a~werks IN UnitLog AND 
      b~auart IN TipCom AND 
      b~SPRAS = SY-LANGU AND 
      f~spras = sy-langu and 
      e~matnr IN Material AND "c~plnbez 
      bwart = '101' AND 
      c~gstrp IN COMINTRE. 


    sort lt_join by MBLNR. 

    DELETE ADJACENT DUPLICATES FROM lt_join comparing MBLNR." 

ENDFORM. 


FORM sort_catalog. 

    wa_sort-spos  = 4. 
    wa_sort-fieldname = 'AUFNR'. 
    wa_sort-up  = 'X'. 
    wa_sort-subtot = 'X'. 
    APPEND wa_sort TO it_sort. 

ENDFORM. 

FORM BUILD_FIELDCATALOG. 
    REFRESH FIELDCATALOG. 

    afield-FIELDNAME = 'WERKS'. 
    afield-SELTEXT_M = 'Unitate logistica'. 
    afield-COL_POS = 1. 
    afield-OUTPUTLEN = 10. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'AUART'. 
    afield-SELTEXT_M = 'Tip Comanda'. 
    afield-COL_POS = 2. 
    afield-OUTPUTLEN = 10. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'TXT'. 
    afield-SELTEXT_M = 'Nume sectie'. 
    afield-COL_POS = 3. 
    afield-OUTPUTLEN = 25. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'AUFNR'. 
    afield-SELTEXT_M = 'Numar comanda'. 
    afield-COL_POS = 4. 
    afield-OUTPUTLEN = 10. 
    afield-no_zero = 'X'. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'MATNR'."'PLNBEZ'. 
    afield-SELTEXT_M = 'Cod Material'. 
    afield-COL_POS = 5. 
    afield-OUTPUTLEN = 15. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'MAKTX'. 
    afield-SELTEXT_M = 'Descriere material'. 
    afield-COL_POS = 6. 
    afield-OUTPUTLEN = 25. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'MGVRG'. 
    afield-SELTEXT_M = 'Bucati pe comanda'. 
    afield-COL_POS = 7. 
    afield-OUTPUTLEN = 13. 
    afield-decimals_out = 0. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'MEINH'."MEINS 
    afield-SELTEXT_M = 'Unitate'. 
    afield-COL_POS = 8. 
    afield-OUTPUTLEN = 7. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'MENGE'. 
    afield-SELTEXT_M = 'Cant. buc. predate'. 
    afield-COL_POS = 9. 
    afield-OUTPUTLEN = 13. 
    afield-decimals_out = 0. 
    afield-do_sum = 'X'. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'GAMNG'. 
    afield-SELTEXT_M = 'Cant.pe comanda'. 
    afield-COL_POS = 10. 
    afield-OUTPUTLEN = 13. 
    "afield-decimals_out = 0. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'GMEIN'. 
    afield-SELTEXT_M = 'Unitate'. 
    afield-COL_POS = 11. 
    afield-OUTPUTLEN = 5. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'ERFMG'. "WEMNG 
    afield-SELTEXT_M = 'Cant. predata'. 
    afield-COL_POS = 12. 
    afield-OUTPUTLEN = 10. 
    "afield-decimals_out = 0. 
    afield-do_sum = 'X'. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'GSTRP'. 
    afield-SELTEXT_M = 'Lansare comanda'. 
    afield-COL_POS = 13. 
    afield-OUTPUTLEN = 12. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'GLTRP'. 
    afield-SELTEXT_M = 'Data plan finalizare'. 
    afield-COL_POS = 14. 
    afield-OUTPUTLEN = 15. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'BLDAT'. 
    afield-SELTEXT_M = 'Data predare comanda'. 
    afield-COL_POS = 15. 
    afield-OUTPUTLEN = 13. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'COMDEP'. 
    afield-SELTEXT_M = 'Termen comanda'. 
    afield-COL_POS = 16. 
    afield-OUTPUTLEN = 13. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 

    afield-FIELDNAME = 'ZILEDEP'. 
    afield-SELTEXT_M = 'Nr zile'. 
    afield-COL_POS = 17. 
    afield-OUTPUTLEN = 13. 
    APPEND afield TO FIELDCATALOG. 
    CLEAR afield. 



ENDFORM. 




FORM DISPLAY_ALV_REPORT TABLES lt_join. 
* USING P_GRID_TITLE. 
* rs_selfield TYPE slis_selfield. 
    report_id = SY-REPID. 
* RS_SELFIELD-ROW_STABLE = 'X'. 
    CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' 
    EXPORTING 
     I_CALLBACK_PROGRAM  = report_id 
     I_CALLBACK_TOP_OF_PAGE = 'TOP-OF-PAGE' 
*  I_CALLBACK_USER_COMMAND = 'USER_COMMAND' 
*  I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS' 
     IT_FIELDCAT    = FIELDCATALOG"[] 
*  I_GRID_TITLE    = P_GRID_TITLE 
     I_SAVE     = 'X' 
     IT_EVENTS    = MyEvents 
     is_layout    = MyLayout 
     it_sort     = it_sort 
     it_filter    = it_filter " List output filter criteria 
*  IS_VARIANT    = G_VARIANT 
    TABLES 
     T_OUTTAB     = lt_join 
    EXCEPTIONS 
     PROGRAM_ERROR   = 1 
     OTHERS     = 2. 

    IF SY-SUBRC <> 0. 
    ENDIF. 

ENDFORM. 


*---------------------------------------------------------* 
* Grid Header           * 
*---------------------------------------------------------* 
Form TOP-OF-PAGE. 
*ALV Header declarations 
    data: My_header type slis_t_listheader, 
     wa_header type slis_listheader, 
     My_line like wa_header-info, 
     ld_lines type i, 
     ld_linesc(10) type c. 

* Title 
    clear wa_header. 
    wa_header-typ = 'H'. 
    wa_header-info = 
    'Raport status comenzi de productie'. 
    append wa_header to My_header. 
* 
* clear wa_header. 
* wa_header-typ = 'H'. 
* wa_header-info =`enter code here` 
* 'Efectuati DUBLU Click pt Analiza Grafica - optiunile 01-08'. 
* append wa_header to My_header. 
    CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' 
    EXPORTING 
     it_list_commentary = My_header. 
*   i_logo    = 'Z_LOGO'. 
endform. 
+0

没有附加图片,这远非最小的例子。请创建您的程序的副本,并删除对演示问题并非绝对必要的所有内容。 – vwegert

+0

嗨vwegert,我删除了所有comentaries并添加了照片。任何线索? – dragospirnut

+0

'当其中一个没有数据时'为什么你认为总和线计算错误?你的**不能。 BUC。先于**和**不能。 predata **都具有相同的值,因此它们的总和将是相同的。一切都是正确的。 – Suncatcher

回答

0

如果fieldcatalog定义在某种程度上某个列出错了,我会遇到重复的列值。

检查您的fieldcat字段名称,以及它们是否与lt_join中的内部表字段名称正确匹配,并尝试尽可能少地使用fieldcatalog选项以避免错误的配置。

+0

感谢您的回复,lt_join中的字段不匹配fieldcatalog,因为我需要在fieldcatalog中的特定顺序。 fieldcatalog中的字段名称需要匹配lt_join中的字段名称? – dragospirnut

1

使用进入您的SELECT中的表子句的相应字段,而不仅仅是INTO TABLE lt_join。表格值可能会转移到itab的错误字段中。从SELECT documentation
摘录:

如果所有列读取*和相应的字段是不是 规定,SELECT行为如下:

  • 当指定不包含任何引用变量的工作区对于LOB句柄,根据结果 集合将行分配给结果集 左对齐且未转换。未受影响的wa部分包含其以前的内容。要成为 能够根据它们的 类型访问结果集的组件,工作区必须与结果集相似地构造。

而且,你的条件

IF wa_join-MEINH = 'KG'. 
    wa_join-MGVRG = '0'. 
    wa_join-MEINH = '0'. 
    wa_join-MENGE = '0'. 
endif. 

可能无法满足,如果MEINH场的条件后填写。

+0

感谢您的回复,我评论说:如果wa_join-MEINH ='KG'。 wa_join-MGVRG ='0'。 wa_join-MEINH ='0'。 wa_join-MENGE ='0'。 endif。并使用INTO CORRESPONDING FIELDS OF,并且出现错误“您不能使用内部表格作为工作区域”,并将我指向:SELECT行。 – dragospirnut

+0

在你的情况下,你应该使用INTO相应的**表** **,我认为你能够猜出正确的形式:) – Suncatcher

+0

我评论:如果wa_join-MEINH ='KG'。 wa_join-MGVRG ='0'。 wa_join-MEINH ='0'。 wa_join-MENGE ='0'并且使用INTO相应的FIELDS OF TABLE,不幸的是同样的结果:((。)非常感谢你的时间 – dragospirnut

相关问题