SD-Packing List 打印

*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-06-27
*& Program Type        :  Report
*& Description         :  Packing List打印
*&---------------------------------------------------------------------*
REPORT ZSDR001.

*&---------------------------------------------------------------------*
*& 包含               YN_TEST02_TOP
*&---------------------------------------------------------------------*
TABLES:MARC,EKKO,VBAP,VBRK,VBPA.

TYPE-POOLS:SLIS.

"定义ALV输出所需变量
DATAS_LAYOUT    TYPE SLIS_LAYOUT_ALV,
      GT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV.

DATAGT_DATA      TYPE TABLE OF ZTS_INDATA_HEAD WITH HEADER LINE.
DATAGT_DATA_A    TYPE TABLE OF ZTS_INDATA_HEAD WITH HEADER LINE.
DATAGT_DATA_IT   TYPE TABLE OF ZTS_INDATA_ITEM WITH HEADER LINE.
DATAGT_DATA_IT_A TYPE TABLE OF ZTS_INDATA_ITEM WITH HEADER LINE.
DATAGT_DATA_IT_B TYPE TABLE OF ZTS_INDATA_ITEM WITH HEADER LINE.
DATAGT_DATA_IT_C TYPE TABLE OF ZTS_INDATA_ITEM WITH HEADER LINE.
DATAGV_TOP     TYPE SDYDO_TEXT_ELEMENT.
DATAGV_SPRAS   TYPE SPRAS.
DATAADDRNUMBER TYPE AD_ADDRNUM .
DATACOUNTRY    TYPE LAND1  .
DATALV_ITEM    TYPE CHAR5.

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONSS_VBELN  FOR  VBRK-VBELN      MODIF ID C1.                           "发票号码
SELECT-OPTIONSS_FKDAT  FOR  VBRK-FKDAT      MODIF ID C1.                           "发票日期
SELECT-OPTIONSS_FKART  FOR  VBRK-FKART      MODIF ID C1.                           "发票类型
PARAMETERS:     P_VKORG  LIKE VBRK-VKORG      MODIF ID C1 DEFAULT '2001' OBLIGATORY"销售组织
SELECT-OPTIONSS_KUNRG  FOR  VBRK-KUNRG      MODIF ID C1.                           "付款方
SELECT-OPTIONSS_KUNAG  FOR  VBRK-KUNAG      MODIF ID C1.                           "售达方
PARAMETERS:     S_BRGEW  TYPE BRGEW           MODIF ID C1.                           "标准纸箱重量KG(尾箱)
SELECTION-SCREEN BEGIN OF LINE.
PARAMETERS:
      R1 RADIOBUTTON GROUP RAD2 .
