This website is not affiliated with, sponsored by, or approved by SAP AG.

Batch Create and Characteristics via BAPI (example)

Development (ABAP Development WorkBench, ABAP/4 programming)

Moderators: thx4allthefish, Snowy, Gothmog, YuriT

Batch Create and Characteristics via BAPI (example)

Postby NeilinOZ » Mon Jul 12, 2004 7:21 pm

Below is a very simple example of how to create a batch and then apply characteristics to it. I have been trying to do this for a while and finally got it to work. As a few others have asked the same question I thought I would post an example. You will obviously have to change the characteristic names to the ones in your system but you should get the idea of how it all works. If you use Cross Company Batches rather than plant specific,; swap out table MCHA for table MCH1.

Hope someone finds it usefull.

Code: Select all
*---------------------------------------------------------------------*
* Report  ZTESTBAPI                                                   *
* This is a dummy program designed to show how to create a batch and  *
* then apply/change characteristics via BAPI control.                 *
*---------------------------------------------------------------------*
REPORT  ztestbapi.

TABLES: klah, ksml, cabn.

* holds data for charcateristics with type NUM
DATA: BEGIN OF numtab OCCURS 0.
        INCLUDE STRUCTURE bapi1003_alloc_values_num.
DATA: END OF numtab.

* holds data for charcateristics with type CHAR/DATE
DATA: BEGIN OF chatab OCCURS 0.
        INCLUDE STRUCTURE bapi1003_alloc_values_char.
DATA: END OF chatab.

* holds data for charcateristics with type CURR
DATA: BEGIN OF curtab OCCURS 0.
        INCLUDE STRUCTURE bapi1003_alloc_values_curr.
DATA: END OF curtab.

* Error return table
DATA: BEGIN OF rettab OCCURS 0.
        INCLUDE STRUCTURE bapiret2.
DATA: END OF rettab.

DATA: BEGIN OF it_ksml OCCURS 0.
        INCLUDE STRUCTURE ksml.
DATA: END OF it_ksml.

* characteristic names
DATA: BEGIN OF it_cabn OCCURS 0,
        atinn LIKE cabn-atinn,
        atnam LIKE cabn-atnam,
        atfor LIKE cabn-atfor,
      END OF it_cabn.

DATA: BEGIN OF it_object OCCURS 0.
        INCLUDE STRUCTURE bapi1003_object_keys.
DATA: END OF it_object.

* example of an object key 00000000000730000007505847897897
DATA: w_object LIKE bapi1003_key-object.

* Change these defaults to suit your system
PARAMETERS: p_matnr LIKE mara-matnr    OBLIGATORY DEFAULT '7300000',
            p_werks LIKE t001w-werks   OBLIGATORY DEFAULT '0750',
            p_charg LIKE mcha-charg    OBLIGATORY DEFAULT '5847897898',
            p_lgort LIKE dfbatch-lgort OBLIGATORY DEFAULT '1000',
            p_klart LIKE klah-klart    OBLIGATORY DEFAULT '022',
            p_class LIKE klah-class    OBLIGATORY DEFAULT 'RETREAD'.

INITIALIZATION.
  PERFORM get_characteristics.

START-OF-SELECTION.
  PERFORM create_batch.
  PERFORM bapi_commit.
  PERFORM build_object_key.
  PERFORM extract_original_batch.

END-OF-SELECTION.
  PERFORM update_original_batch.
  PERFORM bapi_commit.

*---------------------------------------------------------------------*
*       FORM get_characteristics                                      *
*---------------------------------------------------------------------*
FORM get_characteristics.

* extract the characteristic names for KLART/CLASS
  CLEAR: klah, ksml, it_cabn.
  REFRESH it_cabn.

  SELECT SINGLE clint FROM klah
  INTO CORRESPONDING FIELDS OF klah
  WHERE klart = p_klart
    AND class = p_class.

  IF syst-subrc = 0.
    SELECT * FROM ksml
    INTO CORRESPONDING FIELDS OF ksml
    WHERE clint = klah-clint.
      SELECT SINGLE * FROM cabn
      INTO CORRESPONDING FIELDS OF cabn
      WHERE atinn = ksml-imerk.
      IF syst-subrc = 0.
        it_cabn-atinn = cabn-atinn.
        it_cabn-atnam = cabn-atnam.
        it_cabn-atfor = cabn-atfor.
        APPEND it_cabn.
      ENDIF.
    ENDSELECT.
  ENDIF.

