Posts Tagged ‘ x++

Dynamics 365 Finance and Operations Sorguya dinamik filtre eklemek?

Bu yazıda Dynamics 365 Finance and Operations içinde yazdığınız herhangi bir sorguya filtre eklerken eğer sadece değişken doluysa filtre eklemek istiyorsanız kullanabileceğiniz bir teknikten bahsedeceğim.

Örnek bir kodu inceleyelim. Öncelikle Generateonly ile sorgunuzu sadece hazırlamış oluyorsunuz çalıştırılmıyor bu sayede SQL çıktısını görebiliyorsunuz.

static void DmrFDQuerySQLStatment(Args _args)

{

CustAccount custAccount;

CustTable   custTable;

custAccount = “C00003″;

select generateonly custTable

where custTable.AccountNum == custAccount;

// 1. sorgu

info(custTable.getSQLStatement());

// Eğer değişkenin boş mu dolu mu olduğunu kontrol etmek istersem if kullanmalıyım. Birden çok değişken olduğunda bu çok karışık bir hal alabilir.

if(custAccount != “”)

{

select generateonly custTable

where custTable.AccountNum == custAccount;

info(custTable.getSQLStatement());

}

else

{

select generateonly custTable ;

info(custTable.getSQLStatement());

}

// Bu şekilde yazarak eğer değişken doluysa ekliyor. Eğişken boşsa hiç eklemiyor if e ihtiyaç duymadan işimizi hallediyoru.

// 3. sorgu

custAccount = “”;

select generateonly custTable

where (( custTable.AccountNum == custAccount && custAccount ) || (!custAccount));

info(custTable.getSQLStatement());

}

  1. sorgu

