Anlagenstammsatz per BAPI ändern

Dieses Dokument beschreibt, wie der Anlagenstammsatz per BAPI modifiziert werden kann. In diesem Beispiel soll im Anlagenstammsatz eine Inventarnummer aus einem externen System gelesen und hier eingetragen werden. 

  1. Das externe System (hier die Datenbank von IT-Geräten) exportiert regelmäßig eine Datei mit den Feldern Serialnummer und Inventarnummer. Die Serialnummer ist der Schlüssel, über den die externe Datenbank und die Anlagenbuchhaltung synchonisiert werden. Wir haben nun also eine Datei die die beiden Felder Serialnummer und Inventarnummer, getrennt durch Semikolon, enthält.
  2. Nun legen wir ein Programm an, dass die Daten einliest und die Inventarnummer in den Anlagenstammsatz einträgt.

*&———————————————————————*
*& Report ZFIAA_IT_INV_NUM
*&
*&———————————————————————*
*& XXXXXXXXXXXXXXXXXXXXXXXXXXXX
*&
*&———————————————————————*
* Der Report liest die Schnittstellendatei der Daten von IT ein.
* Es soll das in der IT verwendete Objekt-Label als Inventarnummer
* in die Stammdaten von FIAA eingetragen werden. Die Zuordnung findet
* anhand der Seriennummer statt, die in beiden Systemen manuell gepflegt wird.

REPORT ZFIAA_IT_INV_NUM.

DATA: BEGIN OF DAT_TMP OCCURS 0,
       INP(255) TYPE C,
     END OF DAT_TMP.
DATA: DELIMITER(1) VALUE ‚;‘.
DATA: BEGIN OF DAT_SATZ OCCURS 0,
       SERNR LIKE ANLA-SERNR,
       INVNUM LIKE ANLA-INVNR,
       END OF DAT_SATZ.

DATA: BEGIN OF DAT_RESV OCCURS 0.
       INCLUDE STRUCTURE DAT_SATZ.
DATA: END OF DAT_RESV.

DATA: I_REQUESTEDTABLESX LIKE TABLE OF BAPI1022_REQUESTEDTABLESX WITH HEADER LINE,
     I_SELECTIONCRITERIA LIKE TABLE OF BAPI1022_SELECTIONCRITERIA WITH HEADER LINE,
     I_GENERALDATA LIKE TABLE OF BAPI1022_FEGLG001_PID WITH HEADER LINE,
     I_RETURN LIKE TABLE OF BAPIRET2 WITH HEADER LINE,
     I_GENERALDATAX LIKE TABLE OF BAPI1022_FEGLG001X WITH HEADER LINE,
     CH_GENERALDATA LIKE TABLE OF BAPI1022_FEGLG001 WITH HEADER LINE.

PARAMETERS:
SPOOL_ID LIKE RFPDO-RFBIFILE .
*SPOOL_CP LIKE RFPDO-RFBIFILE ,
*SPOOL_RE LIKE RFPDO-RFBIFILE .
*PARAMETERS: DNAME(20) TYPE C DEFAULT ‚Reservierung‘.
*PARAMETERS: SICHTBAR LIKE RFPDO-RFBICHCK.
*PARAMETERS: DEBUG LIKE RFPDO-RFBICHCK.
PARAMETERS: DEL_FILE LIKE RFPDO-RFBICHCK DEFAULT ‚X‘.

*CONCATENATE SPOOL_RE SY-DATUM INTO SPOOL_RE.

* 1. Daten einlesen
PERFORM READ_FILE.
* Die Daten stehen nun in der internen Tabelle DAT_RES
LOOP AT DAT_RESV.
* 2. Anlage zur Seriennummer suchen
I_REQUESTEDTABLESX-GENERALDATA = ‚X‘.
I_SELECTIONCRITERIAPARAMETER = ‚GENERALDATA‘.
I_SELECTIONCRITERIAFIELD = ‚SERIAL_NO‘.
I_SELECTIONCRITERIASIGN = ‚I‘.
I_SELECTIONCRITERIA-OPTION = ‚EQ‘.
I_SELECTIONCRITERIA-LOW = DAT_RESV-SERNR.
APPEND I_SELECTIONCRITERIA.

CALL FUNCTION ‚BAPI_FIXEDASSET_GETLIST‘
   EXPORTING
     COMPANYCODE         = ‚1000‘
     EVALUATIONDATE       = SY-DATUM
*     DEPRECIATIONAREA     =
*     MAXENTRIES           =
     REQUESTEDTABLESX     = I_REQUESTEDTABLESX
   IMPORTING
     RETURN               = I_RETURN
   TABLES
     SELECTIONCRITERIA   = I_SELECTIONCRITERIA
     GENERALDATA         = I_GENERALDATA
