SAP中Product Orders(生产订单)相关函数BAPI

项目中,生产订单的状态是了解生产过程的主要依据,也是自开发报表中常用到的,下面是生产订单状态的几个函数以及生产订单技术关闭、生产订单报工的几个函数,希望对用到的兄弟有所帮助。

[相关表]

JEST-对象的系统状态(I****)和用户状态(E****)

JSTO-状态对象信息

TJ02T-系统状态文本

-用户状态文本

 

【锁对象】:生产订单锁对象  ESORDER

函数:  ENQUEUE_ESORDER,  DEQUEUE_ESORDER

 

[函数1]:检查多个对象的状态并过滤

    CALL FUNCTION 'STATUS_CHECK_MULTI'
      EXPORTING
        status      = cns_stat_20  "系统状态或用户状态
        flg_exclude = cns_active   "X or space
      TABLES
        OBJECTS     = gt_objnr_tab.

 

[函数2]:读取对象的所有有效状态的文本

 

       CALL FUNCTION 'STATUS_TEXT_EDIT'
      EXPORTING
*       CLIENT                  = SY-MANDT
*       FLG_USER_STAT           = ' '
        objnr                   = <fs_aufk>-objnr
        only_active             = 'X'
        spras                   = sy-langu
*       BYPASS_BUFFER           = ' '
     IMPORTING
*       ANW_STAT_EXISTING       =
*       E_STSMA                 =
        line                    = <fs_aufk>-sttxt
*       USER_LINE               =
*       STONR                   =
     EXCEPTIONS
       object_not_found        = 1
       OTHERS                  = 2

 

[函数3]:读取单个对象的对象状态

       CALL FUNCTION 'STATUS_OBJECT_READ'
      EXPORTING
        client           = sy-mandt
        objnr            = up_objnr
      IMPORTING
        e_jsto           = ls_jsto
      EXCEPTIONS
        object_not_found = 1
        OTHERS           = 2.

 

[函数4]:改变对象用户状态

       CALL FUNCTION 'I_CHANGE_STATUS'
      EXPORTING
        objnr          = up_objnr
        estat_inactive = cns_stat_20
        estat_active   = cns_stat_10
        stsma          = ls_jsto-stsma
      EXCEPTIONS
        cannot_update  = 1
        OTHERS         = 2.

注意:用户状态改变时,一个状态设置为激活,另一个状态需要设置为非激活

 

【函数5】:改变对象系统状态

     CALL FUNCTION 'STATUS_CHANGE_INTERN'
       EXPORTING
*       CHECK_ONLY                = ' '
        client                    = sy-mandt
        objnr                     = up_objnr
*       ZEILE                     = ' '
*       SET_CHGKZ                 =
      IMPORTING
       error_occurred            = lv_error
       object_not_found          = lv_object_not_found
       status_inconsistent       = lv_status_inconsistent
       status_not_allowed        = lv_status_not_allowed
      TABLES
        status                    = tp_jstat
      EXCEPTIONS
       object_not_found          = 1
       status_inconsistent       = 2
       status_not_allowed        = 3
       OTHERS                    = 4

注意:在Tables参数Status中,需要一并准备好相互切换的两组状态,一个设置为激活,另一个设置为非激活

 

【函数6】:订单技术关闭

 

     CALL FUNCTION 'BAPI_PRODORD_COMPLETE_TECH'
* EXPORTING
*   SCOPE_COMPL_TECH         = '1'
*   WORK_PROCESS_GROUP       = 'COWORK_BAPI'
*   WORK_PROCESS_MAX         = 99
   IMPORTING
     return                   = ls_return
   TABLES
     orders                   = lt_aufnr
     detail_return            = lt_detail
*   APPLICATION_LOG          =

 

 

