Microsoft Dynamics AX
4 Şubat 2020 Salı
Total ciro
static void MAA_SalesTableTotal(Args _args)
{
SalesTable SalesTable;
utcDateTime dateTime;
dateTime = DateTimeUtil::addDays(DateTimeUtil::getSystemDateTime(), -360);
ttsBegin;
select sum(ETGTotalSalesAmount) from SalesTable where SalesTable.createdDateTime >= datetime;
info(strFmt("Toplam tl : %1",SalesTable.ETGTotalSalesAmount));
ttsCommit;
}
12 Aralık 2019 Perşembe
Stok yönetimi > Eldeki - Miktar ayarlama
Miktar ayarlama | Sayım geçmişi
Eldeki formunda bulunan Miktar ayarlama alanında sayılan miktara yazdığınız miktar, direkt olarak ilgili madde kartının stoğuna girer ya da stoktan düşürür.Eldeki > Sayım geçmişi'nden de madde kartına ait sayım hareketlerini inceleyebilirsiniz.
Hareketlerine de Referansı Sayım olan bir kayıt oluşturur.
Yazacağımız miktar stoğumuzdaki miktardan az ise hareketlere azalan kada eksi(-) işaretli kayıt oluşturur, fazla ise artı(+) kayıt oluşturur.
Not: Dikkat edilmesi gerekir. Stokları doğrudan etkiler.
28 Kasım 2019 Perşembe
Aktif olmayan kullanıcıların gruplardan çıkarılması | Microsoft Dynamics Ax
Akfit olmayan kullanıcılar;
Aktifliği kaldırılmış olan(UserInfo.enable == false) kullanıcıların gruplardan kaldırılması için aşağıdaki kodu kullanabilirsiniz.
public void initValue() { static void _removeDisableUserFromList(Args _args) { UserGroupInfo UserGroupInfo; UserGroupList UserGroupList; UserInfo UserInfo; UserGroupId tmpGroupId; ; ttsbegin; while select forupdate UserGroupList join UserGroupInfo where UserGroupInfo.Id == UserGroupList.groupId //&& UserGroupInfo.id == "000-04" { while select UserInfo where UserInfo.id == UserGroupList.userId && UserInfo.enable == false { info(strfmt("%1; %2; %3", UserGroupList.groupId, UserGroupList.userId, UserInfo.name)); UserGroupList.delete(); } } ttscommit; }
InventTrans | InventPostingTrans | LedgerTrans ilişkileri > Dynamics Ax
InventTrans | InventTransPosting | LedgerTrans ilişkileri
- InventTrans (Madde hareketleri)- InventTransPosting (Stok hareketi deftere nakil)
- LedgerTrans (Genel muhasebe hareketleri)
- Madde kartı kullanıldığında, InventTrans'a kayıt oluşur. (hareketleri için bu yazıyı okuyabilirsiniz)
- Oluşan hareket Sevk irsaliyesi kesildiğinde ilgili tablolara kayıt atar. (bu yazıyı inceleyebilirsiniz)
- InventTrans
- VendPackingSlipJour
- VendPackingSlipTrans
- InventSum (Stoğa girer)
- InventTransPosting (Kayıt LedgerTransta oluşmaz, Fiziksel deftere nakil olmuştur)
3. Faturalandığında artık muhasebe kayıtları da oluşmuş olacaktır.
- InventTrans
- VendInvoiceJour
- VendInvoiceTrans
- LedgerTrans (Genel muhasebe hesaplarına kayıt atar)
- TaxTrans (Vergilendirilmesi hesaplanır)
- InventTransPosting(Mali olarak da nakil oluşturuldu)
Invent Trans & InventTransPosting & LedgerTrans arasındaki ilişki
InventTrans | InventTransPosting | LedgerTrans |
Voucher | Voucher | Voucher |
InventTransId | InventTransId | |
DateFinancial | TransDate | TransDate |
İrsaliye kesildi sonra nakil edildi.
Örnek olması için aşağıdaki bağlantıdan;
Stok haretlerini inceleyebilirsiniz.
Satınalma siparişi oluşturulması > Faturalanma Süreci | Dynamics Axapta
Satınalma siparişi oluşturulup > İrsaliye Kesildiğinde > Faturalandığında oluşan kayıtlar
Sipariş oluşturulduğunda madde kartı için Ax aşağıdaki tablolarda kayıt oluşturur.- PurchLine
- InventTrans
Bu kayıtlar için İrsaliye kesildiğinde;
- InventTrans
- VendPackingSlipJour
- VendPackingSlipTrans
- InventSum
- InventTransPosting
İrsaliyelerin Faturası kesildiğinde;
- InventTrans
- VendInvoiceJour
- VendInvoiceTrans
- LedgerTrans
- TaxTrans
- InventTransPosting
Tablolarında kayıt oluşur.
Hareketleri incelemek için bu yazıyı inceleyebilirsiniz.
Stok Yönetimi > Karantina Emirleri | Dynamics Axapta
Karantina Emirleri
Madde kartının Karantina Emirlerinde kayıt oluşturulması/oluşturulmaması için;Madde ayrıntıları > Stok Modeli Grubu > Kurulum > Karantina Yönetimi alanı seçili(tikli) olduğunda ilgili kart nakil işlemleri sırasında Karantina Emirlerine başlatıldı durumunda kayıt oluşturur.
Madde ayrıntıları > Stok Modeli Grubu > Kurulum > Karantina Yönetimi alanı tiksiz olursa,
Kantinaya kayıt oluşturmaz.
8 Kasım 2019 Cuma
Satınalma siparişlerini toplu aktarma | Sipariş satırı, Dynamics Ax
Satınalma sipariş satırlarını toplu aktar
Siparişlerin satırlarını toplu aktarmak için aşağıdaki kodu kullanabilirsiniz.void MAA_Excel_PurchLine() { #Excel #AviFiles Dialog dialog = new Dialog("Veri Aktarma"); DialogField dialogPath; FilenameFilter filter = ['Excel files 2010','*.xlsx','Excel files 2003', '*.xls' ]; FilenameOpen filePath; SysExcelApplication application; SysExcelWorkBooks workBooks; SysExcelWorkBook workBook; SysExcelWorkSheets workSheets; SysExcelWorkSheet workSheet; SysExcelCells cells; SysOperationProgress progress; Int NoofSheet,i,lastRow,sn; PurchLine PurchLine; InventDim tmpInventDim,tmpInventDimItem; inventBatch inventBatch; InventSerial InventSerial; SysExcelRange range; void findLastRow(SysExcelWorkSheet _workSheet) { #define.Star('*') #define.Space(' ') ; range = _workSheet.cells().range(#ExcelTotalRange); try { range = range.find(#Star, null, #xlFormulas, #xlWhole, #xlByRows, #xlPrevious); } catch (Exception::Error) { error("@SYS59926"); } if (range) { lastRow = range.row(); } else { lastRow = 0; } } ; dialog.filenameLookupFilter(filter); dialogPath = dialog.addField(typeid(FilenameOpen)); if (dialog.run()) { if(dialog.closedOk()) { filePath = dialogPath.value(); application = SysExcelApplication::construct(); application.visible(false); workBooks = application.workbooks(); workBooks.open(filePath,0,true); workSheets = workBooks.item(1).worksheets(); noOfSheet = worksheets.count(); progress = new SysOperationProgress(); progress.setCaption("Vendor Importing"); progress.setTotal(lastRow); progress.setAnimation(#AviTransfer); setprefix("Vendor Import"); try { For( i = 1; i <= noOfSheet; i++) { workSheet = workSheets.itemFromNum(i); if(workSheet) { findLastRow(workSheet); for(sn = 2;sn <= lastrow;sn++) { ttsbegin; cells = workSheet.cells(); cells = workSheet.cells(); PurchLine.clear(); PurchLine.PurchId = cells.item(sn,1).value().bStr(); PurchLine.VendAccount = cells.item(sn,2).value().bStr(); PurchLine.ItemId = cells.item(sn,3).value().bStr(); PurchLine.PurchQty = cells.item(sn,4).value().double(); PurchLine.PurchPrice = cells.item(sn,5).value().currency(); PurchLine.LineAmount = PurchLine.PurchQty * PurchLine.PurchPrice; PurchLine.TaxItemGroup = cells.item(sn,6).value().bStr(); PurchLine.VendGroup = "272101"; PurchLine.TaxGroup = "YURTICI"; PurchLine.CurrencyCode = "EUR"; PurchLine.ETGInventType = InventTable::find(PurchLine.ItemId).ETGInventType; PurchLine.PurchUnit = InventTable::find(InventTableModule::find(PurchLine.ItemId, ModuleInventPurchSales::Purch).ItemId).purchUnitId(); PurchLine.PurchaseType = PurchaseType::Purch; // tmpInventDimItem.clear(); // tmpInventDimItem = purchLine.inventDim(); // tmpInventDimItem = InventDim::findOrCreate(tmpInventDimItem); if ( InventSite::exist(cells.item(sn,7).value().bStr()) ) tmpInventDimItem.InventSiteId = cells.item(sn,7).value().bStr(); if ( InventLocation::exist(cells.item(sn,8).value().bStr()) ) tmpInventDimItem.InventLocationId = cells.item(sn,8).value().bStr(); purchLine.InventDimId = cells.item(sn,9).value().bStr(); PurchLine.RemainPurchPhysical = PurchLine.PurchQty; PurchLine.RemainInventPhysical = PurchLine.PurchQty; PurchLine.QtyOrdered = PurchLine.PurchQty; if(Dimensions::exist(SysDimension::Department,cells.item(sn,10).value().bStr()) && cells.item(sn,10).value().bStr()) { PurchLine.Dimension[1] = cells.item(sn,10).value().bStr(); // DRT MK - KDV hesaplaması için } else if(cells.item(sn,10).value().bStr()) throw error(strfmt("%1 - %2 boyutu tanımlı değildir", SysDimension::Department, cells.item(sn,10).value().bStr())); if(Dimensions::exist(SysDimension::Center,cells.item(sn,11).value().bStr())) PurchLine.Dimension[2] = cells.item(sn,11).value().bStr(); else if(cells.item(sn,11).value().bStr()) throw error(strfmt("%1 - %2 boyutu tanımlı değildir", SysDimension::Center, cells.item(sn,11).value().bStr())); if(Dimensions::exist(SysDimension::Purpose,cells.item(sn,12).value().bStr())) PurchLine.Dimension[3] = cells.item(sn,12).value().bStr(); else if(cells.item(sn,12).value().bStr()) throw error(strfmt("%1 - %2 boyutu tanımlı değildir", SysDimension::Purpose, cells.item(sn,12).value().bStr())); if(Dimensions::exist(SysDimension::Person,cells.item(sn,13).value().bStr())) PurchLine.Dimension[4] = cells.item(sn,13).value().bStr(); else if(cells.item(sn,13).value().bStr()) throw error(strfmt("%1 - %2 boyutu tanımlı değildir", SysDimension::Person, cells.item(sn,13).value().bStr())); if(Dimensions::exist(SysDimension::Vehicle,cells.item(sn,14).value().bStr())) PurchLine.Dimension[5] = cells.item(sn,14).value().bStr(); else if(cells.item(sn,14).value().bStr()) throw error(strfmt("%1 - %2 boyutu tanımlı değildir", SysDimension::Vehicle, cells.item(sn,14).value().bStr())); PurchLine.insert(); info("Aktarma tamamlandı"); ttscommit; } } } } catch { ttsabort; application.quit(); } } } }Kullandığım exel şablonunu inceleyebilirsiniz. Excel Şablonu
Satınalma siparişlerini toplu aktarma | Sipariş başlığı, Dynamics Ax
Satınalma siparişleri toplu aktarma
Siparişlerin başlıklarını toplu aktarmak için aşağıdaki kodu kullanabilirsiniz.void MAA_Excel_PurchTable() // DRT_PasswordTable { #Excel #AviFiles Dialog dialog = new Dialog("Veri Aktarma"); DialogField dialogPath; FilenameFilter filter = ['Excel files 2010','*.xlsx','Excel files 2003', '*.xls' ]; FilenameOpen filePath; SysExcelApplication application; SysExcelWorkBooks workBooks; SysExcelWorkBook workBook; SysExcelWorkSheets workSheets; SysExcelWorkSheet workSheet; SysExcelCells cells; SysOperationProgress progress; Int NoofSheet,i,lastRow,sn; PurchTable PurchTable; SysExcelRange range; void findLastRow(SysExcelWorkSheet _workSheet) { #define.Star('*') #define.Space(' ') ; range = _workSheet.cells().range(#ExcelTotalRange); try { range = range.find(#Star, null, #xlFormulas, #xlWhole, #xlByRows, #xlPrevious); } catch (Exception::Error) { error("@SYS59926"); } if (range) { lastRow = range.row(); } else { lastRow = 0; } } ; dialog.filenameLookupFilter(filter); dialogPath = dialog.addField(typeid(FilenameOpen)); if (dialog.run()) { if(dialog.closedOk()) { filePath = dialogPath.value(); application = SysExcelApplication::construct(); application.visible(false); workBooks = application.workbooks(); workBooks.open(filePath,0,true); workSheets = workBooks.item(1).worksheets(); noOfSheet = worksheets.count(); progress = new SysOperationProgress(); progress.setCaption("Vendor Importing"); progress.setTotal(lastRow); progress.setAnimation(#AviTransfer); setprefix("Vendor Import"); try { For( i = 1; i <= noOfSheet; i++) { workSheet = workSheets.itemFromNum(i); if(workSheet) { findLastRow(workSheet); for(sn = 2;sn <= lastrow;sn++) { ttsbegin; cells = workSheet.cells(); cells = workSheet.cells(); PurchTable.PurchId = cells.item(sn,1).value().bStr(); PurchTable.OrderAccount = cells.item(sn,2).value().bStr(); PurchTable.InvoiceAccount = cells.item(sn,4).value().bStr(); PurchTable.CurrencyCode = cells.item(sn,5).value().bStr(); PurchTable.PaymMode = cells.item(sn,10).value().bStr(); PurchTable.FixedDueDate = cells.item(sn,9).value().date(); PurchTable.PostingProfile = "320"; PurchTable.PurchPlacer = "2524"; PurchTable.PurchName = VendTable::find(PurchTable.OrderAccount).Name; PurchTable.VendGroup = VendTable::find(PurchTable.OrderAccount).VendGroup; PurchTable.InventSiteId = VendTable::find(PurchTable.OrderAccount).InventSiteId; PurchTable.InventLocationId = VendTable::find(PurchTable.OrderAccount).InventLocation; PurchTable.PurchaseType = PurchaseType::Purch; PurchTable.DlvCountryRegionId = VendTable::find(PurchTable.OrderAccount).CountryRegionId; PurchTable.TaxGroup = VendTable::find(PurchTable.OrderAccount).TaxGroup; PurchTable.DeliveryAddress = VendTable::find(PurchTable.OrderAccount).Address; PurchTable.Email = VendTable::find(PurchTable.OrderAccount).Email; PurchTable.LanguageId = VendTable::find(PurchTable.OrderAccount).LanguageId; PurchTable.DlvState = VendTable::find(PurchTable.OrderAccount).State; PurchTable.VATNum = VendTable::find(PurchTable.OrderAccount).VATNum; PurchTable.insert(); info("Aktarma tamamlandı"); ttscommit; } } } } catch { ttsabort; application.quit(); } } } }Kullandığım exel şablonunu inceleyebilirsiniz. Excel Şablonu Satırların aktarımı için bu yazıyı inceleybilirsiniz.
28 Ağustos 2019 Çarşamba
Satınalma taleplerinden sipariş oluşturma | Dynamics Ax
Satınalma taleplerinde girilen birim fiyatın sipariş oluşturulduğunda satınalma siparişinin birim fiyatına gelmesini PurchAutoCreate_PurchReq class'ında bulunan CreatePurchLine methodunu aşağıdaki gibi düzenlediğimizde birim fiyat talepteki olacaktır.
if (reqLine.LineType == PurchReqLineType::Category || reqLine.PurchRFQCaseId) { searchPrice = false; purchLine.PurchPrice = reqLine.PurchPrice; // birim fiyat purchLine.LineDisc = reqLine.LineDisc; purchLine.LinePercent = reqLine.LinePercent; purchLine.PurchMarkup = reqLine.PurchMarkup; purchLine.LineAmount = purchLine.calcLineAmount(); } else { searchPrice = true; } // if (reqLine.ETGUnitCostPrice != 0) // maa // { // purchLine.PurchPrice = reqLine.ETGUnitCostPrice; // birim maliyet // searchPrice = false; // }
Üretim operasyonunu planlama projesi | Dynamics Ax
Üretim operasyonunda üretim ve iş merkezi bazlı sürelerin hesaplanması
Üretimde her bir iş emrinde harcanan süreyi ve sonrasında iş merkezi bazlı raporlanması için bir proje istenildi.
Bunun için yapmamız gerekenlerden bir tanesi ProdId ile ilişkili bir tablo oluşturmak olacak.
Ben burada DRT_ProdOpReportTrans adında bir tablo oluşturdum ve ProdTable ile ilişkilerini aşağıdaki gibi düzenledim.
Her bir adımın sayılması için Sayı alanını, Üretimin başlangıç bitiş saatlerini, Üretimdeki duruşların girilmesi için Duruş kodu alanını ve iş merkezi alanını tabloya ekledim. Bunların dışında işlemlerin gerçekleşmesi hangi üretim üzerinde çalışılıyorsa onların bilgisi ve başlangıç bitiş saatleriyle hesaplama yapılacak olan Toplam Brüt, Duruş ve Toplam net süreleri ekledim.
Sayıyı 1 arttırmak için DRT_ProdOpReportTrans tablosunun methods'una aşağıdaki gibi kodları yazıyoruz.
1
public void initValue() { super(); this.Num = 1 + this.lastNum(); this.TransDate = dateEndMth(systemdateget()); }2
int lastNum() { return (select maxof(Num) from DRT_ProdOpReportTrans).Num; }3
static Integer Num(ProdId prodId) { return (select maxof(Num) from DRT_ProdOpReportTrans index hint ProdIdx where DRT_ProdOpReportTrans.ProdId == prodId).Num; }
Sonrasında oluşturmuş olduğumuz formun methods'una da aşağıdaki kodu yazıyoruz.
void Num() { i = i+1; }
Oluşturduğumuz formda yazacağımız kodların bölümler aşağıdaki gibi. incelemekte fayda var.
Saatin düzgün hesaplanmasını sağlamak için, Formun methods'una aşağıdaki gibi bir kod yazıyoruz.
public void init() { super(); if (DRT_ProdOpReportTrans.End == NoYes::No && DRT_ProdOpReportTrans.Start == NoYes::No) { DRT_ProdOpReportTrans.StopHour = (DRT_ProdOpReportTrans.EndHour - DRT_ProdOpReportTrans.StartHour) / 3600; } else { DRT_ProdOpReportTrans.StopHour = (DRT_ProdOpReportTrans.EndHour - DRT_ProdOpReportTrans.StartHour) * 0; } }DataSourcw'daki aktive'ıne aşağıdaki kodu yazarak kaydın durumuna göre alanların pasif ya da aktif olmasını sağlıyoruz.
public int active() { int ret; DRT_ProdOpReportTrans prodOpReportTrans; ProdTable ProdTable; ret = super(); if (DRT_ProdOpReportTrans.Num < DRT_ProdOpReportTrans::Num(DRT_ProdOpReportTrans.ProdId) || (DRT_ProdOpReportTrans.End == NoYes::Yes)) { OpEnd.enabled(false); DRT_ProdOpReportTrans_ds.allowCreate(false); DRT_ProdOpReportTrans_ds.allowEdit(false); } else { OpEnd.enabled(true); DRT_ProdOpReportTrans_ds.allowCreate(true); DRT_ProdOpReportTrans_ds.allowEdit(true); } if (DRT_ProdOpReportTrans.Num < DRT_ProdOpReportTrans::Num(DRT_ProdOpReportTrans.ProdId) || (DRT_ProdOpReportTrans.End == NoYes::Yes || DRT_ProdOpReportTrans.Start == NoYes::Yes )) { OpEnd.enabled(false); } else { OpEnd.enabled(true); DRT_ProdOpReportTrans_ds.allowCreate(true); } while select firstonly prodOpReportTrans where DRT_ProdOpReportTrans.End == NoYes::Yes // DRT_ProdOpReportTrans.ProdId == ProdTable.ProdId && DRT_ProdOpReportTrans.Num > 1 { { DRT_ProdOpReportTrans_ds.allowEdit(false); } if (DRT_ProdOpReportTrans.Num > DRT_ProdOpReportTrans::Num(DRT_ProdOpReportTrans.ProdId) && DRT_ProdOpReportTrans.End == NoYes::Yes) { DRT_ProdOpReportTrans_ds.allowEdit(false); } else { DRT_ProdOpReportTrans_ds.allowEdit(true); } } if (DRT_ProdOpReportTrans.Num < DRT_ProdOpReportTrans::Num(DRT_ProdOpReportTrans.ProdId)) { DRT_ProdOpReportTrans_ds.allowDelete(false); } else { DRT_ProdOpReportTrans_ds.allowDelete(true); } if (DRT_ProdOpReportTrans.Start == NoYes::Yes) { DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, End)).allowEdit(false); DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, StopId)).allowEdit(false); DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, EndHour)).allowEdit(false); DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, StartHour)).allowEdit(true); } else { DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, EndHour)).allowEdit(true); } if (DRT_ProdOpReportTrans.End == NoYes::Yes) { DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, Start)).allowEdit(false); DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, StartHour)).allowEdit(false); } if (DRT_ProdOpReportTrans.Start == NoYes::No && DRT_ProdOpReportTrans.End == NoYes::No) { DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, StopId)).allowEdit(true); DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, StartHour)).allowEdit(true); } else { DRT_ProdOpReportTrans_ds.object(fieldnum(DRT_ProdOpReportTrans, StopId)).allowEdit(false); } return ret; }
Create böülümünde kayıt oluşturulurken ilgili alanların istenilen şekilde dolmasını sağlıyoruz.
public void create(boolean _append = false) { DRT_ProdOpReportTrans ProdOpReportTrans; ProdTable ProdTable; super(_append); DRT_ProdOpReportTrans.TransDate = systemdateget(); DRT_ProdOpReportTrans.WrkCtrId = ProdRoute::findFirst(DRT_ProdOpReportTrans.ProdId).WrkCtrId; DRT_ProdOpReportTrans.Num = DRT_ProdOpReportTrans::Num(DRT_ProdOpReportTrans.ProdId) + 1; DRT_ProdOpReportTrans.QtySched = ProdTable::find(DRT_ProdOpReportTrans.ProdId).QtySched; DRT_ProdOpReportTrans.InventDimId = ProdTable::find(DRT_ProdOpReportTrans.ProdId).InventDimId; if ((DRT_ProdOpReportTrans::Num(DRT_ProdOpReportTrans.ProdId)) < 1) { DRT_ProdOpReportTrans.Start = NoYes::Yes; } if ((DRT_ProdOpReportTrans::Num(DRT_ProdOpReportTrans.ProdId)) > 1) { DRT_ProdOpReportTrans.Start = NoYes::No; DRT_ProdOpReportTrans.StartHour = 0; } }
ValidateWrite'a yazdığımız kodlar belirlenen koşullarda kayıtlara güncelleme yaptırmaya izin verir, yoksa kayıt ettirmez.
public boolean validateWrite() { boolean ret; ; if (DRT_ProdOpReportTrans.TransDate < ProdTable::find(DRT_ProdOpReportTrans.ProdId).SchedStart) return checkfailed (strfmt(" %1 Üretimin başlangıç tarihinden önce olamaz! %2", ProdTable::find(DRT_ProdOpReportTrans.ProdId).ProdId, ProdTable::find(DRT_ProdOpReportTrans.ProdId).SchedStart)); ret = super(); return ret; }
Bu operasyonu da bitirmek için buton eklendi ve click method'unda aşağıdaki Formun methods'una yazdığımız kod çağrıldı
.
void OpEnd() { Dialog d = new Dialog(strfmt("%1 üretimi bitirme", DRT_ProdOpReportTrans.ProdId)); DialogField dlgEndHour; DialogGroup dlgGroup; boolean ret = true; ; dlgGroup = d.addGroup("Üretimi bitir"); dlgGroup.widthMode(FormWidth::ColumnWidth); dlgGroup.heightMode(FormHeight::ColumnHeight); dlgEndHour = d.addField(typeid(SchedFromTime), "Bitiş saati"); dlgEndHour.value(DRT_ProdOpReportTrans.ProdId); if ((dlgEndHour.value(DRT_ProdOpReportTrans::StartHour(DRT_ProdOpReportTrans.ProdId)) > DRT_ProdOpReportTrans::EndHour(DRT_ProdOpReportTrans.ProdId))) { ret = checkfailed ("Üretimin başlangıç saatinden önce olamaz!"); } else if (DRT_ProdOpReportTrans) { d.run(); if (d.closedOk()) { ttsbegin; DRT_ProdOpReportTrans.EndHour = dlgEndHour.value(); DRT_ProdOpReportTrans.End = NoYes::Yes; DRT_ProdOpReportTrans.Update(); ttscommit; DRT_ProdOpReportTrans_ds.research(true); } } else throw warning ("Öncelikle bir satır seçmelisiniz!");
Böylelikle bir üretim için operasyon süreleri sonlandırılmış oldu. Harcanan süreleri hesaplamak için yapmamız gerekenler de aşağıdaki gibi.
Toplam brüt süreyi hesaplamak için Operasyonun başladığı saatten bittiği saate kadar olan süreyi çıkardığımızda sonucu elde etmiş oluruz.
Başlangıç saatlerini aşağıdaki kodla alabiliriz. Birden fazla başlama olabilir.
display real dispStartProdHour() { DRT_ProdOpReportTrans DRT_ProdOpReportTrans; select sum(StartHour) from DRT_ProdOpReportTrans where DRT_ProdOpReportTrans.ProdId == this.ProdId && DRT_ProdOpReportTrans.Start == Noyes::Yes; return DRT_ProdOpReportTrans.StartHour; }Bitiş saatini de aşağıdaki kodla alabiliriz.
display real dispEndProdHour() { DRT_ProdOpReportTrans DRT_ProdOpReportTrans; select sum(EndHour) from DRT_ProdOpReportTrans where DRT_ProdOpReportTrans.ProdId == this.ProdId && DRT_ProdOpReportTrans.End == NoYes::Yes; return DRT_ProdOpReportTrans.EndHour; }Bitiş saatinden başlangıç saatini çıkardığımızda bu operasyonda geçen Toplam brüt süreyi elde ederiz.
server display Hours TotalTime() { DRT_ProdOpReportTrans ProdOpReportTrans; Hours hours = 0; ; while select ProdOpReportTrans index hint ProdLineIdx where ProdOpReportTrans.ProdId == this.ProdId if(ProdOpReportTrans.End == NoYes::Yes || ProdOpReportTrans.Start == NoYes::Yes ) { hours = (ProdOpReportTrans.dispEndProdHour() - ProdOpReportTrans.dispStartProdHour()) / str2Time('00:60'); } return hours; }
Maddenin hareket durumları (InventTrans) | Dynamics Ax
Madde üzerindeki hareketler
Satınalma siparişinde;
Örnek bir madde kartı üzerinden gidelim; etiket için oluşturulmuş ETI0338 madde kartını stoğa almak için öncelikle bir satın alma siparişi oluşturalım hareketlerini inceleyelim.1'de miktarı 2200 olacak şekilde satın alma siparişi oluşturuldu. 2'de 200 adeti faturalandı ve 3'te 150 adeti sevk irsaliyesi kesildi.
1. Sipariş oluşturuldu.
- Referansı: Satınalma siparişi,
- Fiili tarih ve Mali tarih dolmuyor,
- Giriş: Sipariş edilen,
- Çıkış: Boş
2. 150 adet miktar sevk irsaliyesi kesildi sonrasında faturalandı. Faturalandıktan sonra 150 adet siparişteki tesisin stoğuna 150 adet miktar kadar girmiş oldu.
- Referansı: Satınalma siparişi,
- Fiili tarih ve Mali tarih doluyor,
- Giriş: Satın alınan,
- Çıkış: Boş
3. 2000 adet miktar sevk irsaliyesi kesildi(İrsaliye hareketini de incelemek için).
- Referansı: Satınalma siparişi,
- Fiili tarih dolu, Mali tarih boş oluyor,
- Giriş: Alındı,
- Çıkış: Boş
Not: Nakil işleminden sonra stoğa girer, Madde hareketlerindeki miktar pozitiftir(+).
Üretimde;
TIM1583 Madde kartının üretimini oluşturalım(Üretim tamamlanmadan incelemek için).
100 adet miktar üretim oluşturuldu.
24, 24 ayrı satırlarda sipariş oluşturuldu(Faturalanmışla faturalanmamış arasındaki farkı görmek için).
Not: Nakil işleminden sonra stoktan düşer, Madde hareketlerindeki miktar negatiftir(-).
Faturalanmamış(Sadece sipariş oluşturulmuş)
Harekete oluşturduğumuz günlüğü nakil etmeden;
Harekete oluşturduğumuz günlüğü nakil ettikten sonra;
- Referansı: Üretim,
- Fiili tarih boş, Mali tarih boş oluyor,
- Giriş: Sipariş edilen,
- Çıkış: Boş
Aynı madde kartını 48 adetlik farklı bir üretimde tamamlandıktan sonra maddenin üzerindeki hareketleri inceleyelim;
Not: Nakil işleminden sonra stoğa girer, Madde hareketlerindeki miktar pozitiftir(+).
Not: Nakil işleminden sonra stoğa girer, Madde hareketlerindeki miktar pozitiftir(+).
48 adet miktar üretim oluşturuldu.
- Referansı: Üretim,
- Fiili tarih dolu, Mali tarih dolu oluyor,
- Giriş: Satın alınan,
- Çıkış: Boş
Ax otomatik olarak karantina emri oluşturuyor, sonlandırılınca;
- Referansı: Karantina emri,
- Fiili tarih dolu, Mali tarih dolu oluyor,
- Giriş: Boş,
- Çıkış: Satılan,
Satışta;
Not: Nakil işleminden sonra stoktan düşer, Madde hareketlerindeki miktar negatiftir(-).
Faturalanmamış(Sadece sipariş oluşturulmuş)
- Referansı: Satış siparişi,
- Fiili tarih boş, Mali tarih boş oluyor,
- Giriş: Boş,
- Çıkış: Siparişte
Faturalamış,
- Referansı: Satış siparişi,
- Fiili tarih dolu, Mali tarih dolu oluyor,
- Giriş: Boş,
- Çıkış: Satılan
Hareket günlüğünde;
Stok yönetimi > Günlükler > Madde hareketi > Hareket
Not: Nakil işleminden sonra stoktan düşer, Madde hareketlerindeki miktar negatiftir(-).
- Referansı: Hareket,
- Fiili tarih boş, Mali tarih boş oluyor,
- Giriş: Fiziksel rezerve miktar,
- Çıkış: Boş,
- Referansı: Hareket,
- Fiili tarih dolu, Mali tarih dolu oluyor,
- Giriş: Boş,
- Çıkış: Satılan,
Maddenin hareketleri neticesinde oluşan değerler tesise göre Eldeki(InventSum) hesaplanır.
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...