Tuesday, 8 June 2021

SAP ABAP - BAPI Posting Parked Invoice Document


 


FUNCTION Z_POST_PARKED_DOC.

*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(I_BELNR) TYPE  RBKP_V-BELNR
*"     REFERENCE(I_GJAHR) TYPE  RBKP_V-GJAHR
*"  EXPORTING
*"     REFERENCE(OUTPUT)
*"----------------------------------------------------------------------


  DATA :
    E_RBKPV      TYPE MRM_RBKPV,
    I_RBKPV      TYPE MRM_RBKPV,
    T_DRSEG      TYPE MMCR_TDRSEG,
    TI_DRSEG     TYPE MMCR_TDRSEG,
    I_EDITOR     TYPE REF TO C_TEXTEDIT_CONTROL,
    E_MRM_ZLSPR  TYPE MRM_ZLSPR,
    I_DO_PRICING TYPE BOOLE-BOOLE,
    I_BOPF_CALL  TYPE BOOLE-BOOLE.

  DATA:
    EX_OBJECT_CX_ROOT TYPE REF TO CX_ROOT,
    EX_TEXT           TYPE STRING,
    EX_TEXT_LONG      TYPE STRING.

  CALL FUNCTION 'MRM_INVOICE_READ'
    EXPORTING
      I_BELNR         I_BELNR
      I_GJAHR         I_GJAHR
*     I_XSELK         = ' '
*     I_BUFFER_ON     = X
*     I_LOCK          = ' '
*     I_DISPL         = ' '
    IMPORTING
      E_RBKPV         E_RBKPV
    TABLES
      T_DRSEG         T_DRSEG
    EXCEPTIONS
      ENTRY_NOT_FOUND 1
      LOCK_ERROR      2
      OTHERS          3.

  IF SY-SUBRC 0.
    TI_DRSEG T_DRSEG.
    I_RBKPV  E_RBKPV.

    TRY .
        CALL FUNCTION 'MRM_PARKED_INVOICE_POST'
          EXPORTING
            I_RBKPV     I_RBKPV
            TI_DRSEG    TI_DRSEG
*           I_EDITOR    =
*           I_DO_PRICING       = ' '
*           I_BOPF_CALL =
          IMPORTING
            E_MRM_ZLSPR E_MRM_ZLSPR.

        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            WAIT 'X'.

        CONCATENATE 'Invoice' I_BELNR 'posted' INTO OUTPUT SEPARATED BY SPACE.

      CATCH CX_ROOT INTO EX_OBJECT_CX_ROOT.
        EX_TEXT EX_OBJECT_CX_ROOT->GET_TEXT).
        EX_TEXT_LONG EX_OBJECT_CX_ROOT->GET_LONGTEXT).
    ENDTRY.



  ENDIF.
ENDFUNCTION.

Tuesday, 1 June 2021

Cara Sederhana Multi Insert Data Dengan PHP - MySQL

Pada postingan kali ini saya akan share cara melakukan insert lebih dari satu data dengan menggunaka PHP- Jquery dan MySQL.

Pertama buat database di MySQL dan table, disini saya membuat database dengan nama db_latihan dan table dengan nama t_barang dengan struktur table seperti berikut :



Setelah membuat database dan table selanjutnya membuat project PHP, project PHP nya saya buat dengan nama multi-insert, lalu didalam folder ini saya membuat dua file yaitu index.php dan insert.php.


Source code index.php seperti berikut :