*     INVENTORY           =
*     POSTINGINFORMATION   =
*     TIMEDEPENDENTDATA   =
*     ALLOCATIONS         =
*     ORIGIN               =
*     INVESTACCTASSIGNMNT =
*     NETWORTHVALUATION   =
*     REALESTATE           =
*     INSURANCE           =
*     LEASING             =
*     DEPRECIATIONAREAS   =
*     DEPRECIATIONAREAVALS =
*     EXTENSIONOUT         =
*     INVESTMENT_SUPPORT   =
   .

I_GENERALDATAX-INVENT_NO = ‚X‘.
MOVE DAT_RESV-INVNUM TO CH_GENERALDATA-INVENT_NO.
APPEND CH_GENERALDATA.
APPEND I_GENERALDATAX.

CALL FUNCTION ‚BAPI_FIXEDASSET_CHANGE‘
   EXPORTING
     COMPANYCODE               = ‚1000‘
     ASSET                     = I_GENERALDATA-ASSET
     SUBNUMBER                 = I_GENERALDATA-SUBNUMBER
*   GROUPASSET                 =
     GENERALDATA               = CH_GENERALDATA
     GENERALDATAX               = I_GENERALDATAX
*   INVENTORY                 =
*   INVENTORYX                 =
*   POSTINGINFORMATION         =
*   POSTINGINFORMATIONX       =
*   TIMEDEPENDENTDATA         =
*   TIMEDEPENDENTDATAX         =
*   ALLOCATIONS               =
*   ALLOCATIONSX               =
*   ORIGIN                    =
*   ORIGINX                   =
*   INVESTACCTASSIGNMNT       =
*   INVESTACCTASSIGNMNTX       =
*   NETWORTHVALUATION         =
*   NETWORTHVALUATIONX         =
*   REALESTATE                 =
*   REALESTATEX               =
*   INSURANCE                =
*   INSURANCEX                 =
*   LEASING                   =
*   LEASINGX                   =
* IMPORTING
*   RETURN                     =
* TABLES
*   DEPRECIATIONAREAS         =
*   DEPRECIATIONAREASX         =
*   INVESTMENT_SUPPORT         =
*   EXTENSIONIN               =
           .
COMMIT WORK AND WAIT.
IF SY-SUBRC 0.
   WRITE:/‚Fehler‘.
ELSE.
   WRITE:/‚Anlage ‚, CH_GENERALDATA-DESCRIPT,‚ mit Inventarnummer geschrieben‘, CH_GENERALDATA-INVENT_NO.
ENDIF.

ENDLOOP.

*&———————————————————————*
*&     Form READ_FILE
*&———————————————————————*
*       text
*———————————————————————-*
FORM READ_FILE.
* CONCATENATE SPOOL_CP SY-DATUM INTO SPOOL_CP.
* ————— SPOOL-Datei lesen ——————
OPEN DATASET SPOOL_ID FOR INPUT IN TEXT MODE ENCODING DEFAULT .

IF SY-SUBRC 0.
   WRITE: ‚Es standen keine Daten zum Import an‘.
*   EXIT.
ELSE.
   PERFORM READ_SPOOL.
ENDIF.
ENDFORM.                   „READ_FILE

*&———————————————————————*
*&     Form READ_SPOOL
*&———————————————————————*
*       text
*———————————————————————-*
FORM READ_SPOOL.

* OPEN DATASET SPOOL_CP FOR APPENDING IN TEXT MODE ENCODING DEFAULT.
DO.
   READ DATASET SPOOL_ID INTO DAT_TMP.
   IF SY-SUBRC 0.
     EXIT.
   ENDIF.
* Einzeilige Daten anhand des Feldtrenners verteilen
   SPLIT DAT_TMP-INP AT DELIMITER INTO DAT_RESV-SERNR DAT_RESV-INVNUM.
* Hmm, letztes Zeichen in der Datei ist ein „;“, das muß weg.
*   REPLACE ‚;‘ WITH “ INTO DAT_RESV-ERFMG.
* Zeitstempel setzten
*   CONCATENATE SY-DATUM ‚-‚ SY-UZEIT INTO DAT_RESV-STAMPS.
   APPEND DAT_RESV.
*   TRANSFER DAT_RESV TO SPOOL_CP.
ENDDO.
* CLOSE DATASET SPOOL_CP.
CLOSE DATASET SPOOL_ID.
* Anschließend löschen der Datei
IF DEL_FILE = ‚X‘.
   DELETE DATASET SPOOL_ID.
ENDIF.

ENDFORM.                   “ READ_SPOOL

Schreibe einen Kommentar