SELECTION-SCREEN COMMENT 03(15TEXT-001.  "*单选按钮的名称
PARAMETERS:
      R2 RADIOBUTTON GROUP RAD2 .
SELECTION-SCREEN COMMENT 21(20TEXT-002.  "*单选按钮的名称
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.
*&---------------------------------------------------------------------*
*& 包含               YN_TEST02_FOM
*&---------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form SCREEN_SETTING
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM SCREEN_SETTING .
* AUTHORITY-CHECK OBJECT 'M_MATE_WRK'
*  ID 'WERKS' FIELD P_WERKS.
*  IF SY-SUBRC <> 0.
*    MESSAGE '您没有工厂:'&& P_WERKS && '  的权限!' TYPE 'E' .
*  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FOM_GETDATA
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FOM_GETDATA .
  DATA TDID    TYPE TABLE OF TDID WITH HEADER LINE .
  DATA TLINE   TYPE TABLE OF TLINE WITH HEADER LINE .
  DATA TDNAME  TYPE TDOBNAME .
  DATA ADDRNUMBER  TYPE AD_ADDRNUM .

  CLEAR GT_DATA_A[] .
  SELECT VBRK~VBELN
         VBRK
~VKORG
         VBRK
~FKDAT
         VBRK
~FKART
         VBRK
~KUNRG
         VBRK
~KUNAG
         VBRK
~NETWR
         VBRK
~WAERK
         VBRK
~VSBED
    
INTO CORRESPONDING FIELDS OF TABLE GT_DATA_A[] FROM VBRK
    
WHERE VKORG =  P_VKORG
      
AND VBELN IN S_VBELN
      
AND FKDAT IN S_FKDAT
      
AND FKART IN S_FKART
      
AND KUNRG IN S_KUNRG
      
AND KUNAG IN S_KUNAG
      
.
  LOOP AT GT_DATA_A.
    SELECT SINGLE NAME_ORG1 INTO GT_DATA_A-NAME_ORG2 FROM BUT000
      
WHERE PARTNER GT_DATA_A-KUNAG
      
.
    CLEAR ADDRNUMBER .
    SELECT SINGLE ADDRNUMBER INTO ADDRNUMBER FROM BUT020
      
WHERE PARTNER GT_DATA_A-KUNAG
      
.
    IF SY-SUBRC 0.
      CLEAR COUNTRY .
      SELECT SINGLE STREET STR_SUPPL1 STR_SUPPL2  INTO GT_DATA_A-SDF_SUPPL1 GT_DATA_A-SDF_SUPPL2 GT_DATA_A-SDF_SUPPL3  FROM ADRC
        
WHERE ADDRNUMBER ADDRNUMBER
        
.
    ENDIF.
    MODIFY GT_DATA_A .
    CLEAR GT_DATA_A .
  ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*
FORM FRM_DISPLAY .
  CLEAR S_LAYOUT.
  S_LAYOUT-ZEBRA 'X'.
  S_LAYOUT-COLWIDTH_OPTIMIZE 'X'.
*  s_layout-box_fieldname    = 'BOX'.
  PERFORM FRM_FILL_FIELD .

  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      IS_LAYOUT                S_LAYOUT
      IT_FIELDCAT              
GT_FIELDCAT
      I_CALLBACK_PROGRAM       
SY-REPID
      I_CALLBACK_PF_STATUS_SET 
'PF_STATUS_SET'
      I_CALLBACK_USER_COMMAND  'USER_COMMAND'
    TABLES
      T_OUTTAB                 GT_DATA_A[].
ENDFORM.

FORM FRM_FILL_FIELD .
  DATA:  WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
  DEFINE FILL_FIELD.
    wa_fieldcat-fieldname &1.
    wa_fieldcat-seltext_l &2.
*    IF wa_fieldcat-fieldname =  'MSLJH' or wa_fieldcat-fieldname =  'WCBJH'.
*      wa_fieldcat-EMPHASIZE = 'C600'. "设置字段的颜色
*    ENDIF.

    IF wa_fieldcat-fieldname =  'CKBOX' .
      wa_fieldcat-CHECKBOX 'X'.
      wa_fieldcat-EDIT 'X'.
    ENDIF.

    IF wa_fieldcat-fieldname 'PLNBEZ' OR wa_fieldcat-fieldname 'MATNR' .
      wa_fieldcat-ref_tabname 'MARA'.
      wa_fieldcat-ref_fieldname 'MATNR'.
    ENDIF.

    IF wa_fieldcat-fieldname 'ARKTX' OR wa_fieldcat-fieldname 'WAKTX' .
      wa_fieldcat-ref_tabname 'VBAP'.
      wa_fieldcat-ref_fieldname 'ARKTX'.
    ENDIF.

    IF wa_fieldcat-fieldname 'AUFNR' .
      wa_fieldcat-ref_tabname 'AUFK'.
      wa_fieldcat-ref_fieldname 'AUFNR'.
    ENDIF.

    APPEND wa_fieldcat TO gt_fieldcat.
    CLEAR wa_fieldcat.
  END-OF-DEFINITION.
  FILL_FIELD :
        'CKBOX'     '选择列',
        'VBELN'     '发票号码',
        'FKDAT'     '发票日期',
        'FKART'     '发票类型',
        'VKORG'     '发票组织',
        'KUNRG'     '付款方',
        'KUNAG'     '售达方',
        'NETWR'     '总金额',
        'WAERK'     '币别',
        'VSBED'     '装运条件'.

ENDFORM.

FORM PF_STATUS_SET USING RT_EXTAB TYPE SLIS_T_EXTAB.
  SET PF-STATUS 'STANDARD_FULLSCREEN'.
ENDFORM.

FORM USER_COMMAND USING I_UCOMM LIKE SY-UCOMM
                    IS_SELFIELD 
TYPE SLIS_SELFIELD.
  DATA:   REF TYPE REF TO CL_GUI_ALV_GRID.
  DATA :  LV_STABLE TYPE LVC_S_STBL.   "刷新稳定性
  RANGESL_WERKS FOR T001W-WERKS.
  RANGESL_MATNR FOR MARA-MATNR.
  DATA:   L_BUKRS TYPE T001K-BUKRS.
  DATA:   NUM     TYPE I  .
  DATA:   TEMP    TYPE CHAR10 .
  DATA:   TEMP_Z  TYPE I .
  DATA:   TEMPX   TYPE CHAR10 .
  DATA:   TEMPX_Z TYPE I .
  DATA:   TEMPC   TYPE CHAR10 .
  DATA:   TEMPC_Z TYPE I .
  DATA:   TDID    TYPE TABLE OF TDID WITH HEADER LINE .
  DATA:   TLINE   TYPE TABLE OF TLINE WITH HEADER LINE .
  DATA:   TDNAME  TYPE TDOBNAME .
  DATA:   GT_MARM TYPE TABLE OF MARM WITH HEADER LINE .
  DATA:   GT_MARM_C TYPE TABLE OF MARM WITH HEADER LINE .
  DATA:   SUM_PAL TYPE CHAR10  .
  DATA:   SUM_CAR TYPE CHAR10  .
  DATA:   LAENG_C TYPE CHAR10 .
  DATA:   BREIT_C TYPE CHAR10 .
  DATA:   HOEHE_C TYPE CHAR10 .
  DATA:   LAENG_C1 TYPE CHAR10 .
  DATA:   BREIT_C1 TYPE CHAR10 .
  DATA:   HOEHE_C1 TYPE CHAR10 .
  LV_STABLE-ROW '1'.
  LV_STABLE-COL '1'.

  CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
    IMPORTING
      E_GRID REF.
  CALL METHOD REF->CHECK_CHANGED_DATA.

  CASE I_UCOMM.
    WHEN 'PRINT'."点击打印

      DATAFM_NAME TYPE RS38L_FNAM .
      DATAFORMNAME TYPE TDSFNAME .
      DATA:L_CONTROL_PARAMETERS TYPE SSFCTRLOP.
      DATA:L_OUTPUT_OPTIONS TYPE SSFCOMPOP.

      CLEAR FORMNAME .
      IF R1 IS NOT INITIAL.
        FORMNAME 'ZSDSF001_A' .
      ELSE .
        FORMNAME 'ZSDSF001_B' .
      ENDIF.

      CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
        EXPORTING
          FORMNAME           FORMNAME "SmartForms程序
        IMPORTING
          FM_NAME            FM_NAME
        
EXCEPTIONS
          NO_FORM            1
          NO_FUNCTION_MODULE 2
          OTHERS             3.

      IF SY-SUBRC <> 0.
*   错误处理
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
        
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        EXIT.
      ENDIF.

      GT_DATA[] GT_DATA_A[] .
      DELETE GT_DATA[] WHERE CKBOX IS INITIAL .

      IF GT_DATA[] IS NOT INITIAL.
        LOOP AT GT_DATA .

          L_CONTROL_PARAMETERS-NO_OPEN 'X'.
          L_CONTROL_PARAMETERS-NO_CLOSE 'X'."
          AT FIRST .
            L_CONTROL_PARAMETERS-NO_OPEN SPACE."首次运行时打开打印对话框
            L_CONTROL_PARAMETERS-NO_CLOSE 'X'."并且不关闭假脱机请求
          ENDAT .

          CLEAR GT_DATA_IT[] .
          SELECT VBELN POSNR AUBEL AUPOS MATNR FKIMG VRKME ARKTX INTO CORRESPONDING FIELDS OF TABLE GT_DATA_IT[] FROM VBRP
            
WHERE VBELN GT_DATA-VBELN
            
.
          SORT GT_DATA_IT[] BY MATNR .
          GT_DATA_IT_A[] GT_DATA_IT[] .
          DELETE ADJACENT DUPLICATES FROM GT_DATA_IT[] COMPARING MATNR.

          CLEAR LV_ITEM .
          CLEAR GT_DATA_IT_B[] .
          LOOP AT GT_DATA_IT WHERE FLAG IS INITIAL.
            CLEAR GT_DATA_IT-FKIMG .
            LOOP AT GT_DATA_IT_A WHERE MATNR GT_DATA_IT-MATNR.
              GT_DATA_IT-FKIMG GT_DATA_IT-FKIMG + GT_DATA_IT_A-FKIMG .
              CLEAR GT_DATA_IT_A .
            ENDLOOP.

**测试用数据
*            GT_DATA_IT-MATNR = 'D979-1-P001.A303'.
*            GT_DATA_IT-FKIMG = 1000 .
**测试用数据

            SELECT SINGLE KDMAT INTO GT_DATA_IT-KDMAT FROM VBAP
              
WHERE VBELN GT_DATA_IT-AUBEL
                
AND POSNR GT_DATA_IT-AUPOS
                
.
            SELECT SINGLE NTGEW INTO GT_DATA_IT-NTGEW FROM MARA
              
WHERE MATNR GT_DATA_IT-MATNR
                
.
            SELECT INTO CORRESPONDING FIELDS OF TABLE GT_MARM[] FROM MARM
              
WHERE MATNR GT_DATA_IT-MATNR
              
.
            GT_MARM_C[] GT_MARM[] .
            CLEAR GT_MARM .
            READ TABLE GT_MARM WITH KEY MEINH 'PAL'.
            CLEAR SUM_PAL .
            IF GT_MARM-UMREN <> 0.
              SUM_PAL GT_MARM-UMREZ / GT_MARM-UMREN .
            ENDIF.

            CLEAR TEMP .
            CLEAR TEMP_Z .
            IF SUM_PAL <> 0.
              TEMP   GT_DATA_IT-FKIMG MOD SUM_PAL ."取余
              TEMP_Z GT_DATA_IT-FKIMG DIV SUM_PAL ."取整
            ENDIF.

            CLEAR GT_MARM_C .
            READ TABLE GT_MARM_C WITH KEY MEINH 'KAR'.
            CLEAR SUM_CAR .
            IF GT_MARM_C-UMREN <> 0.
              SUM_CAR GT_MARM_C-UMREZ / GT_MARM_C-UMREN .
            ENDIF.

            CLEAR TEMPX .
            CLEAR TEMPX_Z .
            IF SUM_PAL <> 0.
              TEMPX   GT_DATA_IT-FKIMG MOD SUM_CAR ."取余
              TEMPX_Z GT_DATA_IT-FKIMG DIV SUM_CAR ."取整
            ENDIF.

            CLEAR GT_DATA_IT-YKBMZ .
            GT_DATA_IT-YKBMZ GT_MARM-BRGEW .

*--------------------------------------------------------------------------------
*packing list 1
*--------------------------------------------------------------------------------
            CLEAR  LAENG_C .
            CLEAR  BREIT_C .
            CLEAR  HOEHE_C .
            LAENG_C GT_MARM-LAENG .
            BREIT_C GT_MARM-BREIT .
            HOEHE_C GT_MARM-HOEHE .

            DATA:L_STR TYPE STRING.
            CLEAR L_STR .
            IF LAENG_C IS NOT INITIAL.
              L_STR LAENG_C.
              CONDENSE L_STR去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '0'."去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '.'."去掉没用的小数位的0
            ELSE.
              L_STR '0'."为空就给个空值
            ENDIF.
            CONDENSE L_STR.
            LAENG_C L_STR.

            CLEAR L_STR .
            IF BREIT_C IS NOT INITIAL.
              L_STR BREIT_C.
              CONDENSE L_STR去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '0'."去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '.'."去掉没用的小数位的0
            ELSE.
              L_STR '0'."为空就给个空值
            ENDIF.
            CONDENSE L_STR.
            BREIT_C L_STR.

            CLEAR L_STR .
            IF HOEHE_C IS NOT INITIAL.
              L_STR HOEHE_C.
              CONDENSE L_STR去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '0'."去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '.'."去掉没用的小数位的0
            ELSE.
              L_STR '0'."为空就给个空值
            ENDIF.
            CONDENSE L_STR.
            HOEHE_C L_STR.
*--------------------------------------------------------------------------------
*packing list 1
*--------------------------------------------------------------------------------

*--------------------------------------------------------------------------------
*packing list 2
*--------------------------------------------------------------------------------
            CLEAR  LAENG_C1 .
            CLEAR  BREIT_C1 .
            CLEAR  HOEHE_C1 .
            LAENG_C1 GT_MARM_C-LAENG .
            BREIT_C1 GT_MARM_C-BREIT .
            HOEHE_C1 GT_MARM_C-HOEHE .

            CLEAR L_STR .
            IF LAENG_C1 IS NOT INITIAL.
              L_STR LAENG_C1.
              CONDENSE L_STR去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '0'."去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '.'."去掉没用的小数位的0
            ELSE.
              L_STR '0'."为空就给个空值
            ENDIF.
            CONDENSE L_STR.
            LAENG_C1 L_STR.

            CLEAR L_STR .
            IF BREIT_C1 IS NOT INITIAL.
              L_STR BREIT_C1.
              CONDENSE L_STR去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '0'."去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '.'."去掉没用的小数位的0
            ELSE.
              L_STR '0'."为空就给个空值
            ENDIF.
            CONDENSE L_STR.
            BREIT_C1 L_STR.

            CLEAR L_STR .
            IF HOEHE_C1 IS NOT INITIAL.
              L_STR HOEHE_C1.
              CONDENSE L_STR去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '0'."去掉没用的小数位的0
              SHIFT L_STR RIGHT DELETING TRAILING '.'."去掉没用的小数位的0
            ELSE.
              L_STR '0'."为空就给个空值
            ENDIF.
            CONDENSE L_STR.
            HOEHE_C1 L_STR.
*--------------------------------------------------------------------------------
*packing list 2
*--------------------------------------------------------------------------------

            IF R1 IS NOT INITIAL.
*--------------------------------------------------------------------------------
*packing list 1
*--------------------------------------------------------------------------------
              IF TEMP_Z >= 1.
                DO TEMP_Z TIMES.
                  ADD TO LV_ITEM .
                  GT_DATA_IT_B-ITEM  LV_ITEM .
                  GT_DATA_IT_B-VBELN GT_DATA_IT-VBELN .
                  GT_DATA_IT_B-POSNR GT_DATA_IT-POSNR .
                  GT_DATA_IT_B-AUBEL GT_DATA_IT-AUBEL .
                  GT_DATA_IT_B-AUPOS GT_DATA_IT-AUPOS .
                  GT_DATA_IT_B-MATNR GT_DATA_IT-MATNR .
                  GT_DATA_IT_B-FKIMG GT_DATA_IT-FKIMG .
                  GT_DATA_IT_B-KDMAT GT_DATA_IT-KDMAT .
                  GT_DATA_IT_B-YKBJZ GT_DATA_IT-NTGEW * SUM_PAL ."一卡板的净重
                  GT_DATA_IT_B-YKBMZ GT_DATA_IT-YKBMZ .      "一卡板的毛重
                  GT_DATA_IT_B-YKBZS GT_MARM-UMREZ .         "一卡板装多少个
                  GT_DATA_IT_B-KBCKG LAENG_C && '*' && BREIT_C && '*' && HOEHE_C.         "卡板的长宽高
                  CONDENSE GT_DATA_IT_B-KBCKG.

                  IF GT_MARM_C-UMREN <> 0.
                    GT_DATA_IT_B-KTXZS GT_MARM_C-UMREZ / GT_MARM_C-UMREN .         "卡通箱装多少个
                  ENDIF.
                  CLEAR TEMPC_Z .
                  CLEAR TEMPC .
                  IF GT_MARM-UMREN <> AND GT_MARM_C-UMREN <> AND GT_MARM_C-UMREZ / GT_MARM_C-UMREN <> 0.
                    TEMPC_Z = ( GT_MARM-UMREZ / GT_MARM-UMREN DIV GT_MARM_C-UMREZ / GT_MARM_C-UMREN )."取整
                    TEMPC   = ( GT_MARM-UMREZ / GT_MARM-UMREN MOD GT_MARM_C-UMREZ / GT_MARM_C-UMREN )."取余
                    IF TEMPC > 0.
                      GT_DATA_IT_B-KTXSL TEMPC_Z + .         "卡通箱数量
                    ELSE .
                      GT_DATA_IT_B-KTXSL TEMPC_Z  .         "卡通箱数量
                    ENDIF.
                  ENDIF.

                  APPEND GT_DATA_IT_B .
                  CLEAR GT_DATA_IT_B .
                ENDDO.
              ENDIF.

              ADD TO LV_ITEM .
              GT_DATA_IT_B-ITEM  LV_ITEM .
              GT_DATA_IT_B-VBELN GT_DATA_IT-VBELN .
              GT_DATA_IT_B-POSNR GT_DATA_IT-POSNR .
              GT_DATA_IT_B-AUBEL GT_DATA_IT-AUBEL .
              GT_DATA_IT_B-AUPOS GT_DATA_IT-AUPOS .
              GT_DATA_IT_B-MATNR GT_DATA_IT-MATNR .
              GT_DATA_IT_B-FKIMG GT_DATA_IT-FKIMG .
              GT_DATA_IT_B-KDMAT GT_DATA_IT-KDMAT .

              GT_DATA_IT_B-KBCKG LAENG_C && '*' && BREIT_C && '*' && HOEHE_C.         "卡板的长宽高
              GT_DATA_IT_B-KBCKGS LAENG_C * BREIT_C * HOEHE_C .
              CONDENSE GT_DATA_IT_B-KBCKG.

              CLEAR GT_MARM_C .
              READ TABLE GT_MARM_C WITH KEY MEINH 'KAR'.
              IF GT_MARM_C-UMREN <> 0.
                GT_DATA_IT_B-KTXZS GT_MARM_C-UMREZ / GT_MARM_C-UMREN .         "卡通箱装多少个
              ENDIF.

              GT_DATA_IT_B-YKBZS TEMP .                                        "一卡板装多少个
              GT_DATA_IT_B-YKBJZ GT_DATA_IT-NTGEW * TEMP .                     "一卡板的净重
              IF GT_MARM-UMREZ <> 0.
                GT_DATA_IT_B-YKBMZ GT_DATA_IT_B-YKBZS * GT_DATA_IT-YKBMZ / GT_MARM-UMREZ  .              "一卡板的毛重
              ENDIF.

              CLEAR TEMPC_Z .
              CLEAR TEMPC .
              IF GT_MARM_C-UMREN <> AND GT_MARM_C-UMREZ / GT_MARM_C-UMREN <> 0.
                TEMPC_Z TEMP DIV GT_MARM_C-UMREZ / GT_MARM_C-UMREN )."取整
                TEMPC   TEMP MOD GT_MARM_C-UMREZ / GT_MARM_C-UMREN )."取余
                IF TEMPC > 0.
                  GT_DATA_IT_B-KTXSL TEMPC_Z + .         "卡通箱数量
                ELSE .
                  GT_DATA_IT_B-KTXSL TEMPC_Z  .            "卡通箱数量
                ENDIF.
              ENDIF.

              APPEND GT_DATA_IT_B .
              CLEAR GT_DATA_IT_B .
