成本中心领用接口

广州某粮油公司的接口,因为OA太死板,所以这边接口统一做成字段,值  的形式传递。

抬头结构:ZMMS001

KOSTL    1 类型    KOSTL    CHAR    10    0    成本中心
BLDAT    1 类型    BLDAT    DATS    8    0    凭证中的凭证日期
XBLNR    1 类型    XBLNR    CHAR    16    0    参考凭证编号 

行项目结构:ZMMS002

ZEILE    1 类型    MBLPO    NUMC    4    0    物料凭证中的项目
MATNR    1 类型    MATNR    CHAR    18    0    物料号
WERKS    1 类型    WERKS_D    CHAR    4    0    工厂
LGORT    1 类型    LGORT_D    CHAR    4    0    库存地点
ERFMG    1 类型    ERFMG    QUAN    13    3    以输入单位计的数量
SGTXT    1 类型    SGTXT    CHAR    50    0    项目文本
ERFME    1 类型    ERFME    UNIT    3    0    条目单位

函数代码:

FUNCTION ZMM_OAMB1A.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  TABLES
*"      T_TAB STRUCTURE  ZJKS001 OPTIONAL
*"      T_TAB_I STRUCTURE  ZJKS002 OPTIONAL
*"----------------------------------------------------------------------

  DATA:S_TAB TYPE ZJKS001."表头结构
  DATA:S_TAB_I TYPE ZJKS002."表体结构
  FIELD-SYMBOLS:  <DYN_WA>,"表头
                  <DYN_LA>,"表体
                  <DYN_FIELD>."字段
  DATA:GS_ZTMM_WADAT TYPE ZTMM_WADAT.
  DATA:GT_ZMB1A01 TYPE TABLE OF ZMB1A01,
       GS_ZMB1A01 LIKE LINE OF  GT_ZMB1A01.
  DATA:LV_NUM TYPE N.

  DATA:LS_TABH TYPE ZMMS001,
       LS_TABI TYPE ZMMS002.
  DATA:LV_FUNC TYPE CHAR50."结构ID
  DATA:LV_XBLNR TYPE XBLNR1.

  DATA:GS_HEAD TYPE          BAPI2017_GM_HEAD_01,
       GV_CODE TYPE          BAPI2017_GM_CODE VALUE ‘03‘,
       GT_ITEM TYPE TABLE OF BAPI2017_GM_ITEM_CREATE,
       GS_ITEM TYPE          BAPI2017_GM_ITEM_CREATE,
       GT_RETU TYPE TABLE OF BAPIRET2,
       GS_RETU TYPE          BAPIRET2,
       GV_MDOC TYPE          BAPI2017_GM_HEAD_RET-MAT_DOC.

  DEFINE MESGADD."返回消息赋值
    S_TAB-FIELDNAME = &1.
    S_TAB-VALUE = &2.
    APPEND S_TAB TO T_TAB.
  END-OF-DEFINITION.

  "************************************************************正式程序
  READ TABLE T_TAB INTO S_TAB WITH KEY FIELDNAME = ‘FUNCTION‘.
  IF SY-SUBRC = 0.
    LV_FUNC = S_TAB-VALUE.
    IF LV_FUNC = ‘OAMB1A‘.
    ELSE.
      REFRESH:T_TAB.
      MESGADD:‘RETURN‘ ‘E‘,
              ‘MESSAGE‘ ‘引用错误函数,请联系管理员!‘.
      RETURN.
    ENDIF.
  ELSE.
    REFRESH:T_TAB.
    MESGADD:‘RETURN‘ ‘E‘,
            ‘MESSAGE‘ ‘未指定函数!‘.
    RETURN.
  ENDIF.

  IF T_TAB[] IS INITIAL OR T_TAB_I[] IS INITIAL.
    REFRESH:T_TAB.
    MESGADD:‘RETURN‘ ‘E‘,
            ‘MESSAGE‘ ‘传入参数不完整,需要完整的表头表体信息!‘.
    RETURN.
  ENDIF.

  ASSIGN LS_TABH TO <DYN_WA>."表头结构
  ASSIGN LS_TABI TO <DYN_LA>."表体结构

  LOOP AT T_TAB INTO S_TAB."表头数据装换
    ASSIGN COMPONENT S_TAB-FIELDNAME OF STRUCTURE <DYN_WA> TO <DYN_FIELD>.
    IF SY-SUBRC = 0.
      <DYN_FIELD> = S_TAB-VALUE.
    ENDIF.
  ENDLOOP.

  IF LS_TABH-KOSTL IS INITIAL.
    MESGADD:‘RETURN‘ ‘E‘,
            ‘MESSAGE‘ ‘成本中心不能为空!‘.
  ENDIF.

  GS_HEAD-REF_DOC_NO = LS_TABH-XBLNR.
  GS_HEAD-PR_UNAME = SY-UNAME.

  CALL FUNCTION ‘NUMBER_RANGE_ENQUEUE‘
    EXPORTING
      OBJECT           = ‘ZOALS‘
    EXCEPTIONS
      FOREIGN_LOCK     = 1
      OBJECT_NOT_FOUND = 2
      SYSTEM_FAILURE   = 3
      OTHERS           = 4.
  IF SY-SUBRC = 0.
    CALL FUNCTION ‘NUMBER_GET_NEXT‘
      EXPORTING
        NR_RANGE_NR             = ‘01‘
        OBJECT                  = ‘ZOALS‘
        IGNORE_BUFFER           = ‘X‘
      IMPORTING
        NUMBER                  = GS_ZMB1A01-ZJLLSH
      EXCEPTIONS
        INTERVAL_NOT_FOUND      = 1
        NUMBER_RANGE_NOT_INTERN = 2
        OBJECT_NOT_FOUND        = 3
        QUANTITY_IS_0           = 4
        QUANTITY_IS_NOT_1       = 5
        INTERVAL_OVERFLOW       = 6
        BUFFER_OVERFLOW         = 7
        OTHERS                  = 8.
    IF SY-SUBRC = 0.
      CALL FUNCTION ‘NUMBER_RANGE_DEQUEUE‘
        EXPORTING
          OBJECT           = ‘ZOALS‘
        EXCEPTIONS
          OBJECT_NOT_FOUND = 1
          OTHERS           = 2.
    ENDIF.
  ENDIF.

  LOOP AT T_TAB_I INTO S_TAB_I."表体数据装换
    AT NEW COL.
      CLEAR LS_TABI.
    ENDAT.
    ASSIGN COMPONENT S_TAB_I-FIELDNAME OF STRUCTURE <DYN_LA> TO <DYN_FIELD>.
    IF SY-SUBRC = 0.
      <DYN_FIELD> = S_TAB_I-VALUE.
    ENDIF.

    AT END OF COL.
      LV_NUM = LV_NUM + 1.
      IF LS_TABI-MATNR IS INITIAL.
        MESGADD:‘RETURN‘ ‘E‘,
                ‘MESSAGE‘ ‘物料编码不能为空!‘.
        RETURN.
      ENDIF.
      IF LS_TABI-WERKS IS INITIAL.
        MESGADD:‘RETURN‘ ‘E‘,
                ‘MESSAGE‘ ‘工厂编码不能为空!‘.
        RETURN.
      ENDIF.
      IF LS_TABI-LGORT IS INITIAL.
        MESGADD:‘RETURN‘ ‘E‘,
                ‘MESSAGE‘ ‘库位编码不能为空!‘.
        RETURN.
      ENDIF.
      IF LS_TABI-ERFMG IS INITIAL.
        MESGADD:‘RETURN‘ ‘E‘,
                ‘MESSAGE‘ ‘数量字段不能为空!‘.
        RETURN.
      ENDIF.
      IF LS_TABI-ERFME IS INITIAL.
        MESGADD:‘RETURN‘ ‘E‘,
                ‘MESSAGE‘ ‘单位不能为空!‘.
        RETURN.
      ENDIF.
      CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘
        EXPORTING
          INPUT  = LS_TABI-MATNR
        IMPORTING
          OUTPUT = LS_TABI-MATNR.

      CALL FUNCTION ‘CONVERSION_EXIT_CUNIT_INPUT‘
        EXPORTING
          INPUT          = LS_TABI-ERFME
          LANGUAGE       = SY-LANGU
        IMPORTING
          OUTPUT         = LS_TABI-ERFME
        EXCEPTIONS
          UNIT_NOT_FOUND = 1
          OTHERS         = 2.
      IF SY-SUBRC <> 0.
      ENDIF.

      GS_ITEM-MATERIAL = LS_TABI-MATNR.
      GS_ITEM-PLANT = LS_TABI-WERKS.
      IF GS_HEAD-DOC_DATE IS INITIAL.
        SELECT SINGLE * INTO CORRESPONDING FIELDS OF GS_ZTMM_WADAT
           FROM ZTMM_WADAT
           WHERE WERKS = LS_TABI-WERKS
           AND SDATE = SY-DATUM
           AND ETIME >= SY-UZEIT
           AND STIME <= SY-UZEIT.
        IF SY-SUBRC = 0.
          GS_HEAD-DOC_DATE = GS_ZTMM_WADAT-BUDAT.
          GS_HEAD-PSTNG_DATE = GS_ZTMM_WADAT-BUDAT.
        ELSE.
          GS_HEAD-DOC_DATE = SY-DATUM.
          GS_HEAD-PSTNG_DATE = SY-DATUM.
        ENDIF.
      ENDIF.

      GS_ITEM-STGE_LOC = LS_TABI-LGORT.
      GS_ITEM-MOVE_TYPE = ‘201‘.
      GS_ITEM-ENTRY_QNT = LS_TABI-ERFMG.
      GS_ITEM-ENTRY_UOM = LS_TABI-ERFME.
      IF LS_TABH-KOSTL IS INITIAL.
        MESGADD:‘RETURN‘ ‘E‘,
                ‘MESSAGE‘ ‘传递值中成本中心为空,请联系管理员!‘.
        RETURN.
      ENDIF.

      CALL FUNCTION ‘CONVERSION_EXIT_ALPHA_INPUT‘
        EXPORTING
          INPUT  = LS_TABH-KOSTL
        IMPORTING
          OUTPUT = LS_TABH-KOSTL.