<!doctype html>
<html lang="en">
  <head>
    <!-- Required meta tags -->
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- Bootstrap CSS -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-+0n0xVW2eSR5OomGNYDnhzAbDsOXxcvSN1TPprVMTNDbiYZCxYbOOl7+AMvyTG2x" crossorigin="anonymous">

    <title>PHP - Jquery - MySql - Multi Record Insert</title>
  </head>
  <body>
    <div class="container">
        <h1>PHP - Jquery - MySql - Multi Record Insert</h1>
        <hr>
        <form action="insert.php" method="POST">
            <div class="row">
                <div class="col-lg-12">
                    <button type="button" class="btn btn-primary" id="btn-tambah">TAMBAH BARANG</button>    
                </div>
            </div>
            <div class="row">
                <div class="col-lg-12">
                    <table class="table" style="width:100%;">
                        <thead>
                            <th>No.</th>
                            <th>Nama Barang</th>
                            <th>Jumlah</th>
                            <th>Satuan</th>
                            <th></th>
                        </thead>
                        <tbody id="tbl-barang-body">
                        </tbody>
                    </table>
                </div>
            </div>
            <div class="row btnSave" style="display:none;">
                <div class="col-lg-12">
                    <button type="submit" class="btn btn-primary">SIMPAN BARANG</button>    
                </div>
            </div>
        </form>        
    </div>

    <script src="https://code.jquery.com/jquery-3.6.0.slim.js" integrity="sha256-HwWONEZrpuoh951cQD1ov2HUK5zA5DwJ1DNUXaM6FsY=" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-gtEjrD/SeCtmISkJkNUaaKMoLD0//ElJ19smozuHV6z3Iehds+3Ulb9Bn9Plx0x4" crossorigin="anonymous"></script>

    <script>
        $(function(){
            var count = 0;
            
            if(count == 0){
                $('.btnSave').hide();
            }
            $('#btn-tambah').on('click'function(){
                count +=1;
                $('#tbl-barang-body').append(`
                    <tr>
                        <td>`count +`</td>
                        <td>
                            <input type="text" name="namabarang[]" class="form-control">
                        </td>
                        <td>
                            <input type="number" name="jumlah[]" class="form-control">
                        </td>
                        <td>
                            <input type="text" name="satuan[]" class="form-control">
                        </td>
                        <td>
                            <button type="button" class="btn btn-danger removeItem">HAPUS</button>
                        </td>
                    </tr>
                `);

                if(count > 0){
                    $('.btnSave').show();
                }

                $('.removeItem').on('click'function(){
                    $(this).closest("tr").remove();
                    count -=1;
                    if(count == 0){
                        $('.btnSave').hide();
                    }
                })
            })
        })
    </script>
  </body>
</html>

Source code insert.php seperti berikut :