*--------------------------------------------------------------------------------
*packing list 1
*--------------------------------------------------------------------------------
            ELSE .
*--------------------------------------------------------------------------------
*packing list 2
*--------------------------------------------------------------------------------
              IF TEMPX_Z >= 1.

                IF TEMPX_Z 1.
                  GT_DATA_IT_C-ITEM  .
                ELSE .
                  GT_DATA_IT_C-ITEM  '1-' && TEMPX_Z .
                ENDIF.

                GT_DATA_IT_C-VBELN GT_DATA_IT-VBELN .
                GT_DATA_IT_C-POSNR GT_DATA_IT-POSNR .
                GT_DATA_IT_C-AUBEL GT_DATA_IT-AUBEL .
                GT_DATA_IT_C-AUPOS GT_DATA_IT-AUPOS .
                GT_DATA_IT_C-MATNR GT_DATA_IT-MATNR .
                GT_DATA_IT_C-FKIMG GT_DATA_IT-FKIMG .
                GT_DATA_IT_C-KDMAT GT_DATA_IT-KDMAT .
                GT_DATA_IT_C-ARKTX GT_DATA_IT-ARKTX .
                GT_DATA_IT_C-LAENG_C LAENG_C1 .
                GT_DATA_IT_C-BREIT_C BREIT_C1 .
                GT_DATA_IT_C-HOEHE_C HOEHE_C1 .
                SELECT SINGLE BSTKD INTO GT_DATA_IT_C-BSTKD FROM VBKD
                  
