预制凭证及取消凭证

预制凭证及取消凭证(带增强)

事务代码:
FBV1:创建预制凭证
FBV2:修改预制凭证
FBV3:查看预制凭证
FBV0:预制凭证过账/冲销
FB08:已过账凭证冲销
SE19:实现 BADI 增强 ACC_DOCUMENT
BAPI:BAPI_ACC_DOCUMENT_POST

预制凭证

输入事务代码FBV0,输入数据,回车
在这里插入图片描述
下一行明细在这里插入图片描述
保存生成凭证号。
预制凭证过账:FBV0
输入公司代码、凭证号、财年回车,点击保存在这里插入图片描述

增强部分

SE11创建增强结构
在这里插入图片描述
SE19创建BADI实施在这里插入图片描述
选择 BKPFF,表示这个 BADI 实现只适用于会计凭证直接输入,并激活在这里插入图片描述
新建,保存激活成功在这里插入图片描述
CHANGE是我们需要的方法
拷贝这段代码(不需要修改)

  data: wa_extension   type bapiparex,
        ext_value(960) type c,
        wa_accit       type accit,
        l_ref          type ref to data.

  field-symbols: <l_struc> type any,
                 <l_field> type any.

  sort c_extension2 by structure.

  loop at c_extension2 into wa_extension.
    at new structure.
      create data l_ref type (wa_extension-structure).
      assign l_ref->* to <l_struc>.
    endat.
    concatenate wa_extension-valuepart1 wa_extension-valuepart2
                wa_extension-valuepart3 wa_extension-valuepart4
           into ext_value.
    move ext_value to <l_struc>.
    assign component 'POSNR' of structure <l_struc> to <l_field>.
    read table c_accit with key posnr = <l_field>
          into wa_accit.
    if sy-subrc is initial.
      move-corresponding <l_struc> to wa_accit.
      modify c_accit from wa_accit index sy-tabix.
    endif.
  endloop.

BAPI的使用

  LOOP AT LT_ZFPAMT_HEAD ASSIGNING FIELD-SYMBOL(<FS_HEAD>) .
    LV_ZFPSE = <FS_HEAD>-ZFPSE.
    LV_ZFPHS = <FS_HEAD>-ZFPHS.
    LV_BUKRS = <FS_HEAD>-BUKRS.
    AT FIRST.
      LS_DOCUMENTHEADER-DOC_DATE      = <FS_HEAD>-BUDAT_JH.                   "凭证日期
      LS_DOCUMENTHEADER-PSTNG_DATE    = <FS_HEAD>-BUDAT_JH.                   "过账日期
      LS_DOCUMENTHEADER-TRANS_DATE    = <FS_HEAD>-BUDAT_JH.                   "换算日期
      LS_DOCUMENTHEADER-COMP_CODE     = <FS_HEAD>-BUKRS.                      "公司代码
      LS_DOCUMENTHEADER-DOC_TYPE      = 'SA'.                                 "凭证类型
      LS_DOCUMENTHEADER-FISC_YEAR     = LS_DOCUMENTHEADER-PSTNG_DATE+0(4).    "财年
      LS_DOCUMENTHEADER-FIS_PERIOD    = LS_DOCUMENTHEADER-PSTNG_DATE+4(2).  "期间
      LS_DOCUMENTHEADER-USERNAME      = SY-UNAME.                             "用户名
      LS_DOCUMENTHEADER-DOC_STATUS    = '2'.                                   "凭证状态
      LS_DOCUMENTHEADER-REF_DOC_NO    = SY-DATUM .                            "参考凭证
    ENDAT.
    LOOP AT LT_ZFPAMT ASSIGNING FIELD-SYMBOL(<FS_ITEM>) WHERE ZFPSM = <FS_HEAD>-ZFPSM.
      LV_WAERS = <FS_ITEM>-WAERS.
      LV_LIFNR = <FS_ITEM>-LIFNR_JS.
      IF LS_DOCUMENTHEADER-HEADER_TXT IS INITIAL.
        LS_DOCUMENTHEADER-HEADER_TXT = <FS_ITEM>-NAME1_JS && <FS_HEAD>-BUDAT_JH+0(4) && <FS_HEAD>-BUDAT_JH+4(2) && '包装费补差发票'.
        LV_TEXT = LS_DOCUMENTHEADER-HEADER_TXT.
      ENDIF.
      LV_ITEMNO = LV_ITEMNO + 1.
      LS_ACCOUNTGL-ITEMNO_ACC = LV_ITEMNO.                        "行项目
      LS_ACCOUNTGL-GL_ACCOUNT = '8027000001'.                  "统驭科目
      LS_ACCOUNTGL-COSTCENTER = <FS_ITEM>-KOSTL.                  "成本中心
      LS_ACCOUNTGL-TAX_CODE   = <FS_ITEM>-ZFPSM.                  "发票税码
      LS_ACCOUNTGL-COMP_CODE  = <FS_HEAD>-BUKRS.                  "公司代码
      LS_ACCOUNTGL-ITEM_TEXT  =  LS_DOCUMENTHEADER-HEADER_TXT.    "行项目文本
      APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.

