static void ExcelUpdate_MAA(Args _args) { FilenameOpen filePath; SysExcelApplication application; SysExcelWorkBooks workBooks; SysExcelWorkBook workBook; SysExcelWorkSheets workSheets; SysExcelWorkSheet workSheet; SysExcelCells cells; Int NoofSheet,i,sn; LedgerJournalACType LedgerJournalACType; CustTrans custtrans; ; #Excel filePath = "C:\\Desktop\\maakbulut\\ax_excel\\FiyatFarkıFaturaRaporu.xlsx"; // kendi oluşturduğumuz excelin adresini veriyoruz. application = SysExcelApplication::construct(); application.visible(false); workBooks = application.workbooks(); workBooks.open(filePath,0,true); workSheets = workBooks.item(1).worksheets(); noOfSheet = worksheets.count(); try { ttsbegin; for( i = 1; i <= 1 ; i++) // noOfSheet { workSheet = workSheets.itemFromNum(i); if(workSheet) { for(sn = 2;sn <= 337;sn++) // 2. satırdan başlayıp 337. satıra kadar olan verileri alacak { custtrans.clear(); cells = workSheet.cells(); select forupdate custtrans where custtrans.Voucher == cells.item(sn,1).value().bStr(); if (custtrans) { custtrans.Dimension[5] = "Hediye"; // Şartımız Dimension[5] alanı Hediye olanlar custtrans.doUpdate(); } } } } ttscommit; info("İşlem tamamlandı."); } catch { ttsabort; info("Hata oluştu."); } application.quit(); }
31 Ekim 2016 Pazartesi
Dynamic Ax'ta excelle update yapma
Excelle istediğimiz bir alanı updete yapabiliriz. Bunun için aşağıdaki kodu inceleyebilirsiniz.
12 Ekim 2016 Çarşamba
Dynamic Ax'ta Formu Yüklenirken Enum'da sizin belirleyeceğiniz seçeneğe göre gelmesi
Sizden form yüklenirken enum'daki istenilen bir alana göre açılması istenirse;
Örneğin bu formda bizden form açılırken Hareket Tipi "Alım" olanlar gelsin diye talep edildi.
Bunun için;
Önce formun ClassDeclaration bölümüne tanımlama yapıyoruz.
Aşağıdaki kod da form ile enum'daki Hareket Tipi alanını "Alım" olarak ayarlar.
Yapılmazsa Enum'ın ilk sırasındaki seçenek gelir.
filterStatus.selection(ETGCollateralPostingType::Receive);
Örneğin bu formda bizden form açılırken Hareket Tipi "Alım" olanlar gelsin diye talep edildi.
Bunun için;
Önce formun ClassDeclaration bölümüne tanımlama yapıyoruz.
public class FormRun extends ObjectRun { QueryBuildRange qbrStatus; } Daha sonra yine formun init'ine şu kodu yazıyoruz. qbrStatus.value(SysQuery::value(ETGCollateralPostingType::Receive)); // "ETGCollateralPostingType" bu alan Hareket Tipi enum'unun adı.Şimdi form açılırken Hareket tipi "Alım" olanlar gelecek.
Aşağıdaki kod da form ile enum'daki Hareket Tipi alanını "Alım" olarak ayarlar.
Yapılmazsa Enum'ın ilk sırasındaki seçenek gelir.
filterStatus.selection(ETGCollateralPostingType::Receive);
Dynamic Ax'ta form açıldığında ilk kaydın gelmesi
Sizden form açıldığında ilk kaydın gelmesi istenirse yapacağınız iş çok basit.
Formun data sources kısmından ilgili data source'u sağ tıklayıp özellilker - StartPosition alanını
First yaparsak ilk kayıttan başlayacaktır.
Last yaparsak da son kayıt seçili gelecek.
Formun data sources kısmından ilgili data source'u sağ tıklayıp özellilker - StartPosition alanını
First yaparsak ilk kayıttan başlayacaktır.
Last yaparsak da son kayıt seçili gelecek.
30 Eylül 2016 Cuma
Bir alana kontrol ekleme (validateWrite'ını ezerek)
Sizden NoYesId alanının durumuna göre şart konulması istendiğinde, DataSource'unda validateWrite'ına aşağıdaki gibi şart koyarak kontrolünü sağlayabilirsiniz.
Örnek kod:
Örnek kod:
public boolean validateWrite() { boolean ret; ret = super(); if ( DRT_ArchiveTrans.NoYesId == NoYes::Yes ) { if (!DRT_ArchiveTrans.Archive_ClosetNumber ) return checkfailed ("Dolap no alanını doldurunuz!"); if (!DRT_ArchiveTrans.ShelfNumber ) return checkfailed (" Raf no alanını doldurunuz!"); } return ret; }
10 Ağustos 2016 Çarşamba
Hata: Ters işlem yürütülemiyor! (Kapalı hareket düzenleme)
Kapalı hareket düzenlemede "Ters Kaydet"mek istediğimizde,
Ters işlem yürütülemiyor! şeklinde hata alırsanız.
CustInvoiceTable'da PreInvoiceId alanı, satırların bir tanesinde bile boş olursa bu hatayı alırsınız.
Çözüm için tablodaki boş olan PreInvoiceId alanını mutlaka doldurun.
not: Bu alan(PreInvoiceId ) Serbest metin faturası ayrıntılarındaki Matbuu fatura numarası.

Kaynak : https://daxapta.wordpress.com/2016/08/10/
Ters işlem yürütülemiyor! şeklinde hata alırsanız.
CustInvoiceTable'da PreInvoiceId alanı, satırların bir tanesinde bile boş olursa bu hatayı alırsınız.
Çözüm için tablodaki boş olan PreInvoiceId alanını mutlaka doldurun.
not: Bu alan(PreInvoiceId ) Serbest metin faturası ayrıntılarındaki Matbuu fatura numarası.

Kaynak : https://daxapta.wordpress.com/2016/08/10/
29 Temmuz 2016 Cuma
Tekrar eden kayıtta uyarı verme
Örneğin sizden Tahsilat Belge Numarası alanına, aynı kayıttan girildiğinde ekrana uyarı çıksın
şeklinde bir kontrol konulması istendi.
Bu durumda Formun datasource'unda ilgili alanın validate'ine aşağıdaki şekilde kod yazabilirsiniz.
public boolean validate() { LedgerJournalTrans tmpLedgerJournalTrans; // Tablonun adıyla Datasource'u aynı olduğunda tabloyu tanımlamanız gerekiyor. Yoksa Ax bunu algılayamıyor. boolean ret; ret = super(); select firstonly tmpLedgerJournalTrans where tmpLedgerJournalTrans.DRTDocumentId == LedgerJournalTrans.DRTDocumentId; if (tmpLedgerJournalTrans.RecId != 0) // Boş olmayan kayıtlar { info(strfmt("%1 daha önce kullanıldı!", tmpLedgerJournalTrans.DRTDocumentId)); } return ret; }Ax'ı Bilgi Teknolojiler Şef'imiz Murat Bey 'le öğrenmeye çalışıyorum.
https://daxapta.wordpress.com/
16 Haziran 2016 Perşembe
Display alan
Formun içinde olmayan bir alanı farklı bir tablodan display yöntemiyle çekebiliriz.
Örneğin, Açık sipariş satırlarına "İş akışı durumu"'nu getirmemiz istendi.

display WFDummiesWorkflowState dispWFDummiesWorkflowState()
{
return SalesTable::find(this.SalesId).WFDummiesWorkflowState; // SalesTable’daki SalesId alanı ile SalesLine’daki SalesId alanıyla süzüyorsun(SalesTable::find(this.SalesId) ).
}
Kodu tablonun Metods kısmına yazıyoruz.

Daha sonra yazdığımız metodu formda bulunan gride sürükleyip bırakıyoruz.

Gride sürükleyip bıraktığımız alanın DataSource'unu seçiyoruz.

Alan formumuza bu şekide gelmiş oluyor.
Örneğin, Açık sipariş satırlarına "İş akışı durumu"'nu getirmemiz istendi.
display WFDummiesWorkflowState dispWFDummiesWorkflowState()
{
return SalesTable::find(this.SalesId).WFDummiesWorkflowState; // SalesTable’daki SalesId alanı ile SalesLine’daki SalesId alanıyla süzüyorsun(SalesTable::find(this.SalesId) ).
}
Kodu tablonun Metods kısmına yazıyoruz.
Daha sonra yazdığımız metodu formda bulunan gride sürükleyip bırakıyoruz.
Gride sürükleyip bıraktığımız alanın DataSource'unu seçiyoruz.
Alan formumuza bu şekide gelmiş oluyor.
15 Haziran 2016 Çarşamba
Dynamic Ax Kodla iş akışı yönlendirmesi
İş akışlarını kod ile yönlendirebilirsiniz.
static void WorkFlowReAssign(Args _args)
{
WorkflowTrackingStatusTable trackingStatusTable;
WorkflowWorkItemTable workItemTable;
WorkflowTrackingTable trackingTable;
WorkflowTrackingCommentTable trackingCommentTable;
WorkflowTrackingArgumentTable trackingArgumentTable;
UserId newUserId = "akblt"; // Yönlendirilecek olan kişi
;
while select trackingStatusTable where trackingStatusTable.TrackingStatus == WorkflowTrackingStatus::Pending &&
trackingStatusTable.InstanceNumber == "MAA1453" // Örnek kodu
{
ttsbegin;
info(strfmt("%1 - %2", trackingStatusTable.ConfigurationName, trackingStatusTable.InstanceNumber));
select forupdate workItemTable where workItemTable.RefRecId == trackingStatusTable.ContextRecId &&
workItemTable.RefTableId == trackingStatusTable.ContextTableId &&
workItemTable.CompanyId == trackingStatusTable.ContextCompanyId &&
workItemTable.Status == WorkflowWorkItemStatus::Pending;
WorkflowWorkItem::delegateWorkItem(workItemTable.Id, newUserId, "");// birine yetki devretmek için
select forupdate trackingTable where trackingTable.WorkItemActivityInstanceId == workItemTable.ActivityId;
select forupdate trackingCommentTable where trackingCommentTable.TrackingId == trackingTable.TrackingId;
select forupdate trackingArgumentTable where trackingArgumentTable.TrackingId == trackingTable.TrackingId && trackingArgumentTable.DataType == "WorkflowUser";
info(strfmt("%1 - %2 - %3 - %4", workItemTable.UserId, workItemTable.Subject, workItemTable.Description, workItemTable.SubWorkflowId));
ttscommit;
}
}
static void WorkFlowReAssign(Args _args)
{
WorkflowTrackingStatusTable trackingStatusTable;
WorkflowWorkItemTable workItemTable;
WorkflowTrackingTable trackingTable;
WorkflowTrackingCommentTable trackingCommentTable;
WorkflowTrackingArgumentTable trackingArgumentTable;
UserId newUserId = "akblt"; // Yönlendirilecek olan kişi
;
while select trackingStatusTable where trackingStatusTable.TrackingStatus == WorkflowTrackingStatus::Pending &&
trackingStatusTable.InstanceNumber == "MAA1453" // Örnek kodu
{
ttsbegin;
info(strfmt("%1 - %2", trackingStatusTable.ConfigurationName, trackingStatusTable.InstanceNumber));
select forupdate workItemTable where workItemTable.RefRecId == trackingStatusTable.ContextRecId &&
workItemTable.RefTableId == trackingStatusTable.ContextTableId &&
workItemTable.CompanyId == trackingStatusTable.ContextCompanyId &&
workItemTable.Status == WorkflowWorkItemStatus::Pending;
WorkflowWorkItem::delegateWorkItem(workItemTable.Id, newUserId, "");// birine yetki devretmek için
select forupdate trackingTable where trackingTable.WorkItemActivityInstanceId == workItemTable.ActivityId;
select forupdate trackingCommentTable where trackingCommentTable.TrackingId == trackingTable.TrackingId;
select forupdate trackingArgumentTable where trackingArgumentTable.TrackingId == trackingTable.TrackingId && trackingArgumentTable.DataType == "WorkflowUser";
info(strfmt("%1 - %2 - %3 - %4", workItemTable.UserId, workItemTable.Subject, workItemTable.Description, workItemTable.SubWorkflowId));
ttscommit;
}
}
3 Haziran 2016 Cuma
Satınalma siparişi iptali
static void PurchTableCancel()
{
PurchTable PurchTable;
PurchLine PurchLine;
InventTrans InventTrans;
;
ttsbegin;
select forupdate PurchTable
where PurchTable.PurchId == "MAA00051615";
PurchTable.PurchStatus = PurchStatus::Canceled;
PurchTable.PurchPoolId = "İptal";
PurchTable.update();
while select forupdate PurchLine
where PurchLine.PurchId == PurchTable.PurchId
{
InventTrans = InventTrans::findTransId(PurchLine.InventTransId, true);
InventTrans.StatusReceipt = StatusReceipt::Ordered;//Açık sipariş
InventTrans.DatePhysical = datenull();
InventTrans.VoucherPhysical ="";
InventTrans.CostAmountPhysical = 0;
InventTrans.CostAmountSecCurPhysical_TR = 0;
InventTrans.update();
PurchLine.PurchStatus = PurchStatus::Canceled;//Açık sipariş
PurchLine.ReturnStatus = ReturnStatusLine::None;
PurchLine.RemainPurchPhysical = 1;
PurchLine.RemainInventPhysical = 1;
PurchLine.RemainPurchFinancial = 0;
PurchLine.RemainInventFinancial = 0;
PurchLine.PurchStatus = PurchStatus::Canceled;
PurchLine.doUpdate();
}
ttscommit;
info("bitti");
}
Insert / Delete metodu
Adres defterine ilçe eklenmesi istenirse aşağıdaki job'la bunu yapabilirsiniz.
static void MAATestTableInsertAdress(Args _args)
{
AddressCounty AddressCounty;
ttsBegin;
AddressCounty.CountryRegionId= "Türkiye";
AddressCounty.StateId= "Zonguldak";
AddressCounty.CountyId = "Ereğli";
AddressCounty.insert();
ttsCommit;
info("bitti");
}
Bir tabloya kodla kayıt eklemek için insert metodunu kullanabilirsiniz.
static void MAATestTableInsertAdress(Args _args)
{
AddressCounty AddressCounty;
ttsBegin;
AddressCounty.CountryRegionId= "Türkiye";
AddressCounty.StateId= "Zonguldak";
AddressCounty.CountyId = "Ereğli";
AddressCounty.insert();
ttsCommit;
info("bitti");
}
Bir tabloya kodla kayıt eklemek için insert metodunu kullanabilirsiniz.
static void MAATestTableInsert(Args _args)
{
NumberSequenceReference NumberSequenceReference;
ttsBegin;
NumberSequenceReference.NumberSequence= "IsTakipNo";
NumberSequenceReference.WizardHighest= 999999;
NumberSequenceReference.DataTypeId = 30308;
NumberSequenceReference.doInsert();
ttsCommit;
info("bitti");
}
Bir tablodan kayıt silmek için de delete metodunu kullanabilirsiniz;
static void MAATestDelete (Args _args)
{
NumberSequenceTable NumberSequenceTable;
ttsBegin;
select firstOnly NumberSequenceTable
where NumberSequenceTable.NumberSequence == "ETGM_303"; //delete edilecek kayıdı bulmak için şartlar belirtilir.
if(NumberSequenceTable)
{
NumberSequenceTable.doDelete();
}
ttsCommit;
info("bitti");
}
Bir tablodan kayıt silmek için de delete metodunu kullanabilirsiniz;
static void MAATestDelete (Args _args)
{
NumberSequenceTable NumberSequenceTable;
ttsBegin;
select firstOnly NumberSequenceTable
where NumberSequenceTable.NumberSequence == "ETGM_303"; //delete edilecek kayıdı bulmak için şartlar belirtilir.
if(NumberSequenceTable)
{
NumberSequenceTable.doDelete();
}
ttsCommit;
info("bitti");
}
Update Methods
Bir tablodaki alanı başka bir tablodaki aynı alanla güncelleme istenirse aşağıdaki metod size yardımcı olacak.
Örneğin CustTable'daki SalesDistrictId alanlanlarını ForecastSales'daki SalesDistrictId alanıyla güncellenmesi istendiğinde bu jobs yardımıyla çözüme ulaşabilirsiniz.
//CustTable'daki SalesDistrictId alanlarını ForecastSales'daki SalesDistrictId alanlarıyla birbirine eşler.
static void MAA_UpdateForecastSales(Args _args)
{
ForecastSales forecastSales;
CustTable custTable;
;
ttsBegin;
while select custTable // Tabloyu elimize alıyoruz. bu tablo SalesDistrictId alanı çekilecek olan tablo.
where custTable.SalesDistrictId != "" // şart yazıyoruz. "CustTable'daki SalesDistrictId alanı boş olmayanlar"
{
while select forupdate forecastSales // güncellenecek olan tablo
where forecastSales.CustAccountId == custTable.AccountNum // CustTable'daki AccountNum'ı forecastSales'daki CustAccountId'siyle eşit olanlar
{
if (forecastSales.SalesDistrictId != "")
{
forecastSales.SalesDistrictId = custTable.SalesDistrictId; // custTable'daki SalesDistrictId alanlarının hepsini forecastSales'daki aynı alanla eşitle.
forecastSales.update();
info(strfmt("%1", forecastSales.SalesDistrictId));
}
}
}
info("Bitti");
ttsCommit;
}
Kaydol:
Kayıtlar (Atom)
Total ciro
static void MAA_SalesTableTotal(Args _args) { SalesTable SalesTable; utcDateTime dateTime; dateTime ...
-
Dynamics Ax Microsoft’un orta ve büyük ölçekli işletmelerin ihtiyaçlarını karşılamak için tasarladığı temel iş çözümüdür. Veritabanı yöne...
-
Veri Filtreleme CTRL+F Geçerli alanı filtrelemek için kullanılır. Ekran açılır. Hangi alan üzerine tıklandı ise o alan için filtreleme k...