WHERE VBELN GT_DATA_IT-AUBEL
                    
AND POSNR GT_DATA_IT-AUPOS
                    
.
                GT_DATA_IT_C-KTXZS  SUM_CAR * TEMPX_Z .
                CONDENSE GT_DATA_IT_C-KTXZS.
                GT_DATA_IT_C-KTXSL  TEMPX_Z .
                CONDENSE GT_DATA_IT_C-KTXSL.
                GT_DATA_IT_C-KBCKGS LAENG_C1 * BREIT_C1 * HOEHE_C1 * TEMPX_Z / 100000.
                CONDENSE GT_DATA_IT_C-KBCKGS.
                GT_DATA_IT_C-KTXMZ  TEMPX_Z * GT_MARM_C-BRGEW .
*                CONDENSE GT_DATA_IT_C-KTXMZ.
                GT_DATA_IT_C-KTXJZ  SUM_CAR * TEMPX_Z * GT_DATA_IT-NTGEW .
                CONDENSE GT_DATA_IT_C-KTXJZ.
                APPEND GT_DATA_IT_C .
                CLEAR GT_DATA_IT_C .

              ENDIF.

              GT_DATA_IT_C-ITEM  TEMPX_Z + .
              GT_DATA_IT_C-VBELN GT_DATA_IT-VBELN .
              GT_DATA_IT_C-POSNR GT_DATA_IT-POSNR .
              GT_DATA_IT_C-AUBEL GT_DATA_IT-AUBEL .
              GT_DATA_IT_C-AUPOS GT_DATA_IT-AUPOS .
              GT_DATA_IT_C-MATNR GT_DATA_IT-MATNR .
              GT_DATA_IT_C-FKIMG GT_DATA_IT-FKIMG .
              GT_DATA_IT_C-KDMAT GT_DATA_IT-KDMAT .
              GT_DATA_IT_C-ARKTX GT_DATA_IT-ARKTX .
              GT_DATA_IT_C-LAENG_C LAENG_C1 .
              GT_DATA_IT_C-BREIT_C BREIT_C1 .
              GT_DATA_IT_C-HOEHE_C HOEHE_C1 .
              SELECT SINGLE BSTKD INTO GT_DATA_IT_C-BSTKD FROM VBKD
                
