五金制造传票打印(开发笔记)

*&---------------------------------------------------------------------*
*& Report ZMMR102
*&---------------------------------------------------------------------*
*& Author              :  NathanSun
*& Create Date         :  2019-12-30
*& Program Type        :  Report
*& Description         :  五金制造传票打印
*&---------------------------------------------------------------------*
REPORT ZPPR009.

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

TYPE-POOLS:SLIS.

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

DATA: GT_DATA      TYPE TABLE OF ZTS_CPDATA_HEAD WITH HEADER LINE.
DATA: GT_DATA_A    TYPE TABLE OF ZTS_CPDATA_HEAD WITH HEADER LINE.
DATA: GT_DATA_IT   TYPE TABLE OF ZTS_CPDATA_ITEM WITH HEADER LINE.
DATA: GT_DATA_IT_A TYPE TABLE OF ZTS_CPDATA_ITEM WITH HEADER LINE.
DATA: GV_TOP       TYPE SDYDO_TEXT_ELEMENT.
DATA: GV_SPRAS     TYPE SPRAS.
DATA: ADDRNUMBER   TYPE AD_ADDRNUM .
DATA: COUNTRY      TYPE  LAND1  .

SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME.
SELECT-OPTIONS: S_AUFNR  FOR  AFPO-AUFNR      MODIF ID C1.                            "工单号
*SELECT-OPTIONS: S_WADAT  FOR  LIKP-WADAT_IST  MODIF ID C1.                           "DN实际发货日期
*SELECT-OPTIONS: S_LFART  FOR  LIKP-LFART      MODIF ID C1.                           "DN单类型
*PARAMETERS:     P_VKORG  LIKE LIKP-VKORG      MODIF ID C1 DEFAULT '2001' OBLIGATORY. "销售组织
*SELECT-OPTIONS: S_KUNNR  FOR  LIKP-KUNNR      MODIF ID C1.                           "送达方
*SELECT-OPTIONS: S_KUNSO  FOR  VBPA-KUNNR      MODIF ID C1.                           "付款方
*SELECT-OPTIONS: S_KUNAG  FOR  LIKP-KUNAG      MODIF ID C1.                           "售达方
*SELECTION-SCREEN BEGIN OF LINE.
*PARAMETERS:
*      R1 RADIOBUTTON GROUP RAD2 MODIF ID C2 DEFAULT 'X'.
*SELECTION-SCREEN COMMENT 03(15) TEXT-001 MODIF ID C2.  "*单选按钮的名称
*PARAMETERS:
*      R2 RADIOBUTTON GROUP RAD2 MODIF ID C2.
*SELECTION-SCREEN COMMENT 21(20) TEXT-002 MODIF ID C2.  "*单选按钮的名称
*SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK B1.

AT SELECTION-SCREEN OUTPUT.
*  LOOP AT SCREEN .
*    IF SCREEN-GROUP1 = 'C2'.
*      IF SY-TCODE = 'ZMMR008C'.
*        SCREEN-ACTIVE = 0.
*      ENDIF.
*      MODIFY SCREEN.
*    ENDIF.
*  ENDLOOP.

*&---------------------------------------------------------------------*
*& 包含               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 NUM TYPE I.
  DATA GT_RESB TYPE TABLE OF RESB WITH HEADER LINE.

  CLEAR GT_DATA_A[] .
  SELECT
    AFPO~PWERK
    AFPO~AUFNR
    AFPO~MATNR
    AUFK~OBJNR
    INTO CORRESPONDING FIELDS OF TABLE GT_DATA_A[]
    FROM AFPO
    INNER JOIN AUFK ON AFPO~AUFNR = AUFK~AUFNR
    WHERE AFPO~AUFNR IN S_AUFNR
      .

  LOOP AT GT_DATA_A.

    SELECT SINGLE MAKTX INTO GT_DATA_A-MAKTX FROM MAKT
      WHERE MATNR = GT_DATA_A-MATNR
      .

    IF STRLEN( GT_DATA_A-MAKTX ) > 21."字符长度.
      GT_DATA_A-MAKTX1 = GT_DATA_A-MAKTX+0(21).
      SHIFT GT_DATA_A-MAKTX1 LEFT DELETING LEADING SPACE.
      GT_DATA_A-MAKTX2 = GT_DATA_A-MAKTX+21().
      SHIFT GT_DATA_A-MAKTX2 LEFT DELETING LEADING SPACE.
    ELSE .
      GT_DATA_A-MAKTX2 = GT_DATA_A-MAKTX.
    ENDIF.

    CLEAR GT_RESB[] .
    SELECT POSNR MATNR INTO CORRESPONDING FIELDS OF TABLE GT_RESB[] FROM RESB
      WHERE AUFNR = GT_DATA_A-AUFNR
      .

    SORT GT_RESB[] BY POSNR .
    READ TABLE GT_RESB INDEX 1 .
    GT_DATA_A-MATNR_Z = GT_RESB-MATNR .

    SELECT SINGLE MAKTX INTO GT_DATA_A-MAKTX_Z FROM MAKT
      WHERE MATNR = GT_DATA_A-MATNR_Z
      .