SELECT T1.ACCOUNTNUM,T1.INVOICEACCOUNT,T1.CUSTGROUP,T1.LINEDISC,T1.PAYMTERMID,T1.CASHDISC,T1.CURRENCY,T1.INTERCOMPANYAUTOCREATEORDERS,T1.SALESGROUP,T1.BLOCKED,T1.ONETIMECUSTOMER,T1.ACCOUNTSTATEMENT,T1.CREDITMAX,T1.MANDATORYCREDITLIMIT,T1.VENDACCOUNT,T1.PRICEGROUP,T1.MULTILINEDISC,T1.ENDDISC,T1.VATNUM,T1.INVENTLOCATION,T1.DLVTERM,T1.DLVMODE,T1.MARKUPGROUP,T1.CLEARINGPERIOD,T1.FREIGHTZONE,T1.CREDITRATING,T1.TAXGROUP,T1.STATISTICSGROUP,T1.PAYMMODE,T1.COMMISSIONGROUP,T1.BANKACCOUNT,T1.PAYMSCHED,T1.CONTACTPERSONID,T1.INVOICEADDRESS,T1.OURACCOUNTNUM,T1.SALESPOOLID,T1.INCLTAX,T1.CUSTITEMGROUPID,T1.NUMBERSEQUENCEGROUP,T1.PAYMDAYID,T1.LINEOFBUSINESSID,T1.DESTINATIONCODEID,T1.GIROTYPE,T1.SUPPITEMGROUPID,T1.GIROTYPEINTERESTNOTE,T1.TAXLICENSENUM,T1.WEBSALESORDERDISPLAY,T1.PAYMSPEC,T1.BANKCENTRALBANKPURPOSETEXT,T1.BANKCENTRALBANKPURPOSECODE,T1.INTERCOMPANYALLOWINDIRECTCREATION,T1.PACKMATERIALFEELICENSENUM,T1.TAXBORDERNUMBER_FI,T1.EINVOICEEANNUM,T1.FISCALCODE,T1.DLVREASON,T1.FORECASTDMPINCLUDE,T1.GIROTYPECOLLECTIONLETTER,T1.SALESCALENDARID,T1.CUSTCLASSIFICATIONID,T1.INTERCOMPANYDIRECTDELIVERY,T1.ENTERPRISENUMBER,T1.SHIPCARRIERACCOUNT,T1.GIROTYPEPROJINVOICE,T1.INVENTSITEID,T1.ORDERENTRYDEADLINEGROUPID,T1.SHIPCARRIERID,T1.SHIPCARRIERFUELSURCHARGE,T1.SHIPCARRIERBLINDSHIPMENT,T1.SHIPCARRIERACCOUNTCODE,T1.GIROTYPEFREETEXTINVOICE,T1.SYNCENTITYID,T1.SYNCVERSION,T1.SALESDISTRICTID,T1.SEGMENTID,T1.SUBSEGMENTID,T1.RFIDITEMTAGGING,T1.RFIDCASETAGGING,T1.RFIDPALLETTAGGING,T1.COMPANYCHAINID,T1.COMPANYIDSIRET,T1.PARTY,T1.IDENTIFICATIONNUMBER,T1.PARTYCOUNTRY,T1.PARTYSTATE,T1.ORGID,T1.PAYMIDTYPE,T1.FACTORINGACCOUNT,T1.DEFAULTDIMENSION,T1.CUSTEXCLUDECOLLECTIONFEE,T1.CUSTEXCLUDEINTERESTCHARGES,T1.COMPANYNAFCODE,T1.BANKCUSTPAYMIDTABLE,T1.GIROTYPEACCOUNTSTATEMENT,T1.MAINCONTACTWORKER,T1.CREDITCARDADDRESSVERIFICATION,T1.CREDITCARDCVC,T1.CREDITCARDADDRESSVERIFICATIONVOID,T1.CREDITCARDADDRESSVERIFICATIONLEVEL,T1.COMPANYTYPE_MX,T1.RFC_MX,T1.CURP_MX,T1.STATEINSCRIPTION_MX,T1.RESIDENCEFOREIGNCOUNTRYREGIONID_IT,T1.BIRTHCOUNTYCODE_IT,T1.BIRTHDATE_IT,T1.BIRTHPLACE_IT,T1.EINVOICE,T1.CCMNUM_BR,T1.CNPJCPFNUM_BR,T1.PBACUSTGROUPID,T1.IENUM_BR,T1.SUFRAMANUMBER_BR,T1.SUFRAMA_BR,T1.CUSTFINALUSER_BR,T1.INTERESTCODE_BR,T1.FINECODE_BR,T1.SUFRAMAPISCOFINS_BR,T1.TAXWITHHOLDCALCULATE_TH,T1.TAXWITHHOLDGROUP_TH,T1.CONSDAY_JP,T1.NIT_BR,T1.INSSCEI_BR,T1.CNAE_BR,T1.ICMSCONTRIBUTOR_BR,T1.SERVICECODEONDLVADDRESS_BR,T1.INVENTPROFILETYPE_RU,T1.INVENTPROFILEID_RU,T1.TAXWITHHOLDCALCULATE_IN,T1.UNITEDVATINVOICE_LT,T1.ENTERPRISECODE,T1.COMMERCIALREGISTERSECTION,T1.COMMERCIALREGISTERINSETNUMBER,T1.COMMERCIALREGISTER,T1.REGNUM_W,T1.ISRESIDENT_LV,T1.INTBANK_LV,T1.PAYMENTREFERENCE_EE,T1.PACKAGEDEPOSITEXCEMPT_PL,T1.FEDNONFEDINDICATOR,T1.IRS1099CINDICATOR,T1.AGENCYLOCATIONCODE,T1.FEDERALCOMMENTS,T1.USEPURCHREQUEST,T1.MCRMERGEDPARENT,T1.MCRMERGEDROOT,T1.AFFILIATED_RU,T1.CASHDISCBASEDAYS,T1.CUSTTRADINGPARTNERCODE,T1.CUSTWHTCONTRIBUTIONTYPE_BR,T1.DAXINTEGRATIONID,T1.DEFAULTDIRECTDEBITMANDATE,T1.DEFAULTINVENTSTATUSID,T1.ENTRYCERTIFICATEREQUIRED_W,T1.EXPORTSALES_PL,T1.EXPRESSBILLOFLADING,T1.FISCALDOCTYPE_PL,T1.FOREIGNRESIDENT_RU,T1.GENERATEINCOMINGFISCALDOCUMENT_BR,T1.INVOICEPOSTINGTYPE_RU,T1.ISSUEOWNENTRYCERTIFICATE_W,T1.ISSUERCOUNTRY_HU,T1.LVPAYMTRANSCODES,T1.MANDATORYVATDATE_PL,T1.PASSPORTNO_HU,T1.PDSCUSTREBATEGROUPID,T1.PDSFREIGHTACCRUED,T1.PDSREBATETMAGROUP,T1.TAXPERIODPAYMENTCODE_PL,T1.USECASHDISC,T1.FIELD1,T1.MODIFIEDDATETIME,T1.DEL_MODIFIEDTIME,T1.MODIFIEDBY,T1.CREATEDDATETIME,T1.DEL_CREATEDTIME,T1.RECVERSION,T1.PARTITION,T1.RECID,T1.MEMO FROM CUSTTABLE T1 WHERE (((PARTITION=?) AND (DATAAREAID=?)) AND (ACCOUNTNUM=?))

  1. sorgu