WHERE VBELN GT_DATA_IT-AUBEL
                  
AND POSNR GT_DATA_IT-AUPOS
                  
.
              GT_DATA_IT_C-KTXZS  TEMPX .
              CONDENSE GT_DATA_IT_C-KTXZS.
              GT_DATA_IT_C-KTXSL  .
              CONDENSE GT_DATA_IT_C-KTXSL.
              GT_DATA_IT_C-KBCKGS LAENG_C1 * BREIT_C1 * HOEHE_C1 / 100000.
              CONDENSE GT_DATA_IT_C-KBCKGS.
              IF SUM_CAR IS NOT INITIAL.
                GT_DATA_IT_C-KTXMZ  =  GT_MARM_C-BRGEW * TEMPX / SUM_CAR + S_BRGEW.
*                CONDENSE GT_DATA_IT_C-KTXMZ.
              ENDIF.
              GT_DATA_IT_C-KTXJZ  TEMPX * GT_DATA_IT-NTGEW .
              CONDENSE GT_DATA_IT_C-KTXJZ.
              APPEND GT_DATA_IT_C .
              CLEAR GT_DATA_IT_C .
*--------------------------------------------------------------------------------
*packing list 2
*--------------------------------------------------------------------------------
            ENDIF.

            MODIFY GT_DATA_IT .
            CLEAR GT_DATA_IT .
          ENDLOOP.

          IF R1 IS NOT INITIAL.
