*&---------------------------------------------------------------------*
*& 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.
五金制造传票打印(开发笔记)
最新推荐文章于 2024-11-30 16:46:08 发布