销售订单发票计划导入

前言:本人曾查遍了包括SAP官网在内的大小网站来研究发票计划。发票计划是个冷门的业务,很多顾问也是第一次听说。经过两周的研究,终于把它搞明白了。
问题的根源:
VBKD-FPLNR 这个字段在做完创建完成销售订单之后不存在。即使我使用一些方法在FPLA中导入了fplnr字段,也不能得到我们想要的结果。
发票计划
只有打开了如图上所示的页签,我们才可以得到FPLNR这个字段。不然批导的时候,就会DUMP.
解决的方法:
1.根据订单号和行项目去VBKD表找FPLNR,如果有任何一个找不到,使用BDC激活抬头的发票计划页签。

*------------------------------------------------------------*
*    DESC: BDC定义
*------------------------------------------------------------*
DATA: BEGIN OF BDCDATA OCCURS 0.
  INCLUDE STRUCTURE BDCDATA.
DATA: END OF BDCDATA.
DATA: GV_STRING TYPE STRING.
DATA: TT1(100).
DATA: TT2(100).
DATA: BDC_MESSAGE LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.

DATA:GS_DATA TYPE VBAK,
      GT_DATA TYPE TABLE OF VBAK.
DATA:W_MESSAGE TYPE STRING.

DATA : L_MESSAGE LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
PERFORM FRM_BDC_VA02 USING GS_VBAP_COPY."参数传订单号即可
FORM FRM_BDC_VA02 USING ES_DATA LIKE GS_VBAP.
*               CHANGING " ev_mes TYPE zfi_bank_info-msg
*                         ev_msgst.
  DATA : V_MODE TYPE C VALUE 'E'.
  DATA: LS_BDCOPT TYPE  CTU_PARAMS.
  REFRESH:BDC_MESSAGE, BDCDATA.
  PERFORM  FRM_PROCESS_VA02  USING ES_DATA.
  LS_BDCOPT-DISMODE = 'E'.  " A 前台显示 E 出错显示 N 后台显示 P
  LS_BDCOPT-UPDMODE = 'S'.
  LS_BDCOPT-CATTMODE = 'A'.

  LS_BDCOPT-RACOMMIT = 'X'.
  LS_BDCOPT-NOBIEND = 'X'.
  CALL TRANSACTION 'VA02' USING BDCDATA OPTIONS FROM LS_BDCOPT MESSAGES INTO BDC_MESSAGE   .

  PERFORM GENERATE_MESSAGE CHANGING ES_DATA.

ENDFORM.
FORM FRM_PROCESS_VA02 USING IS_DATA LIKE GS_VBAP .
  " LOOP AT gt_data INTO gs_data.
***  修改凭证抬头文本
  PERFORM BDC_DYNPRO      USING 'SAPMV45A' '0102'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
        'VBAK-VBELN'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
        '=ENT2'.
  PERFORM BDC_FIELD       USING 'VBAK-VBELN'
        IS_DATA-VBELN."record-VBELN_001.
  PERFORM BDC_DYNPRO      USING 'SAPMV45A' '4001'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
        '=HEAD'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
        'RV45A-MABNR(02)'.
  PERFORM BDC_DYNPRO      USING 'SAPMV45A' '4002'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
        '=T\05'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
        'VBAK-AUDAT'.
  PERFORM BDC_DYNPRO      USING 'SAPLCNMS' '1300'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
        'MLSTS-AUFNR'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
        '=GO'.

  PERFORM BDC_DYNPRO      USING 'SAPLV60F' '4001'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
        '=S\BACK'.
  PERFORM BDC_DYNPRO      USING 'SAPMV45A' '4001'.
  PERFORM BDC_FIELD       USING 'BDC_CURSOR'
        'RV45A-MABNR(02)'.
  PERFORM BDC_FIELD       USING 'BDC_OKCODE'
        '=S\SICH'.

ENDFORM.
*  BDC 消息
FORM GENERATE_MESSAGE CHANGING ES_DATA LIKE GS_VBAP.

  DATA:GT_MSG        LIKE TABLE OF BDCMSGCOLL,
       LT_BAPIRETURN LIKE TABLE OF BAPIRET2.

  IF SY-SUBRC = 0.
    CALL FUNCTION 'CONVERT_BDCMSGCOLL_TO_BAPIRET2'
      TABLES
        IMT_BDCMSGCOLL = GT_MSG
        EXT_RETURN     = LT_BAPIRETURN.

  ELSE.