ENDFORM.
*---------------------------------------------------------------------*
*       FORM create_batch                                             *
*---------------------------------------------------------------------*
FORM create_batch.

  CLEAR: rettab.
  REFRESH: rettab.

* create the batch using screen values, you will most likely have to
* determine the next batch number from the number range.

  CALL FUNCTION 'BAPI_BATCH_CREATE'
       EXPORTING
            material             = p_matnr
            batch                = p_charg
            plant                = p_werks
            batchstoragelocation = p_lgort
       TABLES
            return               = rettab.

ENDFORM.
*---------------------------------------------------------------------*
*       FORM build_object_key                                         *
*---------------------------------------------------------------------*
FORM build_object_key.

* build the object key
  CLEAR: it_object, rettab.
  REFRESH: it_object, rettab.

  it_object-key_field = 'MATNR'.
  it_object-value_int = p_matnr.
  APPEND it_object.

  it_object-key_field = 'WERKS'.
  it_object-value_int = p_werks.
  APPEND it_object.

  it_object-key_field = 'CHARG'.
  it_object-value_int = p_charg.
  APPEND it_object.

  CALL FUNCTION 'BAPI_OBJCL_CONCATENATEKEY'
       EXPORTING
            objecttable    = 'MCHA'
       IMPORTING
            objectkey_conc = w_object
       TABLES
            objectkeytable = it_object
            return         = rettab.

ENDFORM.
*---------------------------------------------------------------------*
*       FORM extract_original_batch                                   *
*---------------------------------------------------------------------*
FORM extract_original_batch.

* extract the original characteristic data if exists
  CLEAR:  numtab, chatab, curtab, rettab.
  REFRESH:  numtab, chatab, curtab, rettab.

  CALL FUNCTION 'BAPI_OBJCL_GETDETAIL'
       EXPORTING
            objectkey       = w_object
            objecttable     = 'MCHA'
            classnum        = p_class
            classtype       = p_klart
       TABLES
            allocvaluesnum  = numtab
            allocvalueschar = chatab
            allocvaluescurr = curtab
            return          = rettab.
ENDFORM.

*---------------------------------------------------------------------*
*       FORM update_original_batch                                    *
*---------------------------------------------------------------------*
FORM update_original_batch.

* Below are some examples of characteristics to update, obviously you
* would change these to match the ones in your system
* ATNAM is the characteristic name.

* find characteristic format in it_cabn and call update routine
  READ TABLE it_cabn WITH KEY atnam = 'TREAD'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam 'HW203'.

  READ TABLE it_cabn WITH KEY atnam = 'ORRETREAD'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '11225HW203C'.

  READ TABLE it_cabn WITH KEY atnam = 'CASINGCODE'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '7100044'.

  READ TABLE it_cabn WITH KEY atnam = 'CASINGSTATUS'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam 'CUSTOMER'.

  READ TABLE it_cabn WITH KEY atnam = 'CASEVAL'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '0'.

  READ TABLE it_cabn WITH KEY atnam = 'CUSTOMER'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '0276933500'.

  READ TABLE it_cabn WITH KEY atnam = 'FROMLOC'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '0584'.

  READ TABLE it_cabn WITH KEY atnam = 'BRAND'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam 'BRI'.

  READ TABLE it_cabn WITH KEY atnam = 'NOCAPS'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '1'.

  READ TABLE it_cabn WITH KEY atnam = 'RETURNLOC'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '0584'.

  READ TABLE it_cabn WITH KEY atnam = 'RECDATE'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '26.07.2004'.

  READ TABLE it_cabn WITH KEY atnam = 'SENTDATE'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '26.07.2004'.

  READ TABLE it_cabn WITH KEY atnam = 'FLOC'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '0750'.

  READ TABLE it_cabn WITH KEY atnam = 'AUTOCLAVE'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam '4'.

  READ TABLE it_cabn WITH KEY atnam = 'REPAIRCODE'.
  PERFORM update_table USING it_cabn-atfor it_cabn-atnam 'MINOR'.

