加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

动态表迁移程序【两个SAP系统之间表迁移】

(2018-02-23 18:05:58)
标签:

数据迁移

分类: SAP_ABAP
Source Code
*&---------------------------------------------------------------------*
*& Report ZR_MIG_STUFF_REQUEST_PR
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zr_mig_stuff_request_pr.
TABLES:ztpr_header.

SELECT-OPTIONS:s_banfn FOR ztpr_header-banfn.

FIELD-SYMBOLS TYPE table,
                TYPE any,
                  TYPE table,
                  TYPE any.

DATA:go_pr_header   TYPE REF TO data,
     go_pr_item     TYPE REF TO data,
     gt_ztpr_header TYPE TABLE OF ztpr_header,
     gt_ztpr_item   TYPE TABLE OF ztpr_item.

START-OF-SELECTION.
  PERFORM frm_get_data.
  PERFORM frm_process_data.
  PERFORM frm_write_data.
*&---------------------------------------------------------------------*
*&      Form  FRM_GET_DATA
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_data .
  DATAlv_dest     TYPE rfcdest,
        lo_table    TYPE REF TO data,
        lv_subrc(1TYPE c,
        lv_success  TYPE boolean.

  CALL FUNCTION 'ZBBP_GET_SRMSUS'
    IMPORTING
      ev_dest lv_dest.

***************************************************************************
*PR Header Dynamic Table Field Catelog
  PERFORM frm_ddif_get_table USING    lv_dest
                                     'ZTJC001'
                             CHANGING lo_table
                                      lv_subrc.

  IF lv_subrc <> '0'.
    MESSAGE 'Error' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
    STOP.
  ENDIF.

  ASSIGN lo_table->TO .
  CREATE DATA go_pr_header LIKE LINE OF .
  ASSIGN go_pr_header->TO .

***************************************************************************
*PR Item Dynamic Table Field Catelog
  PERFORM frm_ddif_get_table USING    lv_dest
                                     'ZTJC001_DTL'
                             CHANGING lo_table
                                      lv_subrc.

  IF lv_subrc <> '0'.
    MESSAGE 'Error' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
    STOP.
  ENDIF.

  ASSIGN lo_table->TO .
  CREATE DATA go_pr_item LIKE LINE OF .
  ASSIGN go_pr_item->TO .


  CALL FUNCTION 'ZRFC_SYNC_ZJC_PR' DESTINATION lv_dest
    IMPORTING
      ev_success   lv_success
    TABLES
      et_pr_header 
      et_pr_items  
      it_so_pr     s_banfn.
  IF sy-subrc <> OR lv_success <> abap_true .
    MESSAGE 'No Data' TYPE 'S' DISPLAY LIKE 'E'.
    LEAVE LIST-PROCESSING.
    STOP.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_DDIF_GET_TABLE
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
     -->P_LV_DEST  text
     -->P_0039   text
     <--P_DY_TABLE  text
     <--P_LV_SUBRC  text
*----------------------------------------------------------------------*
FORM frm_ddif_get_table  USING    pv_dest
                                  pv_table_name
                         CHANGING co_table
                                  cv_subrc.
  DATAlt_table LIKE TABLE OF dntab,
        ls_table TYPE dntab,
        lt_fcat  TYPE lvc_t_fcat,
        ls_fcat  TYPE lvc_s_fcat.
  CALL FUNCTION 'ZRFC_TABLE_DDIF_GET' DESTINATION pv_dest
    EXPORTING
      p_name  pv_table_name
    IMPORTING
      e_subrc cv_subrc
    TABLES
      itab    lt_table.
  IF sy-subrc 0.

  ENDIF.
  LOOP AT lt_table INTO ls_table.
    ls_fcat-fieldname  ls_table-fieldname.
    ls_fcat-col_pos    sy-tabix.
    ls_fcat-inttype    ls_table-inttype.
    IF ls_fcat-inttype 'C' OR ls_fcat-inttype 'N' OR ls_fcat-inttype 'I'.
      ls_fcat-intlen ls_table-intlen 2.
    ELSE.
      ls_fcat-intlen ls_table-ddlen.
    ENDIF.
    ls_fcat-decimals ls_table-decimals.
    APPEND ls_fcat TO lt_fcat.
    CLEAR ls_fcat.
  ENDLOOP.

  CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
      it_fieldcatalog lt_fcat
    IMPORTING
      ep_table        co_table.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_PROCESS_DATA
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_process_data .
  DATAls_ztpr_header TYPE ztpr_header,
        ls_ztpr_item   TYPE ztpr_item.

  FIELD-SYMBOLS  TYPE any.
***************************************************************************
*PR Header Part
  LOOP AT  ASSIGNING .
    CLEAR ls_ztpr_header.
    "申请单号
    ASSIGN COMPONENT 'PR_NO' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-banfn .
    ENDIF.

    "申请类型
    ASSIGN COMPONENT 'PR_TYPE' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-bsart .
    ENDIF.

    "申请说明
    ASSIGN COMPONENT 'PR_NOTE' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-pr_note .
    ENDIF.

    "集采采购组织
    ASSIGN COMPONENT 'GYL' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-ekorg .
    ENDIF.

    "客户采购订单编号
    ASSIGN COMPONENT 'EXT_DOC_NO' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-ekorg .
    ENDIF.

    "申请状态
    ASSIGN COMPONENT 'PR_STATUS' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-approval_status .
    ENDIF.

    "客户编号
    ASSIGN COMPONENT 'CUSTOMER_ID' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-customer_id .
    ENDIF.

    "供应商或债权人的帐号
    ASSIGN COMPONENT 'LIFNR' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-lifnr .
    ENDIF.

    "审批人
    ASSIGN COMPONENT 'APPROVER' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-approver .
    ENDIF.

    "审批日期
    ASSIGN COMPONENT 'APPROVE_DATE' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-approval_date .
    ENDIF.

    "审核备注
    ASSIGN COMPONENT 'ZPPROVE_NOTE' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-approval_note .
    ENDIF.

    "生态链供应商
    ASSIGN COMPONENT 'ZVENDOR' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-vendor .
    ENDIF.

    "补单原因
    ASSIGN COMPONENT 'REASON' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-reason .
    ENDIF.

    "项目代码
    ASSIGN COMPONENT 'PROJECT' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_header-project .
    ENDIF.

    "其他字段-无需同步
    "ZZSHIP_DATE      发货日期
    "ZZARRIVE_TIME    预计到达日期
    "ZZDGC            代工厂
    "ZZACT_SHIP_DATE  出库日期
    "GUID             全局唯一标识符
    "ZZSTATUS         发货通知状态
    "APPROVE_TIME     时间

    zcl_common_tec=>timestamp(
      EXPORTING
        iv_flag abap_true
      CHANGING
        cs_tab  ls_ztpr_header ).
    APPEND ls_ztpr_header TO gt_ztpr_header.
    CLEAR ls_ztpr_header.
  ENDLOOP.

***************************************************************************
*PR Item Part
  LOOP AT  ASSIGNING .
    CLEAR ls_ztpr_item.

    "申请单号
    ASSIGN COMPONENT 'PR_NO' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-banfn .
    ENDIF.

    "申请行号
    ASSIGN COMPONENT 'PR_ITEM' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-bnfpo .
    ENDIF.

    "申请人
    ASSIGN COMPONENT 'PR_NAME' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-afnam .
    ENDIF.

    "物料组
    ASSIGN COMPONENT 'MATKL' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-matkl .
    ENDIF.

    "物料编号
    ASSIGN COMPONENT 'MATNR' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-matnr .
    ENDIF.

    "客户料号
    ASSIGN COMPONENT 'LIFNR_MATNR' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-idnlf .
    ENDIF.

    "产品描述
    ASSIGN COMPONENT 'DESCRIPTION_UC' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-maktx .
    ENDIF.

    "订单单位计的数量
    ASSIGN COMPONENT 'QUANTITY' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-quantity .
    ENDIF.

    "基本计量单位
    ASSIGN COMPONENT 'UNIT' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-meins .
    ENDIF.

    "最晚到货日期
    ASSIGN COMPONENT 'LAST_RECEIVE_DATE' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-last_receive_date .
    ENDIF.

    "最晚到货日期
    ASSIGN COMPONENT 'LAST_RECEIVE_DATE' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-last_receive_date .
    ENDIF.

    "申请价格
    ASSIGN COMPONENT 'PRICE' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-sales_value .
    ENDIF.

    "货币码
    ASSIGN COMPONENT 'WAERS' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-waers .
    ENDIF.

    "价格单位
    ASSIGN COMPONENT 'PEINH' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-peinh .
    ENDIF.

    "条件单位
    ASSIGN COMPONENT 'KMEIN' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-meins .
    ENDIF.

    "税率
    ASSIGN COMPONENT 'ZKBETR' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-tax_rate .
    ENDIF.

    "最小需求量
    ASSIGN COMPONENT 'LIMIT_QUANTITY' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-mini_demand_qty .
    ENDIF.

    "最小包装量
    ASSIGN COMPONENT 'BOX_SPEC' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-mini_pack_qty .
    ENDIF.

    "备货天数
    ASSIGN COMPONENT 'PREPARE_DAYS' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-stocking_days .
    ENDIF.

    "质保天数
    ASSIGN COMPONENT 'QUALITY_DAYS' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-warranty_days .
    ENDIF.

    "采购订单号
    ASSIGN COMPONENT 'ZZPO_NO' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-ebeln .
    ENDIF.

    "采购订单行项目
    ASSIGN COMPONENT 'ZZPO_ITEM_ID' OF STRUCTURE  TO .
    IF sy-subrc 0.
      ls_ztpr_item-ebelp .
    ENDIF.

    "其他字段-无需同步
    "APPROVE_DATE    申请批准日期
    "APPROVER        审批人
    "PR_LINK_NOTE    需求跟踪信息
    "JC_STATUS      集采状态
    "PROJECT        项目代码
    "ZZACT_GR_QTY    电池供应商实收数量
    "ZZUPLOAD_QTY    已上传串号数量
    "ZZUP_QTY_LIFNR  已上传串号数量
    "ZZSHIP_QTY      出库数量

    zcl_common_tec=>timestamp(
      EXPORTING
        iv_flag abap_true
      CHANGING
        cs_tab  ls_ztpr_item ).

    APPEND ls_ztpr_item TO gt_ztpr_item.
    CLEAR ls_ztpr_item.
  ENDLOOP.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  FRM_WRITE_DATA
*&---------------------------------------------------------------------*
      text
*----------------------------------------------------------------------*
 -->  p1        text
 <--  p2        text
*----------------------------------------------------------------------*
FORM frm_write_data .
  MODIFY ztpr_header FROM TABLE gt_ztpr_header.
  IF sy-subrc 0.
    MODIFY ztpr_item FROM TABLE gt_ztpr_item.
    COMMIT WORK.
    DESCRIBE TABLE gt_ztpr_header LINES DATA(lv_header_count).
    DESCRIBE TABLE gt_ztpr_item LINES DATA(lv_item_count).
    WRITE 'Success ,同步抬头数据' && lv_header_count && '条;行项目:' && lv_item_count && '条'.
  ELSE.
    ROLLBACK WORK.
    WRITE '同步失败!'.
  ENDIF.
ENDFORM.

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有