*    MESSAGE '出错了!!!' TYPE 'I'.
    ES_DATA-MESTY = '发票计划页签由于数据问题未激活!' .
  ENDIF.

ENDFORM. " generate_message

FORM BDC_DYNPRO USING PROGRAM DYNPRO.
  CLEAR BDCDATA.
  BDCDATA-PROGRAM  = PROGRAM.
  BDCDATA-DYNPRO   = DYNPRO.
  BDCDATA-DYNBEGIN = 'X'.
  APPEND BDCDATA.
ENDFORM. "BDC_DYNPRO

FORM BDC_FIELD USING FNAM FVAL.
  CLEAR BDCDATA.
  BDCDATA-FNAM = FNAM.
  BDCDATA-FVAL = FVAL.
  APPEND BDCDATA.
ENDFORM.

2.此时fplnr已经生成,常规方法导入即可
CALL FUNCTION ‘SD_VBKD_READ_WITH_VBELN’
CALL FUNCTION ‘BILLING_SCHEDULE_READ’
CALL FUNCTION ‘BILLING_SCHEDULE_SAVE’
COMMIT WORK AND WAIT.

2022-04-03更新
发票计划的导入全部用BDC导入,因为导入发票计划之后还需要VA02打开,确保各个表都能写入。
举个例子,导入抬头的发票计划,行项目只有VA02重新打开,才能映射到行项目的发票计划

### SAP 系统中服务销售订单的创建和管理 #### 创建服务销售订单SAP系统中,服务销售订单用于记录向客户提供的服务项目。这类订单通常不涉及实物商品的转移,而是专注于提供特定的服务。为了创建服务销售订单,可以使用事务码`VA01`进入标准销售订单输入界面。 在此过程中,需特别注意的是服务项目的定义和服务条款的选择。对于服务类型的物料,其配置可能不同于传统的产品物料。例如,某些服务可能会依据时间、地点或其他参数来定价或描述[^2]。 ```abap CALL TRANSACTION 'VA01' USING itab. ``` 此代码片段展示了如何通过ABAP编程调用交易代码`VA01`以启动新销售订单的创建过程。实际应用中,会涉及到更多细节处理,比如预填充必要的字段信息等。 #### 批量创建服务销售订单 针对大量相似的服务合同需求场景下,可以通过编写自定义ABAP程序实现自动化批量创建功能。这包括准备待导入的数据文件格式设计,以及利用BAPI接口完成数据上传并触发订单生成逻辑。具体来说,就是先准备好Excel或者其他形式的数据源文档,之后借助ABAP脚本解析这些外部数据,并依次调用相应的BAPI函数来进行订单建立工作[^1]。 ```abap DATA: lt_order_header_data TYPE TABLE OF vbak, ls_order_item_data TYPE vbrk. LOOP AT lt_input_data INTO wa_input_data. CLEAR: ls_order_header_data, ls_order_item_data. " 填充头信息... MOVE-CORRESPONDING wa_input_data TO ls_order_header_data. " 调用 BAPI 函数创建订单 CALL FUNCTION 'BAPI_SALESORDER_CREATEFROMDAT2' EXPORTING salesdocumentin = ls_order_header_data IMPORTING salesdocument = lv_sales_document TABLES return = lt_return orderitemin = lt_order_items. ENDLOOP. ``` 上述示例说明了怎样构建循环结构读取输入数据集,并逐条执行创建命令的过程。这里假设每一条记录代表一个新的服务订单请求;而`lt_input_data`, `ls_order_header_data`, 和其他变量则用来存储临时计算结果或是传递给BAPI所需的参数列表。 #### 管理已有的服务销售订单 一旦服务销售订单被成功创建后,则可通过多种方式对其进行管理和维护: - **查看状态**:使用事务码`VA03`查询现有订单的状态详情; - **修改内容**:如果需要更改未确认前的信息,可以选择`VA02`进入编辑模式; - **取消/删除**:当决定终止某个尚未履行完毕的服务合同时,应该遵循公司内部审批流程并通过适当手段撤销关联的财务凭证(如适用),最后才考虑物理上移除这条记录; - **交货与开票**:尽管服务类目下的货物交付环节相对简单甚至不存在实体物品交换行为,但仍有必要按照既定规则安排好后续步骤——即发出正式发票通知顾客付款事宜。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值