*      CONCATENATE ‘000‘ LS_TABH-KOSTL INTO GS_ITEM-COSTCENTER.
*      CONDENSE GS_ITEM-COSTCENTER NO-GAPS.
      GS_ITEM-COSTCENTER = LS_TABH-KOSTL.
      GS_ITEM-ITEM_TEXT = LS_TABI-SGTXT.
      APPEND GS_ITEM TO GT_ITEM.

      "ADD BY LY FOR LOG
*      GS_ZMB1A01-ZJLLSH =
      GS_ZMB1A01-POSNR = LV_NUM.
      GS_ZMB1A01-XBLNR = GS_HEAD-REF_DOC_NO.
      GS_ZMB1A01-KOSTL = GS_ITEM-COSTCENTER.
      GS_ZMB1A01-MATNR = GS_ITEM-MATERIAL.
      GS_ZMB1A01-WERKS = GS_ITEM-PLANT.
      GS_ZMB1A01-LGORT = GS_ITEM-STGE_LOC.
      GS_ZMB1A01-ERFMG = GS_ITEM-ENTRY_QNT.
      GS_ZMB1A01-ERFME = GS_ITEM-ENTRY_UOM.
      GS_ZMB1A01-DAT = SY-DATUM.
      GS_ZMB1A01-TIM = SY-UZEIT.
      APPEND GS_ZMB1A01 TO GT_ZMB1A01.
      "ADD BY LY FOR LOG
    ENDAT.
  ENDLOOP.

  CLEAR:LV_XBLNR.
  SELECT SINGLE XBLNR INTO LV_XBLNR
    FROM MKPF WHERE XBLNR = LS_TABH-XBLNR.

  IF LV_XBLNR IS NOT INITIAL.
    MESGADD:‘RETURN‘ ‘S‘.
    RETURN.
  ENDIF.

  CALL FUNCTION ‘BAPI_GOODSMVT_CREATE‘
    EXPORTING
      GOODSMVT_HEADER  = GS_HEAD
      GOODSMVT_CODE    = GV_CODE
    IMPORTING