* perform the update
  PERFORM bapi_change.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM update_table                                             *
*---------------------------------------------------------------------*
FORM update_table USING atfor atnam value.

* depending on data format, start building the characteristics table
* ready for update
  CASE atfor.
    WHEN 'NUM'.
      READ TABLE numtab WITH KEY charact = atnam.
      IF syst-subrc  = 0.
        numtab-value_from = value.
        MODIFY numtab INDEX syst-tabix.
      ELSE.
        numtab-charact = atnam.
        numtab-value_from = value.
        APPEND numtab.
      ENDIF.
    WHEN 'CURR'.

    WHEN 'CHAR' OR 'DATE'.
      READ TABLE chatab WITH KEY charact = atnam.
      IF syst-subrc  = 0.
        chatab-value_neutral = value.
        MODIFY chatab INDEX syst-tabix.
      ELSE.
        chatab-charact = atnam.
        chatab-value_neutral = value.
        APPEND chatab.
      ENDIF.
  ENDCASE.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM bapi_change                                              *
*---------------------------------------------------------------------*
FORM bapi_change.

* Apply the characteristics to the batch.
  CALL FUNCTION 'BAPI_OBJCL_CHANGE'
       EXPORTING
            objectkey          = w_object
            objecttable        = 'MCHA'
            classnum           = p_class
            classtype          = p_klart
       TABLES
            allocvaluesnumnew  = numtab
            allocvaluescharnew = chatab
            allocvaluescurrnew = curtab
            return             = rettab.
ENDFORM.
*---------------------------------------------------------------------*
*       FORM bapi_commit                                              *
*---------------------------------------------------------------------*
FORM bapi_commit.

* commit the changes
  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
ENDFORM.

Last edited by NeilinOZ on Sun Feb 12, 2012 5:00 pm, edited 1 time in total.
NeilinOZ
 
Posts: 69
Joined: Thu Mar 27, 2003 5:53 pm
Location: Adelaide Australia

Thanks, I needed this example.

Postby Guest » Fri Oct 29, 2004 9:34 am

NeilinOZ,

Thanks for taking the time to put this on sapfans. It has been very helpfull to me.

It still took some adapting form my specific use, because I had to check MCH1 instead of MCHA and create the key without the plant (WERKS), but without this example, it would have taken me a lot longer.

3 Cheers for you:
Hip hip, hurraaaaaay
Hip hip, hurraaaaaay
Hip hip, hurraaaaaayyyyyy

Best regards, Tim van Steenbergen
Guest
 

help

Postby Guest » Sat Oct 30, 2004 11:05 am

HI,
Would you please explain the purpose of the above program that you have displayed.

I am fairly new to ABAP, but trying to explore myself to the maximum extent possible.

Please assist me. Also give few pointers for beginning BAPI.

Appreciate your help.

Jogan
Guest
 

Postby Guest » Wed Jan 04, 2006 9:11 pm

You rock, NeilinOZ!!!
Guest
 

Re: Batch Create and Characteristics via BAPI (example)

Postby sfenske » Fri Feb 10, 2012 11:15 am

NeilinOZ,
Yes, even after EIGHT years (from date of original post), this 'pearl' of wisdom has again proven its usefulness! Thanks for the clean abap example. You made my day! :!:

Tim, I too had to swap the MCHA references with MCH1. Nice touch adding this to the message-chain. :D
sfenske
 
Posts: 1
Joined: Fri Feb 10, 2012 10:59 am

Re: Batch Create and Characteristics via BAPI (example)

Postby NeilinOZ » Sun Feb 12, 2012 5:02 pm

Thanks. It's been so long, I forgot it was here. Glad people still find it useful.
NeilinOZ
 
Posts: 69
Joined: Thu Mar 27, 2003 5:53 pm
Location: Adelaide Australia


Return to ABAP

Who is online

Users browsing this forum: No registered users and 16 guests




This website is not affiliated with, sponsored by, or approved by SAP AG.