*--------------------------------------------------------------------------------
*packing list 1
*--------------------------------------------------------------------------------
            LOOP AT GT_DATA_IT_B.
              GT_DATA-KTXZS GT_DATA-KTXZS + GT_DATA_IT_B-KTXZS .
              GT_DATA-KTXSL GT_DATA-KTXSL + GT_DATA_IT_B-KTXSL .
              GT_DATA-YKBZS GT_DATA-YKBZS + GT_DATA_IT_B-YKBZS .
              GT_DATA-YKBJZ GT_DATA-YKBJZ + GT_DATA_IT_B-YKBJZ .
              GT_DATA-YKBMZ GT_DATA-YKBMZ + GT_DATA_IT_B-YKBMZ .
              GT_DATA-KBCKGS GT_DATA-KBCKGS + GT_DATA_IT_B-KBCKGS .
              CLEAR GT_DATA_IT_B.
            ENDLOOP.
            GT_DATA-KBCKGS GT_DATA-KBCKGS / 1000000 .

            CONDENSE GT_DATA-KTXZS.
            CONDENSE GT_DATA-KTXSL.
            CONDENSE GT_DATA-YKBZS.
            CONDENSE GT_DATA-YKBJZ.
            CONDENSE GT_DATA-YKBMZ.
            CONDENSE GT_DATA-KBCKGS.
