SAP 流水号

创建的流水号,如果想能用alv显示出来,可以建个表来存储,这样其他程序也能调用。

根据自己需求建表,我的流水号是ZCRKDJBH

 从打印程序中截取出来的,按自己需求更改

  DATA:lv_zcrkdjbh_max TYPE ztqm023-zcrkdjbh,
       lv_zcrkdjbh_new TYPE ztqm023-zcrkdjbh,
       lv_compare      TYPE char9,
       lv_dynamic_max  TYPE numc3,
       lv_dynamic      TYPE numc3.

  DATA:lt_ztqm023 TYPE TABLE OF ztqm023,
       ls_ztqm023 TYPE ztqm023.

*计算编号
*出入库单据的编号规则:单据类型(2位字母)+年月日(6位)+流水号(3位)
    lv_compare = 'QY' && sy-datum+2(6).

    SELECT MAX( zcrkdjbh )
    FROM ztqm023 WHERE substring( zcrkdjbh,1,8 ) = @lv_compare
    INTO @lv_zcrkdjbh_max.
    IF lv_zcrkdjbh_max IS INITIAL.
      lv_dynamic = 0.
      lv_zcrkdjbh_max = lv_compare && lv_dynamic.
    ELSE.

    ENDIF.

    READ TABLE lt_alv INTO DATA(ls_alv_only) INDEX 1.

    CLEAR:ls_head,ls_item,lt_item,lv_index.

    IF ls_alv_only-zcrkdjbh IS INITIAL."ALV中没有该编号
      CLEAR:lv_dynamic,lv_zcrkdjbh_new.
      lv_dynamic_max = lv_zcrkdjbh_max+8(3).
      lv_dynamic = lv_dynamic_max + 1.
      lv_zcrkdjbh_new = lv_compare && lv_dynamic.
      lv_zcrkdjbh_max = lv_zcrkdjbh_new.

      ls_head-zcrkdjbh = lv_zcrkdjbh_new.
    ELSE.
      ls_head-zcrkdjbh = ls_alv_only-zcrkdjbh.
    ENDIF.
    
    LOOP AT lt_alv INTO ls_alv.
      ls_ztqm023-prueflos =  ls_alv-prueflos.
      ls_ztqm023-werks =  ls_alv-werk.
      ls_ztqm023-zcrkdjbh =  lv_zcrkdjbh_new.
      ls_ztqm023-uname =  sy-uname.
      ls_ztqm023-datum =  sy-datum.
      ls_ztqm023-uzeit =  sy-uzeit.
      APPEND ls_ztqm023 TO lt_ztqm023.
      CLEAR:ls_ztqm023.
    ENDLOOP.
  
    IF lt_ztqm023[] IS NOT INITIAL.
      MODIFY ztqm023  FROM TABLE lt_ztqm023[].
      COMMIT WORK.
      CLEAR:lt_ztqm023[].
    ENDIF.

为避免我自己日后也看不懂,我把该打印程序完整的子例程也放在下面

FORM frm_print_sj01 .

  DATA:lv_formname           TYPE tdsfname,
       lv_fm_name            TYPE rs38l_fnam,
       ls_control            TYPE ssfctrlop,
       ls_control_param      TYPE ssfctrlop,
       ls_composer_param     TYPE ssfcompop,
       ls_jobinfo            TYPE ssfcrescl,
       ls_output_options     TYPE ssfcompop,
       ls_control_parameters TYPE ssfctrlop,
       ls_job_output_options TYPE ssfcresop,
       ls_outinfo            TYPE ssfcrescl.

  DATA:ls_alv TYPE t_show,
       lt_alv TYPE TABLE OF t_show.

  DATA:lv_zcrkdjbh_max TYPE ztqm023-zcrkdjbh,
       lv_zcrkdjbh_new TYPE ztqm023-zcrkdjbh,
       lv_compare      TYPE char9,
       lv_dynamic_max  TYPE numc3,
       lv_dynamic      TYPE numc3.

  DATA:lt_ztqm023 TYPE TABLE OF ztqm023,
       ls_ztqm023 TYPE ztqm023.

  DATA:ls_head TYPE zsqm041_sj_head,
       ls_item TYPE zsqm041_sj_item,
       lt_item TYPE STANDARD TABLE OF zsqm041_sj_item.

  DATA:lv_index TYPE i,
       lv_line  TYPE i.

  ls_output_options-tdimmed  = 'X'.
  ls_output_options-tddelete = 'X'.
  ls_output_options-tddest   = 'LP01'.
  ls_control-no_open         = 'X'.  "没有新的假脱机请求
  ls_control-no_close        = 'X'.  "不关闭假脱机请求

  LOOP AT gt_alv INTO gs_alv WHERE box = 'X'.
    MOVE-CORRESPONDING gs_alv TO ls_alv.
    APPEND ls_alv TO lt_alv.
    CLEAR:ls_alv,gs_alv.
  ENDLOOP.

  IF lt_alv IS NOT INITIAL .

    lv_formname = 'ZQM_SF_041_SJ01'."产成品请验单(02)苏州打印

    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname = lv_formname
      IMPORTING
        fm_name  = lv_fm_name.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE sy-msgty
       NUMBER sy-msgno
         WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.

    CALL FUNCTION 'SSF_OPEN'
      EXPORTING
        user_settings      = 'X'
        output_options     = ls_output_options
        control_parameters = ls_control_parameters
      IMPORTING
        job_output_options = ls_job_output_options
      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.

