Wednesday, 7 July 2021

SAP ABAP : ME47 - Maintain Quotation Price With Custom Function Module

 



function z_vim_rfq_price.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     REFERENCE(RFQ_NUMBER) TYPE  EBELN
*"     REFERENCE(RFQ_ITEM) TYPE  EBELP
*"     REFERENCE(PRICE) TYPE  NETPR
*"     REFERENCE(CURRENCY) TYPE  WAERS
*"  TABLES
*"      RETURN STRUCTURE  BDCMSGCOLL
*"----------------------------------------------------------------------

  data :
      i_ebeln type ebeln,
      i_ebelp type ebelp,
      ynetpr  type char15,
      xwaers  type waers,
      xnetpr  type netpr,
      wa_ekko type ekko,
      wa_ekpo type ekpo.

  data lt_bdcdata type table of bdcdata with header line.
  data lt_bdcmsg  type table of bdcmsgcoll with header line.
  data ls_bdcopt  type ctu_params.
  data ls_sy      type sy.

  ls_sy sy.

  call function 'CONVERSION_EXIT_ALPHA_INPUT'
    exporting
      input  rfq_number
    importing
      output i_ebeln.

  call function 'CONVERSION_EXIT_ALPHA_INPUT'
    exporting
      input  rfq_item
    importing
      output i_ebelp.



  clear wa_ekpowa_ekko.
  select single from ekko into wa_ekko
  where ebeln rfq_number and loekz ''.
  if wa_ekko is initial.
    clear lt_bdcmsg.
    lt_bdcmsg-msgtyp 'E'.
    lt_bdcmsg-msgv1  'RFQ Not found'.
    append lt_bdcmsg to return.
    exit.
  endif.
  select single from ekpo into wa_ekpo
  where ebeln rfq_number and
        ebelp rfq_item.

  "ME47
  clear lt_bdcdata.
  lt_bdcdata-program  'SAPMM06E'.
  lt_bdcdata-dynpro   '0305'.
  lt_bdcdata-dynbegin 'X'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_CURSOR'.
  lt_bdcdata-fval 'RM06E-ANFNR'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_OKCODE'.
  lt_bdcdata-fval '/00'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'RM06E-ANFNR'.
  lt_bdcdata-fval rfq_number.
  append lt_bdcdata.

  clear lt_bdcdata.
  lt_bdcdata-program  'SAPMM06E'.
  lt_bdcdata-dynpro   '0323'.
  lt_bdcdata-dynbegin 'X'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_CURSOR'.
  lt_bdcdata-fval 'RM06E-EBELP'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_OKCODE'.
  lt_bdcdata-fval '/00'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'RM06E-EBELP'.
  lt_bdcdata-fval rfq_item.
  append lt_bdcdata.

  clear lt_bdcdata.
  lt_bdcdata-program  'SAPMM06E'.
  lt_bdcdata-dynpro   '0323'.
  lt_bdcdata-dynbegin 'X'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_CURSOR'.
  lt_bdcdata-fval 'RM06E-ANFPS(01)'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_OKCODE'.
  lt_bdcdata-fval '=KO'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'RM06E-TCSELFLAG(01)'.
  lt_bdcdata-fval 'X'.
  append lt_bdcdata.

  data wa_cdpos type cdpos.
  data _tabkey  type char70.
  clear _tabkey.
  concatenate rfq_number rfq_item into _tabkey.
  select single from cdpos into wa_cdpos
    where objectclas 'EINKBELEG' and objectid rfq_number and tabkey _tabkey and fname 'NETPR'.

  if wa_ekpo-netpr > or wa_cdpos is not initial.
    clear lt_bdcdata.
    lt_bdcdata-program  'SAPLV14A'.
    lt_bdcdata-dynpro   '0102'.
    lt_bdcdata-dynbegin 'X'.
    append lt_bdcdata.
    clear lt_bdcdata.
    lt_bdcdata-fnam 'BDC_CURSOR'.
    lt_bdcdata-fval 'VAKE-DATAB(01)'.
    append lt_bdcdata.
    clear lt_bdcdata.
    lt_bdcdata-fnam 'BDC_OKCODE'.
    lt_bdcdata-fval '=PICK'.
    append lt_bdcdata.
  endif.

*  clear lt_bdcdata.
*  lt_bdcdata-program  = 'SAPMV13A'.
*  lt_bdcdata-dynpro   = '0201'.
*  lt_bdcdata-dynbegin = 'X'.
*  append lt_bdcdata.
*  clear lt_bdcdata.
*  lt_bdcdata-fnam = 'BDC_CURSOR'.
*  lt_bdcdata-fval = 'KONP-KBETR(01)'.
*  append lt_bdcdata.

  clear lt_bdcdata.
  lt_bdcdata-program  'SAPMV13A'.
  lt_bdcdata-dynpro   '0201'.
  lt_bdcdata-dynbegin 'X'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_OKCODE'.
  lt_bdcdata-fval '/00'.
  append lt_bdcdata.

  xnetpr price.
  if currency 'IDR'.
    xnetpr xnetpr / 100.
  endif.
  write xnetpr to ynetpr currency currency.

  clear lt_bdcdata.
  lt_bdcdata-fnam 'KONP-KBETR(01)'.
  lt_bdcdata-fval ynetpr.
  append lt_bdcdata.

  clear lt_bdcdata.
  lt_bdcdata-program  'SAPMV13A'.
  lt_bdcdata-dynpro   '0201'.
  lt_bdcdata-dynbegin 'X'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_CURSOR'.
  lt_bdcdata-fval 'KONP-KBETR(01)'.
  append lt_bdcdata.
  clear lt_bdcdata.
  lt_bdcdata-fnam 'BDC_OKCODE'.
  lt_bdcdata-fval '=SICH'.
  append lt_bdcdata.

  "BDC Options
  ls_bdcopt-dismode   'N'"A=FOREGROUND N=BACKGROUND E=ERROR
  ls_bdcopt-updmode   'S'"S=SYNCHRONOUS A=ASYNCHRONOUS L=LOCAL
  ls_bdcopt-defsize   'X'.
  ls_bdcopt-racommit  'X'.
*  ls_bdcopt-nobinpt   = 'X'.
*  ls_bdcopt-nobiend   = 'X'.

  update ekpo set agmem '' bednr '1' where ebeln i_ebeln and ebelp i_ebelp.

  call transaction 'ME47'
*  without authority-check
  using lt_bdcdata
        messages into lt_bdcmsg
        options from ls_bdcopt.

  return lt_bdcmsg.

  if lt_bdcmsg[] is initial.
    commit work and wait.
    append LINES OF lt_bdcmsg[] to return[].
  else.
    rollback work.
  endif.



endfunction.

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.

ABAP CDS View Part 10 : Authorization & DCL untuk ABAP CDS

Authorization & DCL di ABAP CDS | Panduan Lengkap (PFCG, @AccessControl, DCL) Authorization & DCL untuk ABAP CDS — Pandua...