SELECT T1.ACCOUNTNUM,T1.INVOICEACCOUNT,T1.CUSTGROUP,T1.LINEDISC,T1.PAYMTERMID,T1.CASHDISC,T1.CURRENCY,T1.INTERCOMPANYAUTOCREATEORDERS,T1.SALESGROUP,T1.BLOCKED,T1.ONETIMECUSTOMER,T1.ACCOUNTSTATEMENT,T1.CREDITMAX,T1.MANDATORYCREDITLIMIT,T1.VENDACCOUNT,T1.PRICEGROUP,T1.MULTILINEDISC,T1.ENDDISC,T1.VATNUM,T1.INVENTLOCATION,T1.DLVTERM,T1.DLVMODE,T1.MARKUPGROUP,T1.CLEARINGPERIOD,T1.FREIGHTZONE,T1.CREDITRATING,T1.TAXGROUP,T1.STATISTICSGROUP,T1.PAYMMODE,T1.COMMISSIONGROUP,T1.BANKACCOUNT,T1.PAYMSCHED,T1.CONTACTPERSONID,T1.INVOICEADDRESS,T1.OURACCOUNTNUM,T1.SALESPOOLID,T1.INCLTAX,T1.CUSTITEMGROUPID,T1.NUMBERSEQUENCEGROUP,T1.PAYMDAYID,T1.LINEOFBUSINESSID,T1.DESTINATIONCODEID,T1.SUPPITEMGROUPID,T1.TAXLICENSENUM,T1.WEBSALESORDERDISPLAY,T1.PAYMSPEC,T1.BANKCENTRALBANKPURPOSETEXT,T1.BANKCENTRALBANKPURPOSECODE,T1.INTERCOMPANYALLOWINDIRECTCREATION,T1.PACKMATERIALFEELICENSENUM,T1.DLVREASON,T1.FORECASTDMPINCLUDE,T1.SALESCALENDARID,T1.CUSTCLASSIFICATIONID,T1.INTERCOMPANYDIRECTDELIVERY,T1.SHIPCARRIERACCOUNT,T1.INVENTSITEID,T1.ORDERENTRYDEADLINEGROUPID,T1.SHIPCARRIERID,T1.SHIPCARRIERFUELSURCHARGE,T1.SHIPCARRIERBLINDSHIPMENT,T1.SHIPCARRIERACCOUNTCODE,T1.SYNCENTITYID,T1.SYNCVERSION,T1.SALESDISTRICTID,T1.SEGMENTID,T1.SUBSEGMENTID,T1.RFIDITEMTAGGING,T1.RFIDCASETAGGING,T1.RFIDPALLETTAGGING,T1.COMPANYCHAINID,T1.PARTY,T1.IDENTIFICATIONNUMBER,T1.PARTYCOUNTRY,T1.PARTYSTATE,T1.DEFAULTDIMENSION,T1.CUSTEXCLUDECOLLECTIONFEE,T1.CUSTEXCLUDEINTERESTCHARGES,T1.MAINCONTACTWORKER,T1.CREDITCARDADDRESSVERIFICATION,T1.CREDITCARDCVC,T1.CREDITCARDADDRESSVERIFICATIONVOID,T1.CREDITCARDADDRESSVERIFICATIONLEVEL,T1.PBACUSTGROUPID,T1.FEDNONFEDINDICATOR,T1.IRS1099CINDICATOR,T1.AGENCYLOCATIONCODE,T1.FEDERALCOMMENTS,T1.USEPURCHREQUEST,T1.MCRMERGEDPARENT,T1.MCRMERGEDROOT,T1.CASHDISCBASEDAYS,T1.CUSTTRADINGPARTNERCODE,T1.DAXINTEGRATIONID,T1.DEFAULTDIRECTDEBITMANDATE,T1.DEFAULTINVENTSTATUSID,T1.ENTRYCERTIFICATEREQUIRED_W,T1.EXPRESSBILLOFLADING,T1.ISSUEOWNENTRYCERTIFICATE_W,T1.PDSCUSTREBATEGROUPID,T1.PDSFREIGHTACCRUED,T1.PDSREBATETMAGROUP,T1.USECASHDISC,T1.FIELD1,T1.MODIFIEDDATETIME,T1.DEL_MODIFIEDTIME,T1.MODIFIEDBY,T1.CREATEDDATETIME,T1.DEL_CREATEDTIME,T1.RECVERSION,T1.PARTITION,T1.RECID,T1.MEMO FROM CUSTTABLE T1 WHERE ((PARTITION=?) AND (DATAAREAID=?))

  1. Sorguda gördüğünüz gibi AccountNum filtresi verilmiyor. Değişkene değer verip tekrar çalıştırırsanız filtrenin eklendiğini görebilirsiniz. Değerlerin görünmemesi normal. SQL üzerinden bakarsanız değerleri de görebilirsiniz.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 nedir, Dynamics 365 ERP, Dynamics 365 CRM, X++, Query, Filter

Dynamics 365 Finance and Operations: Seçilen çoklu kayıtları formlar arasında transfer etme.

Bu yazıda Dynamics 365 Finance and Operations içinde bir formda seçilen çoklu kayırları faklı bir forma nasıl aktarabiliriz anlatmaya çalışacağım.

Bu örnekte iki formum var. Birinci forma bir buton ekleyip clicked metodunu eziyorum.

public void clicked()

{

VendPackingSlipJour vendPackingSlipJourSelected;

container           con;

Args                args;

str                 packingSlipIds;

;

// For döngüsü ile veri kaynağında seçilen kayıtları dolaşabiliyorum. Bunu faklı döndülerlede yapabilirsiniz.

for (vendPackingSlipJourSelected = VendPackingSlipJour_ds.getFirst(true) ? VendPackingSlipJour_ds.getFirst(true) : VendPackingSlipJour_ds.cursor();

vendPackingSlipJourSelected; vendPackingSlipJourSelected = VendPackingSlipJour_ds.getnext())

{

con = conIns(con,1,vendPackingSlipJourSelected.PackingSlipId); // Sonrasında bir contanier oluşturuyorum.

packingSlipIds = con2Str(con,”,”);

}

args = new Args();

args.parm(packingSlipIds);

new MenuFunction(menuitemDisplayStr(DmrVendInvoicePost), MenuItemType::Display).run(args);

// MenuFunction kullanarak ikinci formu açıyorum.

}