<?php

    $server   = "localhost";
    $username = "root";
    $password = "";
    $database = "db_latihan";

    $mysqli = new mysqli($server$username$password$database);

    // cek koneksi
    if ($mysqli->connect_error) {
        die('Koneksi Database Gagal : '.$mysqli->connect_error);
    }

    $namabarang = $_POST['namabarang'];
    $jumlah     = $_POST['jumlah'];
    $satuan     = $_POST['satuan'];

    for($i = 0$i < sizeof($namabarang); $i++){
        $insert = mysqli_query($mysqli,"INSERT INTO t_barang (`namabrg`, `jumlah`, `satuan`)
                                        VALUES ('$namabarang[$i]', '$jumlah[$i]', '$satuan[$i]')");

    }

    if($insert){
        echo "Insert Data Berhasil";
    }
?>


Lalu coba jalankan melalui browser localhose/multi-insert, akan muncul tampilan seperti berikut :



Lalu simpan barang, maka akan tersimpan 3 data kedalam table t_barang seperti berikut :




Sekian sharing cara sederhana melakukan multi insert data kedalam MySql database mengguanakan PHP - Jquery, semoga bermanfaat.

Sunday, 30 May 2021

SAP ABAP - Create Vendor Master Using VMD_EI_API

 



*&---------------------------------------------------------------------*
*& Report  ZVENDOR_CREATE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZVENDOR_CREATE.

*----------------------------------------------------------------------*
*       CLASS LCL_DATA DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS LCL_DATA DEFINITION.
  PUBLIC SECTION.
    METHODSCONSTRUCTOR
      IMPORTING
        I_CCODE TYPE BUKRS
        I_KTOKK TYPE KTOKK
        I_AKONT TYPE AKONT
        I_NAME  TYPE AD_NAME1,
      CREATE_VENDOR_DATA
        EXPORTING
          E_LIFNR TYPE LIFNR.

  PRIVATE SECTION.
    METHODSPREPARE_DATA
      RETURNING VALUE(RE_FLAGTYPE I.
*   Data Declarations
    DATAGS_VMDS_EXTERN   TYPE VMDS_EI_MAIN,
          GS_SUCC_MESSAGES TYPE CVIS_MESSAGE,
          GS_VMDS_ERROR    TYPE VMDS_EI_MAIN,
          GS_ERR_MESSAGES  TYPE CVIS_MESSAGE,
          GS_VMDS_SUCC     TYPE VMDS_EI_MAIN,
          GV_KTOKK         TYPE KTOKK,
          GV_CCODE         TYPE BUKRS,
          GV_AKONT         TYPE AKONT,
          GV_NAME          TYPE NAME1.
ENDCLASS.                    "lcl_data

*———————————————————————-*
*       CLASS lcl_data IMPLEMENTATION
*———————————————————————-*
*
*———————————————————————-*
CLASS LCL_DATA IMPLEMENTATION.

  METHOD CONSTRUCTOR.
    ME->GV_CCODE I_CCODE.
    ME->GV_KTOKK I_KTOKK.
    ME->GV_AKONT I_AKONT.
    ME->GV_NAME  I_NAME.
  ENDMETHOD.                    "constructor

  METHOD PREPARE_DATA.

*   Local Data Declaration
    DATALT_CONTACTS     TYPE VMDS_EI_CONTACTS_T,
          LS_CONTACTS     TYPE VMDS_EI_CONTACTS,
          LT_VENDORS      TYPE VMDS_EI_EXTERN_T,
          LS_VENDORS      TYPE VMDS_EI_EXTERN,
          LS_ADDRESS      TYPE CVIS_EI_ADDRESS1,
          LT_BANK         TYPE CVIS_EI_BANKDETAIL_T,
          LS_BANK         TYPE CVIS_EI_CVI_BANKDETAIL,
          LT_COMPANY      TYPE VMDS_EI_COMPANY_T,
          LS_COMPANY      TYPE VMDS_EI_COMPANY,
          LS_COMPANY_DATA TYPE VMDS_EI_VMD_COMPANY,
          LS_PURCHAS_DATA TYPE VMDS_EI_VMD_PURCHASING,
          LT_PURCHASING   TYPE VMDS_EI_PURCHASING_T,
          LS_PURCHASING   TYPE VMDS_EI_PURCHASING,
          LT_PURCH_FUNC   TYPE VMDS_EI_FUNCTIONS_T,
          LS_PURCH_FUNC   TYPE VMDS_EI_FUNCTIONS,
          LS_MESSAGE      TYPE CVIS_MESSAGE,
          LV_CONTACTID    TYPE BAPICONTACT_01-CONTACT.

    CLEAR GS_VMDS_EXTERN.
    CALL METHOD VMD_EI_API=>GET_NUMBER
      EXPORTING
        IV_KTOKK GV_KTOKK
      IMPORTING
        EV_LIFNR LS_VENDORS-HEADER-OBJECT_INSTANCE-LIFNR
        ES_ERROR LS_MESSAGE.

    LS_VENDORS-HEADER-OBJECT_TASK 'I'.   " I = Create, U = Change

    LS_ADDRESS-POSTAL-DATA-NAME            GV_NAME.
    LS_ADDRESS-POSTAL-DATA-STREET          'COBA AJA ALAMAT yes'.
    LS_ADDRESS-POSTAL-DATA-POSTL_COD1      '12345'.
    LS_ADDRESS-POSTAL-DATA-COUNTRY         'ID'.
    LS_ADDRESS-POSTAL-DATA-SORT1           GV_NAME.
    LS_ADDRESS-POSTAL-DATA-LANGU           SY-LANGU.
    LS_ADDRESS-POSTAL-DATAX-NAME           'X'.
    LS_ADDRESS-POSTAL-DATAX-STREET         'X'.
    LS_ADDRESS-POSTAL-DATAX-POSTL_COD1     'X'.
    LS_ADDRESS-POSTAL-DATAX-SORT1          'X'.
    LS_ADDRESS-POSTAL-DATAX-COUNTRY        'X'.
    LS_ADDRESS-POSTAL-DATAX-LANGU          'X'.
    LS_ADDRESS-TASK                        'I'.
    LS_VENDORS-CENTRAL_DATA-ADDRESS LS_ADDRESS.

    REFRESH LT_BANK[].
    CLEAR LS_BANK.
    LS_BANK-TASK           'I'.
    LS_BANK-DATA_KEY-BANKS 'ID'.
    LS_BANK-DATA_KEY-BANKL '000002'.
    LS_BANK-DATA_KEY-BANKN '352842132'.

    LS_BANK-DATA-KOINH     'BRI'.
    LS_BANK-DATAX-KOINH    'X'.
    APPEND LS_BANK TO LT_BANK.

    CLEAR LS_BANK.
    LS_BANK-TASK           'I'.
    LS_BANK-DATA_KEY-BANKS 'ID'.
    LS_BANK-DATA_KEY-BANKL '000003'.
    LS_BANK-DATA_KEY-BANKN '93037890'.

    LS_BANK-DATA-KOINH     'MANDIRI'.
    LS_BANK-DATAX-KOINH    'X'.
    APPEND LS_BANK TO LT_BANK.

    LS_VENDORS-CENTRAL_DATA-BANKDETAIL-BANKDETAILS LT_BANK[].

*   Contact Person
    REFRESHLT_CONTACTS[].
*    CLEAR LS_CONTACTS.
*    LS_CONTACTS-TASK = 'U'.
*    LS_CONTACTS-ADDRESS_TYPE_3-TASK = 'U'.
*
**   Specify how many Contact Person numbers are to be obtained
**   This will simply provide us a contact person number
**   NOTE: If the note 1749700 is present in the system, then the contact person number can be left empty
*    CALL FUNCTION 'BAPI_PARTNEREMPLOYEE_GETINTNUM'
*      EXPORTING
*        QUANTITY  = '1'
*      IMPORTING
*        CONTACTID = LV_CONTACTID.
*
*    LS_CONTACTS-DATA_KEY-PARNR = LV_CONTACTID.                          "Contact Person Number
**   Set the Name for Contact person
*    LS_CONTACTS-ADDRESS_TYPE_3-POSTAL-DATA-FULLNAME   = 'JOHN DOE'.
*    LS_CONTACTS-ADDRESS_TYPE_3-POSTAL-DATA-FIRSTNAME  = 'JOHN'.
*    LS_CONTACTS-ADDRESS_TYPE_3-POSTAL-DATA-LASTNAME   = 'DOE'.
*    APPEND LS_CONTACTS TO LT_CONTACTS.
*
**   Set the Contact Person details for the Vendor
*    LS_VENDORS-CENTRAL_DATA-CONTACT-CONTACTS = LT_CONTACTS[].

*   Set the Account Group
    LS_VENDORS-CENTRAL_DATA-CENTRAL-DATA-KTOKK  GV_KTOKK.
    LS_VENDORS-CENTRAL_DATA-CENTRAL-DATA-STCD1  'VAT 1'.
    LS_VENDORS-CENTRAL_DATA-CENTRAL-DATAX-KTOKK 'X'.
    LS_VENDORS-CENTRAL_DATA-CENTRAL-DATAX-STCD1 'X'.

*   Company Code and GL Account Data
    REFRESHLT_COMPANY[].
    CLEAR LS_COMPANY.
    LS_COMPANY-TASK               'I'.
    LS_COMPANY-DATA_KEY-BUKRS     GV_CCODE.
    LS_COMPANY-DATA-AKONT         GV_AKONT.
    LS_COMPANY-DATA-FDGRV         'A1'.
    LS_COMPANY-DATA-ZTERM         '0001'.
    LS_COMPANY-DATAX-AKONT        'X'.
    LS_COMPANY-DATAX-FDGRV        'X'.
    LS_COMPANY-DATAX-ZTERM        'X'.
    APPEND LS_COMPANY TO LT_COMPANY.

    CLEAR LS_COMPANY.
    LS_COMPANY-TASK               'I'.
    LS_COMPANY-DATA_KEY-BUKRS     '3000'.
    LS_COMPANY-DATA-AKONT         GV_AKONT.
    LS_COMPANY-DATA-FDGRV         'A1'.
    LS_COMPANY-DATA-ZTERM         '0001'.
    LS_COMPANY-DATAX-AKONT        'X'.
    LS_COMPANY-DATAX-FDGRV        'X'.
    LS_COMPANY-DATAX-ZTERM        'X'.
    APPEND LS_COMPANY TO LT_COMPANY.

    LS_VENDORS-COMPANY_DATA-COMPANY LT_COMPANY[].

*   Purchasing Data
    REFRESHLT_PURCHASING[],
             LT_PURCH_FUNC[].

    CLEAR LS_PURCHASING.
    LS_PURCHASING-TASK               'I'.
    LS_PURCHASING-DATA_KEY-EKORG     '3000'.
    LS_PURCHASING-DATA-KALSK         '01'.
    LS_PURCHASING-DATA-WEBRE         'X'.
    LS_PURCHASING-DATAX-KALSK        'X'.
    LS_PURCHASING-DATAX-WEBRE        'X'.
    APPEND LS_PURCHASING TO LT_PURCHASING.

    CLEAR LS_PURCHASING.
    LS_PURCHASING-TASK               'I'.
    LS_PURCHASING-DATA_KEY-EKORG     '1000'.
    LS_PURCHASING-DATA-WAERS         'IDR'.
    LS_PURCHASING-DATA-KALSK         '01'.
    LS_PURCHASING-DATA-WEBRE         'X'.
    LS_PURCHASING-DATAX-WAERS        'X'.
    LS_PURCHASING-DATAX-KALSK        'X'.
    LS_PURCHASING-DATAX-WEBRE        'X'.
    APPEND LS_PURCHASING TO LT_PURCHASING.

*    CLEAR LS_PURCH_FUNC.
*    LS_PURCH_FUNC-TASK = 'I'.
*    LS_PURCH_FUNC-DATA_KEY-PARVW    = 'BA'.
*    LS_PURCH_FUNC-DATA-PARTNER      = LS_VENDORS-HEADER-OBJECT_INSTANCE-LIFNR.
*    LS_PURCH_FUNC-DATAX-PARTNER     = 'X'.
*    APPEND LS_PURCH_FUNC TO LT_PURCH_FUNC[].
*
**   Invoicing Party
*    CLEAR LS_PURCH_FUNC.
*    LS_PURCH_FUNC-TASK = 'I'.
*    LS_PURCH_FUNC-DATA_KEY-PARVW    = 'RS'.
*    LS_PURCH_FUNC-DATA-PARTNER      = LS_VENDORS-HEADER-OBJECT_INSTANCE-LIFNR.
*    LS_PURCH_FUNC-DATAX-PARTNER     = 'X'.
*    APPEND LS_PURCH_FUNC TO LT_PURCH_FUNC[].
*
**   Vendor
*    CLEAR LS_PURCH_FUNC.
*    LS_PURCH_FUNC-TASK = 'I'.
*    LS_PURCH_FUNC-DATA_KEY-PARVW    = 'LF'.
*    LS_PURCH_FUNC-DATA-PARTNER      = LS_VENDORS-HEADER-OBJECT_INSTANCE-LIFNR.
*    LS_PURCH_FUNC-DATAX-PARTNER     = 'X'.
*    APPEND LS_PURCH_FUNC TO LT_PURCH_FUNC[].
*
**   Set the Purchasing Data – Partner functions
*    LS_PURCHASING-FUNCTIONS-FUNCTIONS  = LT_PURCH_FUNC[].
*    APPEND LS_PURCHASING TO LT_PURCHASING.

*   Set the Purchasing Data
    LS_VENDORS-PURCHASING_DATA-PURCHASING LT_PURCHASING[].
    APPEND LS_VENDORS TO LT_VENDORS.
    GS_VMDS_EXTERN-VENDORS LT_VENDORS[].
  ENDMETHOD.

  METHOD CREATE_VENDOR_DATA.

    DATALV_RETURN TYPE I.

    LV_RETURN =  ME->PREPARE_DATA).

    IF LV_RETURN IS NOT INITIAL.
      EXIT.
    ENDIF.

    VMD_EI_API=>INITIALIZE).

    CALL METHOD VMD_EI_API=>MAINTAIN_BAPI
      EXPORTING
        IS_MASTER_DATA           GS_VMDS_EXTERN
      IMPORTING
        ES_MASTER_DATA_CORRECT   GS_VMDS_SUCC
        ES_MESSAGE_CORRECT       GS_SUCC_MESSAGES
        ES_MASTER_DATA_DEFECTIVE GS_VMDS_ERROR
        ES_MESSAGE_DEFECTIVE     GS_ERR_MESSAGES.

    IF GS_ERR_MESSAGES-IS_ERROR IS INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT 'X'.
    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.
  ENDMETHOD.
ENDCLASS.

SELECTION-SCREEN BEGIN OF BLOCK TB1.
PARAMETERSP_CCODE TYPE BUKRS,
            P_AKONT TYPE AKONT,
            P_KTOKK TYPE KTOKK,
            P_NAME  TYPE AD_NAME1.
SELECTION-SCREEN END OF BLOCK TB1.

DATALO_DATA  TYPE REF TO LCL_DATA,
      GV_LIFNR TYPE LIFNR.

START-OF-SELECTION.

  CREATE OBJECT LO_DATA
    EXPORTING
      I_CCODE P_CCODE
      I_AKONT P_AKONT
      I_KTOKK P_KTOKK
      I_NAME  P_NAME.

  CALL METHOD LO_DATA->CREATE_VENDOR_DATA
    IMPORTING
      E_LIFNR GV_LIFNR.


  WRITE GV_LIFNR.

Belajar SAP ABAP RAP

  Belajar SAP ABAP RAP: Pengenalan dan Konsep Dasar Restful ABAP Programming Model Kalau kamu seorang ABAPer yang mulai terjun ke dunia SAP...