BADI:MB_DOCUMENT_BADI
Method:MB_DOCUMENT_UPDATE
*----------------------------物料凭证内表------------------------------*
DATA:BEGIN OF IT_MAT_DOC OCCURS 0 ,
ZACTYP LIKE ZMMI_OUT_REC-ZACTYP,"业务类型
MBLNR LIKE MKPF-MBLNR,"物料凭证
MJAHR LIKE MKPF-MJAHR,"会计年度
BLDAT like MKPF-BLDAT,"凭证日期
BUDAT like mkpf-BUDAT,"记账日期
CPUDT like mkpf-CPUDT,"会计凭证输入日期
USNAM like mkpf-USNAM,"用户名
XBLNR like mkpf-XBLNR,"参考凭证号
BKTXT like mkpf-BKTXT,"抬头文本
ZEILE like mseg-ZEILE,"行项目
BWART like mseg-BWART,"移动类型
MATNR like mseg-MATNR,"物料编码
WERKS like mseg-werks,"工厂
LGORT like mseg-LGORT,"存储地点
UMWRK LIKE MSEG-UMWRK,"收/发工厂
UMLGO LIKE MSEG-UMLGO,"收/发库位
MENGE like mseg-MENGE,"数量
MEINS like mseg-MEINS,"基本单位
ERFMG like mseg-ERFMG,"输入数量
ERFME like mseg-ERFME,"输入单位
LIFNR like mseg-LIFNR,"供应商号
KUNNR like mseg-KUNNR,"客户号
EBELN like mseg-EBELN,"采购订单编号
FLAG(1),
END OF IT_MAT_DOC.
FIELD-SYMBOLS: LIKE IT_MAT_DOC.
DATA:BEGIN OF ITAB OCCURS 0 ,
ZACTYP(2),
MBLNR(10),
MJAHR(4),
BLDAT(8),
BUDAT(8),
CPUDT(8),
USNAM(12),
XBLNR(16),
BKTXT(25),
ZEILE(4),
BWART(3),
MATNR(18),
WERKS(4),
LGORT(4),
UMWRK(4),
UMLGO(4),
MENGE(15),
MEINS(3),
ERFMG(15),
ERFME(3),
LIFNR(10),
KUNNR(10),
EBELN(10),
END OF ITAB.
data:wa_likp type likp.
DATA:L_VALUE_NEW_EXP LIKE PLFH-MGVGW.
* 文本生成txt定义变量
TYPES: BEGIN OF txt_lines,
line_txt(3000) TYPE c,
END OF txt_lines.
DATA: itab_line TYPE STANDARD TABLE OF txt_lines
WITH HEADER LINE.
*----------------------------------------------------------------------*
* Variables
*----------------------------------------------------------------------*
DATA: BEGIN OF headtab OCCURS 0 ,
length TYPE i ,
decimals TYPE i,
type_kind TYPE c,
name(30) TYPE c,
END OF headtab.
DATA descr_ref TYPE REF TO cl_abap_structdescr.
FIELD-SYMBOLS: TYPE abap_compdescr ,
,
TYPE ANY .
DATA:G_MSG TYPE STRING.
DATA:G_MSGX TYPE XSTRING.
DATA: n TYPE i ,
str TYPE string ,
value TYPE string ,
text1 TYPE c,
m type i .
DATA:p_FILE TYPE STRING .
DATA:P_SIM_FILE TYPE STRING.
data:P_PATH(255) TYPE C value '/usr/sap/trans'.
DATA : BEGIN OF result OCCURS 10,
text(100),
END OF result.
DATA: sys_command(255).
*--------------------------------FTP参数--------------------------------*
DATA : filename(128) .
DATA: mi_key TYPE i VALUE 26101957,
mi_handle TYPE i,
slen TYPE i .
DATA: txttab TYPE truxs_t_text_data .
DATA: l_ftpcommand(100) TYPE c. "FTP命令
data:pr_return TYPE c. "返回参数
DATA: cons_source(128) TYPE c VALUE '/usr/sap/trans/IBM/'.
data: user(64) TYPE c VALUE 'db' ,
pwd(64) TYPE c value 'db' ,
host(64) TYPE c VALUE '192.168.0.8' ,
dest LIKE rfcdes-rfcdest VALUE 'SAPFTP'.
DATA: enter_key TYPE c VALUE cl_abap_char_utilities=>cr_lf .
DEFINE alpha_minus.
call function 'CONVERSION_EXIT_ALPHA_OUTPUT'
EXPORTING
input = &1
IMPORTING
output = &1.
END-OF-DEFINITION.
DEFINE alpha_manus.
call function 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = &1
IMPORTING
output = &1.
END-OF-DEFINITION.
SELECT MKPF~MBLNR
MKPF~MJAHR
MKPF~BLDAT
MKPF~BUDAT
MKPF~CPUDT
MKPF~USNAM
MKPF~XBLNR
MKPF~BKTXT
MSEG~ZEILE
MSEG~BWART
MSEG~MATNR
MSEG~WERKS
MSEG~LGORT
MSEG~UMWRK
MSEG~UMLGO
MSEG~MENGE
MSEG~MEINS
MSEG~ERFMG
MSEG~ERFME
MSEG~LIFNR
MSEG~KUNNR
MSEG~EBELN
INTO CORRESPONDING FIELDS OF TABLE IT_MAT_DOC
FROM MKPF INNER JOIN MSEG ON MKPF~MBLNR = MSEG~MBLNR
AND MKPF~MJAHR = MSEG~MJAHR
AND MKPF~MANDT = MSEG~MANDT
WHERE MSEG~MBLNR = MBLNR
AND MSEG~MJAHR = MJAHR
and MSEG~BWART IN ('101','102','122')
AND MSEG~XAUTO = ''
AND MKPF~MANDT = SY-MANDT
AND MSEG~MANDT = SY-MANDT.
LOOP AT IT_MAT_DOC ASSIGNING .
CONDENSE :-XBLNR,-BKTXT .
clear:wa_likp,L_VALUE_NEW_EXP.
IF NOT -XBLNR IS INITIAL.
select single * into wa_likp from likp where VBELN = -XBLNR and likp~mandt = sy-mandt.
if wa_likp-LFART = 'EL'.
IF -MEINS <> 'KG'.
CALL FUNCTION 'CF_UT_UNIT_CONVERSION'
EXPORTING
MATNR_IMP = -MATNR
* MEINS_IMP = ' '
UNIT_NEW_IMP = 'KG'
UNIT_OLD_IMP = -MEINS
VALUE_OLD_IMP = '1'
IMPORTING
VALUE_NEW_EXP = L_VALUE_NEW_EXP.
IF SY-SUBRC <> 0.
continue.
ELSE.
IF L_VALUE_NEW_EXP IS INITIAL.
CONTINUE.
ELSE.
ITAB-MEINS = 'KG'.
ITAB-MENGE = -MENGE * L_VALUE_NEW_EXP .
ENDIF.
ENDIF.
ELSE.
MOVE -MENGE TO ITAB-MENGE.
MOVE -MEINS TO ITAB-MEINS.
ENDIF.
MOVE 'P2' TO ITAB-ZACTYP.
MOVE -MBLNR TO ITAB-MBLNR.
MOVE -MJAHR TO ITAB-MJAHR.
MOVE -BLDAT TO ITAB-BLDAT.
MOVE -BUDAT TO ITAB-BUDAT.
MOVE -CPUDT TO ITAB-CPUDT.
MOVE -USNAM TO ITAB-USNAM.
MOVE -XBLNR TO ITAB-XBLNR.
MOVE -BKTXT TO ITAB-BKTXT.
MOVE -ZEILE TO ITAB-ZEILE.
MOVE -BWART TO ITAB-BWART.
alpha_minus -MATNR .
MOVE -MATNR TO ITAB-MATNR.
MOVE -WERKS TO ITAB-WERKS.
MOVE -LGORT TO ITAB-LGORT.
MOVE -UMWRK TO ITAB-UMWRK.
MOVE -UMLGO TO ITAB-UMLGO.
MOVE -ERFMG TO ITAB-ERFMG.
MOVE -ERFME TO ITAB-ERFME.
alpha_minus -LIFNR .
MOVE -LIFNR TO ITAB-LIFNR.
alpha_minus -KUNNR .
MOVE -KUNNR TO ITAB-KUNNR.
MOVE -EBELN TO ITAB-EBELN.
CONDENSE :ITAB-MENGE ,ITAB-ERFMG.
APPEND ITAB.CLEAR ITAB.
endif.
endif.
endloop.
IF LINES( ITAB ) > 0 .
descr_ref ?= cl_abap_typedescr=>describe_by_data( ITAB ).
LOOP AT descr_ref->components ASSIGNING .
MOVE-CORRESPONDING TO headtab.
APPEND headtab.
ENDLOOP.
DESCRIBE TABLE headtab LINES n.
LOOP AT ITAB ASSIGNING .
CLEAR:g_msg.
DO n TIMES."循环列
CLEAR:value.
ASSIGN COMPONENT sy-index OF STRUCTURE TO .
READ TABLE headtab INDEX sy-index.
m = headtab-length / 2 .
str = .
PERFORM addspace USING str m str .
if sy-index = 1 .
CONCATENATE g_msg str INTO g_msg.
else.
CONCATENATE g_msg '||' str INTO g_msg.
endif.
IF sy-index = n.
CONCATENATE g_msg '/@/' enter_key INTO g_msg.
itab_line-line_txt = g_msg.
APPEND itab_line.clear itab_line.
ENDIF.
ENDDO.
ENDLOOP.
TRANSLATE P_PATH TO LOWER CASE.
CLEAR:p_FILE,P_SIM_FILE,filename.
CONCATENATE P_PATH '/IBM/' 'SAP_OUT_PST_' sy-DATUM sy-UZEIT INTO P_SIM_FILE.
CONCATENATE P_PATH '/IBM/' 'SAP_OUT_PST_' sy-DATUM sy-UZEIT '.T00' INTO p_FILE.
CONCATENATE 'SAP_OUT_PST_' sy-DATUM sy-UZEIT '.TXT' INTO filename.
DELETE DATASET P_FILE.
CLOSE DATASET P_FILE.
OPEN DATASET P_FILE FOR OUTPUT IN TEXT MODE ENCODING UTF-8 . "
LOOP AT ITAB_LINE.
TRANSFER ITAB_LINE-LINE_TXT TO P_FILE.
ENDLOOP.
CLOSE DATASET P_FILE.
CLEAR:result ,result[],sys_command.
CONCATENATE '/bin/ls' p_FILE INTO sys_command SEPARATED BY ' '.
**执行系统程序,生成文件列表存放在内表RESULT.
CALL 'SYSTEM' ID 'COMMAND' FIELD sys_command
ID 'TAB' FIELD result-*sys*.
READ TABLE result INDEX 1.
*读取文件列表,是否存在记录,不存在则报错
IF sy-subrc <> 0.
message '尚未生成文件,请核查' type 'E'.
EXIT.
ELSE.
CONCATENATE P_SIM_FILE '.TXT' INTO P_SIM_FILE.
CONCATENATE 'mv' p_FILE P_SIM_FILE INTO sys_command SEPARATED BY ' '.
CALL 'SYSTEM'
ID 'COMMAND' FIELD sys_command
ID 'TAB' FIELD result-*sys*.
CONCATENATE '成功生成文件:' P_SIM_FILE INTO G_MSG.
if sy-subrc = 0 .
message G_MSG type 'S'.
endif.
ENDIF.
*-------------------------- FTP处理------------------------------*
slen = STRLEN( pwd ).
CALL FUNCTION 'HTTP_SCRAMBLE'
EXPORTING
SOURCE = pwd
sourcelen = slen
key = mi_key
IMPORTING
destination = pwd.
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 'FTP_CONNECT'
EXPORTING
user = user
password = pwd
host = host
rfc_destination = 'SAPFTP' "SAPFTPA
IMPORTING
handle = mi_handle
EXCEPTIONS
not_connected = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
CHECK sy-subrc = 0.
CHECK sy-subrc = 0.
l_ftpcommand = 'binary'.
PERFORM frm_ftp_command USING l_ftpcommand pr_return.
* Change local directory
CLEAR l_ftpcommand.
CONCATENATE 'lcd' cons_source INTO l_ftpcommand SEPARATED BY space.
PERFORM frm_ftp_command USING l_ftpcommand pr_return.
IF pr_return = '1'.
WRITE:/ sy-datum, sy-uzeit, sy-uname, 'FTP改变本地路径错误!'.
STOP.
ENDIF.
*------------------传输文件---------------------------*
CLEAR l_ftpcommand.
CONCATENATE 'put' filename INTO l_ftpcommand SEPARATED BY space.
PERFORM frm_ftp_command USING l_ftpcommand pr_return.
CALL FUNCTION 'FTP_DISCONNECT'
EXPORTING
handle = mi_handle
EXCEPTIONS
OTHERS = 1.
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.
阅读(3087) | 评论(0) | 转发(0) |