*金额
      LS_CURRENCYAMOUNT-ITEMNO_ACC  = LV_ITEMNO.                   "行项目
      LS_CURRENCYAMOUNT-CURRENCY    = <FS_ITEM>-WAERS.             "货币码
      LS_CURRENCYAMOUNT-AMT_DOCCUR  = <FS_ITEM>-ZFPAMT1 .          "
      APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
      CLEAR LS_CURRENCYAMOUNT.

      LS_ITEMEXT-POSNR = LV_ITEMNO.
      IF <FS_ITEM>-ZFPAMT1 > 0.
        LS_ITEMEXT-BSCHL = '40'.
      ELSE.
        LS_ITEMEXT-BSCHL = '50'.
      ENDIF.
      IF <FS_ITEM>-ZFPAMT1 < 0.
        LS_ITEMEXT-XNEGP = 'X'.
      ELSE.
        LS_ITEMEXT-XNEGP = ''.
      ENDIF.
      LS_EXTENSION2-STRUCTURE   = 'ZDOC_EXTEN'.
      LS_EXTENSION2-VALUEPART1 = LS_ITEMEXT.
      APPEND LS_EXTENSION2 TO LT_EXTENSION2.
      CLEAR:LS_EXTENSION2,LS_ITEMEXT.

      SUM_ZFPAMT1 = SUM_ZFPAMT1 + <FS_ITEM>-ZFPAMT1.
      CLEAR:LS_ACCOUNTGL,LS_CURRENCYAMOUNT.
    ENDLOOP.
  ENDLOOP.

  LOOP AT LT_ZFPNM_HEAD ASSIGNING <FS_ZFPNM>.
    LV_ITEMNO = LV_ITEMNO + 1.
    LS_ACCOUNTGL-ITEMNO_ACC = LV_ITEMNO .
    LS_ACCOUNTGL-GL_ACCOUNT = '2171010400'.
    LS_ACCOUNTGL-COMP_CODE  = <FS_ZFPNM>-BUKRS.
    LS_ACCOUNTGL-ALLOC_NMBR = <FS_ZFPNM>-ZFPNM.
    APPEND LS_ACCOUNTGL TO LT_ACCOUNTGL.

    LS_ITEMEXT-POSNR = LV_ITEMNO.
    IF <FS_ZFPNM>-ZFPSE_SUM > 0.
      LS_ITEMEXT-BSCHL = '40'.
    ELSE.
      LS_ITEMEXT-BSCHL = '50'.
    ENDIF.
    LS_ITEMEXT-XNEGP = ''.

    LS_EXTENSION2-STRUCTURE   = 'ZDOC_EXTEN'.
    LS_EXTENSION2-VALUEPART1 = LS_ITEMEXT.
    APPEND LS_EXTENSION2 TO LT_EXTENSION2.
    CLEAR:LS_ITEMEXT, LS_EXTENSION2 .
    LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO .
    LS_CURRENCYAMOUNT-AMT_DOCCUR = <FS_ZFPNM>-ZFPSE_SUM.
    LS_CURRENCYAMOUNT-CURRENCY = <FS_ZFPNM>-WAERS.
    APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.
    CLEAR:LS_CURRENCYAMOUNT.
  ENDLOOP.