Şimdi ikinci formda ilk formda seçtiğim kayıtlara nasıl ulaşıyorum bakalım.

public void init()

{

int                 i;

str                 packingSlipIds;

super();

isRecordExists = false;

packingSlipIds = element.args().parm();  // args ile oluşturduğumuz string değişkene ulaşıyoruz.

con = str2con(packingSlipIds,”,”); // Containera alıyoruz.

for(i = 1; i<= conLen(con) ; i++)

{

// Döngüye sokup range olarak veriyorum. Aslında virgül ile oluşturduğum için direk range olarak ta verebilirim.

DmrPurchParmTable_ds.query().dataSourceTable(tableNum(DmrPurchParmTable)).addRange(fieldNum(DmrPurchParmTable , PackingSlipId)).value(SysQuery::value(conPeek(con,i)));

}

}

Bu yazıda iki forma arasında çoklu seçilmiş kayıtları nasıl aktarabilirsiniz anlatmaya çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 nedir, Dynamics 365 ERP, Dynamics 365 CRM, X++

Dynamics 365 Finance and Operations: Ürün reçetesi günlüğü oluşturma ve nakletme.

Bu yazıda Dynamics 365 Finance and Operations içinde kodla ürün reçetesi günlüğü oluşturup deftere nakletmek için basit bir örnek vereceğim.

Bu günlükler ara yüzden de girilebilir. Ancak birçok durumda bizim otomatik oluşturmamız istenir.

Gelelim örnek kodumuzu. Bu örnek kod tek satırlı ve miktarı 1 olan basit bir günlük oluşturuyor ve deftere naklediyor. Burada bir madde kodundan diğerine aktarım yapıyoruz gibi düşünebilirsiniz.  Siz ihtiyacınıza göre değiştirebilirsiniz.

class DmrCreateBomJournal

{

public static void main(Args _args)

{

InventJournalTableData  journalTableData;

InventJournalTrans      inventJournalTrans;

InventJournalTrans      InventJournalTransOld;

JournalCheckPost        journalCheckPost;

InventJournalTable      journalTable;

InventDim               FromInventDim,toInventDim;

ItemId                  ItemId      = “I0002″;

ItemId                  toItemId    = “I0003″;

inventDimId             inventDimId = “D0003″;

InventJournalNameId     TransferJournalNameId;

InventTable             inventTable;

InventBatch             InventBatchNew;

InventDim               InventDim;

InventDim               inventDimFrom;

int i;

;

ttsbegin;

inventTable = inventTable::find(ItemId);

InventDim   = InventDim::find(inventDimId);

TransferJournalNameId = “S0944″;

journalTable.clear();

journalTable.JournalNameId  = TransferJournalNameId;

journalTable.initFromInventJournalName(InventJournalName::find(TransferJournalNameId));

journalTableData            = JournalTableData::newTable(journalTable);

journalTable.JournalId      = journalTableData.nextJournalId();

journalTable.JournalType    = InventJournalType::BOM;

journalTableData.initFromJournalName(journalTableData.JournalStatic().findJournalName(journalTable.journalNameId));

journalTable.Description    = “Bom journal”;

journalTable.insert();

i++;

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = InventDim.InventSiteId;

inventDimFrom.InventLocationId  = InventDim.InventLocationId;

inventDimFrom.InventSizeId      = InventDim.InventSizeId;

inventDimFrom.inventBatchId     = InventDim.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

InventJournalTransOld.clear();

InventJournalTransOld.ItemId           = ItemId;

InventJournalTransOld.InventDimId      = inventDimFrom.InventDimId;

InventJournalTransOld.JournalId        = journalTable.JournalId;

InventJournalTransOld.TransDate        = today();

InventJournalTransOld.BOMLine          = NoYes::Yes;

InventJournalTransOld.Qty              = -1;

InventJournalTransOld.JournalType      = InventJournalType::BOM;

InventJournalTransOld.LineNum = i;

InventJournalTransOld.insert();

i++;

InventJournalTrans.clear();

InventJournalTrans.ItemId              = toItemId;

if(!InventBatch::find(InventDim.inventBatchId ,toItemId) )

{

InventBatchNew.clear();

InventBatchNew.itemId = toItemId;

InventBatchNew.inventBatchId = InventDim.inventBatchId;

InventBatchNew.insert();

}

InventJournalTrans.InventDimId         = inventDimFrom.InventDimId;

InventJournalTrans.ItemId              = toItemId;

InventJournalTrans.Qty                 = 1;

InventJournalTrans.JournalId           = journalTable.JournalId;

InventJournalTrans.JournalType         = InventJournalType::BOM;

InventJournalTrans.TransDate           = today();

inventJournalTrans.LineNum = i;

InventJournalTrans.insert();

InventJournalTransold.InventTransIdFather = InventJournalTrans.InventTransId;

InventJournalTransOld.update();

journalCheckPost = InventJournalCheckPost::newPostJournal(journalTable);

if(journalCheckPost.validate())

{

journalCheckPost.run();

}

info(strFmt(“%1 journal created.”, journalTable.JournalId));

ttscommit;

}

}