【函数6】:生产订单报工函数

          DATA:IT_TT        TYPE TABLE OF BAPI_PP_TIMETICKET,
               WA_TT        TYPE BAPI_PP_TIMETICKET,
               IT_DR        TYPE TABLE OF BAPI_CORU_RETURN,
               WA_DR        TYPE BAPI_CORU_RETURN,
               WA_RETURN    TYPE BAPIRET1,
               I_ERRMSG     TYPE BAPIRET2-MESSAGE,"记录返回消息中的错误消息
               I_TIME(14)   TYPE C, "传送时间
               I_ERRFLG     TYPE C,
               I_COUNT      TYPE I."用于对导入数据的行数记录

              CLEAR:WA_TT,
                    I_COUNT,
                    I_ERRMSG,
                    I_ERRFLG,
                    WA_RETURN.

*          * 订单号转换
              CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
                EXPORTING
                  INPUT = ITAB_SER05-PPAUFNR
                IMPORTING
                  OUTPUT = WA_TT-ORDERID.
              WA_TT-OPERATION = V_VORNR.
              WA_TT-YIELD      = '1'.
              WA_TT-POSTG_DATE = SY-DATUM.


          DATA:C_VORNR TYPE AFVC-VORNR,
               C_AUFNR TYPE AFKO-AUFNR,
               C_APLZL TYPE AFVC-APLZL,
               C_AUFPL TYPE AFVC-AUFPL,
               WA_AFVV TYPE AFVV.

              CLEAR IT_TT.
              REFRESH IT_TT.

              CLEAR IT_DR.
              REFRESH IT_DR.

              SELECT SINGLE AFVC~APLZL AFVC~AUFPL
                            INTO (C_APLZL, C_AUFPL)
                            FROM AFVC INNER JOIN AFKO
                            ON    AFVC~AUFPL = AFKO~AUFPL
                            WHERE AFKO~AUFNR = WA_TT-ORDERID
                            AND   AFVC~VORNR = V_VORNR.

              SELECT SINGLE * FROM AFVV INTO WA_AFVV
                              WHERE AUFPL = C_AUFPL
                              AND   APLZL = C_APLZL.

              WA_TT-FIN_CONF = '1'.

              WA_TT-CONF_ACTI_UNIT1 = WA_AFVV-VGE01.
              WA_TT-CONF_ACTI_UNIT2 = WA_AFVV-VGE02.
              WA_TT-CONF_ACTI_UNIT3 = WA_AFVV-VGE03.
              WA_TT-CONF_ACTI_UNIT4 = WA_AFVV-VGE04.
              WA_TT-CONF_ACTI_UNIT5 = WA_AFVV-VGE05.
              WA_TT-CONF_ACTI_UNIT6 = WA_AFVV-VGE06.
              WA_TT-CONF_ACTIVITY1 = WA_TT-YIELD * WA_AFVV-VGW01 / WA_AFVV-BMSCH.
              WA_TT-CONF_ACTIVITY2 = WA_TT-YIELD * WA_AFVV-VGW02 / WA_AFVV-BMSCH.
              WA_TT-CONF_ACTIVITY3 = WA_TT-YIELD * WA_AFVV-VGW03 / WA_AFVV-BMSCH.
              WA_TT-CONF_ACTIVITY4 = WA_TT-YIELD * WA_AFVV-VGW04 / WA_AFVV-BMSCH.
              WA_TT-CONF_ACTIVITY5 = WA_TT-YIELD * WA_AFVV-VGW05 / WA_AFVV-BMSCH.
              WA_TT-CONF_ACTIVITY6 = WA_TT-YIELD * WA_AFVV-VGW06 / WA_AFVV-BMSCH.
*          ************************

              APPEND WA_TT TO IT_TT.
              CALL FUNCTION 'BAPI_PRODORDCONF_CREATE_TT'   "主要是这个BAPI
                IMPORTING
                  RETURN        = WA_RETURN
                TABLES
                  TIMETICKETS   = IT_TT
                  DETAIL_RETURN = IT_DR.

