销售单据条件价格明细表
生活随笔
收集整理的这篇文章主要介绍了
销售单据条件价格明细表
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
REPORT ZSDR_DDFYCX NO STANDARD PAGE HEADING .
TABLES :VBAK ,
LIKP ,
VBUK ,
LIPS .
*---定义结构---For Main ALV OutPut-------------------------------------*
*TYPES: BEGIN OF TY_ITAB,
** CHECK TYPE FLAG,
** ICONID TYPE ICON-ID,
* VKORG TYPE VBAK-VKORG, "销售组织
* KUNNR TYPE VBAK-KUNNR, "售达方
* NAME1 TYPE KNA1-NAME1, "客户名称
* PERNR TYPE KNVP-PERNR, "业务员编号
* CNAME TYPE PA0002-CNAME, "业务员
* DDYF TYPE KONV-KBETR, "代垫运费
* DDZX TYPE KONV-KBETR, "代垫装卸费
* HEJI TYPE KONV-KBETR, "合计
** IT_CELL_TYPES TYPE SALV_T_INT4_COLUMN,
** IT_CELL_COLOR TYPE LVC_T_SCOL,
* END OF TY_ITAB.
*DATA: GT_ITAB TYPE STANDARD TABLE OF TY_ITAB,
* GW_ITAB TYPE TY_ITAB.
*FIELD-SYMBOLS <ITAB> TYPE TY_ITAB.
TYPES : BEGIN OF TY_DETAL ,
CHECK TYPE FLAG , "选择
VKORG TYPE VBAK -VKORG , "销售组织
KUNNR TYPE VBAK -KUNNR , "售达方
NAME1 TYPE KNA1 -NAME1 , "客户名称
STCEG TYPE KNA1 -STCEG , "增值税编码
PERNR TYPE KNVP -PERNR , "业务员编号
CNAME TYPE PA0002 -CNAME , "业务员
VBELN TYPE VBAK -VBELN , "销售订单
POSNR TYPE VBAP -POSNR , "行号
WAERK TYPE VBAK -WAERK , "货币
ERDAT TYPE VBAK -ERDAT , "创建日期
AUDAT TYPE VBAK -AUDAT , "单据日期
MATNR TYPE VBAP -MATNR , "物料编码
ARKTX TYPE VBAP -ARKTX , "物料描述
LGORT TYPE VBAP -LGORT , "库位
LGOBE TYPE T001L -LGOBE , "描述
VRKME TYPE VBAP -VRKME , "销售单位
KWMENG TYPE VBAP -KWMENG , "订单重量
VBELN_VL TYPE LIPS -VBELN , "交货单
POSNR_VL TYPE LIPS -POSNR , "行号
WADAT_IST TYPE LIKP -WADAT_IST , "交货日期
LFIMG TYPE LIPS -LFIMG , "交货重量
VBELN_F TYPE VBRP -VBELN , "销售开票
POSNR_F TYPE VBRP -POSNR , "销售开票
FKDAT TYPE VBRK -FKDAT , "开票日期
RFBSK TYPE VBRK -RFBSK , "过账状态
Z005 TYPE KONV -KBETR , "代垫装卸费单价
Z003 TYPE KONV -KBETR , "装卸费单价
KF00 TYPE KONV -KBETR , "代垫运费单价
KF01 TYPE KONV -KBETR , "运费(一票制)单价
DDZX TYPE KONV -KBETR , "代垫装卸费
ZXHJ TYPE KONV -KBETR , "装卸费
DDYF TYPE KONV -KBETR , "代垫运费
YFHJ TYPE KONV -KBETR , "运费
HEJI TYPE KONV -KBETR , "合计
HXZXT TYPE VBAK -ERDAT , "核销装卸费日期
HXZXB TYPE ZFT_KM -ZBEIZ , "核销装卸费备注
HXYFT TYPE VBAK -ERDAT , "核销运费日期
HXYFB TYPE ZFT_KM -ZBEIZ , "核销运费备注
HXDDT TYPE VBAK -ERDAT , "代垫装卸费开票核销日期
HXDDB TYPE ZFT_KM -ZBEIZ , "代垫装卸费开票核销备注
HXDOC TYPE BKPF -BELNR , "代垫装卸费开票核销凭证
HXBUR TYPE BKPF -BUKRS , "代垫装卸费开票核销凭证公司代码
HXGJR TYPE BKPF -GJAHR , "代垫装卸费开票核销凭证年度
FLAG TYPE ZSD_HXMX -FLAG , "是否打印
HANDLE TYPE LIKP -HANDLE , "LIKP-VBELN 的世界范围唯一关键字
END OF TY_DETAL .
DATA : GT_DETAL TYPE STANDARD TABLE OF TY_DETAL ,
GW_DETAL TYPE TY_DETAL .
FIELD-SYMBOLS <DETAL> TYPE TY_DETAL .
DATA : GT_BAPIRET TYPE STANDARD TABLE OF BAPIRET2 ,
GW_BAPIRET TYPE BAPIRET2 .
*----------------------------------------------------------------------*
* CLASS lcl_main_alv DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_MAIN_ALV DEFINITION .
PUBLIC SECTION .
METHODS : GENERATE_ALV .
PRIVATE SECTION .
DATA : O_SALV TYPE REF TO CL_SALV_TABLE .
METHODS :
SET_PF_STATUS
CHANGING
CO_ALV TYPE REF TO CL_SALV_TABLE ,
SET_LAYOUT
CHANGING
CO_ALV TYPE REF TO CL_SALV_TABLE ,
SET_DISPLAY_SETTING
CHANGING
CO_ALV TYPE REF TO CL_SALV_TABLE ,
SET_COLUMNS
CHANGING
CO_ALV TYPE REF TO CL_SALV_TABLE ,
REFRESH_ALV ,
ON_USER_COMMAND FOR EVENT ADDED_FUNCTION OF CL_SALV_EVENTS
IMPORTING E_SALV_FUNCTION ,
HANDLE_DOUBLE_CLICK
FOR EVENT DOUBLE_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING ROW COLUMN ,
HANDLE_LINK_CLICK
FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE
IMPORTING
ROW COLUMN .
ENDCLASS . "lcl_main_alv DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_sub_alv DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
*CLASS LCL_SUB_ALV DEFINITION ABSTRACT.
* PUBLIC SECTION.
* METHODS:GET_SUBDATA ABSTRACT
* IMPORTING IW_ITAB TYPE TY_ITAB.
*
* METHODS: GENERATE_ALV ABSTRACT.
*
* PROTECTED SECTION.
* DATA: O_SALV TYPE REF TO CL_SALV_TABLE.
*
*ENDCLASS. "lcl_sub_alv DEFINITION
*CLASS LCL_DETAL_ALV DEFINITION INHERITING FROM LCL_SUB_ALV.
*
* PUBLIC SECTION.
* DATA: T_DETAL TYPE STANDARD TABLE OF TY_DETAL,
* LW_DETAL TYPE TY_DETAL.
* METHODS:
* GET_SUBDATA REDEFINITION,
* GENERATE_ALV REDEFINITION.
*
* PROTECTED SECTION.
* METHODS:
* HANDLE_LINK_CLICK
* FOR EVENT LINK_CLICK OF CL_SALV_EVENTS_TABLE
* IMPORTING ROW COLUMN.
*ENDCLASS.
*---------------------------------------------------------------------*
* 选择屏幕
*---------------------------------------------------------------------*
SELECTION-SCREEN : BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT - 001 .
SELECT-OPTIONS :
S_VKORG FOR VBAK -VKORG OBLIGATORY ,
S_KUNNR FOR VBAK -KUNNR ,
S_VGBEL FOR VBAK -VBELN ,
S_VBELN FOR LIKP -VBELN ,
S_WADAT FOR LIKP -WADAT_IST ,
S_WBSTK FOR VBUK -WBSTK ,
S_LGORT FOR LIPS -LGORT .
SELECTION-SCREEN END OF BLOCK B1 .
SELECTION-SCREEN : BEGIN OF BLOCK B2 WITH FRAME TITLE TEXT - 004 .
PARAMETER : P_ZXF AS CHECKBOX DEFAULT '' .
PARAMETER : P_YF AS CHECKBOX DEFAULT '' .
SELECTION-SCREEN SKIP 1 .
PARAMETER : P_HXZXF AS CHECKBOX DEFAULT '' .
PARAMETER : P_HXYF AS CHECKBOX DEFAULT '' .
SELECTION-SCREEN SKIP 1 .
PARAMETER : P_DDWKP AS CHECKBOX DEFAULT '' .
PARAMETER : P_DDYKP AS CHECKBOX DEFAULT '' .
SELECTION-SCREEN END OF BLOCK B2 .
SELECTION-SCREEN SKIP .
SELECTION-SCREEN COMMENT /1 ( 10 ) TEXT - 005 .
SELECTION-SCREEN COMMENT /1 ( 83 ) TEXT - 006 .
SELECTION-SCREEN COMMENT /1 ( 83 ) TEXT - 007 .
*&---------------------------------------------------------------------*
*& START-OF-SELECTION
*&---------------------------------------------------------------------*
START-OF-SELECTION .
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
PERCENTAGE = 100
TEXT = '正在处理,请稍等......' .
PERFORM GET_DATA .
IF GT_DETAL IS NOT INITIAL .
DATA : LO_MAIN_ALV TYPE REF TO LCL_MAIN_ALV .
CREATE OBJECT LO_MAIN_ALV .
LO_MAIN_ALV ->GENERATE_ALV ( ) .
ELSE .
MESSAGE '没有找到可以显示的记录!' TYPE 'S' DISPLAY LIKE 'E' .
EXIT .
ENDIF .
END-OF-SELECTION .
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM GET_DATA .
DATA : LW_LIPS TYPE LIPS .
DATA :LT_VBAK LIKE TABLE OF VBAK WITH HEADER LINE ,
LT_VBAP LIKE TABLE OF VBAP WITH HEADER LINE ,
LT_KONV LIKE TABLE OF KONV WITH HEADER LINE ,
LT_KNA1 LIKE TABLE OF KNA1 WITH HEADER LINE ,
LT_T001L LIKE TABLE OF T001L WITH HEADER LINE ,
LT_HXMX LIKE TABLE OF ZSD_HXMX WITH HEADER LINE ,
LT_TVPOD LIKE TABLE OF TVPOD WITH HEADER LINE ,
LT_TVKO LIKE TABLE OF TVKO WITH HEADER LINE ,
LT_VBPA LIKE TABLE OF VBPA WITH HEADER LINE .
"销售发票明细
DATA : BEGIN OF LT_VBRP OCCURS 0 ,
VBELN TYPE VBRP -VBELN ,
POSNR TYPE VBRP -POSNR ,
KZWI1 TYPE VBRP -KZWI1 ,
VRKME TYPE VBRP -VRKME ,
FKIMG TYPE VBRP -FKIMG ,
AUBEL TYPE VBRP -AUBEL ,
AUPOS TYPE VBRP -AUPOS ,
VGBEL TYPE VBRP -VGBEL ,
VGPOS TYPE VBRP -VGPOS ,
KNUMV TYPE VBRK -KNUMV ,
SHKZG TYPE VBRP -SHKZG ,
FKDAT TYPE VBRK -FKDAT ,
KURRF TYPE VBRK -KURRF , "汇率
NETWR TYPE VBAP -NETWR ,
RFBSK TYPE VBRK -RFBSK ,
SFAKN TYPE VBRK -SFAKN ,
END OF LT_VBRP .
REFRESH GT_DETAL .
SELECT * FROM TVKO INTO TABLE LT_TVKO .
SELECT LIKP ~VBELN AS VBELN_VL
LIPS ~POSNR AS POSNR_VL
LIKP ~WADAT_IST
LIKP ~KUNNR
LIKP ~VKORG
LIPS ~MATNR
LIPS ~ARKTX
LIPS ~LFIMG
LIPS ~VRKME
LIPS ~VGBEL AS VBELN
LIPS ~VGPOS AS POSNR
FROM LIPS
INNER JOIN VBUK ON VBUK ~VBELN = LIPS ~VBELN
INNER JOIN LIKP ON LIKP ~VBELN = LIPS ~VBELN
INTO CORRESPONDING FIELDS OF TABLE GT_DETAL
WHERE LIKP ~VKORG IN S_VKORG
AND LIKP ~KUNNR IN S_KUNNR
AND LIPS ~VGBEL IN S_VGBEL
AND LIKP ~VBELN IN S_VBELN
AND LIKP ~WADAT_IST IN S_WADAT
AND LIPS ~LGORT IN S_LGORT
AND VBUK ~WBSTK IN S_WBSTK
AND VBUK ~VBTYP = 'J'
AND VBUK ~VBOBJ = 'L'
AND LIPS ~LFIMG > 0
AND LIKP ~LFART = 'LF' "外向交货
.
IF GT_DETAL[] IS NOT INITIAL .
"销售订单
SELECT *
FROM VBAK
INTO TABLE LT_VBAK
FOR ALL ENTRIES IN GT_DETAL
WHERE VBELN = GT_DETAL -VBELN .
IF LT_VBAK[] IS NOT INITIAL .
SELECT *
FROM KNA1
INTO TABLE LT_KNA1
FOR ALL ENTRIES IN LT_VBAK
WHERE KUNNR = LT_VBAK -KUNNR .
SELECT *
FROM VBPA
INTO TABLE LT_VBPA
FOR ALL ENTRIES IN LT_VBAK
WHERE VBELN = LT_VBAK -VBELN .
SELECT *
FROM KONV
INTO TABLE LT_KONV
FOR ALL ENTRIES IN LT_VBAK
WHERE KNUMV = LT_VBAK -KNUMV
AND KBETR <> 0 .
SELECT *
FROM VBAP
INTO TABLE LT_VBAP
FOR ALL ENTRIES IN LT_VBAK
WHERE VBELN = LT_VBAK -VBELN .
IF LT_VBAP[] IS NOT INITIAL .
SELECT *
FROM T001L
INTO TABLE LT_T001L
FOR ALL ENTRIES IN LT_VBAP
WHERE LGORT = LT_VBAP -LGORT .
ENDIF .
ENDIF .
"运费/装卸费核销明细表
SELECT *
FROM ZSD_HXMX
INTO TABLE LT_HXMX
FOR ALL ENTRIES IN GT_DETAL
WHERE VBELN = GT_DETAL -VBELN_VL
AND POSNR = GT_DETAL -POSNR_VL .
SELECT *
FROM TVPOD
INTO TABLE LT_TVPOD
FOR ALL ENTRIES IN GT_DETAL
WHERE HANDLE_LIPS = GT_DETAL -HANDLE .
"取开票数量金额
SELECT
VBRK ~KNUMV
VBRP ~VBELN
VBRP ~POSNR
VBRP ~KZWI1
VBRP ~VRKME
VBRP ~FKIMG
VBRP ~AUBEL
VBRP ~AUPOS
VBRP ~SHKZG
VBRK ~FKDAT
VBRK ~KURRF
VBRP ~NETWR
VBRP ~VGBEL
VBRP ~VGPOS
VBRK ~RFBSK
VBRK ~SFAKN
FROM VBRP
INNER JOIN VBRK ON VBRK ~VBELN = VBRP ~VBELN
INTO CORRESPONDING FIELDS OF TABLE LT_VBRP
FOR ALL ENTRIES IN GT_DETAL
WHERE VBRP ~VGBEL = GT_DETAL -VBELN_VL
AND VBRP ~VGPOS = GT_DETAL -POSNR_VL
AND VBRP ~FKIMG > 0 .
LOOP AT LT_VBRP WHERE SFAKN <> '' .
DELETE LT_VBRP WHERE VBELN = LT_VBRP -SFAKN OR SFAKN = LT_VBRP -SFAKN .
ENDLOOP .
SORT LT_VBRP BY VBELN POSNR ASCENDING FKDAT DESCENDING .
ENDIF .
SORT LT_VBAK BY VBELN .
SORT LT_VBAP BY VBELN POSNR .
SORT LT_KNA1 BY KUNNR .
SORT LT_KONV BY KNUMV KPOSN KSCHL KINAK .
SORT LT_T001L BY LGORT .
SORT LT_HXMX BY VBELN POSNR .
SORT LT_TVKO BY VKORG .
LOOP AT GT_DETAL ASSIGNING <DETAL> .
"核销信息获取ZSD_HXMX
READ TABLE LT_HXMX WITH KEY VBELN = <DETAL> -VBELN_VL
POSNR = <DETAL> -POSNR_VL
BINARY SEARCH .
IF SY -SUBRC = 0 .
<DETAL> -HXYFT = LT_HXMX -HXYFT .
<DETAL> -HXYFB = LT_HXMX -HXYFB .
<DETAL> -HXZXT = LT_HXMX -HXZXT .
<DETAL> -HXZXB = LT_HXMX -HXZXB .
<DETAL> -HXDDT = LT_HXMX -HXDDT .
<DETAL> -HXDDB = LT_HXMX -HXDDB .
<DETAL> -HXDOC = LT_HXMX -HXDOC .
<DETAL> -HXBUR = LT_HXMX -HXBUR .
<DETAL> -HXGJR = LT_HXMX -HXGJR .
<DETAL> -FLAG = LT_HXMX -FLAG .
ENDIF .
* SELECT SINGLE * FROM LIPS INTO LW_LIPS
* WHERE VBELN = <DETAL>-VBELN_VL
* AND POSNR = <DETAL>-POSNR_VL.
* IF LW_LIPS-KZPOD = '' OR LW_LIPS-KZPOD = 'A'."与POD无关或无差异
* <DETAL>-LFIMG = <DETAL>-LFIMG.
* ELSEIF LW_LIPS-KZPOD = 'X'."POD未执行
* <DETAL>-LFIMG = 0.
* ELSEIF LW_LIPS-KZPOD = 'B'."POD 差异
* SELECT SINGLE PODMG FROM TVPOD INTO <DETAL>-LFIMG
* WHERE HANDLE_LIPS = LW_LIPS-HANDLE
* AND POSNR = LW_LIPS-POSNR.
* ENDIF.
"计算实收数量(VLPOD)
LOOP AT LT_TVPOD WHERE HANDLE_LIPS = <DETAL> -HANDLE .
IF LT_TVPOD -CALCU = '+' .
ADD LT_TVPOD -LFIMG_DIFF TO <DETAL> -LFIMG .
ELSEIF LT_TVPOD -CALCU = '-' .
SUBTRACT LT_TVPOD -LFIMG_DIFF FROM <DETAL> -LFIMG .
ENDIF .
ENDLOOP .
READ TABLE LT_VBAK WITH KEY VBELN = <DETAL> -VBELN BINARY SEARCH .
IF SY -SUBRC = 0 .
<DETAL> -VKORG = LT_VBAK -VKORG .
<DETAL> -KUNNR = LT_VBAK -KUNNR .
<DETAL> -ERDAT = LT_VBAK -ERDAT .
<DETAL> -AUDAT = LT_VBAK -AUDAT .
<DETAL> -WAERK = LT_VBAK -WAERK .
READ TABLE LT_KNA1 WITH KEY KUNNR = <DETAL> -KUNNR BINARY SEARCH .
IF SY -SUBRC = 0 .
<DETAL> -NAME1 = LT_KNA1 -NAME1 .
<DETAL> -STCEG = LT_KNA1 -STCEG .
ENDIF .
READ TABLE LT_VBPA WITH KEY VBELN = <DETAL> -VBELN
PARVW = 'VE' .
IF SY -SUBRC = 0 .
<DETAL> -PERNR = LT_VBPA -PERNR .
SELECT SINGLE NACHN && VORNA
FROM PA0002
INTO @<DETAL> -CNAME
WHERE PERNR = @LT_VBPA -PERNR .
ENDIF .
ENDIF .
READ TABLE LT_VBAP WITH KEY VBELN = <DETAL> -VBELN
POSNR = <DETAL> -POSNR
BINARY SEARCH .
IF SY -SUBRC = 0 .
<DETAL> -MATNR = LT_VBAP -MATNR .
<DETAL> -ARKTX = LT_VBAP -ARKTX .
<DETAL> -KWMENG = LT_VBAP -KWMENG .
<DETAL> -VRKME = LT_VBAP -VRKME .
<DETAL> -LGORT = LT_VBAP -LGORT .
READ TABLE LT_T001L WITH KEY LGORT = LT_VBAP -LGORT
BINARY SEARCH .
IF SY -SUBRC = 0 .
<DETAL> -LGOBE = LT_T001L -LGOBE .
ENDIF .
READ TABLE LT_KONV WITH KEY KNUMV = LT_VBAK -KNUMV
KPOSN = <DETAL> -POSNR
KSCHL = 'KF00'
KINAK = ''
BINARY SEARCH .
IF SY -SUBRC = 0 AND LT_KONV -KBETR > 0 . "代垫运费
<DETAL> -KF00 = LT_KONV -KBETR .
<DETAL> -DDYF = <DETAL> -LFIMG * LT_KONV -KBETR .
ENDIF .
READ TABLE LT_KONV WITH KEY KNUMV = LT_VBAK -KNUMV
KPOSN = <DETAL> -POSNR
KSCHL = 'Z005'
KINAK = ''
BINARY SEARCH .
IF SY -SUBRC = 0 AND LT_KONV -KBETR > 0 . "代垫装卸费
<DETAL> -Z005 = LT_KONV -KBETR .
<DETAL> -DDZX = <DETAL> -LFIMG * LT_KONV -KBETR .
ENDIF .
READ TABLE LT_KONV WITH KEY KNUMV = LT_VBAK -KNUMV
KPOSN = <DETAL> -POSNR
KSCHL = 'KF01'
KINAK = ''
BINARY SEARCH .
IF SY -SUBRC = 0 AND LT_KONV -KBETR > 0 . "运费(一票制)
<DETAL> -KF01 = LT_KONV -KBETR .
<DETAL> -YFHJ = <DETAL> -LFIMG * LT_KONV -KBETR .
ENDIF .
READ TABLE LT_KONV WITH KEY KNUMV = LT_VBAK -KNUMV
KPOSN = <DETAL> -POSNR
KSCHL = 'Z003'
KINAK = ''
BINARY SEARCH .
IF SY -SUBRC = 0 AND LT_KONV -KBETR > 0 . "装卸费
<DETAL> -Z003 = LT_KONV -KBETR .
<DETAL> -ZXHJ = <DETAL> -LFIMG * LT_KONV -KBETR .
ENDIF .
ENDIF .
<DETAL> -HEJI = <DETAL> -DDYF + <DETAL> -DDZX + <DETAL> -YFHJ + <DETAL> -ZXHJ .
"开票信息
READ TABLE LT_VBRP WITH KEY VGBEL = <DETAL> -VBELN_VL
VGPOS = <DETAL> -POSNR_VL .
IF SY -SUBRC = 0 .
<DETAL> -VBELN_F = LT_VBRP -VBELN .
<DETAL> -POSNR_F = LT_VBRP -POSNR .
<DETAL> -FKDAT = LT_VBRP -FKDAT .
<DETAL> -RFBSK = LT_VBRP -RFBSK .
ENDIF .
"公司代码 年度
READ TABLE LT_TVKO WITH KEY VKORG = <DETAL> -VKORG BINARY SEARCH .
IF SY -SUBRC = 0 .
<DETAL> -HXBUR = LT_TVKO -BUKRS .
<DETAL> -HXGJR = SY -DATUM+0 ( 4 ) .
ENDIF .
ENDLOOP .
* IF S_LGORT[] IS NOT INITIAL.
* DELETE GT_DETAL WHERE LGORT NOT IN S_LGORT.
* ENDIF.
*排序
SORT GT_DETAL BY VKORG KUNNR VBELN POSNR VBELN_VL POSNR_VL .
IF P_ZXF = 'X' .
DELETE GT_DETAL WHERE DDZX = 0 AND ZXHJ = 0 .
ENDIF .
IF P_YF = 'X' .
DELETE GT_DETAL WHERE YFHJ = 0 .
ENDIF .
IF P_HXZXF = 'X' .
DELETE GT_DETAL WHERE HXZXT IS NOT INITIAL .
ENDIF .
IF P_HXYF = 'X' .
DELETE GT_DETAL WHERE HXYFT IS NOT INITIAL .
ENDIF .
"钢贸已开票,代垫未开票
IF P_DDWKP = 'X' .
DELETE GT_DETAL WHERE RFBSK <> 'C' .
DELETE GT_DETAL WHERE DDZX = 0 .
DELETE GT_DETAL WHERE HXDDT IS NOT INITIAL .
ENDIF .
"钢贸已开票,代垫已开票
IF P_DDYKP = 'X' .
DELETE GT_DETAL WHERE RFBSK <> 'C' .
DELETE GT_DETAL WHERE DDZX = 0 .
DELETE GT_DETAL WHERE HXDDT IS INITIAL .
ENDIF .
ENDFORM . " GET_DATA
*----------------------------------------------------------------------*
* CLASS lcl_main_alv IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_MAIN_ALV IMPLEMENTATION .
METHOD GENERATE_ALV .
*
DATA : LX_MSG TYPE REF TO CX_SALV_MSG .
TRY .
CL_SALV_TABLE =>FACTORY (
IMPORTING
R_SALV_TABLE = O_SALV
CHANGING
T_TABLE = GT_DETAL ) .
CATCH CX_SALV_MSG INTO LX_MSG .
ENDTRY .
CALL METHOD SET_PF_STATUS
CHANGING
CO_ALV = O_SALV .
CALL METHOD SET_LAYOUT
CHANGING
CO_ALV = O_SALV .
CALL METHOD SET_DISPLAY_SETTING
CHANGING
CO_ALV = O_SALV .
CALL METHOD SET_COLUMNS
CHANGING
CO_ALV = O_SALV .
DATA : LO_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE .
LO_EVENTS = O_SALV ->GET_EVENT ( ) .
SET HANDLER HANDLE_DOUBLE_CLICK FOR LO_EVENTS .
SET HANDLER HANDLE_LINK_CLICK FOR LO_EVENTS .
SET HANDLER ON_USER_COMMAND FOR LO_EVENTS .
DATA :LR_SELS TYPE REF TO CL_SALV_SELECTIONS .
LR_SELS = O_SALV ->GET_SELECTIONS ( ) .
LR_SELS ->SET_SELECTION_MODE ( IF_SALV_C_SELECTION_MODE =>ROW_COLUMN ) .
* 显示 ALV
O_SALV ->DISPLAY ( ) .
ENDMETHOD . "generate_alv
*设置工具栏
METHOD SET_PF_STATUS .
DATA : LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS .
IF P_DDYKP = 'X' .
CO_ALV ->SET_SCREEN_STATUS (
PFSTATUS = 'ZALV_STATUS'
REPORT = SY -REPID
SET_FUNCTIONS = CO_ALV ->C_FUNCTIONS_ALL ) .
ELSE .
CO_ALV ->SET_SCREEN_STATUS (
PFSTATUS = 'ZALV_STATUS1'
REPORT = SY -REPID
SET_FUNCTIONS = CO_ALV ->C_FUNCTIONS_ALL ) .
ENDIF .
* LO_FUNCTIONS = CO_ALV->GET_FUNCTIONS( ).
* LO_FUNCTIONS->SET_ALL( ABAP_TRUE ).
* TRY.
* LO_FUNCTIONS->SET_FUNCTION( NAME = 'DDDY' BOOLEAN = '' ).
* CATCH CX_SALV_WRONG_CALL. "#EC NO_HANDLER
* CATCH CX_SALV_NOT_FOUND. "#EC NO_HANDLER
* ENDTRY.
ENDMETHOD . "set_pf_status
* Settings for Layout
METHOD SET_LAYOUT .
*
DATA : LO_LAYOUT TYPE REF TO CL_SALV_LAYOUT ,
LF_VARIANT TYPE SLIS_VARI ,
LS_LAYOUT TYPE SALV_S_LAYOUT_INFO ,
LS_KEY TYPE SALV_S_LAYOUT_KEY .
*
LO_LAYOUT = CO_ALV ->GET_LAYOUT ( ) .
LS_KEY - REPORT = SY -REPID .
LS_LAYOUT = CL_SALV_LAYOUT_SERVICE =>GET_DEFAULT_LAYOUT (
S_KEY = LS_KEY
RESTRICT = IF_SALV_C_LAYOUT =>RESTRICT_NONE ) .
LF_VARIANT = LS_LAYOUT -LAYOUT .
LO_LAYOUT ->SET_KEY ( LS_KEY ) .
LO_LAYOUT ->SET_DEFAULT ( ABAP_TRUE ) .
LO_LAYOUT ->SET_SAVE_RESTRICTION ( IF_SALV_C_LAYOUT =>RESTRICT_NONE ) .
LO_LAYOUT ->SET_INITIAL_LAYOUT ( LF_VARIANT ) .
ENDMETHOD . "set_layout
METHOD SET_DISPLAY_SETTING .
*
DATA : LO_DISPLAY TYPE REF TO CL_SALV_DISPLAY_SETTINGS .
LO_DISPLAY = O_SALV ->GET_DISPLAY_SETTINGS ( ) .
LO_DISPLAY ->SET_STRIPED_PATTERN ( 'X' ) .
LO_DISPLAY ->SET_FIT_COLUMN_TO_TABLE_SIZE ( 'X' ) .
* lo_display->set_list_header( 'ALV Test for Display Settings' ).
*
ENDMETHOD . "SET_DISPLAY_SETTING
* 设置列属性
METHOD SET_COLUMNS .
*
DATA : LO_COLS TYPE REF TO CL_SALV_COLUMNS_TABLE ,
LO_COLUMN TYPE REF TO CL_SALV_COLUMN_TABLE .
DATA : LV_SCRTEXT_L TYPE SCRTEXT_L .
DATA : COLOR TYPE LVC_S_COLO .
LO_COLS = CO_ALV ->GET_COLUMNS ( ) .
LO_COLS ->SET_OPTIMIZE ( ABAP_TRUE ) .
LO_COLS ->SET_KEY_FIXATION ( ABAP_TRUE ) .
TRY .
* LO_COLS->SET_CELL_TYPE_COLUMN( 'IT_CELL_TYPES' ).
* LO_COLS->SET_COLOR_COLUMN( 'IT_CELL_COLOR' ).
CATCH CX_SALV_DATA_ERROR . "#EC NO_HANDLER
ENDTRY .
TRY .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'CHECK' ) .
LO_COLUMN ->SET_CELL_TYPE ( IF_SALV_C_CELL_TYPE =>CHECKBOX_HOTSPOT ) .
LO_COLUMN ->SET_KEY ( 'X' ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'VBELN' ) .
LO_COLUMN ->SET_CELL_TYPE ( IF_SALV_C_CELL_TYPE => HOTSPOT ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'VBELN_VL' ) .
LO_COLUMN ->SET_CELL_TYPE ( IF_SALV_C_CELL_TYPE => HOTSPOT ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'VBELN_F' ) .
LO_COLUMN ->SET_CELL_TYPE ( IF_SALV_C_CELL_TYPE => HOTSPOT ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HANDLE' ) .
LO_COLUMN ->SET_VISIBLE ( ABAP_FALSE ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXBUR' ) .
LO_COLUMN ->SET_VISIBLE ( ABAP_FALSE ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXGJR' ) .
LO_COLUMN ->SET_VISIBLE ( ABAP_FALSE ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'KF00' ) .
LV_SCRTEXT_L = '代垫运费单价' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'Z005' ) .
LV_SCRTEXT_L = '代垫装卸费单价' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'KF01' ) .
LV_SCRTEXT_L = '运费(一票制)单价' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'Z003' ) .
LV_SCRTEXT_L = '装卸费单价' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'DDYF' ) .
LV_SCRTEXT_L = '代垫运费' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'DDZX' ) .
LV_SCRTEXT_L = '代垫装卸费' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '3' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'YFHJ' ) .
LV_SCRTEXT_L = '运费(一票制)' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '5' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'ZXHJ' ) .
LV_SCRTEXT_L = '装卸费' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '3' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HEJI' ) .
LV_SCRTEXT_L = '合计' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXZXT' ) .
LV_SCRTEXT_L = '核销日期(装卸费)' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '3' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXZXB' ) .
LV_SCRTEXT_L = '备注(装卸费)' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '3' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXYFT' ) .
LV_SCRTEXT_L = '核销日期(运费)' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '5' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXYFB' ) .
LV_SCRTEXT_L = '备注(运费)' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '5' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXDDT' ) .
LV_SCRTEXT_L = '代垫装卸费开票核销日期' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '3' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXDDB' ) .
LV_SCRTEXT_L = '代垫装卸费开票核销备注' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '3' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'HXDOC' ) .
LV_SCRTEXT_L = '代垫装卸费开票核销凭证' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '3' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ?= LO_COLS ->GET_COLUMN ( 'FLAG' ) .
LV_SCRTEXT_L = '是否打印' .
LO_COLUMN ->SET_LONG_TEXT ( LV_SCRTEXT_L ) .
LO_COLUMN ->SET_FIXED_HEADER_TEXT ( 'L' ) .
COLOR -COL = '3' .
COLOR -INT = '0' .
COLOR -INV = '0' .
LO_COLUMN ->SET_COLOR ( COLOR ) .
LO_COLUMN ->SET_VISIBLE ( ABAP_TRUE ) .
CATCH CX_SALV_NOT_FOUND . "#EC NO_HANDLER
ENDTRY .
*小计及排序设置
* DATA: LR_AGGREGATIONS TYPE REF TO CL_SALV_AGGREGATIONS.
* LR_AGGREGATIONS = CO_ALV->GET_AGGREGATIONS( ).
* LR_AGGREGATIONS->CLEAR( ).
* DATA: LR_GROUPS TYPE REF TO CL_SALV_SORTS .
* LR_GROUPS = CO_ALV->GET_SORTS( ) .
* LR_GROUPS->CLEAR( ).
*
* TRY.
* LR_AGGREGATIONS->ADD_AGGREGATION( COLUMNNAME = 'HSLVTS' ).
* LR_GROUPS->ADD_SORT( COLUMNNAME = 'RACCT'
* POSITION = 1
* SUBTOTAL = ABAP_TRUE
* SEQUENCE = IF_SALV_C_SORT=>SORT_UP ).
*
* CATCH CX_SALV_NOT_FOUND CX_SALV_DATA_ERROR CX_SALV_EXISTING.
* ENDTRY.
ENDMETHOD . "SET_COLUMNS
METHOD HANDLE_DOUBLE_CLICK .
* DATA: LO_DETAL_ALV TYPE REF TO LCL_DETAL_ALV.
* CASE COLUMN.
* WHEN OTHERS.
* READ TABLE GT_ITAB INTO GW_ITAB INDEX ROW.
* IF SY-SUBRC = 0.
* CREATE OBJECT LO_DETAL_ALV.
* LO_DETAL_ALV->GET_SUBDATA( GW_ITAB ).
* LO_DETAL_ALV->GENERATE_ALV( ).
* ENDIF.
* ENDCASE.
ENDMETHOD . "HANDLE_DOUBLE_CLICK
METHOD HANDLE_LINK_CLICK .
* FIELD-SYMBOLS: <OUTTAB> TYPE STANDARD TABLE,
* <LFA_DATA> TYPE ANY,
* <LF_CHECK> TYPE FLAG.
* DATA :
* IF_TABNAME TYPE STRING. "alv_输出内部名字
* CASE COLUMN.
* WHEN 'CHECK'.
* READ TABLE GT_ITAB ASSIGNING <ITAB> INDEX ROW.
* IF SY-SUBRC = 0.
* IF <ITAB>-CHECK = 'X'.
* <ITAB>-CHECK = ''.
* ELSE.
* <ITAB>-CHECK = 'X'.
* ENDIF.
* ENDIF.
* WHEN 'BELNR'.
* READ TABLE GT_ITAB INTO GW_ITAB INDEX ROW.
* IF SY-SUBRC = 0.
* SET PARAMETER ID 'BUK' FIELD GW_ITAB-RBUKRS.
* SET PARAMETER ID 'GJR' FIELD GW_ITAB-GJAHR.
* SET PARAMETER ID 'BLN' FIELD GW_ITAB-BELNR.
* CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
* ENDIF.
* ENDCASE.
* ME->REFRESH_ALV( ).
CASE COLUMN .
WHEN 'VBELN' .
READ TABLE GT_DETAL INTO GW_DETAL INDEX ROW .
IF SY -SUBRC = 0 .
SET PARAMETER ID 'AUN' FIELD GW_DETAL -VBELN .
CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN .
ENDIF .
WHEN 'CHECK' .
READ TABLE GT_DETAL INTO GW_DETAL INDEX ROW .
IF SY -SUBRC = 0 .
IF GW_DETAL - CHECK = 'X' .
CLEAR GW_DETAL - CHECK .
ELSE .
GW_DETAL - CHECK = 'X' .
ENDIF .
ENDIF .
MODIFY GT_DETAL FROM GW_DETAL INDEX ROW .
WHEN 'VBELN_VL' .
READ TABLE GT_DETAL INTO GW_DETAL INDEX ROW .
IF SY -SUBRC = 0 .
SET PARAMETER ID 'VL' FIELD GW_DETAL -VBELN_VL .
CALL TRANSACTION 'VL03N' AND SKIP FIRST SCREEN .
ENDIF .
WHEN 'VBELN_F' .
READ TABLE GT_DETAL INTO GW_DETAL INDEX ROW .
IF SY -SUBRC = 0 AND GW_DETAL -VBELN_F IS NOT INITIAL .
SET PARAMETER ID 'VF' FIELD GW_DETAL -VBELN_F .
CALL TRANSACTION 'VF03' AND SKIP FIRST SCREEN .
ENDIF .
ENDCASE .
ME ->REFRESH_ALV ( ) .
ENDMETHOD . "HANDLE_link_click
METHOD ON_USER_COMMAND .
DATA : O_SELS TYPE REF TO CL_SALV_SELECTIONS ,
T_ROWS TYPE SALV_T_ROW ,
L_ROW TYPE LINE OF SALV_T_ROW .
CASE E_SALV_FUNCTION .
* WHEN 'SALL'.
* GW_ITAB-CHECK = 'X'.
* MODIFY GT_ITAB FROM GW_ITAB TRANSPORTING CHECK WHERE CHECK = ''.
* WHEN 'DSAL'.
* GW_ITAB-CHECK = ''.
* MODIFY GT_ITAB FROM GW_ITAB TRANSPORTING CHECK WHERE CHECK = 'X'.
WHEN 'PRINT' .
* WHEN 'SALL'.
* O_SELS = O_ALV->GET_SELECTIONS( ).
* T_ROWS = O_SELS->GET_SELECTED_ROWS( ).
* IF LINES( T_ROWS ) > 0.
* READ TABLE T_ROWS INTO L_ROW INDEX 1.
* ENDIF.
WHEN 'ZALL' .
LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = '' .
<DETAL> - CHECK = 'X' .
ENDLOOP .
WHEN 'ZSAL' .
LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' .
CLEAR <DETAL> - CHECK .
ENDLOOP .
WHEN 'ZZXF' . "核销装卸费
READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' .
IF SY -SUBRC = 0 .
PERFORM FRM_HX_ZXF .
ELSE .
MESSAGE '请选择需要核销的条目!' TYPE 'E' .
ENDIF .
WHEN 'ZYF' . "核销运费
READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' .
IF SY -SUBRC = 0 .
PERFORM FRM_HX_YF .
ELSE .
MESSAGE '请选择需要核销的条目!' TYPE 'E' .
ENDIF .
WHEN 'ZSZXF' . "取消核销装卸费
READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' .
IF SY -SUBRC = 0 .
PERFORM FRM_QXHX_ZXF .
ELSE .
MESSAGE '请选择需要取消核销的条目!' TYPE 'E' .
ENDIF .
WHEN 'ZSYF' . "取消核销运费
READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' .
IF SY -SUBRC = 0 .
PERFORM FRM_QXHX_YF .
ELSE .
MESSAGE '请选择需要取消核销的条目!' TYPE 'E' .
ENDIF .
WHEN 'DDHX' . "代垫装卸费开票核销
READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' .
IF SY -SUBRC = 0 .
PERFORM FRM_DDHX_ZXF .
ELSE .
MESSAGE '请选择需要核销的条目!' TYPE 'E' .
ENDIF .
WHEN 'DDDY' . "代垫装卸费结算打印
READ TABLE GT_DETAL TRANSPORTING NO FIELDS WITH KEY CHECK = 'X' .
IF SY -SUBRC = 0 .
PERFORM FRM_DDDY_ZXF .
ELSE .
MESSAGE '请选择需要打印的条目!' TYPE 'E' .
ENDIF .
ENDCASE .
ME ->REFRESH_ALV ( ) .
ENDMETHOD . "ON_USER_COMMAND
METHOD REFRESH_ALV .
DATA : LO_COLS TYPE REF TO CL_SALV_COLUMNS_TABLE ,
LV_STBL TYPE LVC_S_STBL .
LO_COLS = O_SALV ->GET_COLUMNS ( ) .
LO_COLS ->SET_OPTIMIZE ( ABAP_TRUE ) .
LV_STBL -ROW = 'X' .
LV_STBL -COL = 'X' .
O_SALV -> REFRESH ( S_STABLE = LV_STBL ) .
ENDMETHOD . "REFRESH_alv
ENDCLASS . "lcl_main_alv IMPLEMENTATION
*----------------------------------------------------------------------*
* CLASS LCL_EKPO_F_ALV IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
*CLASS LCL_DETAL_ALV IMPLEMENTATION.
* METHOD GET_SUBDATA.
* REFRESH T_DETAL.
* LOOP AT GT_DETAL INTO GW_DETAL WHERE VKORG = IW_ITAB-VKORG
* AND KUNNR = IW_ITAB-KUNNR
* AND PERNR = IW_ITAB-PERNR.
* APPEND GW_DETAL TO T_DETAL.
* CLEAR GW_DETAL.
* ENDLOOP.
* ENDMETHOD. "GET_SUBDATA
* METHOD GENERATE_ALV.
* TRY.
*
* CL_SALV_TABLE=>FACTORY(
* IMPORTING
* R_SALV_TABLE = O_SALV
* CHANGING
* T_TABLE = T_DETAL ).
*
* CATCH CX_SALV_MSG.
*
* ENDTRY.
* DATA: LO_FUNCTIONS TYPE REF TO CL_SALV_FUNCTIONS.
* LO_FUNCTIONS = O_SALV->GET_FUNCTIONS( ).
* LO_FUNCTIONS->SET_ALL( ABAP_TRUE ).
*
* DATA: LO_COLS_TAB TYPE REF TO CL_SALV_COLUMNS_TABLE,
* LO_COL_TAB TYPE REF TO CL_SALV_COLUMN_TABLE.
* DATA:LV_SCRTEXT_L TYPE SCRTEXT_L,
* LV_SCRTEXT_M TYPE SCRTEXT_M,
* LV_SCRTEXT_S TYPE SCRTEXT_S.
* LO_COLS_TAB = O_SALV->GET_COLUMNS( ).
* LO_COLS_TAB->SET_OPTIMIZE( 'X' ).
* TRY.
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'VBELN' ).
* LO_COL_TAB->SET_CELL_TYPE( IF_SALV_C_CELL_TYPE=>HOTSPOT ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'KF00' ).
* LV_SCRTEXT_L = '代垫运费单价'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'Z005' ).
* LV_SCRTEXT_L = '代垫装卸费单价'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'KF01' ).
* LV_SCRTEXT_L = '运费(一票制)单价'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'Z003' ).
* LV_SCRTEXT_L = '装卸费单价'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'DDYF' ).
* LV_SCRTEXT_L = '代垫运费'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'DDZX' ).
* LV_SCRTEXT_L = '代垫装卸费'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'YFHJ' ).
* LV_SCRTEXT_L = '运费(一票制)'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'ZXHJ' ).
* LV_SCRTEXT_L = '装卸费'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
*
* LO_COL_TAB ?= LO_COLS_TAB->GET_COLUMN( 'HEJI' ).
* LV_SCRTEXT_L = '合计'.
* LO_COL_TAB->SET_LONG_TEXT( LV_SCRTEXT_L ).
* LO_COL_TAB->SET_FIXED_HEADER_TEXT( 'L' ).
* CATCH CX_SALV_NOT_FOUND. "#EC NO_HANDLER
* ENDTRY.
**小计
** DATA: LR_AGGREGATIONS TYPE REF TO CL_SALV_AGGREGATIONS.
** LR_AGGREGATIONS = O_SALV->GET_AGGREGATIONS( ).
** LR_AGGREGATIONS->CLEAR( ).
** DATA: LR_GROUPS TYPE REF TO CL_SALV_SORTS .
** LR_GROUPS = O_SALV->GET_SORTS( ) .
** LR_GROUPS->CLEAR( ).
*
** TRY.
** LR_AGGREGATIONS->ADD_AGGREGATION( COLUMNNAME = 'MENGE' ).
** LR_GROUPS->ADD_SORT( COLUMNNAME = 'EBELN'
** POSITION = 1
*** SUBTOTAL = ABAP_TRUE
** SEQUENCE = IF_SALV_C_SORT=>SORT_UP ).
** LR_GROUPS->ADD_SORT( COLUMNNAME = 'EBELP'
** POSITION = 1
*** SUBTOTAL = ABAP_TRUE
** SEQUENCE = IF_SALV_C_SORT=>SORT_UP ).
** CATCH CX_SALV_NOT_FOUND CX_SALV_DATA_ERROR CX_SALV_EXISTING.
** ENDTRY.
** 设置事件
* DATA: LO_EVENTS TYPE REF TO CL_SALV_EVENTS_TABLE.
* LO_EVENTS = O_SALV->GET_EVENT( ).
* SET HANDLER HANDLE_LINK_CLICK FOR LO_EVENTS.
**行列选择
* DATA:LR_SELS TYPE REF TO CL_SALV_SELECTIONS.
* LR_SELS = O_SALV->GET_SELECTIONS( ).
* LR_SELS->SET_SELECTION_MODE( IF_SALV_C_SELECTION_MODE=>ROW_COLUMN ).
*
** SET HANDLER ON_REFRESH_DETAILS FOR ALL INSTANCES.
* O_SALV->DISPLAY( ).
*
* ENDMETHOD. "generate_alv
* METHOD HANDLE_LINK_CLICK.
*
* CASE COLUMN.
* WHEN 'VBELN'.
* READ TABLE T_DETAL INTO LW_DETAL INDEX ROW.
* IF SY-SUBRC = 0.
* SET PARAMETER ID 'AUN' FIELD LW_DETAL-VBELN.
* CALL TRANSACTION 'VA03' AND SKIP FIRST SCREEN.
* ENDIF.
* ENDCASE.
* ENDMETHOD. "HANDLE_link_click
*ENDCLASS.
*&---------------------------------------------------------------------*
*& Form FRM_HX_ZXF
*&---------------------------------------------------------------------*
* 核销——装卸费
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_HX_ZXF .
DATA : LV_RETURNCODE ,
LV_DAT TYPE ERDAT ,
LV_BZ TYPE ZE_ZBEIZ .
DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX ,
LW_HXMX TYPE ZSD_HXMX .
CLEAR LV_RETURNCODE .
PERFORM FRM_GET_CHANGED CHANGING LV_DAT LV_BZ LV_RETURNCODE .
IF LV_RETURNCODE IS INITIAL .
LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' .
"已经核销的需要剔除
IF <DETAL> -HXZXT <> '00000000' .
CONTINUE .
ENDIF .
IF <DETAL> -DDZX = 0 AND <DETAL> -ZXHJ = 0 .
CONTINUE .
ENDIF .
<DETAL> -HXZXT = LV_DAT .
IF <DETAL> -HXZXT = '' .
<DETAL> -HXZXT = SY -DATUM .
ENDIF .
<DETAL> -HXZXB = LV_BZ .
CLEAR : LW_HXMX .
MOVE-CORRESPONDING <DETAL> TO LW_HXMX .
LW_HXMX -VBELN = <DETAL> -VBELN_VL .
LW_HXMX -POSNR = <DETAL> -POSNR_VL .
LW_HXMX -Z003 = <DETAL> -ZXHJ .
LW_HXMX -Z005 = <DETAL> -DDZX .
LW_HXMX -KF01 = <DETAL> -YFHJ .
* LW_HXMX-HXZXT = <DETAL>-HXZXT.
* LW_HXMX-HXZXB = <DETAL>-HXZXB.
* LW_HXMX-HXYFT = <DETAL>-HXYFT.
* LW_HXMX-HXYFB = <DETAL>-HXYFB.
APPEND LW_HXMX TO LT_HXMX .
ENDLOOP .
IF LT_HXMX IS NOT INITIAL .
MODIFY ZSD_HXMX FROM TABLE LT_HXMX .
IF SY -SUBRC = 0 .
COMMIT WORK .
MESSAGE '装卸费核销成功!' TYPE 'S' .
ELSE .
ROLLBACK WORK .
MESSAGE '装卸费核销失败!' TYPE 'E' .
ENDIF .
ELSE .
MESSAGE '没有需要核销的项目!' TYPE 'E' .
ENDIF .
ENDIF .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_HX_YF
*&---------------------------------------------------------------------*
* 核销——运费
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_HX_YF .
DATA : LV_RETURNCODE ,
LV_DAT TYPE ERDAT ,
LV_BZ TYPE ZE_ZBEIZ .
DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX ,
LW_HXMX TYPE ZSD_HXMX .
CLEAR LV_RETURNCODE .
PERFORM FRM_GET_CHANGED CHANGING LV_DAT LV_BZ LV_RETURNCODE .
IF LV_RETURNCODE IS INITIAL .
LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' .
"已经核销的需要剔除
IF <DETAL> -HXYFT <> '00000000' .
CONTINUE .
ENDIF .
IF <DETAL> -YFHJ = 0 .
CONTINUE .
ENDIF .
<DETAL> -HXYFT = LV_DAT .
IF <DETAL> -HXYFT = '' .
<DETAL> -HXYFT = SY -DATUM .
ENDIF .
<DETAL> -HXYFB = LV_BZ .
CLEAR : LW_HXMX .
MOVE-CORRESPONDING <DETAL> TO LW_HXMX .
LW_HXMX -VBELN = <DETAL> -VBELN_VL .
LW_HXMX -POSNR = <DETAL> -POSNR_VL .
LW_HXMX -Z003 = <DETAL> -ZXHJ .
LW_HXMX -Z005 = <DETAL> -DDZX .
LW_HXMX -KF01 = <DETAL> -YFHJ .
* LW_HXMX-HXZXT = <DETAL>-HXZXT.
* LW_HXMX-HXZXB = <DETAL>-HXZXB.
* LW_HXMX-HXYFT = <DETAL>-HXYFT.
* LW_HXMX-HXYFB = <DETAL>-HXYFB.
APPEND LW_HXMX TO LT_HXMX .
ENDLOOP .
IF LT_HXMX IS NOT INITIAL .
MODIFY ZSD_HXMX FROM TABLE LT_HXMX .
IF SY -SUBRC = 0 .
COMMIT WORK .
MESSAGE '运费核销成功!' TYPE 'S' .
ELSE .
ROLLBACK WORK .
MESSAGE '运费核销失败!' TYPE 'E' .
ENDIF .
ELSE .
MESSAGE '没有需要核销的项目!' TYPE 'E' .
ENDIF .
ENDIF .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_QXHX_ZXF
*&---------------------------------------------------------------------*
* 取消核销——装卸费
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_QXHX_ZXF .
DATA : LV_RETURN TYPE C . "信息提示框返回
DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX ,
LW_HXMX TYPE ZSD_HXMX .
PERFORM FRM_POPUP_INFO USING TEXT - 003 TEXT - 002 CHANGING LV_RETURN .
IF LV_RETURN <> 'J' .
EXIT .
ENDIF .
LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' .
IF <DETAL> -HXZXT IS INITIAL .
CONTINUE .
ENDIF .
CLEAR <DETAL> -HXZXT .
CLEAR <DETAL> -HXZXB .
CLEAR : LW_HXMX .
MOVE-CORRESPONDING <DETAL> TO LW_HXMX .
LW_HXMX -VBELN = <DETAL> -VBELN_VL .
LW_HXMX -POSNR = <DETAL> -POSNR_VL .
LW_HXMX -Z003 = <DETAL> -ZXHJ .
LW_HXMX -Z005 = <DETAL> -DDZX .
LW_HXMX -KF01 = <DETAL> -YFHJ .
* LW_HXMX-HXZXT = <DETAL>-HXZXT.
* LW_HXMX-HXZXB = <DETAL>-HXZXB.
* LW_HXMX-HXYFT = <DETAL>-HXYFT.
* LW_HXMX-HXYFB = <DETAL>-HXYFB.
APPEND LW_HXMX TO LT_HXMX .
ENDLOOP .
IF LT_HXMX IS NOT INITIAL .
MODIFY ZSD_HXMX FROM TABLE LT_HXMX .
IF SY -SUBRC = 0 .
COMMIT WORK .
MESSAGE '装卸费取消核销成功!' TYPE 'S' .
ELSE .
ROLLBACK WORK .
MESSAGE '装卸费取消核销失败!' TYPE 'E' .
ENDIF .
ELSE .
MESSAGE '没有需要取消核销的项目!' TYPE 'E' .
ENDIF .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_QXHX_YF
*&---------------------------------------------------------------------*
* 取消核销——运费
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_QXHX_YF .
DATA : LV_RETURN TYPE C . "信息提示框返回
DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX ,
LW_HXMX TYPE ZSD_HXMX .
PERFORM FRM_POPUP_INFO USING TEXT - 003 TEXT - 002 CHANGING LV_RETURN .
IF LV_RETURN <> 'J' .
EXIT .
ENDIF .
LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' .
IF <DETAL> -HXYFT IS INITIAL .
CONTINUE .
ENDIF .
CLEAR <DETAL> -HXYFT .
CLEAR <DETAL> -HXYFB .
CLEAR : LW_HXMX .
MOVE-CORRESPONDING <DETAL> TO LW_HXMX .
LW_HXMX -VBELN = <DETAL> -VBELN_VL .
LW_HXMX -POSNR = <DETAL> -POSNR_VL .
LW_HXMX -Z003 = <DETAL> -ZXHJ .
LW_HXMX -Z005 = <DETAL> -DDZX .
LW_HXMX -KF01 = <DETAL> -YFHJ .
* LW_HXMX-HXZXT = <DETAL>-HXZXT.
* LW_HXMX-HXZXB = <DETAL>-HXZXB.
* LW_HXMX-HXYFT = <DETAL>-HXYFT.
* LW_HXMX-HXYFB = <DETAL>-HXYFB.
APPEND LW_HXMX TO LT_HXMX .
ENDLOOP .
IF LT_HXMX IS NOT INITIAL .
MODIFY ZSD_HXMX FROM TABLE LT_HXMX .
IF SY -SUBRC = 0 .
COMMIT WORK .
MESSAGE '运费取消核销成功!' TYPE 'S' .
ELSE .
ROLLBACK WORK .
MESSAGE '运费取消核销失败!' TYPE 'E' .
ENDIF .
ELSE .
MESSAGE '没有需要取消核销的项目!' TYPE 'E' .
ENDIF .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_GET_CHANGED
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_<ITAB> text
* <--P_LV_RETURNCODE text
*----------------------------------------------------------------------*
FORM FRM_GET_CHANGED CHANGING P_DAT TYPE ERDAT
P_BZ TYPE ZE_ZBEIZ
P_RETURNCODE .
DATA : LT_VALUE LIKE TABLE OF SVAL WITH HEADER LINE ,
RETURNCODE .
LT_VALUE -TABNAME = 'ZSD_HXMX' .
LT_VALUE -FIELDNAME = 'HXYFT' .
LT_VALUE - VALUE = SY -DATUM .
APPEND LT_VALUE .
LT_VALUE -TABNAME = 'ZSD_HXMX' .
LT_VALUE -FIELDNAME = 'HXYFB' .
LT_VALUE - VALUE = '' .
APPEND LT_VALUE .
CALL FUNCTION 'POPUP_GET_VALUES'
EXPORTING
* NO_VALUE_CHECK = ' '
POPUP_TITLE = '核销备注'
START_COLUMN = '5'
START_ROW = '5'
IMPORTING
RETURNCODE = RETURNCODE
TABLES
FIELDS = LT_VALUE
EXCEPTIONS
ERROR_IN_FIELDS = 1
OTHERS = 2 .
IF SY -SUBRC = 0 .
P_RETURNCODE = RETURNCODE .
CHECK RETURNCODE IS INITIAL . "为A表示取消
READ TABLE LT_VALUE WITH KEY FIELDNAME = 'HXYFT' .
IF SY -SUBRC = 0 .
P_DAT = LT_VALUE - VALUE .
ENDIF .
READ TABLE LT_VALUE WITH KEY FIELDNAME = 'HXYFB' .
IF SY -SUBRC = 0 .
P_BZ = LT_VALUE - VALUE .
ENDIF .
ENDIF .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form frm_popup_info
*&---------------------------------------------------------------------*
* 弹出框信息
*----------------------------------------------------------------------*
* -->P_TEXT1 text
* -->P_TEXT2 text
* -->P_RETURN text
*----------------------------------------------------------------------*
FORM FRM_POPUP_INFO USING P_TEXT1 P_TEXT2
CHANGING P_RETURN .
CALL FUNCTION 'POPUP_TO_CONFIRM_STEP' "#EC *
EXPORTING
DEFAULTOPTION = 'Y'
TEXTLINE1 = P_TEXT1
TITEL = P_TEXT2
CANCEL_DISPLAY = ''
IMPORTING
ANSWER = P_RETURN .
ENDFORM . "FRM_POPUP_INFO
*&---------------------------------------------------------------------*
*& Form FRM_DDHX_ZXF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DDHX_ZXF .
DATA : LV_RETURNCODE ,
LV_DAT TYPE ERDAT ,
LV_BZ TYPE ZE_ZBEIZ .
DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX ,
LW_HXMX TYPE ZSD_HXMX .
*------会计凭证
DATA :I_HEADER LIKE BKPF ,
IT_ITEM LIKE TABLE OF ZFS_BSED WITH HEADER LINE ,
RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE .
CLEAR LV_RETURNCODE .
PERFORM FRM_GET_CHANGED CHANGING LV_DAT LV_BZ LV_RETURNCODE .
IF LV_RETURNCODE IS INITIAL .
LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' .
"已经核销的需要剔除
IF <DETAL> -HXDDT <> '00000000' .
CONTINUE .
ENDIF .
IF <DETAL> -DDZX = 0 .
CONTINUE .
ENDIF .
<DETAL> -HXDDT = LV_DAT .
IF <DETAL> -HXDDT = '' .
<DETAL> -HXDDT = SY -DATUM .
ENDIF .
<DETAL> -HXDDB = LV_BZ .
"生成会计凭证
"借:应收账款-客户,贷:其他应付-开票单位
CLEAR :I_HEADER .
REFRESH : IT_ITEM[] ,
RETURN[] .
I_HEADER -BUKRS = <DETAL> -HXBUR .
I_HEADER -GJAHR = <DETAL> -HXGJR .
I_HEADER -BLDAT = SY -DATUM .
I_HEADER -BUDAT = SY -DATUM .
I_HEADER -MONAT = SY -DATUM+4 ( 2 ) .
I_HEADER -BLART = 'SA' .
I_HEADER -BKTXT = '代垫力费1票' .
I_HEADER -XBLNR = <DETAL> -VBELN_VL && '/' && <DETAL> -POSNR_VL .
I_HEADER -WAERS = <DETAL> -WAERK .
CLEAR : IT_ITEM .
IT_ITEM -BUZEI = 1 .
IT_ITEM -UMSKZ = '' .
IF <DETAL> -DDZX > 0 .
IT_ITEM -BSCHL = '01' .
IT_ITEM -SHKZG = 'S' .
ELSE .
IT_ITEM -BSCHL = '12' .
IT_ITEM -SHKZG = 'H' .
ENDIF .
IT_ITEM -DMBTR = ABS ( <DETAL> -DDZX ) .
IT_ITEM -PRCTR = '' .
* IT_ITEM-ZUONR = <DETAL>-VBELN_VL && '/' && <DETAL>-POSNR_VL.
IT_ITEM -SGTXT = '代垫力费1票' .
IT_ITEM -KUNNR = <DETAL> -KUNNR .
IT_ITEM -KOART = 'D' .
APPEND IT_ITEM .
CLEAR : IT_ITEM .
IT_ITEM -BUZEI = 2 .
IT_ITEM -UMSKZ = 'U' .
IF <DETAL> -DDZX > 0 .
IT_ITEM -BSCHL = '39' .
IT_ITEM -SHKZG = 'H' .
ELSE .
IT_ITEM -BSCHL = '29' .
IT_ITEM -SHKZG = 'S' .
ENDIF .
IT_ITEM -DMBTR = ABS ( <DETAL> -DDZX ) .
IT_ITEM -PRCTR = '' .
* IT_ITEM-ZUONR = <DETAL>-VBELN_VL && '/' && <DETAL>-POSNR_VL.
IT_ITEM -SGTXT = '代垫力费1票' .
IT_ITEM -LIFNR = '1090' .
IT_ITEM -KOART = 'K' .
APPEND IT_ITEM .
CALL FUNCTION 'ZDOCUMENT_BILL_EXCHANG_POST'
EXPORTING
I_HEADER = I_HEADER
LW_PRCTR = ''
IMPORTING
E_BELNR = I_HEADER -BELNR
E_GJAHR = I_HEADER -GJAHR
TABLES
IT_ITEM = IT_ITEM
RETURN = RETURN .
IF I_HEADER -BELNR IS INITIAL .
REFRESH GT_BAPIRET[] .
GT_BAPIRET[] = RETURN[] .
PERFORM DISPLAY_ERROR .
CONTINUE .
ELSE .
<DETAL> -HXDOC = I_HEADER -BELNR .
<DETAL> -HXGJR = I_HEADER -GJAHR .
<DETAL> -HXBUR = I_HEADER -BUKRS .
ENDIF .
CLEAR : LW_HXMX .
MOVE-CORRESPONDING <DETAL> TO LW_HXMX .
LW_HXMX -VBELN = <DETAL> -VBELN_VL .
LW_HXMX -POSNR = <DETAL> -POSNR_VL .
LW_HXMX -Z003 = <DETAL> -ZXHJ .
LW_HXMX -Z005 = <DETAL> -DDZX .
LW_HXMX -KF01 = <DETAL> -YFHJ .
* LW_HXMX-HXZXT = <DETAL>-HXZXT.
* LW_HXMX-HXZXB = <DETAL>-HXZXB.
* LW_HXMX-HXYFT = <DETAL>-HXYFT.
* LW_HXMX-HXYFB = <DETAL>-HXYFB.
APPEND LW_HXMX TO LT_HXMX .
ENDLOOP .
IF LT_HXMX IS NOT INITIAL .
MODIFY ZSD_HXMX FROM TABLE LT_HXMX .
IF SY -SUBRC = 0 .
COMMIT WORK .
MESSAGE '代垫装卸费开票核销成功!' TYPE 'S' .
ELSE .
ROLLBACK WORK .
MESSAGE '代垫装卸费开票核销失败!' TYPE 'E' .
ENDIF .
ELSE .
MESSAGE '没有需要核销的项目!' TYPE 'E' .
ENDIF .
ENDIF .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form DISPLAY_ERROR
*&---------------------------------------------------------------------*
* 显示错误
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM DISPLAY_ERROR .
DATA : GR_TABLE TYPE REF TO CL_SALV_TABLE .
DATA : LR_COLUMNS TYPE REF TO CL_SALV_COLUMNS .
TRY .
CL_SALV_TABLE =>FACTORY (
IMPORTING
R_SALV_TABLE = GR_TABLE
CHANGING
T_TABLE = GT_BAPIRET ) .
CATCH CX_SALV_MSG . "#EC NO_HANDLER
ENDTRY .
LR_COLUMNS = GR_TABLE ->GET_COLUMNS ( ) .
LR_COLUMNS ->SET_OPTIMIZE ( 'X' ) .
GR_TABLE ->SET_SCREEN_POPUP (
START_COLUMN = 1
END_COLUMN = 100
START_LINE = 1
END_LINE = 20 ) .
GR_TABLE ->DISPLAY ( ) .
ENDFORM .
*&---------------------------------------------------------------------*
*& Form FRM_DDDY_ZXF
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DDDY_ZXF .
DATA : FM_NAME TYPE RS38L_FNAM ,
LS_CONTROL_PARAM TYPE SSFCTRLOP ,
LS_COMPOSER_PARAM TYPE SSFCOMPOP ,
OUTOPT TYPE SSFCRESOP ,
L_JOB_OUTPUT_INFO TYPE SSFCRESCL .
DATA : LT_HEADER TYPE TABLE OF ZVS_HX_HEAD ,
L_HEADER TYPE ZVS_HX_HEAD ,
LT_ITEM TYPE ZVS_HX_DETAIL_T WITH HEADER LINE .
DATA : LT_HXMX TYPE STANDARD TABLE OF ZSD_HXMX ,
LW_HXMX TYPE ZSD_HXMX .
DATA : LV_LINE TYPE I ,
EV_MONEY TYPE STRING ,
IV_MONEY TYPE BF_DMBTR ,
L_LAST TYPE USER_ADDR -NAME_LAST ,
L_FIRST TYPE USER_ADDR -NAME_FIRST .
LS_CONTROL_PARAM -NO_OPEN = 'X' .
LS_CONTROL_PARAM -NO_CLOSE = 'X' .
CALL FUNCTION 'SSF_OPEN'
EXPORTING
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
IMPORTING
JOB_OUTPUT_OPTIONS = OUTOPT
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5 .
"打印的页数
LOOP AT GT_DETAL INTO GW_DETAL WHERE CHECK = 'X' .
MOVE-CORRESPONDING GW_DETAL TO L_HEADER .
COLLECT L_HEADER INTO LT_HEADER .
ENDLOOP .
SORT LT_HEADER BY KUNNR .
LOOP AT LT_HEADER INTO L_HEADER .
REFRESH : LT_ITEM[] .
"打印人
L_HEADER -USNAM = SY -UNAME .
CLEAR : L_LAST ,L_FIRST .
SELECT SINGLE NAME_LAST NAME_FIRST
INTO (L_LAST ,L_FIRST )
FROM USER_ADDR
WHERE BNAME = L_HEADER -USNAM .
CONCATENATE L_LAST L_FIRST INTO L_HEADER -KAIDR .
"金额大写
IV_MONEY = L_HEADER -DDZX .
CALL FUNCTION 'ZFUC_NUMERIC_TO_CHINESE'
EXPORTING
IV_MONEY = IV_MONEY
IMPORTING
EV_MONEY = EV_MONEY
EXCEPTIONS
WRONG_MONEY = 1
OTHERS = 2 .
IF SY -SUBRC = 0 .
L_HEADER -DDZX_C = EV_MONEY .
ENDIF .
"明细
LOOP AT GT_DETAL INTO GW_DETAL WHERE CHECK = 'X' AND KUNNR = L_HEADER -KUNNR .
MOVE-CORRESPONDING GW_DETAL TO LT_ITEM .
APPEND LT_ITEM .
CLEAR LT_ITEM .
ENDLOOP .
"小于10行补足十行
DESCRIBE TABLE LT_ITEM LINES LV_LINE .
IF LV_LINE < 12 .
LV_LINE = 12 - LV_LINE .
DO LV_LINE TIMES .
CLEAR LT_ITEM .
APPEND LT_ITEM .
ENDDO .
ENDIF .
CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
EXPORTING
FORMNAME = 'ZSD_HXDDZXF_PRINT'
IMPORTING
FM_NAME = FM_NAME
EXCEPTIONS
NO_FORM = 1
NO_FUNCTION_MODULE = 2
OTHERS = 3 .
CALL FUNCTION FM_NAME
EXPORTING
CONTROL_PARAMETERS = LS_CONTROL_PARAM
OUTPUT_OPTIONS = LS_COMPOSER_PARAM
I_HEAD = L_HEADER
TABLES
IT_ITEM = LT_ITEM[]
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
USER_CANCELED = 4
OTHERS = 5 .
ENDLOOP .
CALL FUNCTION 'SSF_CLOSE'
IMPORTING
JOB_OUTPUT_INFO = L_JOB_OUTPUT_INFO
EXCEPTIONS
FORMATTING_ERROR = 1
INTERNAL_ERROR = 2
SEND_ERROR = 3
OTHERS = 4 .
IF SY -SUBRC = 0 .
IF L_JOB_OUTPUT_INFO -OUTPUTDONE = 'X' . "是否输出到打印机
LOOP AT GT_DETAL ASSIGNING <DETAL> WHERE CHECK = 'X' .
<DETAL> -FLAG = 'X' .
CLEAR : LW_HXMX .
MOVE-CORRESPONDING <DETAL> TO LW_HXMX .
LW_HXMX -VBELN = <DETAL> -VBELN_VL .
LW_HXMX -POSNR = <DETAL> -POSNR_VL .
LW_HXMX -Z003 = <DETAL> -ZXHJ .
LW_HXMX -Z005 = <DETAL> -DDZX .
LW_HXMX -KF01 = <DETAL> -YFHJ .
APPEND LW_HXMX TO LT_HXMX .
ENDLOOP .
IF LT_HXMX IS NOT INITIAL .
MODIFY ZSD_HXMX FROM TABLE LT_HXMX .
IF SY -SUBRC = 0 .
COMMIT WORK .
MESSAGE '代垫装卸费开票打印成功!' TYPE 'S' .
ELSE .
ROLLBACK WORK .
MESSAGE '代垫装卸费开票打印失败!' TYPE 'E' .
ENDIF .
ELSE .
MESSAGE '没有需要打印的项目!' TYPE 'E' .
ENDIF .
ENDIF .
ENDIF .
ENDFORM .
总结
以上是生活随笔为你收集整理的销售单据条件价格明细表的全部内容,希望文章能够帮你解决所遇到的问题。