Выборка последнего документа по заводу и материалу

Автор Паганель, Липень 19, 2009, 05:19:15 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

Паганель

Тут вот, пришлось помогать коллеге по работе, попросил человек, программка простая, но из-за одной логической ошибки угрохали почти больше часа, выложу сюда, может кому пригодится, или самому через годик пригодится ...

Z_MKPF_MSEG - вьюха (MKPF + MSEG )

Самый главный код:

SELECT mblnr budat CPUTM werks matnr FROM z_mkpf_mseg
     INTO CORRESPONDING FIELDS OF TABLE gt_outtab
     WHERE werks IN so_werks AND matnr IN so_matnr AND budat IN so_budat
     and bwart in so_bwart.

 SORT gt_outtab BY  werks matnr budat DESCENDING CPUTM DESCENDING.

 LOOP AT gt_outtab INTO ls_outtab.
    " блин оказывается нельзя использовать AND
    ON CHANGE OF "ls_outtab-budat OR
       ls_outtab-werks OR ls_outtab-matnr.
      IF
        "ls_outtab-budat <> ls_outtab1-budat and
        ls_outtab-werks <> ls_outtab1-werks or   " <<<<<- тут была ошибка вместо OR поставил AND
        ls_outtab-matnr <> ls_outtab1-matnr .

        APPEND ls_outtab TO gt_outtab1.
      ENDIF.
      move ls_outtab to ls_outtab1.
    ENDON.
    "
 ENDLOOP.  


Весь код:

*&---------------------------------------------------------------------*
*& Report  ZMM_LAST_IN
*&
*&---------------------------------------------------------------------*
*& Выбор последних приходов
*&---------------------------------------------------------------------*

REPORT  zmm_last_in_01.


TABLES:  z_mkpf_mseg, t001k.

INCLUDE zmm_functions.


TYPES: BEGIN OF gs_outtab.
TYPES: celltab TYPE lvc_t_styl.
TYPES: colinfo TYPE lvc_t_scol.
TYPES: sticon TYPE icon_d.
INCLUDE STRUCTURE z_mkpf_mseg.
TYPES: END OF gs_outtab.


DATA: gt_outtab TYPE STANDARD TABLE OF gs_outtab WITH HEADER LINE.
DATA: ls_outtab LIKE LINE OF gt_outtab.


DATA: gt_outtab1 TYPE STANDARD TABLE OF gs_outtab WITH HEADER LINE.
DATA: ls_outtab1 LIKE LINE OF gt_outtab1.

DATA: gt_werks LIKE t001k OCCURS 0 WITH HEADER LINE.


* Определение экрана выбора
SELECTION-SCREEN BEGIN OF BLOCK 01 WITH FRAME TITLE text-001.
 SELECT-OPTIONS: so_werks FOR z_mkpf_mseg-werks.
 SELECT-OPTIONS: so_matnr FOR z_mkpf_mseg-matnr.
 SELECT-OPTIONS: so_budat FOR z_mkpf_mseg-budat.
 SELECT-OPTIONS: so_bwart FOR z_mkpf_mseg-bwart.
 PARAMETERS: pa_ekorg TYPE eine-ekorg NO-DISPLAY DEFAULT 'X000'.
SELECTION-SCREEN END OF BLOCK 01.



START-OF-SELECTION.

 PERFORM select_data.
 PERFORM show_grid.
*&---------------------------------------------------------------------*
*&      Form  select_data
*&---------------------------------------------------------------------*

FORM select_data .
   SELECT mblnr budat cputm werks matnr FROM z_mkpf_mseg
     INTO CORRESPONDING FIELDS OF TABLE gt_outtab
     WHERE werks IN so_werks AND matnr IN so_matnr AND budat IN so_budat
     AND bwart IN so_bwart.

 SORT gt_outtab BY  werks matnr budat DESCENDING cputm DESCENDING.

 LOOP AT gt_outtab INTO ls_outtab.
    " блин оказывается нельзя использовать AND
    ON CHANGE OF "ls_outtab-budat OR
       ls_outtab-werks OR ls_outtab-matnr.
      IF
        "ls_outtab-budat <> ls_outtab1-budat and
        ls_outtab-werks <> ls_outtab1-werks OR   " <<<<<- тут была ошибка вместо OR поставил AND
        ls_outtab-matnr <> ls_outtab1-matnr .

        APPEND ls_outtab TO gt_outtab1.
      ENDIF.
      MOVE ls_outtab TO ls_outtab1.
    ENDON.
    "
 ENDLOOP.
ENDFORM.                    " select_data
*&---------------------------------------------------------------------*
*&      Form  show_grid
*&---------------------------------------------------------------------*

FORM show_grid .
 DATA: gs_layout     TYPE slis_layout_alv.
 DATA: lt_fcat       TYPE slis_t_fieldcat_alv.

 PERFORM build_alv_layout       USING  gs_layout.
 PERFORM build_alv_fieldcat     USING  lt_fcat.


 CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
 EXPORTING
   i_callback_program       = sy-repid
*   i_callback_pf_status_set = 'ALV_MAIN_STATUS_SET'
*   i_callback_user_command  = 'USER_COMMAND'
   is_layout                = gs_layout
   it_fieldcat              = lt_fcat
   i_default                = 'X'
   i_save                   = 'A'
 TABLES
   t_outtab                 = gt_outtab1
 EXCEPTIONS
   program_error            = 1
   OTHERS                   = 2.
ENDFORM.                    " show_grid



**********************************************************************
* FORM    :  build_alv_layout
**********************************************************************
FORM build_alv_layout USING rs_layout TYPE slis_layout_alv.
 rs_layout-zebra = 'X'.
 rs_layout-coltab_fieldname = 'COLINFO'.
 rs_layout-edit = ''.
ENDFORM. "build_alv_layout


FORM build_alv_fieldcat  CHANGING rt_fieldcat TYPE slis_t_fieldcat_alv.
 DATA: ls_fcat TYPE slis_fieldcat_alv.
 DATA: syrepid LIKE sy-repid.

 CLEAR ls_fcat.
 ls_fcat-fieldname  = 'CHECKBOX'.
 ls_fcat-edit = 'X'.
 ls_fcat-no_out = 'X'.
 ls_fcat-tech = 'X'.
 ls_fcat-outputlen  = 6.
 ls_fcat-col_pos = 01.
 APPEND ls_fcat TO rt_fieldcat.


 syrepid = sy-repid.
 CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
 EXPORTING
*      i_program_name         = syrepid
   i_structure_name       = 'Z_MKPF_MSEG'
*      i_inclname             = syrepid
 CHANGING
   ct_fieldcat            =  rt_fieldcat
 EXCEPTIONS
   inconststent_interface = 1
   program_error          = 2
   OTHERS                 = 3.

ENDFORM. "build_alv_fieldcat

SMF spam blocked by CleanTalk