Bu yazıda ürün reçetesi günlüğü oluşturma örneği paylaştım. Umarım faydalı olur.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventJournal, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations: Transfer günlüğü oluşturma ve nakletme.

Bu yazıda Dynamics 365 Finance and Operations içinde kodla stok transfer günlüğü oluşturup deftere nakletmek için basit bir örnek vereceğim.

Bu günlükler ara yüzden de girilebilir. Ancak birçok durumda bizim otomatik oluşturmamız istenir.

Gelelim örnek kodumuzu. Transfer günlüklerinde boyut değişimi yapılır. Bu örnek kod tek satırlı ve miktarı 1 olan basit bir günlük oluşturuyor ve deftere naklediyor. Yaptığı şeyse bir InventSize’dan diğerine transfer işlemi yapmak. Siz ihtiyacınıza göre değiştirebilirsiniz.

class DmrCreateTransferJournal

{

public static void main(Args _args)

{

InventJournalTableData  journalTableData;

InventJournalTrans      inventJournalTrans;

JournalCheckPost        journalCheckPost;

InventJournalTable      journalTable;

InventDim               FromInventDim,toInventDim;

InventJournalNameId     TransferJournalNameId;

InventDim               InventDim;

InventTable             inventTable;

InventDim               inventDimFrom;

InventBatch             InventBatchNew;

ItemId                  ItemId      = “I0002″;

inventDimId             inventDimId = “D0003″;

EcoResSizeName          inventSizeIdTo;

int i;

;

ttsbegin;

inventTable = inventTable::find(ItemId);

InventDim   = InventDim::find(inventDimId);

TransferJournalNameId = “S0944″;

journalTable.clear();

journalTable.JournalNameId  = TransferJournalNameId;

journalTable.initFromInventJournalName(InventJournalName::find(TransferJournalNameId));

journalTableData            = JournalTableData::newTable(journalTable);

journalTable.JournalId      = journalTableData.nextJournalId();

journalTable.JournalType    = InventJournalType::Transfer;

journalTableData.initFromJournalName(journalTableData.JournalStatic().findJournalName(journalTable.journalNameId));

journalTable.Description    = “Transfer journal”;

journalTable.insert();

i++;

if(!InventBatch::find( InventDim.inventBatchId ,ItemId) )

{

InventBatchNew.clear();

InventBatchNew.itemId = ItemId;

InventBatchNew.inventBatchId = InventDim.inventBatchId;

InventBatchNew.insert();

}

inventJournalTrans.clear();

inventJournalTrans.ItemId           = ItemId;

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = InventDim.InventSiteId;

inventDimFrom.InventLocationId  = InventDim.InventLocationId;

inventDimFrom.InventSizeId      = InventDim.InventSizeId;

inventDimFrom.inventBatchId     = InventDim.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

inventJournalTrans.InventDimId      = inventDimFrom.InventDimId;

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = InventDim.InventSiteId;

inventDimFrom.InventLocationId  = InventDim.InventLocationId;

inventDimFrom.InventSizeId      = inventSizeIdTo;

inventDimFrom.inventBatchId     = InventDim.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

inventJournalTrans.ToInventDimId    = inventDimFrom.InventDimId;

inventJournalTrans.JournalId        = journalTable.JournalId;

inventJournalTrans.TransDate        = today();

inventJournalTrans.Qty              = 1;

inventJournalTrans.JournalType      = InventJournalType::Transfer;

inventJournalTrans.LineNum = i;

inventJournalTrans.insert();

journalCheckPost = InventJournalCheckPost::newPostJournal(journalTable);

if(journalCheckPost.validate())

{

journalCheckPost.run();

}

info(strFmt(“%1 journal created.”, journalTable.JournalId));

ttscommit;

}

}

Bu yazıda Stok hareket günlüğü oluşturma örneği paylaştım. Umarım faydalı olur.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventJournal, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations: Hareket günlüğü oluşturma ve nakletme.

Bu yazıda Dynamics 365 Finance and Operations içinde kodla stok hareket günlüğü oluşturup deftere nakletmek için basit bir örnek vereceğim.

Bu günlükler ara yüzden de girilebilir. Ancak birçok durumda bizim otomatik oluşturmamız istenir bu tip durumlarda ben hazırda kullanmak için bazı kod örneklerimi saklıyorum. Bir seri halinde bazı günlük ve sipariş oluşturma örnekleri paylaşacağım.

Gelelim örnek kodumuzu. Bu örnek kod tek satırlı ve miktarı 1 olan basit bir günlük oluşturuyor ve deftere naklediyor. Siz ihtiyacınıza göre değiştirebilirsiniz.

class DmrCreateMovementJournal