*计算编号
*出入库单据的编号规则:单据类型(2位字母)+年月日(6位)+流水号(3位)
    lv_compare = 'QY' && sy-datum+2(6).

    SELECT MAX( zcrkdjbh )
    FROM ztqm023 WHERE substring( zcrkdjbh,1,8 ) = @lv_compare
    INTO @lv_zcrkdjbh_max.
    IF lv_zcrkdjbh_max IS INITIAL.
      lv_dynamic = 0.
      lv_zcrkdjbh_max = lv_compare && lv_dynamic.
    ELSE.

    ENDIF.

    READ TABLE lt_alv INTO DATA(ls_alv_only) INDEX 1.

    CLEAR:ls_head,ls_item,lt_item,lv_index.

    IF ls_alv_only-zcrkdjbh IS INITIAL.
      CLEAR:lv_dynamic,lv_zcrkdjbh_new.
      lv_dynamic_max = lv_zcrkdjbh_max+8(3).
      lv_dynamic = lv_dynamic_max + 1.
      lv_zcrkdjbh_new = lv_compare && lv_dynamic.
      lv_zcrkdjbh_max = lv_zcrkdjbh_new.

      ls_head-zcrkdjbh = lv_zcrkdjbh_new.
    ELSE.
      ls_head-zcrkdjbh = ls_alv_only-zcrkdjbh.
    ENDIF.

*抬头参数处理
    ls_head-lifnr    = |{ ls_alv_only-lifnr ALPHA = OUT }|.
    ls_head-AUFNR    = |{ ls_alv_only-AUFNR ALPHA = OUT }|.
    CONDENSE ls_head-lifnr NO-GAPS.
    ls_head-name1    = ls_alv_only-name1.
    ls_head-ebeln    = |{ ls_alv_only-ebeln ALPHA = OUT }|.
    CONDENSE ls_head-ebeln NO-GAPS.
    ls_head-datum    = sy-datum+(4) && '.' && sy-datum+4(2) && '.' && sy-datum+6(2).

    LOOP AT lt_alv INTO ls_alv.
      gs_ztqm001-prueflos  =   ls_alv-prueflos."检验编号
      gs_ztqm001-zqjr  =   ls_alv-name_textc.
      gs_ztqm001-zbz  =   ls_alv-zbz."检验编号
      gs_ztqm001-zspec = ls_alv-zspec."规格
      gs_ztqm001-zqjrq = ls_alv-zqjrq."
      APPEND gs_ztqm001 TO gt_ztqm001.
      CLEAR gs_ztqm001.

      SELECT SINGLE zdycs INTO @DATA(lv_zdycs) FROM  ztdycs WHERE ebeln = @ls_alv-prueflos AND ztcode = 'ZQM041'.
      IF sy-subrc = 0.
        gs_ztdycs-ztcode = 'ZQM041'.
        gs_ztdycs-ebeln = ls_alv-prueflos.
        gs_ztdycs-zdycs = lv_zdycs + 1.
        gs_ztdycs-chdat = sy-datum.
        gs_ztdycs-chtim = sy-uzeit.
        gs_ztdycs-chnam = sy-uname.
      ELSE.
        gs_ztdycs-ztcode =  'ZQM041'.
        gs_ztdycs-ebeln = ls_alv-prueflos.
        gs_ztdycs-zdycs =  1.
        gs_ztdycs-crdat = sy-datum.
        gs_ztdycs-crtim = sy-uzeit.
        gs_ztdycs-crnam = sy-uname.
      ENDIF.

      APPEND gs_ztdycs TO gt_ztdycs.
      CLEAR gs_ztdycs.

      ls_ztqm023-prueflos =  ls_alv-prueflos.
      ls_ztqm023-werks =  ls_alv-werk.
      ls_ztqm023-zcrkdjbh =  lv_zcrkdjbh_new.
      ls_ztqm023-uname =  sy-uname.
      ls_ztqm023-datum =  sy-datum.
      ls_ztqm023-uzeit =  sy-uzeit.
      APPEND ls_ztqm023 TO lt_ztqm023.
      CLEAR:ls_ztqm023.

      IF ls_alv-zcrkdjbh IS INITIAL.
        ls_alv-zcrkdjbh = lv_zcrkdjbh_new.
        MODIFY gt_alv FROM ls_alv TRANSPORTING zcrkdjbh WHERE prueflos = ls_alv-prueflos AND werk = ls_alv-werk.
      ENDIF.