*1.工单工厂为1100,1101 勾选保税;其他工厂勾选非保税;
    IF GT_DATA_A-PWERK = '1100'
      OR GT_DATA_A-PWERK = '1101'
      .
      GT_DATA_A-ZTYPE = 'A'.
    ELSE .
      GT_DATA_A-ZTYPE = 'B'.
    ENDIF.

    NUM = STRLEN( GT_DATA_A-MATNR ) - 4."字符长度
    IF NUM >= 0.
      GT_DATA_A-ZBANB = GT_DATA_A-MATNR+NUM(4)."取最后四个字符
    ELSE.
      GT_DATA_A-ZBANB = GT_DATA_A-MATNR.
    ENDIF.

    MODIFY GT_DATA_A .
    CLEAR GT_DATA_A .
  ENDLOOP.

  SORT GT_DATA_A[] .
  DELETE ADJACENT DUPLICATES FROM GT_DATA_A[] .

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'     '选择列',
        'PWERK'     '订单的计划工厂',
        'AUFNR'     '订单号',
        'OBJNR'     '对象号',
        'MATNR'     '订单的物料编号',
        'MAKTX'     '物料描述',
        'MAKTX_Z'   '原料Material',
        'ZBANB'     '版本'.

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.   "刷新稳定性
  RANGES: L_WERKS FOR T001W-WERKS.
  RANGES: L_MATNR FOR MARA-MATNR.
  DATA:   L_BUKRS TYPE T001K-BUKRS.
  DATA:   NUM     TYPE I  .
  DATA:   TEMP    TYPE I  .
  DATA:   TEMP_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:   STR     TYPE STRING .
  DATA:   GS_AFKO TYPE AFKO.
  DATA:   GT_AFVC TYPE TABLE OF AFVC WITH HEADER LINE.
  DATA:   GT_JEST TYPE TABLE OF JEST  WITH HEADER LINE.

  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'."点击打印

      DATA: FM_NAME TYPE RS38L_FNAM .
      DATA: FORMNAME TYPE TDSFNAME .
      DATA:L_CONTROL_PARAMETERS TYPE SSFCTRLOP.
      DATA:L_OUTPUT_OPTIONS TYPE SSFCOMPOP.

      CLEAR FORMNAME .
      FORMNAME = 'ZPPR009' .

**Set Print paramenters
      L_CONTROL_PARAMETERS-NO_DIALOG = ''.
      L_CONTROL_PARAMETERS-PREVIEW   = 'X'.
      L_CONTROL_PARAMETERS-LANGU     = '1'.

      L_OUTPUT_OPTIONS-TDIMMED  = 'X'.    " 打印参数,立即打印
      L_OUTPUT_OPTIONS-TDNEWID  = ''.     " 打印参数,新假脱机请求
      L_OUTPUT_OPTIONS-TDDEST   = 'LP01'. " 假脱机: 输出设备
      L_OUTPUT_OPTIONS-TDDELETE = 'X'.     "打印参数,打印后删除

      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 GS_AFKO .
          SELECT SINGLE AUFPL INTO CORRESPONDING FIELDS OF GS_AFKO FROM AFKO
            WHERE AUFNR = GT_DATA-AUFNR
            .

          CLEAR GT_AFVC[] .
          SELECT AUFPL VORNR LTXA1 OBJNR INTO CORRESPONDING FIELDS OF TABLE GT_AFVC[] FROM AFVC
            WHERE AFVC~AUFPL = GS_AFKO-AUFPL
              AND AFVC~LOEKZ = ''
              .

          CLEAR GT_DATA_IT[].
          CLEAR GT_DATA_IT_A[].
          LOOP AT GT_AFVC.
            SELECT SINGLE STAT INTO CORRESPONDING FIELDS OF GT_JEST FROM JEST
              WHERE OBJNR = GT_AFVC-OBJNR
                AND STAT  = 'I0013'
                .
            IF SY-SUBRC <> 0.
              GT_DATA_IT-AUFPL    = GT_AFVC-AUFPL.
              GT_DATA_IT-VORNR    = GT_AFVC-VORNR.
              GT_DATA_IT-VORNR_XS = GT_AFVC-VORNR.
              GT_DATA_IT-LTXA1    = GT_AFVC-LTXA1.
              GT_DATA_IT-OBJNR    = GT_AFVC-OBJNR.
              GT_DATA_IT_A-VORNR  = GT_AFVC-VORNR.

              CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'
                EXPORTING
                  INPUT  = GT_DATA_IT-VORNR_XS
                IMPORTING
                  OUTPUT = GT_DATA_IT-VORNR_XS.

              APPEND GT_DATA_IT.
              APPEND GT_DATA_IT_A.
            ENDIF.
            CLEAR GT_DATA_IT .
            CLEAR GT_DATA_IT_A .
            CLEAR GT_JEST .
            CLEAR GT_AFVC .
          ENDLOOP.

          DO 1 TIMES.
            APPEND LINES OF GT_DATA_IT_A TO GT_DATA_IT .
          ENDDO.

          SORT GT_DATA_IT BY VORNR VORNR DESCENDING .

          CLEAR NUM .
          DESCRIBE TABLE GT_DATA_IT LINES NUM .
          CLEAR TEMP .
          CLEAR TEMP_Z .
          TEMP   = NUM MOD 6 .
          TEMP_Z = NUM DIV 6 .
          IF TEMP <> 0.
            TEMP_Z = TEMP_Z + 1 .
          ENDIF.
          IF TEMP <> 0.
            DO 6 - TEMP  TIMES.
              CLEAR GT_DATA_IT .
              APPEND GT_DATA_IT .
            ENDDO.
          ENDIF.

          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[]
            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.

        ENDLOOP.

        DATA: LS_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.
    WHEN '&IC1'."表示双击
      IF IS_SELFIELD-FIELDNAME =  'AUFNR' .
        CHECK IS_SELFIELD-TABINDEX > 0.
        CLEAR GT_DATA_A .
        READ TABLE GT_DATA_A INDEX IS_SELFIELD-TABINDEX.
        SET PARAMETER ID 'ANR' FIELD GT_DATA_A-AUFNR.
        CALL TRANSACTION 'CO03' AND SKIP FIRST SCREEN.
      ELSE .
        MESSAGE '请选择有效字段!'TYPE 'S' DISPLAY LIKE 'W'.
      ENDIF .
  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.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值