About Me

Hai, saya Rosihan Ari Yuana. Saya sehari-hari adalah mengajar di Universitas Sebelas Maret.

Bidang riset saya tentang adaptive learning, computer aided learning, dan datascience

Selain itu, saya juga seorang penulis buku dan blogger.

More about me...

  • Home
  • /
  • ERP
  • /
  • Penerapan Konsep Inventory Dimension Pada ERP Microsoft Dynamics Axapta
ERP

Penerapan Konsep Inventory Dimension Pada ERP Microsoft Dynamics Axapta

Microsoft Dynamics Axapta (AX) merupakan salah satu Enterprise Resource Planning (ERP) yang popular dalam hal implementasi sistem yang saling menintegrasikan beberapa modul yang dimiliki. Salah satu modul yang cukup banyak digunakan perusahaan adalah modul Inventory Management. Bisnis proses yang umumnya dijalankan pada modul tersebut berupa pencatatan keluar masuk barang, tracking aktivitas gudang, mengelola dan mengoptimasi aktivitas Gudang, serta adjustment inventory. Dari semua bisnis proses tersebut, terdapat salah satu konsep yang paling sering digunakan dalam pengelolaan persediaan, yaitu konsep Inventory Dimension.

Konsep Inventory Dimension berfungsi untuk  mengelompokan nilai persediaan barang ke dalam beberapa karakteristik fisik produk dan lokasi penyimpanan produk. Seperti kebanyakan sistem enterprise lainnya, ERP Microsoft Dynamics AX menggunakan Relational Database sehingga pemahaman mengenai normalisasi table sangat penting dalam hal ini. Manfaat dari mememahami konsep Inventory Dimension ini adalah membuat kita mampu membuat custom aplikasi / menampilkan data yang diperlukan di dalam database ERP. Konsep ini juga dapat dijadikan pemahaman dasar untuk membuat aplikasi Inventory (Persediaan Barang) yang dikembangkan dengan Bahasa program maupun environment yang berbeda (selain ERP AX). Dalam pembahasan ini, kita akan perkecil pembahasan hanya dalam ruang lingkup perhitungan kuantitas barang, perhitungan nilai barang tidak kita bahas dalam artikel ini.

Kasus

Dalam suatu transaksi pemasukan barang yang terdiri atas nama barang dan jumlah barang, kita mungkin tidak akan memiliki banyak kesulitan yang berarti dalam proses perhitungan, ini dapat dilihat seperti pada kasus yang digambarkan pada Table 1.

Table 1. Transaksi Sederhana Pemasukan Barang Ke Gudang

Pencatatan transaksi seperti pada Table 1 akan efektif dijalankan jika kita hanya memiliki satu tempat penyimpanan yang tidak dibagi-bagi serta barang yang disimpan tidak dipilah berdasarkan karakteristik tertentu, misalkan : grade, warna, atau batch produksi. Pada perusahaan yang lebih besar, cara tersebut tidak akan efektif, pencatatan yang mereka miliki akan jauh lebih rinci dikarenakan dalam suatu perusahaan umumnya memiliki lebih dari satu penyimpanan serta memiliki barang dengan karakteristik berbeda beda, contoh transaksi dapat dilihat seperti pada Table 2.

Table 2. Transaksi Pemasukan Barang Ke Gudang Yang Diidentifikasi Atas Karakteristik Tertentu

Pada Table 2, transaksi disajikan lebih rinci untuk menggambarkan proses dasar pemasukan barang. Pada gambar tersebut, terdapat banyak sekali terjadi perulangan data, terutama pada kolom Gudang, Lokasi, dan Grade sehingga dapat dilihat kalau table tersebut perlu dilakukan normalisasi table. Hasil dari normalisasi ini menciptakan table tersendiri berupa table Inventory Dimension (dapat dilihat pada Table 3).

Table 3. Menormalisasikan Table Transaksi Menjadi Dua Buah Table

