程序可以通过抓取 客户 开票信息等 下载文本 导出

需要事先创建好几个structure

  1. zc0000sdt0016,
  1. zc0000sdt0017
  1. REPORT zc0000sdr0016 NO STANDARD PAGE HEADING
  2. LINE-COUNT
  3. LINE-SIZE .
  4. TABLES:vbrk,vbrp,t001.
  5. *----------------------------------------------------------------------*
  6. * type define
  7. *----------------------------------------------------------------------*
  8. TYPES: BEGIN OF ty_vbrk,
  9. vbeln TYPE vbrk-vbeln,"invoice number
  10. fkart TYPE vbrk-fkart, "ERPInvoiceType
  11. waerk TYPE vbrk-waerk, "Currency
  12. vkorg TYPE vbrk-vkorg, "Sales Organization
  13. vtweg TYPE vbrk-vtweg, "Distribution Channel
  14. knumv TYPE vbrk-knumv,
  15. fkdat TYPE vbrk-fkdat, "Invoice data
  16. gjahr TYPE vbrk-gjahr, "Year
  17. bukrs TYPE vbrk-bukrs,
  18. taxk1 TYPE vbrk-taxk1, "Invoice typeeg:0 - Expore Invoice 1 - VAT Inovice 2 - Credit InoviceBillingType
  19. kunag TYPE vbrk-kunag, "Customer code
  20. sfakn TYPE vbrk-sfakn, "Credit Notes
  21. fksto TYPE vbrk-fksto, "Cancel flag
  22. del TYPE c,
  23. END OF ty_vbrk,
  24. BEGIN OF ty_vbrp,
  25. vbeln TYPE vbrp-vbeln, "Invoice number
  26. posnr TYPE vbrp-posnr, "Item number
  27. fkimg TYPE vbrp-fkimg, "Quantity
  28. vrkme TYPE vbrp-vrkme, "Unit
  29. netwr TYPE vbrp-netwr, "Sum
  30. vbelv TYPE vbrp-vbelv, "First Document
  31. aubel TYPE vbrp-aubel, "Sales Document
  32. matnr TYPE vbrp-matnr, "Material Number
  33. arktx TYPE vbrp-arktx, "Product chinese name
  34. ernam TYPE vbrp-ernam, "Person code
  35. mwsbp TYPE vbrp-mwsbp, "Tax
  36. END OF ty_vbrp,
  37. BEGIN OF ty_out,
  38. txt TYPE string,
  39. END OF ty_out,
  40. BEGIN OF ty_errlog, "Linda 20141120 add
  41. str() TYPE c, "Linda 20141120 add
  42. END OF ty_errlog. "Linda 20141120 add
  43. *----------------------------------------------------------------------*
  44. * Internal Tables define
  45. *----------------------------------------------------------------------*
  46. DATA: it_blitems TYPE STANDARD TABLE OF zc0000sdt0016,"is struction
  47. it_tbillno TYPE STANDARD TABLE OF zc0000sdt0017,"is table,
  48. it_kunnr TYPE jito_kunnr_range_tt,
  49. it_vbeln TYPE jit_vbeln_vl_range_tt,
  50. it_out TYPE STANDARD TABLE OF ty_out,"use for output
  51. it_errlog TYPE STANDARD TABLE OF ty_errlog, "Linda 20141120 add
  52. *----------------------------------------------------------------------*
  53. * Workarea define
  54. *----------------------------------------------------------------------*
  55. iw_vbrk TYPE ty_vbrk,
  56. iw_tbillno TYPE zc0000sdt0017,"is table
  57. iw_blitems TYPE zc0000sdt0016,"is struction
  58. iw_kunnr TYPE jito_kunnr_range,
  59. iw_vbeln TYPE jit_vbeln_vl_range,
  60. iw_out TYPE ty_out,
  61. iw_errlog TYPE ty_errlog, "Linda 20141120 add
  62. *----------------------------------------------------------------------*
  63. * Variables define
  64. *----------------------------------------------------------------------*
  65. w_time TYPE char6, "run time
  66. w_path TYPE rlgrap-filename, "path
  67. w_filename TYPE rlgrap-filename, "file name
  68. w_data1 TYPE i,
  69. w_data2 TYPE i,
  70. w_filter TYPE string." VALUE 'Text Files(*.txt)|*.txt'.Linda 20141024
  71. *----------------------------------------------------------------------*
  72. * Constants define
  73. *----------------------------------------------------------------------*
  74. CONSTANTS: cos_vl TYPE char1 VALUE '\',
  75. cos_open TYPE char4 VALUE 'OPEN',
  76. cos_close TYPE char5 VALUE 'CLOSE',
  77. cos_transfer TYPE char8 VALUE 'TRANSFER',
  78. cos_comma TYPE char1 VALUE ','. "Linda 20141120 add
  79.  
  80. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-003.
  81. PARAMETERS:"p_batch TYPE char20, "batch 1
  82. p_bukrs TYPE vbrk-bukrs OBLIGATORY. "company
  83. SELECT-OPTIONS:s_fkdat FOR vbrk-fkdat NO-EXTENSION. "Billing date for billing index and printout 2
  84. SELECTION-SCREEN BEGIN OF LINE .
  85. SELECTION-SCREEN COMMENT 1(31) text-009 . "enter data range
  86. PARAMETER p_data1 TYPE char3.
  87. SELECTION-SCREEN COMMENT 40(4) text-010.
  88. PARAMETER p_data2 TYPE char3.
  89. SELECTION-SCREEN COMMENT 70(79) text-008.
  90. SELECTION-SCREEN END OF LINE.
  91. SELECT-OPTIONS:
  92. s_vbeln FOR vbrk-vbeln, "Billing Document 3
  93. s_kunag FOR vbrk-kunag, "Payer 4
  94. s_matnr FOR vbrp-matnr NO-EXTENSION, "Material Number 5
  95. s_aubel FOR vbrp-aubel NO-EXTENSION, "Sales Document 6
  96. s_vkorg FOR vbrk-vkorg NO-EXTENSION OBLIGATORY.
  97. PARAMETERS:p_gjahr TYPE vbrk-gjahr. "Fiscal Year
  98.  
  99. PARAMETERS:p_nonrep TYPE c AS CHECKBOX. "compare or not
  100. SELECTION-SCREEN END OF BLOCK b1.
  101. SELECTION-SCREEN BEGIN OF LINE.
  102. PARAMETER p_check3 RADIOBUTTON GROUP rad DEFAULT 'X' USER-COMMAND rad.
  103. SELECTION-SCREEN COMMENT 4(20) text-c03 FOR FIELD p_check3."TXT format
  104. PARAMETER p_check4 RADIOBUTTON GROUP rad.
  105. SELECTION-SCREEN COMMENT 28(30) text-c04 FOR FIELD p_check4."CSV format
  106. SELECTION-SCREEN END OF LINE.
  107.  
  108. SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-002.
  109. SELECTION-SCREEN BEGIN OF LINE.
  110. PARAMETER p_check2 TYPE c RADIOBUTTON GROUP rads DEFAULT 'X' USER-COMMAND rad2.
  111. SELECTION-SCREEN COMMENT 4(20) text-c02 FOR FIELD p_check2."output to server
  112. SELECTION-SCREEN END OF LINE.
  113. PARAMETERS: p_path2(1024) TYPE c LOWER CASE
  114. VISIBLE LENGTH 200.
  115. SELECTION-SCREEN BEGIN OF LINE.
  116. PARAMETER p_check1 RADIOBUTTON GROUP rads.
  117. SELECTION-SCREEN COMMENT 4(20) text-c01 FOR FIELD p_check1."
  118. SELECTION-SCREEN END OF LINE.
  119. PARAMETERS: p_path(1024) TYPE c LOWER CASE
  120. VISIBLE LENGTH 200.
  121. SELECTION-SCREEN END OF BLOCK b3.
  122.  
  123. *----------------------------------------------------------------------*
  124. * INITIALIZATION
  125. *----------------------------------------------------------------------*
  126. INITIALIZATION.
  127. * init
  128.  
  129. *----------------------------------------------------------------------*
  130. * AT SELECTION-SCREEN ON VALUE-REQUEST
  131. *----------------------------------------------------------------------*
  132. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path.
  133. PERFORM frm_save_file CHANGING p_path.
  134. *----------------------------------------------------------------------*
  135. * AT SELECTION-SCREEN OUTPUT
  136. *----------------------------------------------------------------------*
  137. AT SELECTION-SCREEN OUTPUT.
  138. IF p_data1 <> space AND p_data2 <> space. "Linda 20141120 add
  139. REFRESH:s_fkdat. "Linda 20141024 add
  140. ENDIF. "Linda 20141120 add
  141. IF p_data1 <> space AND p_data2 <> space.
  142. PERFORM frm_chang_data USING p_data1
  143. CHANGING s_fkdat-low.
  144.  
  145. PERFORM frm_chang_data USING p_data2
  146. CHANGING s_fkdat-high.
  147. APPEND s_fkdat.
  148.  
  149. ENDIF.
  150.  
  151. *----------------------------------------------------------------------*
  152. * AT SELECTION-SCREEN
  153. *----------------------------------------------------------------------*
  154. AT SELECTION-SCREEN.
  155. * WHEN 'ONLI'.
  156. PERFORM frm_init.
  157. IF p_path = space AND p_check1 = 'X'.
  158. SET CURSOR FIELD 'P_PATH'.
  159. MESSAGE e001(00) WITH 'Local path can not be space'(018).
  160. ENDIF.
  161. IF p_path2 = space AND p_check2 = 'X'.
  162. SET CURSOR FIELD 'P_PATH2'.
  163. MESSAGE e001(00) WITH 'Server path can not be space'(017).
  164. ENDIF.
  165. CASE sy-ucomm.
  166. WHEN 'RAD' OR 'RAD2'.
  167. * lw_filter = 'Text Files(*.txt)|*.txt|Csv Files(*.csv)|*.csv|Excel Files(*.xls)|*.xls|All Files(*.*)|*.*|'."Text Files(*.txt)|*.txt|'. "All Files(*.*)|*.*|
  168. IF p_check3 = 'X'.
  169. w_filter = 'Text Files(*.txt)|*.txt'().
  170. ELSEIF p_check4 = 'X'.
  171. w_filter = 'Csv Files(*.csv)|*.csv'().
  172. ENDIF.
  173. CLEAR: p_path,
  174. p_path2.
  175. WHEN OTHERS.
  176. ENDCASE.
  177. TRY.
  178. w_data1 = p_data1.
  179. w_data2 = p_data2.
  180. CATCH cx_root.
  181. SET CURSOR FIELD 'P_DATA1'.
  182. MESSAGE e001() WITH 'Data range must be number'().
  183. ENDTRY.
  184. IF w_data1 > w_data2.
  185. SET CURSOR FIELD 'P_DATA1'.
  186. MESSAGE e001() WITH 'Data range must from small to big'().
  187. ENDIF.
  188. *----------------------------------------------------------------------*
  189. * START-OF-SELECTION
  190. *----------------------------------------------------------------------*
  191. START-OF-SELECTION.
  192. w_time = sy-uzeit.
  193. IF s_fkdat[] IS INITIAL AND p_data1 <> space AND p_data2 <> space.
  194. PERFORM frm_chang_data USING p_data1
  195. CHANGING s_fkdat-low.
  196.  
  197. PERFORM frm_chang_data USING p_data2
  198. CHANGING s_fkdat-high.
  199. s_fkdat-sign = 'I'.
  200. s_fkdat-option = 'BT'.
  201. APPEND s_fkdat.
  202. ELSEIF s_fkdat[] IS INITIAL AND p_data1 = space AND p_data2 = space.
  203. MESSAGE s001() WITH text- text- DISPLAY LIKE 'E'.
  204. RETURN.
  205. LEAVE TO LIST-PROCESSING.
  206. ENDIF.
  207. LOOP AT s_kunag.
  208. iw_kunnr-sign = s_kunag-sign.
  209. iw_kunnr-option = s_kunag-option.
  210. iw_kunnr-low = s_kunag-low.
  211. iw_kunnr-high = s_kunag-high.
  212.  
  213. APPEND iw_kunnr TO it_kunnr.
  214. ENDLOOP.
  215. LOOP AT s_vbeln.
  216. iw_vbeln-sign = s_vbeln-sign.
  217. iw_vbeln-option = s_vbeln-option.
  218. iw_vbeln-low = s_vbeln-low.
  219. iw_vbeln-high = s_vbeln-high.
  220.  
  221. APPEND iw_vbeln TO it_vbeln.
  222. ENDLOOP.
  223.  
  224. CHECK it_errlog IS INITIAL.
  225. CALL FUNCTION 'ZBPI_FW_INVOICE_MAHLE_NEW'
  226. EXPORTING
  227. fkdat_fr = s_fkdat-low
  228. vbeln_fr = s_vbeln-low
  229. kunnr_fr = s_kunag-low
  230. matnr_fr = s_matnr-low
  231. fkdat_to = s_fkdat-high
  232. vbeln_to = s_vbeln-high
  233. kunnr_to = s_kunag-high
  234. matnr_to = s_matnr-high
  235. aubel_fr = s_aubel-low
  236. aubel_to = s_aubel-high
  237. vkorg_fr = s_vkorg-low
  238. vkorg_to = s_vkorg-high
  239. * disc_cond_type = p_disc
  240. * unit_cond_type = p_unit
  241. * tax_cond_type = p_tax
  242. bukrs = p_bukrs
  243. nonrepeat = p_nonrep
  244. gjahr = p_gjahr
  245. TABLES
  246. zfw_billing_items = it_blitems
  247. zfw_billingno = it_tbillno
  248. zfw_kunnr = it_kunnr
  249. zfw_vbeln = it_vbeln
  250. EXCEPTIONS
  251. no_data =
  252. lock_errord =
  253. insert_error = .
  254. CASE sy-subrc.
  255. WHEN .
  256. iw_errlog-str = 'No matching data is found.'().
  257. APPEND iw_errlog TO it_errlog.
  258. WHEN .
  259. iw_errlog-str = 'Lock table error.'().
  260. APPEND iw_errlog TO it_errlog.
  261. WHEN .
  262. iw_errlog-str = 'Insert table error.'().
  263. APPEND iw_errlog TO it_errlog.
  264. ENDCASE.
  265.  
  266. CHECK it_errlog IS INITIAL.
  267. **{ Insert started by Linda on 06-Jan-2015 - CRXX
  268. PERFORM frm_modify_blitems.
  269. *
  270. **} Insert ended by Linda on 06-Jan-2015 - CRXX
  271. * background process
  272. IF p_check2 = 'X'.
  273. PERFORM frm_transfer_sever.
  274. ELSE.
  275. * front process
  276. PERFORM frm_transfer_loc.
  277. ENDIF.
  278. *----------------------------------------------------------------------*
  279. * END-OF-SELECTION
  280. *----------------------------------------------------------------------*
  281. END-OF-SELECTION.
  282. * error log print
  283. LOOP AT it_errlog INTO iw_errlog."
  284. WRITE: / iw_errlog-str.
  285. ENDLOOP.
  286.  
  287. FREE:it_tbillno,
  288. it_out,
  289. iw_vbrk,
  290. iw_tbillno,
  291. iw_blitems,
  292. it_vbeln,
  293. it_kunnr,
  294. it_blitems,
  295. w_time,
  296. w_path,
  297. w_filename,
  298. iw_out.
  299. *&---------------------------------------------------------------------*
  300. *& Form frm_transfer_sever
  301. *&---------------------------------------------------------------------*
  302. * text
  303. *----------------------------------------------------------------------*
  304. * --> p1 text
  305. * <-- p2 text
  306. *----------------------------------------------------------------------*
  307. FORM frm_transfer_sever .
  308. * 拼接文件名
  309. IF p_check3 = 'X'.
  310. CONCATENATE p_bukrs s_vkorg-low sy-datum "LINDA 20140916
  311. w_time '.txt'
  312. INTO w_filename.
  313. ELSEIF p_check4 = 'X'.
  314. CONCATENATE p_bukrs s_vkorg-low sy-datum "LINDA 20140916
  315. w_time '.csv'
  316. INTO w_filename.
  317. ENDIF.
  318. * 拼接服务器路径
  319. CONCATENATE p_path2 w_filename
  320. INTO w_path SEPARATED BY cos_vl.
  321.  
  322. * 打开服务器文件 编码是非unicode
  323. * OPEN DATASET w_path FOR OUTPUT IN TEXT MODE ENCODING NON-UNICODE.
  324. * 打开服务器文件 编码是unicode
  325. OPEN DATASET w_path FOR OUTPUT IN TEXT MODE ENCODING UTF-.
  326. * 打开成功
  327. IF sy-subrc = .
  328. * 读取
  329. PERFORM frm_write_txt.
  330. * 关闭 DATASET
  331. TRY.
  332. CLOSE DATASET w_path.
  333. IF sy-subrc <> .
  334. * 文件名 &1 &2 &3 操作出错
  335. MESSAGE s001() WITH 'File name' w_filename cos_close 'operate Error' INTO iw_errlog-str. "Linda 20141119
  336. ELSE.
  337. * 导出成功
  338. MESSAGE s001() WITH 'Output successful' INTO iw_errlog-str.
  339. ENDIF.
  340. CATCH cx_root. "#EC CATCH_ALL
  341. MESSAGE s001() WITH 'File name' w_filename cos_close 'operate Error' INTO iw_errlog-str. "Linda 20141119
  342. CLEANUP.
  343. ENDTRY.
  344. ELSE.
  345. * 文件名 &1 &2 &3 操作出错
  346. MESSAGE s001() WITH 'File name' w_filename cos_open 'operate Error' INTO iw_errlog-str. "Linda 20141119
  347. ENDIF.
  348. APPEND iw_errlog TO it_errlog.
  349. CLEAR:w_filename,
  350. w_path.
  351. ENDFORM. " frm_transfer_sever
  352. *&---------------------------------------------------------------------*
  353. *& Form frm_transfer_loc
  354. *&---------------------------------------------------------------------*
  355. * text
  356. *----------------------------------------------------------------------*
  357. * -->p1 text
  358. * <--p2 text
  359. *----------------------------------------------------------------------*
  360. FORM frm_transfer_loc.
  361. DATA:lw_file TYPE string.
  362. * 拼接download数据
  363. LOOP AT it_blitems INTO iw_blitems.
  364. PERFORM frm_con_string USING iw_blitems
  365. CHANGING iw_out-txt.
  366. APPEND iw_out TO it_out.
  367. CLEAR: iw_blitems,iw_out.
  368. ENDLOOP.
  369. lw_file = p_path.
  370.  
  371. CALL FUNCTION 'GUI_DOWNLOAD'
  372. EXPORTING
  373. filename = lw_file "string
  374. filetype = 'ASC'
  375. codepage = '' "4110 是utf-8
  376. write_bom = 'X'
  377. TABLES
  378. data_tab = it_out
  379. EXCEPTIONS
  380. file_write_error =
  381. no_batch =
  382. gui_refuse_filetransfer =
  383. invalid_type =
  384. no_authority =
  385. unknown_error =
  386. header_not_allowed =
  387. separator_not_allowed =
  388. filesize_not_allowed =
  389. header_too_long =
  390. dp_error_create =
  391. dp_error_send =
  392. dp_error_write =
  393. unknown_dp_error =
  394. access_denied =
  395. dp_out_of_memory =
  396. disk_full =
  397. dp_timeout =
  398. file_not_found =
  399. dataprovider_exception =
  400. control_flush_error =
  401. OTHERS = .
  402. IF sy-subrc <> .
  403. MESSAGE ID sy-msgid TYPE 'S' NUMBER sy-msgno
  404. DISPLAY LIKE 'E'
  405. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  406. ELSE.
  407. iw_errlog-str = 'Output success.'().
  408. APPEND iw_errlog TO it_errlog.
  409. ENDIF.
  410. ENDFORM. " frm_transfer_loc
  411. *&---------------------------------------------------------------------*
  412. *& Form frm_save_file
  413. *&---------------------------------------------------------------------*
  414. * text
  415. *----------------------------------------------------------------------*
  416. * <--f_path text
  417. *----------------------------------------------------------------------*
  418. FORM frm_save_file CHANGING f_path TYPE file_table-filename.
  419. DATA: lw_fname TYPE string,
  420. lw_path TYPE string,
  421. lw_fpath TYPE string.
  422.  
  423. CALL METHOD cl_gui_frontend_services=>file_save_dialog
  424. EXPORTING
  425. file_filter = w_filter
  426. CHANGING
  427. filename = lw_fname
  428. path = lw_path
  429. fullpath = lw_fpath
  430. EXCEPTIONS
  431. cntl_error =
  432. error_no_gui =
  433. not_supported_by_gui =
  434. OTHERS = .
  435. IF sy-subrc <> .
  436. MESSAGE ID sy-msgid TYPE 'E' NUMBER sy-msgno
  437. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  438. ENDIF.
  439. f_path = lw_fpath.
  440.  
  441. ENDFORM. " frm_save_file
  442. *&---------------------------------------------------------------------*
  443. *& Form frm_con_string
  444. *&---------------------------------------------------------------------*
  445. * text
  446. *----------------------------------------------------------------------*
  447. * -->piw_blitem text
  448. * <--pw_txt text
  449. *----------------------------------------------------------------------*
  450. FORM frm_con_string USING piw_blitem TYPE zc0000sdt0016
  451. CHANGING pw_txt TYPE string.
  452. DATA: lw_temp TYPE char1024.
  453. FIELD-SYMBOLS: <fs_temp> TYPE ANY.
  454. DO.
  455. ASSIGN COMPONENT sy-index OF STRUCTURE piw_blitem TO <fs_temp>.
  456. IF sy-subrc <> .
  457. EXIT.
  458. ENDIF.
  459. CLEAR lw_temp.
  460. lw_temp = <fs_temp>.
  461. * 去空格
  462. SHIFT lw_temp LEFT DELETING LEADING space.
  463.  
  464. IF sy-index = .
  465. pw_txt = lw_temp.
  466. ELSE.
  467. IF p_check3 = 'X'. "Linda 20141120 add
  468. CONCATENATE pw_txt cl_abap_char_utilities=>horizontal_tab lw_temp
  469. INTO pw_txt.
  470.  
  471. ELSEIF p_check4 = 'X'.
  472. CONCATENATE pw_txt cos_comma lw_temp "Linda 20141120 add
  473. INTO pw_txt.
  474. * ELSE.
  475. * CONCATENATE pw_txt cos_comma lw_temp
  476. * INTO pw_txt.
  477. ENDIF.
  478. ENDIF.
  479. ENDDO.
  480. UNASSIGN <fs_temp>.
  481. ENDFORM. " frm_con_string
  482. *&---------------------------------------------------------------------*
  483. *& Form frm_write_txt
  484. *&---------------------------------------------------------------------*
  485. * text
  486. *----------------------------------------------------------------------*
  487. * --> p1 text
  488. * <-- p2 text
  489. *----------------------------------------------------------------------*
  490. FORM frm_write_txt .
  491. DATA:lw_out TYPE string.
  492. ** 上传数据头
  493. ** 捕获异常
  494. * TRY.
  495. ** 上传服务器
  496. * lw_out = LINES( it_blitems ).
  497. * CONCATENATE w_filename '#Record' lw_out
  498. * INTO lw_out.
  499. * CONDENSE lw_out.
  500. * TRANSFER lw_out TO w_path.
  501. ** 判断传输是否成功
  502. * IF sy-subrc <> 0.
  503. ** 文件名 &1 &2 &3 操作出错
  504. * MESSAGE s001(00) WITH 'File name' w_path cos_transfer 'operate error'.
  505. * ENDIF.
  506. * CATCH cx_root.
  507. * MESSAGE s001(00) WITH 'File name' w_path cos_transfer 'operate error'.
  508. * CLEANUP.
  509. * ENDTRY.
  510. * 上传数据
  511. LOOP AT it_blitems INTO iw_blitems.
  512.  
  513. PERFORM frm_con_string USING iw_blitems
  514. CHANGING lw_out.
  515. TRY.
  516. TRANSFER lw_out TO w_path.
  517. * 判断传输是否成功
  518. IF sy-subrc <> .
  519. * 文件名 &1 &2 &3 操作出错
  520. MESSAGE s001() WITH 'File name' w_path cos_transfer 'operate error'.
  521. ENDIF.
  522. CATCH cx_root.
  523. MESSAGE s001() WITH 'File name' w_path cos_transfer 'operate error'.
  524. CLEANUP.
  525. ENDTRY.
  526. CLEAR: iw_blitems,lw_out.
  527. ENDLOOP.
  528. ENDFORM. " frm_write_txt
  529. *&---------------------------------------------------------------------*
  530. *& Form frm_chang_data
  531. *&---------------------------------------------------------------------*
  532. * text
  533. *----------------------------------------------------------------------*
  534. * -->fw_data text
  535. * <--fw_budat text
  536. *----------------------------------------------------------------------*
  537. FORM frm_chang_data USING fw_data
  538. CHANGING fw_budat.
  539. DATA:l_today TYPE p0001-begda,
  540. lw_data TYPE t5a4a-dlydy,
  541. lw_calc TYPE p0001-begda.
  542. * lw_data2 LIKE sy-datum.
  543.  
  544. l_today = sy-datum.
  545. lw_data = fw_data.
  546. IF fw_data = .
  547. fw_budat = sy-datum.
  548. ELSEIF fw_data > .
  549. CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  550. EXPORTING
  551. date = l_today
  552. days = lw_data
  553. months =
  554. signum = '+'
  555. years =
  556. IMPORTING
  557. calc_date = lw_calc.
  558. fw_budat = lw_calc .
  559. ELSE.
  560. CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
  561. EXPORTING
  562. date = l_today
  563. days = lw_data
  564. months =
  565. signum = '-'
  566. years =
  567. IMPORTING
  568. calc_date = lw_calc.
  569.  
  570. fw_budat = lw_calc .
  571. ENDIF.
  572. ENDFORM. " frm_chang_data
  573. *&---------------------------------------------------------------------*
  574. *& Form frm_init
  575. *&---------------------------------------------------------------------*
  576. * text
  577. *----------------------------------------------------------------------*
  578. * --> p1 text
  579. * <-- p2 text
  580. *----------------------------------------------------------------------*
  581. FORM frm_init .
  582. * SELECT * FROM t001 INTO t001. "Linda 20141204 del
  583. * authority-check
  584. AUTHORITY-CHECK OBJECT 'F_BKPF_BUK'
  585. ID 'BUKRS' FIELD p_bukrs
  586. ID 'ACTVT' FIELD ''.
  587. IF sy-subrc <> .
  588. * You have no authorization for Company code
  589. MESSAGE e004(zp001) WITH p_bukrs.
  590. ENDIF.
  591. * ENDSELECT. "Linda 20141204 del
  592.  
  593. ENDFORM. " frm_init
  594. **{ Insert started by Linda on 06-Jan-2015 - CR0001
  595. *&---------------------------------------------------------------------*
  596. *& Form FRM_MODIFY_BLITEMS
  597. *&---------------------------------------------------------------------*
  598. * text
  599. *----------------------------------------------------------------------*
  600. * --> p1 text
  601. * <-- p2 text
  602. *----------------------------------------------------------------------*
  603. FORM frm_modify_blitems .
  604. DATA:lw_blitems TYPE zc0000sdt0016.
  605. LOOP AT it_blitems INTO lw_blitems.
  606. CALL FUNCTION 'CONVERSION_EXIT_CUNIT_OUTPUT'
  607. EXPORTING
  608. input = lw_blitems-vrkme
  609. language = sy-langu
  610. IMPORTING
  611. * LONG_TEXT =
  612. output = lw_blitems-vrkme
  613. * SHORT_TEXT =
  614. * EXCEPTIONS
  615. * UNIT_NOT_FOUND = 1
  616. * OTHERS = 2
  617. .
  618. IF sy-subrc <> .
  619. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  620. * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  621. ENDIF.
  622.  
  623. MODIFY it_blitems FROM lw_blitems TRANSPORTING vrkme.
  624. ENDLOOP.
  625.  
  626. ENDFORM. " FRM_MODIFY_BLITEMS

发票号码回传程序

  1. REPORT zc0000sdr0017 NO STANDARD PAGE HEADING
  2. LINE-COUNT
  3. LINE-SIZE .
  4. TYPE-POOLS: icon,slis,kcdu,tpit.
  5. TABLES: sscrfields,
  6. zc0000sdt0020.
  7. *----------------------------------------------------------------------*
  8. * type define
  9. *----------------------------------------------------------------------*
  10. TYPES: ty_dir_list TYPE STANDARD TABLE OF salfldir,
  11. BEGIN OF ty_dir,
  12. name TYPE pfeflname,
  13. size TYPE pfeflsize,
  14. name2 TYPE pfeflname,
  15. END OF ty_dir,
  16. BEGIN OF ty_tabl,
  17. line(),
  18. END OF ty_tabl,
  19. BEGIN OF ty_vbeln,
  20. vbeln TYPE vbrk-vbeln,
  21. fkart TYPE vbrk-fkart,
  22. kunrg TYPE vbrk-kunrg,
  23. bukrs TYPE vbrk-bukrs,
  24. fkdat TYPE vbrk-fkdat,
  25. xblnr TYPE xblnr,
  26. gjahr TYPE gjahr,
  27. bktxt TYPE bktxt, "linda 20140918
  28. zline TYPE i, "bseg table lines "Linda 20141023
  29. END OF ty_vbeln,
  30. BEGIN OF ty_vbrk,
  31. vbeln TYPE vbrk-vbeln,
  32. bukrs TYPE vbrk-bukrs,
  33. gjahr TYPE vbrk-gjahr,
  34. xblnr TYPE vbrk-xblnr,
  35. fkdat TYPE vbrk-fkdat,
  36. END OF ty_vbrk,
  37. * add local file read begin
  38. BEGIN OF ty_row,
  39. field TYPE char40,
  40. END OF ty_row,
  41. * add local file read end
  42. BEGIN OF ty_errlog, "Linda 20141120 add
  43. str() TYPE c, "Linda 20141120 add
  44. END OF ty_errlog. "Linda 20141120 add
  45. *----------------------------------------------------------------------*
  46. * Internal Tables define
  47. *----------------------------------------------------------------------*
  48. DATA: it_file TYPE ty_dir_list,
  49. it_file2 TYPE STANDARD TABLE OF ty_dir,
  50. it_errtab TYPE tpit_t_errdoc,
  51. it_buztab TYPE TABLE OF tpit_buztab,
  52. it_fldtab TYPE tpit_t_fname,
  53. it_tabl TYPE STANDARD TABLE OF ty_tabl WITH HEADER LINE,
  54. it_errlog TYPE STANDARD TABLE OF zc0000sdt0020,
  55. it_errlog2 TYPE STANDARD TABLE OF ty_errlog, "Linda 20141120 add
  56. it_fieldcat TYPE slis_t_fieldcat_alv,
  57. it_bseg TYPE STANDARD TABLE OF bseg." Linda 20141024 add
  58. *&---------------------------------------------------------------------*
  59. * Workarea define
  60. *&---------------------------------------------------------------------*
  61. DATA: iw_file TYPE salfldir,
  62. iw_file2 TYPE ty_dir,
  63. iw_ins TYPE ty_vbeln,
  64. iw_vbrk TYPE ty_vbrk,
  65. iw_err TYPE zc0000sdt0020,
  66. iw_errlog TYPE ty_errlog, "Linda 20141120 add
  67. iw_bseg TYPE bseg.
  68. *----------------------------------------------------------------------*
  69. * Global Variables
  70. *----------------------------------------------------------------------*
  71. DATA :w_ret TYPE char1,
  72. w_cmd() TYPE c,
  73. w_date TYPE sy-datum,
  74. w_time TYPE char6,
  75. w_read_file TYPE salfile-longname,
  76. functxt TYPE smp_dyntxt,
  77. ok_code TYPE sy-ucomm,
  78. w_repid TYPE sy-repid,
  79. w_str() TYPE c,
  80. putdahigh TYPE zc0000sdt0020-putda,
  81. puttihigh TYPE zc0000sdt0020-putti,
  82. vbelnhigh TYPE zc0000sdt0020-vbeln,
  83. xblnrhigh TYPE zc0000sdt0020-xblnr,
  84. w_file_path TYPE string,
  85. w_lfile TYPE string, "file name
  86. w_row_num TYPE char4,
  87. w_msg_txt TYPE string.
  88. *----------------------------------------------------------------------*
  89. * Constants define
  90. *----------------------------------------------------------------------*
  91. CONSTANTS: cos_star2() TYPE c VALUE '*.*',
  92. cos_2() TYPE c VALUE '',
  93. cos_1() TYPE c VALUE '',
  94. cos_numc() TYPE c VALUE 'NUMC'.
  95.  
  96. SELECTION-SCREEN: FUNCTION KEY .
  97. SELECTION-SCREEN BEGIN OF LINE.
  98. PARAMETER p_check2 TYPE c RADIOBUTTON GROUP rads DEFAULT 'X'.
  99. SELECTION-SCREEN COMMENT () text-c02 FOR FIELD p_check2."导出到服务器
  100. SELECTION-SCREEN END OF LINE.
  101. SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.
  102. PARAMETERS: p_fpath() TYPE c DEFAULT 'g:\r3ftp\formware\writeback\nonprocess\',"need edit D:\usr\sap\put\Inbound\Nonprocess\
  103. p_bpath(1024) TYPE c DEFAULT 'g:\r3ftp\formware\writeback\bak\'." D:\usr\sap\put\Inbound\Backup\
  104. SELECTION-SCREEN END OF BLOCK b1.
  105. SELECTION-SCREEN BEGIN OF LINE.
  106. PARAMETER p_check1 RADIOBUTTON GROUP rads.
  107. SELECTION-SCREEN COMMENT 4(20) text-c01 FOR FIELD p_check1."导出到本地
  108. SELECTION-SCREEN END OF LINE.
  109. SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-t01.
  110. PARAMETERS: p_flpath(1024) TYPE c DEFAULT ''."need edit D:\usr\sap\put\Inbound\Nonprocess\
  111. * p_blpath(1024) TYPE c DEFAULT 'D:\Backup\'." D:\usr\sap\put\Inbound\Backup\
  112. SELECTION-SCREEN END OF BLOCK b2.
  113. *----------------------------------------------------------------------*
  114. * INITIALIZATION.
  115. *----------------------------------------------------------------------*
  116. INITIALIZATION.
  117. functxt-icon_id = icon_biw_info_catalog.
  118. functxt-icon_text = 'ERROR LOG'.
  119. sscrfields-functxt_01 = functxt.
  120. *----------------------------------------------------------------------*
  121. * AT SELECTION-SCREEN ON VALUE-REQUEST
  122. *----------------------------------------------------------------------*
  123. AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_flpath.
  124. PERFORM form_get_file_path_upload.
  125. *----------------------------------------------------------------------*
  126. * START-OF-SELECTION
  127. *----------------------------------------------------------------------*
  128. START-OF-SELECTION.
  129. w_date = sy-datum.
  130. w_time = sy-uzeit.
  131. * file process
  132. IF p_check2 IS NOT INITIAL.
  133. PERFORM frm_file_process.
  134. ELSE.
  135. * local
  136. PERFORM frm_file_process_local.
  137. ENDIF.
  138. *----------------------------------------------------------------------*
  139. * AT SELECTION-SCREEN
  140. *----------------------------------------------------------------------*
  141. AT SELECTION-SCREEN.
  142. IF sy-ucomm = 'ONLI'.
  143. IF p_flpath IS INITIAL AND p_check1 = 'X'.
  144. MESSAGE e001(00) WITH 'local path can not be init'(001).
  145. SET CURSOR FIELD 'P_FLPATH'.
  146. ENDIF.
  147. ENDIF.
  148. CASE sscrfields-ucomm.
  149. WHEN 'FC01'.
  150. CALL SCREEN 9000.
  151. WHEN OTHERS.
  152. ...
  153. ENDCASE.
  154. *----------------------------------------------------------------------*
  155. * END-OF-SELECTION
  156. *----------------------------------------------------------------------*
  157. END-OF-SELECTION.
  158. IF w_ret = 'X'.
  159. IF it_errlog IS INITIAL.
  160. WRITE: /1 'Write back fail,please see error log.'(014).
  161. ELSE.
  162. LOOP AT it_errlog INTO iw_errlog."
  163. WRITE: /1 iw_errlog-str.
  164. ENDLOOP.
  165. ENDIF.
  166. ELSE.
  167. WRITE: /1 'Write back success'(012).
  168. ENDIF.
  169. CLEAR:it_errlog,iw_errlog.
  170. *----------------------------------------------------------------------*
  171. * 子程序名称 :文件处理
  172. * 子程序名 frm_file_process
  173. * 概要 :文件处理
  174. * 参数 :无
  175. * 返回值 :无
  176. *----------------------------------------------------------------------*
  177. FORM frm_file_process.
  178. DATA: lw_path TYPE salfile-longname,
  179. w_cmd1 TYPE string.
  180. * Nonprocess路径名组成
  181. CLEAR lw_path.
  182. lw_path = p_fpath.
  183. * 取得目录中的内容
  184. PERFORM frm_read_directory TABLES it_file
  185. USING lw_path
  186. CHANGING w_ret.
  187. IF w_ret = space.
  188. * 把文件夹Nonprocess下的文件复制到文件夹Backup
  189.  
  190. **{ Insert started by ZhouTing on 25-Jan-2015 - CR0010
  191.  
  192. ** begin of comment by zhou ting
  193. ** to use open dataset instead
  194. *
  195. ** 这是在Linux系统下用的
  196. ** CONCATENATE p_fpath cos_nonprocess cos_star2 "#EC NOTEXT
  197. ** INTO w_cmd1.
  198. ** 这是在windows系统下用的
  199. * CONCATENATE p_fpath cos_star2 "#EC NOTEXT
  200. * INTO w_cmd1.
  201. *
  202. ** 这是在Linux系统下用的 "need be edited
  203. ** CONCATENATE 'cp' w_cmd1 p_bpath INTO w_cmd SEPARATED BY space.
  204. ** 这是在windows系统下用的
  205. * CONCATENATE 'copy' w_cmd1 p_bpath INTO w_cmd SEPARATED BY space.
  206. ***{ Insert started by Linda on 06-Jan-2015 - CR0010
  207. * TRY.
  208. ***{ Insert ended by Linda on 06-Jan-2015 - CR0010
  209. * CALL 'SYSTEM' ID 'COMMAND' FIELD w_cmd
  210. * ID 'TAB' FIELD it_tabl-*sys*.
  211. *
  212. * IF sy-subrc <> 0.
  213. * CONCATENATE 'Move file fail'(013) p_bpath INTO iw_errlog-str.
  214. * APPEND iw_errlog TO it_errlog2.
  215. * w_ret = 'X'.
  216. * ENDIF.
  217. ***{ Insert started by Linda on 06-Jan-2015 - CR0010
  218. * CATCH cx_root.
  219. * CONCATENATE 'Move file fail'(013) p_bpath INTO iw_errlog-str.
  220. * APPEND iw_errlog TO it_errlog2.
  221. * w_ret = 'X'.
  222. * ENDTRY.
  223. ***{ Insert ended by Linda on 06-Jan-2015 - CR0010
  224. ** end of comment.
  225.  
  226. PERFORM frm_copy_file USING p_fpath p_bpath it_file
  227. CHANGING w_ret.
  228. IF w_ret <> 0.
  229. CONCATENATE 'Move file fail'(013) p_bpath INTO iw_errlog-str.
  230. APPEND iw_errlog TO it_errlog2.
  231. w_ret = 'X'.
  232. ENDIF.
  233.  
  234. **{ Insert ended by ZhouTing on 25-Jan-2015 - CR0010
  235.  
  236. * 文件数据传送接口表
  237.  
  238. PERFORM frm_transfer_data USING lw_path
  239. CHANGING w_ret.
  240. ENDIF.
  241.  
  242. ENDFORM. " FRM_file_process
  243. *----------------------------------------------------------------------*
  244. * 子程序名称 :取得目录中的内容
  245. * 子程序名 frm_read_directory
  246. * 概要 :取得目录中的内容
  247. * 参数 fit_dir_bukrs type ty_dir_list 取得的目录列表
  248. * f_dir_path type salfile-longname 目录路径
  249. * 返回值 f_ret type c 正常取得:space 未取得:'' 异常:''
  250. *----------------------------------------------------------------------*
  251. FORM frm_read_directory TABLES fit_dir TYPE ty_dir_list
  252. USING f_dir_path TYPE salfile-longname
  253. CHANGING f_ret TYPE c.
  254. DATA: lw_lines TYPE i.
  255.  
  256. CLEAR f_ret.
  257. REFRESH fit_dir.
  258. CALL FUNCTION 'RZL_READ_DIR_LOCAL'
  259. EXPORTING
  260. name = f_dir_path
  261. TABLES
  262. file_tbl = fit_dir
  263. EXCEPTIONS
  264. argument_error = 1
  265. not_found = 2
  266. OTHERS = 3.
  267.  
  268. IF sy-subrc <> 0.
  269. f_ret = cos_2.
  270. RETURN.
  271. ENDIF.
  272.  
  273. lw_lines = LINES( fit_dir ).
  274. IF lw_lines < 3.
  275. f_ret = cos_1.
  276. ENDIF.
  277. ENDFORM. " frm_read_directory
  278. *----------------------------------------------------------------------*
  279. * 子程序名称 :数据传输处理
  280. * 子程序名 :frm_copy_file
  281. * 概要 :把需处理的文件拷贝到bak目录下
  282. * 参数 :i_frompath 目录路径
  283. * i_topath 目录路径
  284. * 返回值 :o_ret 正常:space 异常:''
  285. *----------------------------------------------------------------------*
  286. FORM frm_copy_file USING i_frompath
  287. i_topath
  288. i_filelist TYPE ty_dir_list
  289. CHANGING o_ret.
  290.  
  291. DATA: from_file TYPE string,
  292. to_file TYPE string,
  293. lt_file_content TYPE TABLE OF string,
  294. lv_text TYPE string,
  295. ls_filelist TYPE salfldir.
  296.  
  297. LOOP AT i_filelist FROM 3 INTO ls_filelist.
  298.  
  299. REFRESH lt_file_content.
  300.  
  301. "源文件路径+文件名
  302. CONCATENATE i_frompath ls_filelist-name INTO from_file.
  303. "目标文件路径+文件名
  304. CONCATENATE i_topath ls_filelist-name INTO to_file.
  305.  
  306. "把源文件内容保存进内表
  307. OPEN DATASET from_file FOR INPUT IN TEXT MODE
  308. ENCODING NON-UNICODE
  309. IGNORING CONVERSION ERRORS.
  310. IF sy-subrc NE 0.
  311. o_ret = 4.
  312. EXIT.
  313. ENDIF.
  314. DO.
  315. READ DATASET from_file INTO lv_text.
  316. IF sy-subrc NE 0.
  317. EXIT.
  318. ENDIF.
  319. APPEND lv_text TO lt_file_content.
  320. ENDDO.
  321.  
  322. CLOSE DATASET from_file.
  323.  
  324. "把源文件内容从系统内表中写入目标文件中
  325. OPEN DATASET to_file FOR OUTPUT IN TEXT MODE
  326. ENCODING NON-UNICODE
  327. IGNORING CONVERSION ERRORS.
  328.  
  329. IF sy-subrc NE 0.
  330. o_ret = 4.
  331. EXIT.
  332. ENDIF.
  333. LOOP AT lt_file_content INTO lv_text.
  334. TRANSFER lv_text TO to_file.
  335. ENDLOOP.
  336. CLOSE DATASET to_file.
  337.  
  338. ENDLOOP.
  339.  
  340. ENDFORM. "frm_copy_file
  341. *----------------------------------------------------------------------*
  342. * 子程序名称 :数据传输处理
  343. * 子程序名 frm_transfer_data
  344. * 概要 :文件数据传送接口表
  345. * 参数 f_path type salfile-longname 目录路径
  346. * 返回值 :无
  347. *----------------------------------------------------------------------*
  348. FORM frm_transfer_data USING f_path TYPE salfile-longname
  349. CHANGING lw_ret.
  350. DATA: lw_loopc TYPE sy-index,
  351. lw_text(2048) TYPE c,
  352. * lw_ret(1) TYPE c,
  353. lw_zwrit TYPE i,
  354. lw_lines TYPE i,
  355. lw_len TYPE i.
  356.  
  357. * 处理文件名排序的问题
  358. SORT it_file BY name DESCENDING.
  359. lw_lines = LINES( it_file ).
  360. lw_lines = lw_lines - 1.
  361. * 删除无用的2
  362. DELETE it_file FROM lw_lines.
  363. * it_file 取数添加到it_file2
  364.  
  365. LOOP AT it_file INTO iw_file.
  366. MOVE-CORRESPONDING iw_file TO iw_file2.
  367.  
  368. lw_len = STRLEN( iw_file-name ) - 18.
  369.  
  370. SHIFT iw_file-name BY lw_len PLACES LEFT.
  371. iw_file2-name2 = iw_file-name+0(14).
  372. APPEND iw_file2 TO it_file2.
  373. CLEAR:lw_len,iw_file2.
  374. ENDLOOP.
  375.  
  376. CLEAR iw_file.
  377. * 按文件生成时间排序
  378. SORT it_file2 BY name2.
  379. LOOP AT it_file2 INTO iw_file2.
  380. * 文件路径组
  381. CLEAR w_read_file.
  382. CONCATENATE f_path iw_file2-name INTO w_read_file.
  383. * 打开文件
  384. OPEN DATASET w_read_file FOR INPUT
  385. IN TEXT MODE ENCODING NON-UNICODE.
  386. IF sy-subrc <> 0.
  387. EXIT.
  388. ENDIF.
  389. DO.
  390. lw_loopc = sy-index.
  391. TRY.
  392. CLEAR lw_text.
  393. READ DATASET w_read_file INTO lw_text.
  394. CATCH cx_sy_conversion_codepage.
  395. CLOSE DATASET: w_read_file.
  396. EXIT.
  397. ENDTRY.
  398. * 空文件的情况下
  399. IF sy-subrc <> 0 AND lw_loopc = 1."lw_loopc = 2 带标题的文件
  400. PERFORM frm_get_errno CHANGING lw_zwrit.
  401. iw_err-zwrit = lw_zwrit.
  402. IF p_check1 = 'X'.
  403. iw_err-filen = w_lfile.
  404. ELSE.
  405. iw_err-filen = iw_file2-name.
  406. ENDIF.
  407. iw_err-errin = 'FILE NO DATA'(002).
  408. iw_err-putda = w_date.
  409. iw_err-putti = w_time.
  410. INSERT zc0000sdt0020 FROM iw_err.
  411. CLEAR:iw_err.
  412. lw_ret = 'X'.
  413. " EXIT.
  414. ELSEIF sy-subrc <> 0.
  415. **{ Insert started by ZhouTing on 30-Jan-2015 - CR0010
  416. "lw_ret = 'X'.
  417. **{ Insert ended by ZhouTing on 30-Jan-2015 - CR0010
  418. EXIT.
  419. ENDIF.
  420. * 第一行不是标题
  421. * IF lw_loopc = 1.
  422. * CONTINUE.
  423. * ENDIF.
  424. * 拆分数据并加入接口表
  425. * 0090036259 LR 0000300713 20140525 123456 3000
  426. * vbeln fkart 客户代码 金税号
  427. CHECK lw_ret IS INITIAL.
  428. PERFORM frm_separate_text USING lw_text
  429. CHANGING lw_ret.
  430. CHECK lw_ret IS INITIAL.
  431. PERFORM frm_writeback CHANGING lw_ret.
  432. ENDDO.
  433.  
  434. **{ Insert started by ZhouTing on 27-Jan-2015 - CR0010
  435. CLOSE DATASET w_read_file.
  436. **{ Insert ended by ZhouTing on 27-Jan-2015 - CR0010
  437.  
  438. DELETE DATASET w_read_file.
  439.  
  440. ENDLOOP.
  441. ENDFORM. " frm_transfer_data
  442. *----------------------------------------------------------------------*
  443. * 子程序名称 :拆分数据并加入接口表
  444. * 子程序名 frm_separate_text
  445. * 概要 :拆分数据并加入接口表
  446. * 参数 f_text type c 要拆分的数据
  447. * 返回值 :无
  448. *----------------------------------------------------------------------*
  449. FORM frm_separate_text USING f_text TYPE c
  450. CHANGING f_ret TYPE c.
  451. DATA: lw_value(100) TYPE c,
  452. lw_val(1024) TYPE c,
  453. lw_ret TYPE char1,
  454. lw_zwrit TYPE i.
  455. CLEAR f_ret.
  456. lw_val = f_text.
  457.  
  458. * Sys_Inv_No
  459. SPLIT lw_val AT cl_abap_char_utilities=>horizontal_tab
  460. INTO lw_value lw_val.
  461. IF lw_value = space.
  462. * 检查 发票号是否为空
  463. PERFORM frm_get_errno CHANGING lw_zwrit.
  464. iw_err-zwrit = lw_zwrit.
  465. IF p_check1 = 'X'.
  466. iw_err-filen = w_lfile.
  467. ELSE.
  468. iw_err-filen = iw_file2-name.
  469. ENDIF.
  470. iw_err-errin = 'INVOICENO IS EMPTY'(003).
  471. iw_err-vbeln = lw_value.
  472. iw_err-putda = w_date.
  473. iw_err-putti = w_time.
  474. INSERT zc0000sdt0020 FROM iw_err.
  475. CLEAR:iw_err.
  476. f_ret = 'X'.
  477. ELSE.
  478. * Sys_Inv_No检查
  479. PERFORM frm_numeric_check USING lw_value
  480. CHANGING lw_ret.
  481. IF lw_ret = 'X'.
  482. * 检查 发票是否为数字
  483. PERFORM frm_get_errno CHANGING lw_zwrit.
  484. iw_err-zwrit = lw_zwrit.
  485. IF p_check1 = 'X'.
  486. iw_err-filen = w_lfile.
  487. ELSE.
  488. iw_err-filen = iw_file2-name.
  489. ENDIF.
  490. iw_err-errin = 'INVOICENO IS NOT NUMBER'(004).
  491. iw_err-vbeln = lw_value.
  492. iw_err-putda = w_date.
  493. iw_err-putti = w_time.
  494. INSERT zc0000sdt0020 FROM iw_err.
  495. CLEAR:iw_err.
  496. f_ret = 'X'.
  497. ELSE.
  498. * 检查 发票存在性
  499. PERFORM frm_check_inv USING lw_value
  500. CHANGING lw_ret.
  501. IF lw_ret = 'X'.
  502. PERFORM frm_get_errno CHANGING lw_zwrit.
  503. iw_err-zwrit = lw_zwrit.
  504. IF p_check1 = 'X'.
  505. iw_err-filen = w_lfile.
  506. ELSE.
  507. iw_err-filen = iw_file2-name.
  508. ENDIF.
  509. iw_err-errin = 'INVOICENO IS NOT EXIST'(005).
  510. iw_err-vbeln = lw_value.
  511. iw_err-putda = w_date.
  512. iw_err-putti = w_time.
  513. INSERT zc0000sdt0020 FROM iw_err.
  514. CLEAR:iw_err.
  515. f_ret = 'X'.
  516. ELSEIF lw_val = space." 金税号 为空检查
  517. PERFORM frm_get_errno CHANGING lw_zwrit.
  518. iw_err-zwrit = lw_zwrit.
  519. IF p_check1 = 'X'.
  520. iw_err-filen = w_lfile.
  521. ELSE.
  522. iw_err-filen = iw_file2-name.
  523. ENDIF.
  524. iw_err-errin = 'JINSHUHAO IS EMPTY'(006).
  525. iw_err-vbeln = lw_value.
  526. iw_err-putda = w_date.
  527. iw_err-putti = w_time.
  528. INSERT zc0000sdt0020 FROM iw_err.
  529. CLEAR:iw_err.
  530. f_ret = 'X'.
  531. ELSE.
  532. iw_ins-vbeln = lw_value. "保存 数据
  533. * fkart
  534. CLEAR lw_value.
  535. SPLIT lw_val AT cl_abap_char_utilities=>horizontal_tab
  536. INTO lw_value lw_val.
  537. iw_ins-fkart = lw_value. "保存 数据
  538.  
  539. *kunrg
  540. CLEAR lw_value.
  541. SPLIT lw_val AT cl_abap_char_utilities=>horizontal_tab
  542. INTO lw_value lw_val.
  543. iw_ins-kunrg = lw_value. "保存 数据
  544. * Year
  545. IF lw_val = space." 年度 为空检查
  546. PERFORM frm_get_errno CHANGING lw_zwrit.
  547. iw_err-zwrit = lw_zwrit.
  548. IF p_check1 = 'X'.
  549. iw_err-filen = w_lfile.
  550. ELSE.
  551. iw_err-filen = iw_file2-name.
  552. ENDIF.
  553. iw_err-errin = 'YEAR IS EMPTY'(007).
  554. iw_err-vbeln = lw_value.
  555. iw_err-putda = w_date.
  556. iw_err-putti = w_time.
  557. INSERT zc0000sdt0020 FROM iw_err.
  558. CLEAR:iw_err.
  559. f_ret = 'X'.
  560. ELSE.
  561. CLEAR lw_value.
  562. SPLIT lw_val AT cl_abap_char_utilities=>horizontal_tab
  563. INTO lw_value lw_val.
  564. iw_ins-gjahr = lw_value+0(4). "保存 数据
  565. *linda 20140806
  566. iw_ins-fkdat = lw_value. "保存 数据
  567. ENDIF.
  568. * VAT_Inv_No
  569. CLEAR lw_value.
  570. SPLIT lw_val AT cl_abap_char_utilities=>horizontal_tab
  571. INTO lw_value lw_val.
  572. iw_ins-xblnr = lw_value. "保存 数据
  573. iw_ins-bktxt = lw_value."Linda 20140918
  574. * bukrs
  575. CLEAR lw_value.
  576. SPLIT lw_val AT cl_abap_char_utilities=>horizontal_tab
  577. INTO lw_value lw_val.
  578. iw_ins-bukrs = lw_value. "保存 数据
  579. ENDIF.
  580. ENDIF.
  581. ENDIF.
  582. ENDFORM. " frm_separate_text
  583. *Sys_Inv_No VAT_Inv_No VAT Issue_date Total_Amount
  584. *0090035243 12345654321 2005-08-10 8
  585. *----------------------------------------------------------------------*
  586. * 子程序名称 :数据类型检查
  587. * 子程序名 :frm_numeric_check
  588. * 概要 :数据类型检查
  589. * 参数 :f_val TYPE c 要检查的数据
  590. * 返回值 :f_ret TYPE c 正常:space 出错:'X'
  591. *----------------------------------------------------------------------*
  592. FORM frm_numeric_check USING f_val TYPE c
  593. CHANGING f_ret TYPE c.
  594. DATA: lw_type TYPE dd01v-datatype.
  595.  
  596. CHECK f_val <> space.
  597. CLEAR f_ret.
  598. CALL FUNCTION 'NUMERIC_CHECK'
  599. EXPORTING
  600. string_in = f_val
  601. IMPORTING
  602. htype = lw_type.
  603. IF lw_type <> cos_numc.
  604. f_ret = 'X'.
  605. ENDIF.
  606. ENDFORM. " frm_numeric_check
  607.  
  608. *&---------------------------------------------------------------------*
  609. *& Form frm_get_errno
  610. *&---------------------------------------------------------------------*
  611. * text
  612. *----------------------------------------------------------------------*
  613. * <--P_LW_ZWRIT text
  614. *----------------------------------------------------------------------*
  615. FORM frm_get_errno CHANGING f_zwrit TYPE i.
  616. CALL FUNCTION 'NUMBER_GET_NEXT'
  617. EXPORTING
  618. nr_range_nr = '' "snro
  619. object = 'ZWRITEBACK' "snro object "be edit
  620. IMPORTING
  621. number = f_zwrit "所得到的号码
  622. EXCEPTIONS
  623. interval_not_found = 1
  624. number_range_not_intern = 2
  625. object_not_found = 3
  626. quantity_is_0 = 4
  627. quantity_is_not_1 = 5
  628. interval_overflow = 6
  629. buffer_overflow = 7
  630. OTHERS = 8.
  631. IF sy-subrc <> 0.
  632. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  633. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO iw_errlog-str.
  634. APPEND iw_errlog TO it_errlog2.
  635. ENDIF.
  636.  
  637. ENDFORM. " frm_get_errno
  638. *&---------------------------------------------------------------------*
  639. *& Form FRM_CHECK_INV
  640. *&---------------------------------------------------------------------*
  641. * text
  642. *----------------------------------------------------------------------*
  643. * -->f_vbeln text
  644. * <--f_ret text
  645. *----------------------------------------------------------------------*
  646. FORM frm_check_inv USING f_vbeln
  647. CHANGING f_ret.
  648. DATA:lw_count TYPE i.
  649. SELECT COUNT(*)
  650. INTO lw_count
  651. FROM vbrk "(Reference Document Number)
  652. WHERE vbeln = f_vbeln . "Billing Document
  653. IF sy-subrc = 4.
  654. f_ret = 'X'.
  655. ENDIF.
  656. ENDFORM. " FRM_CHECK_INV
  657. *&---------------------------------------------------------------------*
  658. *& Form frm_writeback
  659. *&---------------------------------------------------------------------*
  660. * text
  661. *----------------------------------------------------------------------*
  662. * -->fw_ret text
  663. *----------------------------------------------------------------------*
  664. FORM frm_writeback CHANGING fw_ret.
  665. DATA:lw_zwrit TYPE i,
  666. lw_count TYPE i,
  667. lw_bktxt TYPE bktxt, "linda 20140916
  668. lw_belnr TYPE bkpf-belnr,
  669. lw_gjahr TYPE char4.
  670. *Select IsExist Invoice
  671. SELECT SINGLE vbeln
  672. bukrs
  673. gjahr
  674. xblnr
  675. fkdat
  676. INTO iw_vbrk
  677. FROM vbrk "(Reference Document Number)
  678. WHERE vbeln = iw_ins-vbeln. "Billing Document
  679. IF iw_vbrk-xblnr <> iw_ins-xblnr.
  680. * 将发票号更新到发票 BKPF-XBLNR(Reference Document Number)
  681. PERFORM frm_vbrk_xblnr USING iw_ins-xblnr
  682. iw_ins-vbeln.
  683. IF w_msg_txt IS NOT INITIAL.
  684. PERFORM frm_get_errno CHANGING lw_zwrit.
  685. iw_err-zwrit = lw_zwrit.
  686. IF p_check1 = 'X'.
  687. iw_err-filen = w_lfile.
  688. ELSE.
  689. iw_err-filen = iw_file2-name.
  690. ENDIF.
  691. iw_err-errin = 'UPDATA VBRK FAIL'(008).
  692. iw_err-vbeln = iw_ins-vbeln.
  693. iw_err-xblnr = iw_ins-xblnr.
  694. iw_err-putda = w_date.
  695. iw_err-putti = w_time.
  696. INSERT zc0000sdt0020 FROM iw_err.
  697. CLEAR:iw_err,w_msg_txt.
  698. fw_ret = 'X'.
  699. ENDIF.
  700. ENDIF.
  701. CHECK fw_ret IS INITIAL.
  702. SELECT SINGLE belnr bktxt "Linda 20140916 xblnr
  703. INTO (lw_belnr,lw_bktxt) "Linda 20140916lw_xblnr
  704. FROM bkpf
  705. WHERE bukrs = iw_vbrk-bukrs
  706. AND awkey = iw_ins-vbeln "BKPF-AWKEY(Reference Key)
  707. AND gjahr = iw_vbrk-fkdat+0(4).
  708.  
  709. IF lw_bktxt <> iw_ins-bktxt.
  710. lw_gjahr = iw_vbrk-fkdat+0(4).
  711. IF lw_belnr IS INITIAL.
  712. PERFORM frm_get_errno CHANGING lw_zwrit.
  713. iw_err-zwrit = lw_zwrit.
  714. IF p_check1 = 'X'.
  715. iw_err-filen = w_lfile.
  716. ELSE.
  717. iw_err-filen = iw_file2-name.
  718. ENDIF.
  719. iw_err-errin = 'Invoice Is Empty'(009).
  720. iw_err-vbeln = iw_ins-vbeln.
  721. iw_err-xblnr = iw_ins-xblnr.
  722. iw_err-putda = w_date.
  723. iw_err-putti = w_time.
  724. INSERT zc0000sdt0020 FROM iw_err.
  725. CLEAR:iw_err,w_msg_txt.
  726. fw_ret = 'X'.
  727. ELSE.
  728. * 将发票号更新到凭证BKPF中的BKPF-XBLNR(Reference Document Number)
  729. * update the GTS No.# to BKPF-XBLNR(Reference Document Number)
  730. * 2 reason:1>.要调用的function 用到了bseg这个结构;
  731. * Call function "'Z_FI_ITEMS_MASS_CHANGE'" using BSEG as import structure
  732. * 2>使用的频率不高,11次,每次XX 条,所以即使写成 select * 也对性能影响不大
  733. * The call frequence will be weekly, and the volume is limited, thus should the performance impact is restricted.
  734. SELECT *
  735. INTO TABLE it_bseg
  736. FROM bseg
  737. WHERE bukrs = iw_vbrk-bukrs
  738. AND belnr = lw_belnr
  739. AND gjahr = lw_gjahr.
  740.  
  741. PERFORM frm_bseg_sgtxt USING iw_ins.
  742. IF w_msg_txt IS NOT INITIAL.
  743. PERFORM frm_get_errno CHANGING lw_zwrit.
  744. iw_err-zwrit = lw_zwrit.
  745. IF p_check1 = 'X'.
  746. iw_err-filen = w_lfile.
  747. ELSE.
  748. iw_err-filen = iw_file2-name.
  749. ENDIF.
  750. iw_err-errin = 'BDC update fail'(010).
  751. iw_err-vbeln = iw_ins-vbeln.
  752. iw_err-xblnr = iw_ins-xblnr.
  753. iw_err-putda = w_date.
  754. iw_err-putti = w_time.
  755. INSERT zc0000sdt0020 FROM iw_err.
  756. CLEAR:iw_err,w_msg_txt.
  757. fw_ret = 'X'.
  758. ENDIF.
  759.  
  760. ENDIF.
  761. ENDIF.
  762. CHECK fw_ret IS INITIAL.
  763. SELECT COUNT(*)
  764. FROM zc0000sdt0020
  765. INTO lw_count
  766. WHERE vbeln = iw_ins-vbeln.
  767. IF lw_count > 1.
  768. DELETE FROM zc0000sdt0020 WHERE vbeln = iw_ins-vbeln.
  769. IF sy-subrc = 0.
  770. COMMIT WORK AND WAIT.
  771. ELSE.
  772. ROLLBACK WORK.
  773. ENDIF.
  774. ENDIF.
  775. CLEAR:it_bseg.
  776. ENDFORM. " frm_writeback
  777. *&---------------------------------------------------------------------*
  778. *& Module STATUS_9000 OUTPUT
  779. *&---------------------------------------------------------------------*
  780. * text
  781. *----------------------------------------------------------------------*
  782. MODULE status_9000 OUTPUT.
  783. SET PF-STATUS ''.
  784. SET TITLEBAR 'ERROR LOG SEARCH'.
  785.  
  786. ENDMODULE. " STATUS_9000 OUTPUT
  787. *&---------------------------------------------------------------------*
  788. *& Module USER_COMMAND_9000 INPUT
  789. *&---------------------------------------------------------------------*
  790. * text
  791. *----------------------------------------------------------------------*
  792. MODULE user_command_9000 INPUT.
  793. CASE ok_code.
  794. WHEN 'EXECUTE'.
  795. PERFORM frm_data_select.
  796.  
  797. IF it_errlog IS INITIAL.
  798. MESSAGE e001(00) WITH 'NO error log data'(011).
  799. LEAVE TO SCREEN 9000.
  800. ENDIF.
  801. * ALV最后结果输出
  802. PERFORM frm_display_data.
  803. WHEN 'CANCEL'.
  804. LEAVE TO SCREEN 0.
  805. WHEN 'EXIT'.
  806. LEAVE PROGRAM.
  807. WHEN 'BACK'.
  808. LEAVE TO SCREEN 0.
  809. ENDCASE.
  810. ENDMODULE. " USER_COMMAND_9000 INPUT
  811. *----------------------------------------------------------------------*
  812. * 子程序名称 :ALV最后结果输出
  813. * 子程序名 :frm_display_data
  814. * 概要 :ALV最后结果输出
  815. * 参数 :无
  816. * 返回值 :无
  817. *----------------------------------------------------------------------*
  818. FORM frm_display_data .
  819. w_repid = sy-repid.
  820. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
  821. EXPORTING
  822. i_callback_program = w_repid
  823. i_structure_name = 'ZC0000SDT0020'
  824. it_fieldcat = it_fieldcat
  825. TABLES
  826. t_outtab = it_errlog.
  827. IF sy-subrc <> 0.
  828. * MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
  829. * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  830. ENDIF.
  831.  
  832. ENDFORM. " frm_display_data
  833. *&---------------------------------------------------------------------*
  834. *& Form frm_data_select
  835. *&---------------------------------------------------------------------*
  836. * text
  837. *----------------------------------------------------------------------*
  838. * --> p1 text
  839. * <-- p2 text
  840. *----------------------------------------------------------------------*
  841. FORM frm_data_select .
  842. IF zc0000sdt0020-filen IS NOT INITIAL.
  843. CONCATENATE 'FILEN LIKE ''' zc0000sdt0020-filen '%''' INTO w_str.
  844. ENDIF.
  845. **************** putda**************************************
  846. IF zc0000sdt0020-putda IS NOT INITIAL AND putdahigh IS INITIAL.
  847. IF w_str IS NOT INITIAL.
  848. CONCATENATE w_str ' and putda = ZC0000SDT0020-putda' INTO w_str.
  849. ELSE.
  850. w_str = 'putda = ZC0000SDT0020-putda'.
  851. ENDIF.
  852. ENDIF.
  853. IF zc0000sdt0020-putda IS INITIAL AND putdahigh IS NOT INITIAL.
  854. IF w_str IS NOT INITIAL.
  855. CONCATENATE w_str ' and putda = putdahigh' INTO w_str.
  856. ELSE.
  857. w_str = 'putda = putdahigh'.
  858. ENDIF.
  859. ENDIF.
  860. IF zc0000sdt0020-putda IS NOT INITIAL AND putdahigh IS NOT INITIAL.
  861. IF w_str IS NOT INITIAL.
  862. CONCATENATE w_str ' and putda <= putdahigh and putda >= ZC0000SDT0020-putda' INTO w_str.
  863. ELSE.
  864. w_str = 'putda <= putdahigh and putda >= ZC0000SDT0020-putda'.
  865. ENDIF.
  866.  
  867. ENDIF.
  868. * **************** putti**************************************
  869. IF zc0000sdt0020-putti IS NOT INITIAL AND puttihigh IS INITIAL.
  870. IF w_str IS NOT INITIAL.
  871. CONCATENATE w_str ' and putti = ZC0000SDT0020-putti' INTO w_str.
  872. ELSE.
  873. w_str = 'putti = ZC0000SDT0020-putti'.
  874. ENDIF.
  875. ENDIF.
  876. IF zc0000sdt0020-putti IS INITIAL AND puttihigh IS NOT INITIAL.
  877. IF w_str IS NOT INITIAL.
  878. CONCATENATE w_str ' and putti = puttihigh' INTO w_str.
  879. ELSE.
  880. w_str = 'putti = puttihigh'.
  881. ENDIF.
  882. ENDIF.
  883. IF zc0000sdt0020-putti IS NOT INITIAL AND puttihigh IS NOT INITIAL.
  884. IF w_str IS NOT INITIAL.
  885. CONCATENATE w_str ' and putti <= puttihigh and putti >= ZC0000SDT0020-putti' INTO w_str.
  886. ELSE.
  887. w_str = 'putti <= puttihigh and putti >= ZC0000SDT0020-putti'.
  888. ENDIF.
  889.  
  890. ENDIF.
  891. * **************** VBELN**************************************
  892. IF zc0000sdt0020-vbeln IS NOT INITIAL AND vbelnhigh IS INITIAL.
  893. IF w_str IS NOT INITIAL.
  894. CONCATENATE w_str ' and VBELN = ZC0000SDT0020-VBELN' INTO w_str.
  895. ELSE.
  896. w_str = 'VBELN = ZC0000SDT0020-VBELN'.
  897. ENDIF.
  898. ENDIF.
  899. IF zc0000sdt0020-vbeln IS INITIAL AND vbelnhigh IS NOT INITIAL.
  900. IF w_str IS NOT INITIAL.
  901. CONCATENATE w_str ' and VBELN = VBELNHIGH' INTO w_str.
  902. ELSE.
  903. w_str = 'VBELN = VBELNHIGH'.
  904. ENDIF.
  905. ENDIF.
  906. IF zc0000sdt0020-vbeln IS NOT INITIAL AND vbelnhigh IS NOT INITIAL.
  907. IF w_str IS NOT INITIAL.
  908. CONCATENATE w_str ' and VBELN <= VBELNHIGH and VBELN >= ZC0000SDT0020-VBELN' INTO w_str.
  909. ELSE.
  910. w_str = 'VBELN <= VBELNHIGH and VBELN >= ZC0000SDT0020-VBELN'.
  911. ENDIF.
  912.  
  913. ENDIF.
  914. * **************** XBLNR**************************************
  915. IF zc0000sdt0020-xblnr IS NOT INITIAL AND xblnrhigh IS INITIAL.
  916. IF w_str IS NOT INITIAL.
  917. CONCATENATE w_str ' and XBLNR = ZC0000SDT0020-XBLNR' INTO w_str.
  918. ELSE.
  919. w_str = 'XBLNR = ZC0000SDT0020-XBLNR'.
  920. ENDIF.
  921. ENDIF.
  922. IF zc0000sdt0020-xblnr IS INITIAL AND xblnrhigh IS NOT INITIAL.
  923. IF w_str IS NOT INITIAL.
  924. CONCATENATE w_str ' and XBLNR = XBLNRHIGH' INTO w_str.
  925. ELSE.
  926. w_str = 'XBLNR = XBLNRHIGH'.
  927. ENDIF.
  928. ENDIF.
  929. IF zc0000sdt0020-xblnr IS NOT INITIAL AND xblnrhigh IS NOT INITIAL.
  930. IF w_str IS NOT INITIAL.
  931. CONCATENATE w_str ' and XBLNR <= XBLNRHIGH and XBLNR >= ZC0000SDT0020-XBLNR' INTO w_str.
  932. ELSE.
  933. w_str = 'XBLNR <= XBLNRHIGH and XBLNR >= ZC0000SDT0020-XBLNR'.
  934. ENDIF.
  935.  
  936. ENDIF.
  937. * **************** ERRIN**************************************
  938. IF zc0000sdt0020-errin IS NOT INITIAL.
  939. IF w_str IS NOT INITIAL.
  940. CONCATENATE w_str ' and ERRIN LIKE ''' zc0000sdt0020-errin '%''' INTO w_str.
  941. ELSE.
  942. CONCATENATE 'ERRIN LIKE ''' zc0000sdt0020-errin '%''' INTO w_str.
  943. ENDIF.
  944. ENDIF.
  945. SELECT zwrit
  946. filen
  947. putda
  948. putti
  949. vbeln
  950. xblnr
  951. errin
  952. INTO CORRESPONDING FIELDS OF TABLE it_errlog
  953. FROM zc0000sdt0020
  954. WHERE (w_str).
  955. CLEAR:w_str.
  956. ENDFORM. " frm_data_select
  957. *&---------------------------------------------------------------------*
  958. *& Form frm_vbrk_xblnr
  959. *&---------------------------------------------------------------------*
  960. * text
  961. *----------------------------------------------------------------------*
  962. * -->pf_xblnr text
  963. * -->pf_vbeln text
  964. *----------------------------------------------------------------------*
  965. FORM frm_vbrk_xblnr USING pf_xblnr
  966. pf_vbeln.
  967.  
  968. CALL FUNCTION 'UPDATE_XBLNR_IN_VBRK'
  969. EXPORTING
  970. i_vbeln = pf_vbeln
  971. i_xblnr = pf_xblnr
  972. * I_XBLNR_CHECK =
  973. * IMPORTING
  974. * E_XBLNR =
  975. EXCEPTIONS
  976. document_blocked = 1
  977. update_no_success = 2
  978. OTHERS = 3
  979. .
  980. IF sy-subrc <> 0.
  981. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  982. INTO w_msg_txt
  983. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  984. ENDIF.
  985.  
  986. ENDFORM. " FRM_VBRK_BDC
  987. *&---------------------------------------------------------------------*
  988. *& Form FRM_FILE_PROCESS_LOCAL
  989. *&---------------------------------------------------------------------*
  990. * text
  991. *----------------------------------------------------------------------*
  992. * --> p1 text
  993. * <-- p2 text
  994. *----------------------------------------------------------------------*
  995. FORM frm_file_process_local.
  996. DATA: ls_row TYPE kcdu_srec,
  997. lw_zwrit TYPE i.
  998.  
  999. PERFORM file_format_check.
  1000. PERFORM upload_csv.
  1001.  
  1002. * 文件数据传送接口表
  1003. DO.
  1004. w_row_num = sy-index.
  1005. CLEAR ls_row.
  1006. " w_step_ok = 'X'.
  1007. CALL FUNCTION 'FILE_NEXT_RECORD'
  1008. IMPORTING
  1009. next_record = ls_row
  1010. EXCEPTIONS
  1011. no_record = 1.
  1012. IF sy-subrc <> 0 OR ls_row IS INITIAL.
  1013. IF w_row_num = 1.
  1014. PERFORM frm_get_errno CHANGING lw_zwrit.
  1015. iw_err-zwrit = lw_zwrit.
  1016. iw_err-filen = w_lfile.
  1017. iw_err-errin = 'FILE NO DATA'(002).
  1018. iw_err-putda = w_date.
  1019. iw_err-putti = w_time.
  1020. INSERT zc0000sdt0020 FROM iw_err.
  1021. CLEAR:iw_err.
  1022. w_ret = 'X'.
  1023. ENDIF.
  1024. EXIT.
  1025. ENDIF.
  1026.  
  1027. * 第一行不是标题
  1028. * IF lw_loopc = 1.
  1029. * CONTINUE.
  1030. * ENDIF.
  1031. * 拆分数据并加入接口表
  1032. * 0090036259 LR 0000300713 20140525 123456 3000
  1033. * vbeln fkart 客户代码 金税号
  1034. CHECK w_ret IS INITIAL.
  1035. PERFORM frm_separate_text USING ls_row
  1036. CHANGING w_ret.
  1037. CHECK w_ret IS INITIAL.
  1038. PERFORM frm_writeback CHANGING w_ret.
  1039.  
  1040. ENDDO.
  1041.  
  1042. ENDFORM. " frm_file_process_local
  1043. *&---------------------------------------------------------------------*
  1044. *& Form form_get_file_path_upload
  1045. *&---------------------------------------------------------------------*
  1046. * text
  1047. *----------------------------------------------------------------------*
  1048. * --> p1 text
  1049. * <-- p2 text
  1050. *----------------------------------------------------------------------*
  1051. FORM form_get_file_path_upload .
  1052. DATA:
  1053. ld_rc TYPE i,
  1054. lw_file TYPE string,
  1055. lt_file TYPE filetable.
  1056.  
  1057. CALL FUNCTION 'GET_DYNP_VALUE'
  1058. EXPORTING
  1059. i_field = 'P_FLPATH'
  1060. i_repid = sy-repid
  1061. i_dynnr = ''
  1062. CHANGING
  1063. o_value = p_flpath.
  1064.  
  1065. lw_file = p_flpath.
  1066.  
  1067. CALL FUNCTION 'CH_SPLIT_FILENAME'
  1068. EXPORTING
  1069. complete_filename = lw_file
  1070. IMPORTING
  1071. path = w_file_path
  1072. EXCEPTIONS
  1073. invalid_drive = 1
  1074. invalid_path = 2
  1075. OTHERS = 3.
  1076.  
  1077. CALL METHOD cl_gui_frontend_services=>file_open_dialog
  1078. EXPORTING
  1079. * window_title =
  1080. default_extension = '*.TXT'
  1081. default_filename = lw_file
  1082. file_filter = '*.TXT'
  1083. * with_encoding =
  1084. initial_directory = w_file_path
  1085. * multiselection =
  1086. CHANGING
  1087. file_table = lt_file
  1088. rc = ld_rc
  1089. * user_action =
  1090. * file_encoding =
  1091. EXCEPTIONS
  1092. file_open_dialog_failed = 1
  1093. cntl_error = 2
  1094. error_no_gui = 3
  1095. not_supported_by_gui = 4
  1096. OTHERS = 5.
  1097. IF sy-subrc <> 0.
  1098. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1099. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1100. ELSE.
  1101. READ TABLE lt_file INTO lw_file INDEX 1.
  1102. p_flpath = lw_file.
  1103. ENDIF.
  1104.  
  1105. ENDFORM. " form_get_file_path_upload
  1106.  
  1107. *&---------------------------------------------------------------------*
  1108. *& Form file_format_check
  1109. *&---------------------------------------------------------------------*
  1110. * text
  1111. *----------------------------------------------------------------------*
  1112. * --> p1 text
  1113. * <-- p2 text
  1114. *----------------------------------------------------------------------*
  1115. FORM file_format_check .
  1116. DATA:ld_ext TYPE char10,
  1117. lw_file TYPE string,
  1118. lw_name TYPE string.
  1119. lw_file = p_flpath.
  1120. CALL FUNCTION 'CH_SPLIT_FILENAME'
  1121. EXPORTING
  1122. complete_filename = lw_file
  1123. IMPORTING
  1124. extension = ld_ext
  1125. name = lw_name
  1126. name_with_ext = w_lfile
  1127. EXCEPTIONS
  1128. invalid_drive = 1
  1129. invalid_path = 2
  1130. OTHERS = 3.
  1131. IF sy-subrc <> 0.
  1132. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1133. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO iw_errlog-str.
  1134. APPEND iw_errlog TO it_errlog2.
  1135. w_ret = 'X'.
  1136. ENDIF.
  1137.  
  1138. IF sy-subrc <> 0.
  1139. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1140. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  1141. ELSE.
  1142. CALL FUNCTION 'AIPC_CONVERT_TO_UPPERCASE'
  1143. EXPORTING
  1144. i_input = ld_ext
  1145. i_langu = sy-langu
  1146. IMPORTING
  1147. e_output = ld_ext.
  1148. ENDIF.
  1149. ENDFORM. " file_format_check
  1150. *&---------------------------------------------------------------------*
  1151. *& Form upload_csv
  1152. *&---------------------------------------------------------------------*
  1153. * text
  1154. *----------------------------------------------------------------------*
  1155. * --> p1 text
  1156. * <-- p2 text
  1157. *----------------------------------------------------------------------*
  1158. FORM upload_csv .
  1159. DATA:ld_file TYPE localfile.
  1160.  
  1161. ld_file = p_flpath.
  1162.  
  1163. CALL FUNCTION 'FILE_OPEN'
  1164. EXPORTING
  1165. filnm = ld_file
  1166. upl = 'X'
  1167. filfmt = 'T'
  1168. EXCEPTIONS
  1169. logname_not_found = 1
  1170. file_not_opened = 2
  1171. OTHERS = 3.
  1172. IF sy-subrc <> 0.
  1173. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1174. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO iw_errlog-str.
  1175. APPEND iw_errlog TO it_errlog2.
  1176. w_ret = 'X'.
  1177. ENDIF.
  1178. ENDFORM. " upload_csv
  1179. *&---------------------------------------------------------------------*
  1180. *& Form FRM_BSEG_UPDATE
  1181. *&---------------------------------------------------------------------*
  1182. * text
  1183. *----------------------------------------------------------------------*
  1184. * -->pf_bukrs text
  1185. * -->pf_belnr text
  1186. * -->pf_gjahr text
  1187. * -->pf_buzei text
  1188. * -->pf_bschl text
  1189. * -->pf_bktxt text
  1190. *----------------------------------------------------------------------*
  1191. FORM frm_bseg_update USING pf_bukrs
  1192. pf_belnr
  1193. pf_gjahr
  1194. pf_buzei
  1195. pf_bschl
  1196. pf_bktxt. "Linda 20141117
  1197. DATA:iw_buztab TYPE tpit_buztab,
  1198. iw_fldtab TYPE tpit_fname.
  1199.  
  1200. * 所改字段之值
  1201. * iw_bseg-sgtxt = pf_sgtxt. "Linda 20141117 edi
  1202. iw_bseg-sgtxt = pf_bktxt.
  1203.  
  1204. iw_buztab-bukrs = pf_bukrs.
  1205. iw_buztab-belnr = pf_belnr.
  1206. iw_buztab-gjahr = pf_gjahr.
  1207. iw_buztab-buzei = pf_buzei.
  1208. iw_buztab-bschl = pf_bschl. "posting key
  1209. * it_buztab-koart = 'S'. "leixing
  1210. APPEND iw_buztab TO it_buztab.
  1211.  
  1212. iw_fldtab-fname = 'SGTXT'.
  1213. iw_fldtab-aenkz = 'X'.
  1214. APPEND iw_fldtab TO it_fldtab.
  1215.  
  1216. * copy from FI_ITEMS_MASS_CHANGE , change defult module from asynchronous to synchronous
  1217. CALL FUNCTION 'Z_FI_ITEMS_MASS_CHANGE'
  1218. EXPORTING
  1219. s_bseg = iw_bseg
  1220. i_bktxt = pf_bktxt
  1221. IMPORTING
  1222. errtab = it_errtab
  1223. TABLES
  1224. it_buztab = it_buztab
  1225. it_fldtab = it_fldtab
  1226. EXCEPTIONS
  1227. bdc_errors = 1
  1228. OTHERS = 2.
  1229. IF sy-subrc = 0.
  1230. COMMIT WORK AND WAIT.
  1231. ELSE.
  1232. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
  1233. WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO w_msg_txt.
  1234. ENDIF.
  1235. CLEAR:it_errtab,it_errtab[],it_buztab,it_buztab[],it_fldtab,it_fldtab[],iw_bseg.
  1236.  
  1237. ENDFORM. " FRM_BSEG_UPDATE
  1238. *&---------------------------------------------------------------------*
  1239. *& Form FRM_BSEG_SGTXT
  1240. *&---------------------------------------------------------------------*
  1241. * text
  1242. *----------------------------------------------------------------------*
  1243. * --> pf_ins text
  1244. *----------------------------------------------------------------------*
  1245. FORM frm_bseg_sgtxt USING pf_ins LIKE iw_ins.
  1246. DATA:lw_bseg TYPE bseg.
  1247. LOOP AT it_bseg INTO lw_bseg.
  1248.  
  1249. PERFORM frm_bseg_update USING lw_bseg-bukrs
  1250. lw_bseg-belnr
  1251. lw_bseg-gjahr
  1252. lw_bseg-buzei
  1253. lw_bseg-bschl
  1254. pf_ins-bktxt.
  1255. IF w_msg_txt IS NOT INITIAL.
  1256. EXIT.
  1257. ENDIF.
  1258. ENDLOOP.
  1259. ENDFORM. " FRM_BSEG_SGTXT

SAP 金税接口代码 供参考的更多相关文章

  1. SAP 金税接口介绍

    一.金税发票与SAP系统发票的税额差异分析 1.1 金税系统中的税额说明 国内企业销售产品给国内客户时,正常产品须要缴纳17%的增值税,而金税(Golden Tax)系统就是用来出具纸面的增值税发票的 ...

  2. SAP 金税接口增强 BADI

      SAP与金税连接有两种方式:组件接口及文本接口. 文本接口为例: 1.SAP取发票数据.主要来自合同,销售订单,交货单.发票,客户供应商主数据等 2.SAP处理:合并.拆分,折扣等 3.导出TXT ...

  3. C#复制文件全代码--供参考

    private void button1_Click(object sender, EventArgs e) { //创建文件对象 FileInfo fi = null; //实例化打开文件对话框 O ...

  4. php短信接口代码

    这篇文章主要为大家详细介绍了php短信接口代码,php短信发送.php批量发送.php获取余额等代码,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了几个常用的php短信接口代码,供大家参考,具体内 ...

  5. django中使用FastDFS分布式文件系统接口代码实现文件上传、下载、更新、删除

    运维使用docker部署好之后FastDFS分布式文件系统之后,提供给我接口如下: fastdfs tracker 192.168.1.216 192.168.1.217 storage 192.16 ...

  6. NPOI导入导出EXCEL通用类,供参考,可直接使用在WinForm项目中

    以下是NPOI导入导出EXCEL通用类,是在别人的代码上进行优化的,兼容xls与xlsx文件格式,供参考,可直接使用在WinForm项目中,由于XSSFWorkbook类型的Write方法限制,Wri ...

  7. EF封装类,供参考!

    以下是我对EF DB FIRST 生成的ObjectContext类进行封装,代码如下,供参考学习: using System; using System.Collections.Generic; u ...

  8. SAP MM 事务代码MI31之思考

    SAP MM 事务代码MI31之思考 1 - MI01之痛 多年SAP项目实施实践中,笔者之前对于SAP系统里盘点凭证创建(MI01)事务代码里的输入界面很是不爽: 第一,MI01输入了一行数据以后, ...

  9. 我的第一个python web开发框架(33)——接口代码重构

    前面ORM模块我们已经完成了开发,接下来要做的就是对项目代码进行重构了.因为对底层数据库操作模块(db_helper.py)进行了改造,之前项目的接口代码全都跑不起来了. 在写ORM模块时,我们已经对 ...

随机推荐

  1. UIView的alpha、hidden和opaque属性之间的关系和区别

    转自:http://blog.csdn.net/wzzvictory/article/details/10076323 作者:wangzz 原文地址:http://blog.csdn.net/wzzv ...

  2. # file Python-3.4.7.tar.xz Python-3.4.7.tar.xz: XZ compressed data

    # file Python-3.4.7.tar.xz Python-3.4.7.tar.xz: XZ compressed data # xz -d Python-3.4.7.tar.xz # ls ...

  3. 菜鸟学JS(三)——自动隐藏的悬浮框

    今天写一个小实例,用js和css写一个可以自动隐藏的悬浮框.css肯定是用来控制样式的,js用来控制器显示与隐藏的.显示与隐藏通常有两种方法实现:1,用js控制其显示属性:2,用js控制其大小. 今天 ...

  4. 实例分析JVM安全体系:双亲委派、命名空间、保护域、策略

    在了解双亲委派模型之前,先了解一下类加载器的概念: 类加载器的作用就是将真实的class文件根据位置将该Java类的字节码装入内存,并生成对应的Class对象.用户可以通过继承ClassLoader和 ...

  5. 挂载ios,error tip:mount: wrong fs type, bad option, bad superblock on /dev/loop0,

    挂载ios,tip: mount -t iso9660 -o loop 111.iso /isofiles 有可能是-t参数有问题,把-t参数去掉,然后挂载,就成功了

  6. (原创)舌尖上的c++--相逢

    引子 前些时候,我在群里出了一道题目:将变参的类型连接在一起作为字符串并返回出来,要求只用函数实现,不能借助于结构体实现.用结构体来实现比较简单: template<typename... Ar ...

  7. 每日英语:Teens Are Still Developing Empathy Skills

    The teen years are often fraught with door-slamming, eye-rolling and seeming insensitivity, even by ...

  8. 手机抓包fiddle4的安装及配置

    抓手机包可以用的是fiddle. 安装 先在下载页面下载--->Download Fiddler Web Debugging Tool for Free by Telerik 选择你“准备用fi ...

  9. zoj 3762(求三角形的最大高)

    给出n个点,要你找到一个三角形,它的高是最长的. 思路:暴力超时了,是用先找出n个点与其他点的最长边,再枚举顶点过的.......具体证明不知道..... #include<algorithm& ...

  10. Highcharts 多个Y轴动态刷新数据

    效果图: js代码: $(function() { $(document).ready(function() { Highcharts.setOptions({ global: { useUTC: f ...