*--------------------------------------------------------------------------------
*packing list 1
*--------------------------------------------------------------------------------
          ELSE .
*--------------------------------------------------------------------------------
*packing list 2
*--------------------------------------------------------------------------------
            LOOP AT GT_DATA_IT_C.
              GT_DATA-KTXJZ  GT_DATA-KTXJZ  + GT_DATA_IT_C-KTXJZ  .
              GT_DATA-KTXMZ  GT_DATA-KTXMZ  + GT_DATA_IT_C-KTXMZ  .
              GT_DATA-KBCKGS GT_DATA-KBCKGS + GT_DATA_IT_C-KBCKGS .
              CLEAR GT_DATA_IT_C.
            ENDLOOP.

            GT_DATA-KTXZS GT_DATA_IT-FKIMG .
            GT_DATA-KTXSL TEMPX_Z + .

            CONDENSE GT_DATA-KTXJZ.
*            CONDENSE GT_DATA-KTXMZ.
            CONDENSE GT_DATA-KBCKGS.
            CONDENSE GT_DATA-KTXZS.
            CONDENSE GT_DATA-KTXSL.

*--------------------------------------------------------------------------------
*packing list 2
*--------------------------------------------------------------------------------
          ENDIF.

          IF R1 IS NOT INITIAL.
            CALL FUNCTION FM_NAME
              