*     GOODSMVT_HEADRET =
      MATERIALDOCUMENT = GV_MDOC
*     MATDOCUMENTYEAR  =
    TABLES
      GOODSMVT_ITEM    = GT_ITEM
      RETURN           = GT_RETU.

  READ TABLE GT_RETU INTO GS_RETU WITH KEY TYPE = ‘E‘.
  IF SY-SUBRC = 0.
    LOOP AT GT_RETU INTO GS_RETU WHERE TYPE = ‘E‘.
      MESGADD:‘RETURN‘ ‘E‘,
            ‘MESSAGE‘ GS_RETU-MESSAGE.
    ENDLOOP.
    CALL FUNCTION ‘BAPI_TRANSACTION_ROLLBACK‘.
  ELSE.

    LOOP AT GT_ZMB1A01 INTO GS_ZMB1A01.
      GS_ZMB1A01-MBLNR = GV_MDOC.
      MODIFY GT_ZMB1A01 FROM GS_ZMB1A01.
    ENDLOOP.

    MODIFY ZMB1A01 FROM TABLE GT_ZMB1A01.

    MESGADD:‘RETURN‘ ‘S‘,
            ‘MBLNR‘  GV_MDOC.
    CALL FUNCTION ‘BAPI_TRANSACTION_COMMIT‘
      EXPORTING
        WAIT = ‘X‘.
  ENDIF.

