Home dynamics ax, sql server transaction marking
dynamics axsql server

transaction marking

Terkadang pada payment journal, ketika melakukan settlement, ada transaction marking yang lupa di lepas, 

dan kesulitannya, pada ax 2012 mencari transaction marking tsb harus di cari satu persatu jurnal yang melakukan marking tersebut. berikut ini adalah cara mencari transaction marking di mana, dengan sedikit custom dan tricks

berikut ini flow nya:

  • user membuka payment journal, atau invoice journal
  • pilih line nya maka akan masuk ke journal voucher
  • pada journal voucher, pilih functions > settlement
  • pada settle open transactions akan muncul jendela sbb:
  • pada gambar di atas, terlihat salah satu transaksi ada simbol marking (tanda seru merah)
  • penyebabnya dikarenakan adanya transaksi jurnal lain yang marking transaksi tersebut

 

saya membuat sedikit custom pada \Class\SpecTransManager untuk menampilkan pesan transaksi apa yang melakukan marking transaksi ini. berikut ini adalah source codenya

public boolean existForOtherSpec(CompanyId _refCompany, tableId _refTableId, RefRecId _refRecId)
{
    boolean found = false;
    SpecTrans specTrans;
    
    //ronny
    SpecTrans spt;
    
    int markedByOtherResult;
    #define.MarkedByOther(1)
    #define.NotInCache(2)
    ;

    if (cacheEnabled)
    {
        markedByOtherResult = specTransCache.getMarkedByOtherSpec(_refCompany, _refRecId);

        if (markedByOtherResult != #NotInCache)
        {
            found = (markedByOtherResult == #MarkedByOther);
        }
    }

    if (!cacheEnabled || markedByOtherResult == #NotInCache)
    {
        // Find corresponding SpecTrans in other spec set
        if (_refCompany != '' && _refTableId != 0 && _refRecId != 0)
        {
            select firstonly crossCompany RecId from specTrans where
                (specTrans.SpecCompany != specCompany ||
                specTrans.SpecTableId != specTableId ||
                specTrans.SpecRecId != specRecId) &&
                specTrans.RefCompany == _refCompany &&
                specTrans.RefTableId == _refTableId &&
                specTrans.RefRecId == _refRecId;

            if (cacheEnabled)
            {
                specTransCache.addMarkedByOtherSpecInfo(_refCompany, _refRecId, (specTrans.RecId != 0));
            }

            found = (specTrans.RecId != 0);
            
            //untuk mengetahui kena kunci dari mana
                if(found) {
                    select spt where spt.RefRecId==_refRecId;
                    info(strFmt(
                    "lock on %1,%2,RecId %3 issues lock on %4 at recid %5\nharus select manual di database dengan table %4 dan recid %5 tsb", 
                    _refCompany, tableid2name(_refTableId), _refRecId, tableid2name(spt.SpecTableId), spt.SpecRecId)
                    );
                    
                }
        }
    }

    return found;
}

perhatikan pada baris “if(found) {” saya menambahkan custom khusus di mana akan menampilkan transaksi yang menggantungnya

ketika dijalankan ulang maka akan tampil info sbb:

pada tampilan info tersebut akan muncul pesan 

lock on tjp,VendTransOpen,RecId 5637608976 issues lock on LedgerJournalTrans at recid 5638686503
harus select manual di database dengan table LedgerJournalTrans dan recid 5638686503 tsb

nah setelah muncul ini, cara selanjut yang mudah adalah buka sql, lalu select * from [table] where recid=[recid]

dimana table nya adalah ledgerJournalTrans, dan recid nya 5638686503 

bila sudah ketemu, maka akan ketemu nomor transaksinya, di dalam kasus ini adalah field journalNum

dan journal ini yang melakukan marking pada transaksi tersebut

Author

Ronny

Leave a Reply