*应付凭证行项目
  LV_ITEMNO = LV_ITEMNO + 1.
  LS_ACCOUNTPAYABLE-ITEMNO_ACC = LV_ITEMNO .
  LS_ACCOUNTPAYABLE-BLINE_DATE = P_BUDAT .
  LS_ACCOUNTPAYABLE-VENDOR_NO = LV_LIFNR.
  LS_ACCOUNTPAYABLE-ITEM_TEXT = LV_TEXT.
  LS_ACCOUNTPAYABLE-COMP_CODE = LV_BUKRS.
  SELECT SINGLE AKONT
    INTO LS_ACCOUNTPAYABLE-GL_ACCOUNT
    FROM LFB1
   WHERE LIFNR = LV_LIFNR
     AND BUKRS = LV_BUKRS.
  APPEND LS_ACCOUNTPAYABLE TO LT_ACCOUNTPAYABLE.

  LS_CURRENCYAMOUNT-ITEMNO_ACC = LV_ITEMNO.
  LS_CURRENCYAMOUNT-AMT_DOCCUR = LV_ZFPHS * ( -1 ).
  LS_CURRENCYAMOUNT-CURRENCY = LV_WAERS.
  APPEND LS_CURRENCYAMOUNT TO LT_CURRENCYAMOUNT.

  "记账编码
  LS_ITEMEXT-POSNR = LV_ITEMNO.
  IF LS_CURRENCYAMOUNT-AMT_DOCCUR > 0.
    LS_ITEMEXT-BSCHL = '21'.
  ELSE.
    LS_ITEMEXT-BSCHL = '31'.
  ENDIF.
  LS_EXTENSION2-STRUCTURE   = 'ZDOC_EXTEN'.
  LS_EXTENSION2-VALUEPART1 = LS_ITEMEXT.
  APPEND LS_EXTENSION2 TO LT_EXTENSION2.
  CLEAR:LS_ITEMEXT, LS_EXTENSION2 .
      CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
      EXPORTING
        DOCUMENTHEADER = LS_DOCUMENTHEADER
      IMPORTING
        OBJ_KEY        = LV_OBJ_KEY
      TABLES
        ACCOUNTGL      = LT_ACCOUNTGL
        ACCOUNTPAYABLE = LT_ACCOUNTPAYABLE
        CURRENCYAMOUNT = LT_CURRENCYAMOUNT
        RETURN         = LT_RETURN
        EXTENSION2     = LT_EXTENSION2.
    READ TABLE LT_RETURN INTO LS_RETURN WITH KEY TYPE = 'E'.
    IF SY-SUBRC NE 0.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT = 'X'.
    ELSE.
      LOOP AT  LT_RETURN INTO LS_RETURN WHERE TYPE = 'E' OR TYPE = 'A'.
        LV_MSG = LV_MSG && LS_RETURN-MESSAGE.
        CLEAR:LS_RETURN.
      ENDLOOP.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK' .
     ENDIF.

凭证预览效果图
在这里插入图片描述

FBV0冲销(未过账)

在这里插入图片描述
在这里插入图片描述

FB08冲销(已过帐)

在这里插入图片描述

参考链接:BAPI_ACC_DOCUMENT_POST 增强

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 在Unity中,雨天场景是一个很常见的场景,为了方便制作,我们可以使用预制体来创建雨天效果。预制体是一种Unity中的可复用资源,它保存了一组游戏对象,可以在需要的时候进行实例化使用。 首先,我们需要创建一个雨滴的模型作为游戏对象,并将其设置为粒子系统,使用粒子效果创建出水滴下落的效果。这个模型需要设置一些参数,如颜色、速度、数量、大小等,以让雨滴的效果更加逼真。 接着,我们需要将这个雨滴模型设置为预制体。在预制体模式下添加预制体,将雨滴模型加入到预制体中,并保存预制体。这样我们就可以在其他场景或其他项目中使用这个雨滴预制体了。 在使用预制体时,我们可以直接拖拽雨滴预制体到场景中即可创建出雨滴效果,并根据需要调整一些参数,如场景中的雨滴数量、掉落的速度等。 总之,利用Unity中的预制体,我们可以非常方便地创建出雨天效果,提高我们的游戏开发效率。 ### 回答2: Unity 中的雨预制体可以用于创建逼真的雨水效果,为游戏界面增添一些真实感。其中,预制体是一个可以预先设置属性的对象,方便在游戏中进行调用。使用雨预制体,我们可以设置雨滴大小、密度等参数,还可以为雨水添加音效、粒子效果等,增添更多的交互和视觉效果。 为了创建雨预制体,在 Unity 的资源目录中新建一个 Particle Systems,调整参数使其模拟雨滴的运动轨迹和外观,添加声音和效果后进行组合,形成一个完整的雨预制体。 有了雨预制体后,我们就可以在游戏中使用它,通过脚本进行调用来实现各种雨滴效果。比如,在某个场景中加载雨预制体,使得场景中出现逼真的雨滴效果,为游戏增添一定的视觉效果。 总的来说,Unity 的雨预制体是游戏开发中不可缺少的一部分。它可以增加游戏的逼真感,同时也能帮助开发者快速创建雨水效果,是游戏开发中不可缺少的利器。 ### 回答3: Unity 是一款非常强大的游戏引擎,可以用于开发各种类型的游戏。其中,雨效果是游戏中常见的特效之一,可以增强游戏的真实感和沉浸感。为了便于开发者使用,Unity 提供了下雨预制体,可以直接在游戏中使用。 下雨预制体包括多个元素,例如雨滴、水珠、云层等。使用者可以自由调整这些元素的样式、数量、速度、密度等参数,以实现不同的雨效果。此外,预制体还提供了丰富的动画效果,例如雨滴落地时的溅开效果、雨滴在物体表面的流动效果等。 在使用下雨预制体时,开发者只需将其拖拽到场景中即可。可以自行调整预制体在场景中的位置和大小,以适应不同的场景需求。同时,开发者还可以通过代码实现更精细的雨效果,例如调整雨滴的颜色、透明度、大小等。 总之,Unity 下雨预制体是游戏开发中非常实用的一种特效资源,可以帮助开发者快速、方便地创建出逼真的雨效果,提升游戏的质量和观赏度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值