ENDFUNCTION.
时间: 2024-10-20 14:38:57

成本中心领用接口的相关文章

初识Django —Python API接口编程入门

初识Django -Python API接口编程入门 一.WEB架构的简单介绍 Django是什么? Django是一个开放源代码的Web应用框架,由Python写成.我们的目标是用Python语言,基于Django框架,利用MVC模型,实现后台方面的针对数据库的API开发.先了解一下互联网的WEB架构, 如上图: 互联网的WEB架构大致分为三层,web层.app层和数据库层.Web层:如apache网站服务器:app层主要是应用业务:DB指后台数据库.随着互联网的高速发展,网站访问量的增长.数

转载]SAP囚徒 - 通过销售订单领用到成本中心,FI替代

转载]SAP囚徒 - 通过销售订单领用到成本中心,FI替代 原文地址:SAP囚徒 - 通过销售订单领用到成本中心,FI替代实现不同成本中心记账科目不同作者:SAP囚徒 物品领用通常是库存管理的范畴,直接移动类型201计入成本中心即可:但是也有通过销售订单直接领用到成本中心,记费用科目,比如:给客户送少量的样品可以使用销售订单的成本中心来是实现(公司直接送东西给客户有偷税的嫌疑,这里忽略不计): 系统操作步骤如下: 1.VA01创建可以录入成本中心的免费订单 2.VL01N.VL02N对销售订单过

微信公众号可通过现金红包接口发放微信支付现金红包(附开发教程)

农历新年将至,支付宝红包打了一仗,微信在朋友圈屏蔽了它的分享,但单防守还不行,进攻才是最好的防守.昨日,微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.微信公众号也可以发放现金红包了! 通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果. 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领

具体解释EBS接口开发之WIP模块接口

整体说明 文档目的 本文档针对WIP模块业务功能和接口进行分析和研究,对採用并发请求方式和调用API方式分别进行介绍 内容 WIP模块经常使用标准表简单介绍 WIP事物处理组成 WIP相关业务流程 WIP相关API研究事例 (十)參考文档(七)採购相关的一些知识 (一)WIP模块经常使用标准表简单介绍 1.1   经常使用标准表 例如以下表中列出了与WIP导入相关的表和说明: 表名 说明 其它信息 BOM_STRUCTURES_B BOM头信息 BOM_COMPONENTS_B BOM组件信息

接口Interface和抽象类abstract class的区别

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意. 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解.对于设计意图的理解是否正确.合理.

天气预报接口和城市代码

今天在研究微信天气预报的时候,获取到json数据,后来json_decode为对象,但是去看不懂他的意思,于是百度搜索到的结果: { "weatherinfo": { <!-- 基本信息 --> "city":"北京", "city_en":"beijing", "date_y":"2012年8月14日", "date":"&

微信支付现金红包接口

微信支付现金红包接口正式开放,只需开通微信支付,即可接入现金红包.通过现金红包接口,公众号开发者可以策划相关运营活动,向用户发放微信支付现金红包,更好的达到品牌推广及回馈用户的效果.具体能力如下: 1.商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,这样的方式,允许商户灵活的应用于各种各样丰富的活动场景 2.领取到红包后,用户的资金直接进入微信零钱,避免繁复的领奖流程,带给用户微信支付原生的流畅体验 微信红包发送规则 1. 发送频率规则 ◆ 每分钟发送红包数量不得超过1800个: ◆

抽象类和接口的联系与区别

抽象类和接口联系与区别 关键字: 抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意. 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于

天气API接口大全(nohacks.cn 收集整理)

自序: 由nohacks.cn 收集整理,来源于网络,版权归原作者所有,基本收集了网络上能使用的大部分天气API接口,作者水平精力有限,难免有遗漏或错误的地方,欢迎反馈,作者网站:http://nohacks.cn 更新记录: 2015.3.2    更新云聚,增加天气网接口. 2015.2.28  增加百度天气图片,感谢网友彬子的反馈. 2015. 2.19 增加百度天气接口,更新中国天气网API. 目录: 1.  中国天气网 1.1  实时天气 API 接口(失效) 1.2  当天天气 AP