{

public static void main(Args _args)

{

inventJournalTable              inventJournalTable;

inventJournalTrans              inventJournalTrans;

InventJournalNameId             inventJournalName;

InventDim                       inventDim;

JournalCheckPost                journalCheckPost;

ItemId                          ItemId      = “I0002″; // Madde kodu

inventDimId                     inventDimId = “D0003″; // Boyut

ttsbegin;

inventJournalTable.clear();

inventJournalName = DmrParameters::find().MovementJournalName;

inventJournalTable.initFromInventJournalName(InventJournalName::find(inventJournalName));

inventJournalTable.description = “Voyage ID %1″ ;

inventJournalTable.insert();

inventJournalTrans.clear();

inventJournalTrans.initFromInventJournalTable(inventJournalTable);

inventJournalTrans.TransDate    = systemDateGet();

inventJournalTrans.ItemId       = ItemId;

inventJournalTrans.initFromInventTable(InventTable::find(ItemId));

inventJournalTrans.Qty          = 1;

inventJournalTrans.InventDimId  = inventDimId;

if(inventJournalTrans.ValidateWrite())

{

inventJournalTrans.insert();

}

else

{

throw error(“Journal line cannot be created.”);

}

journalCheckPost = InventJournalCheckPost::newPostJournal(inventJournalTable);

journalCheckPost.run();

ttscommit;

}

}

Bu yazıda Stok hareket günlüğü oluşturma örneği paylaştım. Umarım faydalı olur.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventJournal, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations: Kodla Ön Ödeme Oluşturup Deftere Nakletmek.

Bu yazıda Dynamics 365 Finance and Operations standart özelliklerinden biri olan ön ödemeyi kodla nasıl yapıyoruz bir örnekle anlatacağım.

Bu işlem Satınalma siparişleri üzerinden yapılabiliyor. Ancak bize gelen talepte bunun basit bir onaya tabi olması istendi. Bunun için bir ara tablo yapıp onun üzerinden otomatik ön ödeme oluşturup deftere nakletmek istedik.

Resim-1

Şöyle bir kodla işimizi halldebiliriz.

PurchFormLetter             purchFormLetter;

purchTable                         purchTable;

PurchPrepayTable          PurchPrepayTable;

PurchId                            purchId;

PackingSlipId                  packingSlipId;

;

ttsBegin;

purchTable = PurchTable::find(DmrSellerAdvance.OrderNumber);

PurchPrepayTable = PurchPrepayTable::findPurchId(DmrSellerAdvance.OrderNumber , true);

if(PurchPrepayTable.RecId == 0)

{

PurchPrepayTable.clear();

PurchPrepayTable.Type = PurchPrepayType::Fixed;

PurchPrepayTable.PurchTable = DmrSellerAdvance.OrderNumber;

PurchPrepayTable.PrepayCategoryId = 313452354; // Kategori zorunlu

PurchPrepayTable.Currency = PurchTable::find(DmrSellerAdvance.OrderNumber).CurrencyCode;

PurchPrepayTable.Description = DmrSellerAdvance.Description;

PurchPrepayTable.Value = DmrSellerAdvance.PayableQty; // Ödenecek tutar burası.

PurchPrepayTable.PrepayLimit = DmrSellerAdvance.OrderQty;

PurchPrepayTable.PrepayAvailable = DmrSellerAdvance.PayableQty;

purchPrepayTable.recalculatePrepayLimit();

purchPrepayTable.recalculateAmounts(false);

PurchPrepayTable.insert();

}

Else

// Eğer birden çok ödeme yapılacaksa Value güncelleyerek yapabilirsiniz.

{

PurchPrepayTable.Value = PurchPrepayTable.Value + DmrSellerAdvance.PayableQty;

purchPrepayTable.recalculatePrepayLimit();

purchPrepayTable.recalculateAmounts();

PurchPrepayTable.update();

}

purchFormLetter = PurchFormLetter::construct(DocumentStatus::Invoice);

PurchFormLetter.parmInvoiceType(PurchInvoiceType::VendorAdvance); // Fatura tipi böyle olmalı.

purchFormLetter.update(purchTable, NumberSeq::newGetNumFromId(  PurchParameters::numRefPurchAdvanceVoucher().NumberSequenceId).num());

ttsCommit;

Bu yazıda bir ön ödeme kaydı oluşturup deftere nakletme örneğini inceledik. Satınla tarafı biraz kafa karıştırıcı olabiliyor. Bekleyen tedarikçi faturası olmadı sürece direk sipariş üzerinden faturalama yapabilirsiniz.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, PurchInvoiceType::VendorAdvance, PrePayment, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365,X++

Dynamics 365 Finance and Operations On-hand List(Eldeki) formunun boyut değerlerine nasıl ulaşılır?

Bu yazıda Dynamics 365 Finance and Operations içinde bir eldeki stokları gösteren On-hand List formunun biraz karışık yapısı var. Formun veri kaynağında InventDim var ancak form direk bu veri kaynağından verileri göstermiyor. Aslında bir sınıf boyut değerlerini yönetiyor. Eğer boyut değerlerine ulaşmanız gerekirse ufak bir kodla düzenleme yapmak gerekiyor.

Bu örnekte eldeki formundan kendi yaptığım bir formu açmak ve InventSum ve belli boyut değerlerini aktarmak istiyorum.

Resim-1

Formun Extension’nını oluşturup bir buton ekliyorum. Bu butonun onClicked eventine kod yazacağız.

Resim-2

Yeni bir sınıf oluşturup aşağıdaki kodu yazıyorum.

class DmrInventOnhandItemFormEventHandler