*行项目参数处理
      CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT'
        EXPORTING
          input  = ls_alv-matnr
        IMPORTING
          output = ls_alv-matnr.

      lv_index = lv_index + 1.
      ls_item-index = lv_index.
      CONDENSE ls_item-index NO-GAPS.
      ls_item-matnr      = ls_alv-matnr     .
      CONDENSE ls_item-matnr NO-GAPS.
      ls_item-maktx      = ls_alv-maktx     .
      ls_item-zspec      = ls_alv-zspec     .
      ls_item-prueflos   = |{ ls_alv-prueflos ALPHA = OUT }|.
      CONDENSE ls_item-prueflos NO-GAPS.
      ls_item-charg      = ls_alv-charg     .
      ls_item-mengeneinh = ls_alv-mengeneinh.
      ls_item-lmengeist2 = ls_alv-lmengeist2.
      CONDENSE ls_item-lmengeist2 NO-GAPS.
      ls_item-lmengeist  = ls_alv-lmengeist .
      CONDENSE ls_item-lmengeist NO-GAPS.
      APPEND ls_item TO lt_item.
      CLEAR ls_item.

    ENDLOOP.

*计算内表行数
    CLEAR lv_line.
    DESCRIBE TABLE lt_item LINES lv_line.
    lv_line = lv_line MOD 8.

*计算需要的空行
    IF lv_line > 0.
      lv_line = 8 - lv_line.

      DO lv_line TIMES.
        CLEAR ls_item.
        APPEND ls_item TO lt_item.
      ENDDO.
    ENDIF.

*-->调用Smartforms的Function Module打印–smart表及变量传递
    CALL FUNCTION lv_fm_name
      EXPORTING
        control_parameters = ls_control
        is_head            = ls_head
      IMPORTING
        job_output_options = ls_job_output_options
      TABLES
        it_item            = lt_item
      EXCEPTIONS
        formatting_error   = 1
        internal_error     = 2
        send_error         = 3
        user_canceled      = 4
        OTHERS             = 5.
    IF sy-subrc <> 0.
      MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno DISPLAY LIKE 'E'
          WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
      LEAVE LIST-PROCESSING.
    ENDIF.

    CALL FUNCTION 'SSF_CLOSE'
      IMPORTING
        job_output_info  = ls_outinfo
      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.

    IF ls_outinfo-outputdone = 'X'."已打印
      MESSAGE '已打印' TYPE 'S'.
      IF gt_ztdycs[] IS NOT INITIAL.
        MODIFY ztdycs  FROM TABLE gt_ztdycs[].
        COMMIT WORK.
        CLEAR:gt_ztdycs[].
      ENDIF.
    ENDIF.

    IF gt_ztqm001[] IS NOT INITIAL.
      MODIFY ztqm001  FROM TABLE gt_ztqm001[].
      COMMIT WORK.
      CLEAR:gt_ztqm001[].
    ENDIF.

    IF lt_ztqm023[] IS NOT INITIAL.
      MODIFY ztqm023  FROM TABLE lt_ztqm023[].
      COMMIT WORK.
      CLEAR:lt_ztqm023[].
    ENDIF.

  ELSE.
    MESSAGE '请选中需要打印的数据' TYPE 'S' DISPLAY LIKE 'E'.
  ENDIF.
ENDFORM.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值