*             处理BAPI错误
              CLEAR I_ERRFLG.
              CLEAR I_ERRMSG.
              LOOP AT IT_DR INTO WA_DR.
                IF WA_DR-TYPE = 'E'.
                  I_ERRFLG = 'X'.

                  I_ERRMSG = WA_DR-MESSAGE.
                ELSE.

                ENDIF.

                IF I_ERRFLG IS INITIAL.
                  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                    EXPORTING
                      WAIT = 'X'.

                ELSE.
                  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

                      MESSAGE E232(ZLC) WITH I_ERRMSG.
                      DELETE FROM ZPPBG  WHERE SERNR = RESULT1-SERNR.

                ENDIF.
              ENDLOOP.

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在SAP生产订单成本可以通过以下方式计入质量损失: 1. 创建一个特殊的质量损失订单,将损失的数量和成本记录在该订单。 2. 在生产订单,使用“质量管理”模块的“检验结果记录”功能来记录质量损失的数量和成本。 3. 在生产订单,使用“质量管理”模块的“缺陷管理”功能来记录质量损失的数量和成本。 无论哪种方法,都需要在SAP系统设置相应的成本分配规则,以确保质量损失的成本正确地分配到相应的成本心或会计科目。 ### 回答2: 在SAP生产订单成本是通过不同的成本组成部分计算得出的,其也包括了质量损失的成本,但是质量损失的成本需要通过特定的方式计入。 质量损失成本是属于非产品成本的一种,可以通过以下两种方式计入生产订单: 1.成本分摊:在生产订单设置一个特殊的成本分摊规则来将质量损失的成本分摊到合适的成本期间。这种方式可以直接将损失的成本分摊到订单的原材料、直接人工、间接人工、机械等成本项目。 2.按比例计提:这种方式可以将质量损失的成本按一定比例计提到成本。在配置定期定额计提程序时,可以将质量损失的成本加入到定额计提项。计提时,系统会根据设定比例计算质量损失的成本,并将其计入生产订单成本。 无论是哪种方式,都需要将损失的成本准确记录在SAP。在生产过程,可以通过扫描条码或者输入数量等信息来将损失的产品和材料准确记录在系统。如果是由于工艺问题导致的质量损失,则需要及时调整工艺流程,优化品质管理,从根本上解决问题。 总之,SAP生产订单成本计算和质量管理方面提供了多种功能和工具,可以帮助企业更加完整、精确地把握生产订单成本质量损失的成本。只有这样,才能实现更好的成本控制和业务管理。 ### 回答3: SAP生产订单成本包括直接材料成本、直接人工成本和制造费用。如果在生产过程发生了质量损失,需要将这些成本计入其。 第一步是确定质量损失的性质和原因。质量损失可以分为内部质量损失和外部质量损失。内部质量损失是指在生产过程发现的不合格品,还在企业内部,可能会被修复或回收利用。外部质量损失是指已经交付给顾客的,不符合质量标准的产品,会造成损失和追溯成本。原因可能包括生产流程、设备设置、人员技能、物料质量和供应商等。 第二步是确定损失的成本。损失的成本包括直接成本和间接成本。直接成本是指直接与损失联系的成本,如损坏的原材料和废品的生产成本。间接成本是指与损失相关,但难以明确的成本,如停工时间、工人等待时间、再制造时间和捕捉和分析工作。 第三步是把成本计入生产订单成本。可以通过使用SAP的质量管理模块,把损失的成本分配到相应的生产订单。质量检验员可以在系统更新检验结果,并把不合格品关联到相应的生产订单。然后,系统就会自动计算损失的成本并记录在生产订单。这些成本,可以直接从生产订单减去,以反映实际的生产成本。 在SAP生产订单成本的计算需要考虑质量损失,这可以通过细心的质量管理和数据录入来实现。只有这样,才能准确地反映企业的质量成本,及时调整经营策略。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值