{

[FormControlEventHandler(formControlStr(InventOnhandItem, DmrSwellShrink), FormControlEventType::Clicked)]

public static void DmrSwellShrink_OnClicked(FormControl sender, FormControlEventArgs e)

{

InventDim               inventDimFrom , dimValues;

InventSum               InventSum       = sender.formRun().dataSource(formDataSourceStr(InventOnhandItem, InventSum)).cursor();

dimValues.data(InventSum.joinChild( )); // Asıl işi yapan kod bu. Boyut değerlerini almamızı sağlıyor.

inventDimFrom.clear();

inventDimFrom.initValue();

inventDimFrom.InventSiteId      = dimValues.InventSiteId;

inventDimFrom.InventLocationId  = dimValues.InventLocationId;

inventDimFrom.InventSizeId      = dimValues.InventSizeId;

inventDimFrom.inventBatchId     = dimValues.inventBatchId;

inventDimFrom = inventDim::findOrCreate(inventDimFrom);

Args                args            = new Args();

Form                formToCall      = new Form(‘DmrSwellShrink’);

FormButtonControl   callerButton    = sender as FormButtonControl;

FormRun             form            = callerButton.formRun();

args.caller(form);

args.object(formToCall );

args.record(InventSum);

args.parm(inventDimFrom.inventDimId);

form = ClassFactory.formRunClass(args);

form.init();

form.run();

form.wait();

}

}

Açılan formun init metodunda aşağıdaki kodla gerekli bilgileri alıyorum.

inventSum       = element.args().record();

inventDimId     = element.args().parm();

inventDimArgs   = InventDim::find(InventDimId);

Bu yazıda eldeki formun boyut değerlerine nasıl ulaşırız bir örnekle göstermeye çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, InventSum, InventDim, InventOnHandItem, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations Yeni Bir Adres Alanı Nasıl Eklenir?

Dynamics 365 Finance and Operations Yeni Bir Adres Alanı Nasıl Eklenir?
Bu yazıda Dynamics 365 Finance and Operations içinde oluşturulan yeni bir tabloya adres alanı nasıl eklenir anlatmaya çalışacağım.
Öncelikle yeni bir tablo oluşturup Location alanı oluşturuyoruz. EDT olarak LogisticsLocationRecId kullanıyoruz. Relation ve Mapping’i resimdeki gibi tanımlayalım.


Resim-1
Relation özelliklerini aşağıdaki gibi tanımlıyoruz.

Resim-2
Bu aşamada sonra formunuza veri kaynağı olarak LogisticPostalAddress tablosunu ekliyoruz ve resimdeki özellikleri tanımlıyoruz. Standart Form olan CustBankAccount formundan tasarım sekmesini kopyalayabilirsiniz.

Resim-3
Aşağıdaki kodları ekliyoruz.
[Form]
public class DmrAddressTable extends FormRun
{
LogisticsPostalAddressFormHandler addressController;
public void init()
{
super();
addressController = LogisticsPostalAddressFormHandler::newParameters(DmrAddressTable_ds,LogisticsPostalAddress_ds);
addressController.callerUpdateQuery(fieldNum(DmrAddressTable,Location));
}
public LogisticsPostalAddressFormHandler getAddressController()
{
return addressController;
}
[DataSource]
class DmrAddressTable
{
public int active()
{
int ret;
ret = super();
addressController.callerActive();
addressController.callerUpdateButtons(newAddress,editAddress,clearAddress,mapButton);
return ret;
}
public void write()
{
super();
addressController.callerResearch();
}
}
[DataSource]
class LogisticsPostalAddress
{
public void write()
{
// The call to super is commented out to prevent the need to require a LogisticsPostalAddress record. This is a
// framework limitation that needs to be worked around in this manner.
// super();
}
public boolean validateWrite()
{
// The call to super is commented out to prevent the need to require a LogisticsPostalAddress record. This is a
// framework limitation that needs to be worked around in this manner.
//ret = super();
return true;
}
}
}

Derleyip formumuzu açabiliriz.

Resim-4
Bu yazıda yeni bir adres alanı nasıl eklenir anlatmaya çalıştım. Burada benim karşılaştığım bir sorun bu yapı bir tabloda bir adres alanını yönetebiliyor. İki adres alnınız varsa bu haliyle ben çalıştırmadım. Yöneten sınıflara direk alan adını yazmışlar her şeyi çoğaltım ikinci bir alanı destekleyen bir yapı kurmak gerekiyor. Astarı yüzünden pahalı oluyor.
Selamlar.
Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.
Referanslar:
www.mshowto.org
www.fatihdemirci.net
TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations OnClicked Event Handler?

Bu yazıda Dynamics 365 Finance and Operations’da Event Handler nasıl kullanılır bir örnekle anlatmaya çalışacağım.

Şöyle bir örnek olsun. Standart bir forma bir CheckBox eklemek istiyoruz. Bu CheckBox işaretlendiğinde bir filtre çalışacak. Bunun için formdan bir Extension oluşturup CheckBox eklemek gerekiyor. Bu kısımları geçiyorum daha önce anlatmıştım. Burada asıl bu işaretleme olduğunda yazacağımız koda odaklanacağım.