EXPORTING
                CONTROL_PARAMETERS L_CONTROL_PARAMETERS
                OUTPUT_OPTIONS     
L_OUTPUT_OPTIONS
                USER_SETTINGS      
''
                GT_DATA_HEAD       GT_DATA
              
TABLES
                GT_DATA_ITEM       GT_DATA_IT_B[]
              
EXCEPTIONS
                FORMATTING_ERROR   1
                INTERNAL_ERROR     2
                SEND_ERROR         3
                USER_CANCELED      4
                OTHERS             5.
            IF SY-SUBRC <> 0.
              MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
            ENDIF.
          ELSE .
            CALL FUNCTION FM_NAME
              
EXPORTING
                CONTROL_PARAMETERS L_CONTROL_PARAMETERS
                OUTPUT_OPTIONS     
L_OUTPUT_OPTIONS
                USER_SETTINGS      
''
                GT_DATA_HEAD       GT_DATA
              
TABLES
                GT_DATA_ITEM       GT_DATA_IT_C[]
              
EXCEPTIONS
                FORMATTING_ERROR   1
                INTERNAL_ERROR     2
                SEND_ERROR         3
                USER_CANCELED      4
                OTHERS             5.
            IF SY-SUBRC <> 0.
              MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
                  
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
            ENDIF.
          ENDIF.

          CLEAR GT_DATA .
        ENDLOOP.

        DATALS_JOB_OUTPUT_INFO TYPE SSFCRESCL.

        CALL FUNCTION 'SSF_CLOSE'
          IMPORTING
            JOB_OUTPUT_INFO  LS_JOB_OUTPUT_INFO
          
EXCEPTIONS
            FORMATTING_ERROR 1
            INTERNAL_ERROR   2
            SEND_ERROR       3
            OTHERS           4.

        IF SY-SUBRC <> 0.
**  错误处理
          MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
          
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
        ENDIF.

      ELSE .
        MESSAGE '您还没有选择任何条目!TYPE 'S'DISPLAY LIKE 'W' .
      ENDIF.

    WHEN 'ALL'.
      LOOP AT GT_DATA_A.
        GT_DATA_A-CKBOX 'X' .
        MODIFY GT_DATA_A .
        CLEAR GT_DATA_A .
      ENDLOOP.
    WHEN 'SAL'.
      LOOP AT GT_DATA_A.
        GT_DATA_A-CKBOX '' .
        MODIFY GT_DATA_A .
        CLEAR GT_DATA_A .
      ENDLOOP.
  ENDCASE.
  CALL METHOD REF->REFRESH_TABLE_DISPLAY
    
EXPORTING
      IS_STABLE LV_STABLE.

ENDFORM.

AT SELECTION-SCREEN.
  PERFORM SCREEN_SETTING.

START-OF-SELECTION.
  PERFORM FOM_GETDATA .
  PERFORM FRM_DISPLAY.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值