Normalisasi ini sangat penting dilakukan dikarenakan pada table transaksi akan sangat banyak sekali data yang akan disimpan dalam table tersebut. Seluruh transaksi inventory perusahaan akan disimpan seluruhnya dalam bentuk record pergerakan barang pada table tersebut. Sehingga, record yang disimpan pada table tersebut bisa mencapai jutaan record tergantung dari banyaknya aktivitas transaksi inventory yang terjadi. Tanpa normalisasi, Data pada table inventory transactions akan sangat banyak memerlukan penyimpanan data. Akhirnya, berdampak pada konsumsi memori yang lebih banyak. Selain dari itu, pemecahan table menjadi Inventory Dimension akan jauh mempermudah proses penambahan / pengaktifan dimensi baru dalam transaksi. Misal, kita akan menambahkan dimensi baru yaitu Batch (Hasil Produksi) dapat dilihat pada Table 4.

Table 4. Penambahan Dimensi Baru Pada Inventory Dimension

Dibandingkan dengan menjadikan semua menjadi satu pada table inventory transactions yang bisa saja memiliki record hingga jutaan, menambahkan kolom di table tersebut tentunya bukan pilihan yang tepat jika dilihat dari banyaknya data yang dimiliki.

Inventory Transactions Table

Semua transaksi perpindahan barang (baik dapat berupa perpindahan lokasi maupun perubahan spesifikasi) yang ada di ERP AX tersimpan di table utama yang bernama InventTrans. Sedangkan untuk table Inventory Dimension pada ERP AX yaitu ada pada table yang bernama InventDim. Kedua table tersebut cukup banyak memiliki kolom, kali ini saya akan tunjukan untuk kolom yang biasa digunakan / paling penting seperti pada Gambar 1.

Gambar 1. Relasi Antara Table InventTrans Dan InventDim

Dari relasi antara InventTrans dan InventDim (yang dapat dilihat pada Gambar 1) tersebut, digambarkan kalau dalam ERP AX sendiri menyediakan maksimal sebanyak sebelas jenis dimensi. Mulai dari kolom inventBatchId yang merupakan kolom untuk dimensi batch produksi barang sampai dengan kolom wMSPalleteId yang merupakan kolom untuk dimensi pallet.

Sebelum data masuk ke dalam table InventTrans, data akan terlebih dahulu melalui proses checking dimensi pada table InventDim. Jika dimensi yang telah diinputkan tersebut sudah tersedia di dalam table InventDim maka akan dihasilkan return berupa nomor inventDimId hasil pencarian data. Sedangkan, jika dari hasil pencarian data tersebut tidak ditemukan maka sistem akan membuat record baru di table dan memberikan return juga berupa nomor inventDimId dari hasil pembuatan record baru tersebut. Method yang digunakan untuk proses ini bernama bernama findOrCreate yang berada di dalam Table InventDim (dapat dilihat pada Gambar 2).

Gambar 2. Method findOrCreate Berada Di Dalam Table InventDim

Penggunaan Method findOrCreate

Dari penjelasan sebelumnya diketahui kalau method findOrCreate menghasilkan sebuah return dan membutuhkan parameter data untuk diperiksa. Berikut ini adalah isi dari method tersebut:

client server static public InventDim findOrCreate(InventDim  _inventDim)
{
    #OCCRetryCount
    InventDim inventDim;

    try
    {
        inventDim = InventDim::findDim(_inventDim);
        if (!inventDim.RecId)
        {
            inventDim = InventDim::create(_inventDim);
        }
    }
    catch (Exception::DuplicateKeyException)
    {
        if (xSession::currentRetryCount() >= #RetryNum)
        {
            throw Exception::DuplicateKeyExceptionNotRecovered;
        }
        else
        {
            retry;
        }
    }

    return inventDim;
}

Dari kode tersebut diketahui kalau method tersebut memerlukan parameter berupa Array (yang memiliki format kolom seperti pada table table InventDim) dan menghasilkan keluaran juga berbentuk Array (yang memiliki format kolom seperti pada table table InventDim). Proses yang terjadi pada method tersebut terdiri atas pencarian data (find) yang selanjutnya diteruskan ke proses pembuatan record baru (create) jika data tidak ditemukan. Bila dalam suatu kasus dimensi yang akan kita gunakan input ke dalam table InventTrans seperti pada Table 5.

Table 5. Contoh Kasus Input Data Untuk Parameter Method findOrCreate

Proses dimulai dengan membuat method yang nantinya dapat digunakan atau dipanggil ketika proses penginputan data pada Form Input Transaksi Inventory di ERP AX (dapat dilihat pada Gambar 3).

Gambar 3. Membuat Method Untuk Mengirim Data Ke Method findOrCreate

Method yang di buat di dalam form tersebut untuk mendapatkan nomor InventDimId adalah sebagai berikut ini:

public void setInventDim()
{
    InventDim                   inventdim1, inventdim2;
    InventTable                 InventTable;
    GMPKMTInventJournalTrans    journalTrans;

    

    inventdim1.InventSiteId          = 'GMP';
    inventdim1.InventLocationId      = 'SWHRENT01';
    inventdim1.wMSLocationId         = 'SWH-RENTC3';
    inventdim1.InventStatusId        = 'A';

    inventdim2 = InventDim::findOrCreate(inventdim1);

    GMPKMTInventJournalTrans.InventDimId    =   inventdim2.inventDimId;
    
}

Method tersebut memasukan nilai-nilai yang diinputkan oleh pengguna ke dalam suatu Array yang memiliki format seperti Table InventDim, lalu mengirimkannya ke method findOrCreate dan mengambil data hasil return tersebut. Selanjutnya, data diinputkan ke dalam table transaksi yang membutuhkan nomor InventDimId. Sehingga, Di dalam Transcation Table hanya akan dimasukan nomor inventDimId yang sebelumnya diambil dari table InventDim (perhatikan pada Table 6).

Table 6. Table InventTrans Menyimpan Nomor inventDimID

Untuk dapat melakukan join antara table InventTrans dan InventDim, dapat menggunakan Bahasa Program X++ untuk membuat query yang berfungsi untuk menampilkan data hasil join kedua table tersebut. Kode X++ untuk melakukan join antara kedua table tersebut dapat dilihat sebagai berikut.

    InventTrans             inventTrans;
    InventDim               inventDim;
    
    while select inventTrans
        join inventDim
            where inventDim.inventDimId == inventTrans.inventDimId
    {
        //Munculkan data yang ingin ditampilkan di sini
    }

Demikian pembahasan mengenai Inventory Dimensions, konsep ini merupakan dasar pengetahuan dalam pembuatan sistem pergudangan. ERP AX sendiri memiliki modul pergudangan yang cukup baik dalam menangani permasalahan dalam pengelolaan persediaan barang. Tidak menutup kemungkinan konsep ini dapat diterapkan pada sistem lain dengan menggunakan bahasa program dan lingkungan pengembangan program yang berbeda terlepas dari ERP AX itu sendiri.


Beli Buku Pemrograman

5 Langkah Mudah Menguasai React Native
Rahasia Inti Master PHP & MySQLi (Improved)
Jalan Pintas Menjadi Master React JS
Trik Kolaborasi React dengan PHP & MySQL

Article by Request

Anda belum memahami konsep pemrograman PHP Native, Python, Java, atau SQL? atau Anda belum punya ide penyelesaian dari studi kasus yang dihadapi sampai saat ini.

Silakan manfaatkan layanan Article by Request di blog ini.

Bagikan artikel ini jika bermanfaat !

Alumni Pendidikan Teknik Informatika dan Komputer, Universitas Sebelas Maret. Mendalami Bidang Enterprise Resource Planning Sejak Tahun 2017 dan Juga Menjalani Keseharian Freelance Fashion Model. Saat Ini Bekerja Sebagai Chief Information Technology Officer di PT Gunung Madu Plantations

Leave a Reply