Öncelikle bir Class oluşturmamız gerekiyor. Adının sonuna EventHandler eklemekte fayda var.

class CustInvoiceJournalEventHandler

{

/// <summary>

///

/// </summary>

/// <param></param>

/// <param name=”e”></param>

[FormControlEventHandler(formControlStr(CustInvoiceJournal, DmrShowAllRecord), FormControlEventType::Clicked)]

public static void DmrShowAllRecord_OnClicked(FormControl sender, FormControlEventArgs e)

{

QueryBuildDataSource    custInvoiceJourDS;

QueryBuildDataSource    eInvoicePoolTableDS;

FormRun                 elementForm         = sender.formRun(); // DataSource için gerekecek

FormCheckBoxControl     showAllRecord      ;

FormDataSource          custInvoiceJour_ds  = elementForm.dataSource(formDataSourceStr(CustInvoiceJournal, CustInvoiceJour)) as FormDataSource;

#IsoCountryRegionCodes

if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoTR]))

{

showAllRecord       = elementForm.design().controlName(formControlStr(CustInvoiceJournal, DmrShowAllRecord)); // CheckBox ‘a ulaşıyoruz.

custInvoiceJourDS   = custInvoiceJour_ds.query().dataSourceTable(tableNum(custInvoiceJour));

eInvoicePoolTableDS = custInvoiceJour_ds.query().dataSourceTable(tableNum(FDEInvoicePoolTable));

if(showAllRecord.checked())

{

eInvoicePoolTableDS.enabled(false);

}

else

{

eInvoicePoolTableDS.enabled(true);

}

custInvoiceJour_ds.executeQuery();

}

}

}

Bu yazıda EventHandler nasıl kullanılır anlatmaya çalıştım. Birçok durumda Extension yerine EventHandler kullanmak daha pratik oluyor.

Selamlar.

www.fatihdemirci.net

TAGs: Microsoft Life Cycle Services, LCS, Azure, Azure DevOps, EventHandler,Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, X++

Dynamics 365 Finance and Operations Event Handler Kullanımı?

Bu yazıda Dynamics 365 Finance and Operations içinde standart bir formda Event Handler kullanarak nasıl işlemler yapabilirsiniz göstermeye çalışacağım.

Bir önceki yazımda Form DataSource metotlarına Extension ile ekleme yapmayı anlatmıştım. CustInvoiceJournal formuna E-Fatura filtresi için bir DataSource eklemiştim. Şimdi orada eklenen filtreyi kullanıcının kaldırabilmesi için bir CustInvoiceJournal formuna CheckBox ekledim. Bu CheckBox’ın işaretlenmesi ile tüm kayıtları göstereceğim.

Events kısmından OnClicked’e sağ tıklayıp Copy event handler method diyorum.

Resim-1

Yeni bir class oluşturup kodu yapıştırıyorum.

class CustInvoiceJournal_FD_EventHandler // Class isimlendirmede hala bazen karışıyor ama ekip içinde bir standart oturtmak lazım.

{

/// <summary>

///

/// </summary>

/// <param></param>

/// <param></param>

[FormControlEventHandler(formControlStr(CustInvoiceJournal, DmrShowAllRecord), FormControlEventType::Clicked)] // Kopyalama sonucu bu geliyor zaten.

public static void DmrShowAllRecord_OnClicked(FormControl sender, FormControlEventArgs e)

{

QueryBuildDataSource    custInvoiceJourDS;

QueryBuildDataSource    eInvoicePoolTableDS;

FormRun                 elementForm         = sender.formRun();

FormCheckBoxControl     showAllRecord      ;

FormDataSource          custInvoiceJour_ds  = elementForm.dataSource(formDataSourceStr(CustInvoiceJournal, CustInvoiceJour)) as FormDataSource;

#IsoCountryRegionCodes

if (SysCountryRegionCode::isLegalEntityInCountryRegion([#isoTR]))

{

showAllRecord       = elementForm.design().controlName(formControlStr(CustInvoiceJournal, DmrShowAllRecord));

custInvoiceJourDS   = custInvoiceJour_ds.query().dataSourceTable(tableNum(custInvoiceJour));

eInvoicePoolTableDS = custInvoiceJour_ds.query().dataSourceTable(tableNum(FDEInvoicePoolTable));

if(showAllRecord.checked())

{

eInvoicePoolTableDS.enabled(false);

}

else

{

eInvoicePoolTableDS.enabled(true);

}

custInvoiceJour_ds.executeQuery();

}

}

}

Bu yazıda form kontrolleri için EventHandler kullanımını anlatmaya çalıştım.

Selamlar.

www.fatihdemirci.net

TAGs: Dynamics 365 Finance and Operations, MsDyn365FO, OnClicked (), DataSource, Microsoft Dynamics 365, MsDyn365FO, MsDyn365CE, MsDyn365, Dynamics 365 ERP, X++

Page 1 of 121234510...Last »

Türkiye'nin en doğru, dolu dolu ve hatasız anlatımları ile teknik yazılarına, makalelerine, video'larına, seminerlerine, forum sayfasına ve sektörün önde gelenlerine ulaşabileceğiniz teknik topluluğu, MSHOWTO