29 Şubat 2012 Çarşamba
Tablo alanları arasında dinamik gezinmek.
Merhaba,
Birbirinden türetilmiş tablolarda veya dinamik olarak oluşturduğunuz ve alan adını bilmediğiniz tablolarda kullanabileceğinizi bir kod örneğini paylaşmak isterim.
Öncelikle kodu anlamaya başlamadan önce bazı şeyleri açıklayalım.
DictTable parametre olarak gönderdiğiniz tablo numarasının bağlı olduğu tablo objesi ile ilgili bilgilere ulaşmanızı sağlayan bir sınıf.
DictField parametre olarak gönderdiğimiz tablo numarası ve alan numarasının bağlı olduğu tablo alanı ile ilgili bilgilere ulaşılmasını sağlayan sınıf.
Anytye değişken tipi ile okuma yapacağımız tablonun alanlarının veri türü her ne olursa olsun çevirme işlemine tabi tutmadan saklamamızı sağlıyor.
Örnekte müşteriler tablosunun bir kaydı için alanları gezip sistem alanı olmayan alanların önce alan adını sonra = işareti ekleyerek alanın değerini info ile yazdırıyoruz.
DictTable dictTable = new DictTable(tableNum(CustTable));
DictField dictField;
int counter, fieldId;
CustTable custTable;
anytype value;
select firstonly custTable;
for (counter = 1; counter <= dictTable.fieldCnt(); counter++)
{
fieldId = dictTable.fieldCnt2Id(counter);
dictField = new DictField(tableNum(CustTable), fieldId);
if (!dictField.isSystem())
{
value = custTable.(fieldId);
if(value)
{
info(strFmt('%1 = %2', dictField.label(), any2str(value)));
}
}
}
Dinamik tablo yapılarında kullanabileceğiniz bu yapıyı faydalı bulduğunuzu umarım.
Bol AX'lı günler,
Alper.
DictTable dictTable = new DictTable(tableNum(CustTable));
DictField dictField;
int counter, fieldId;
CustTable custTable;
anytype value;
select firstonly custTable;
for (counter = 1; counter <= dictTable.fieldCnt(); counter++)
{
fieldId = dictTable.fieldCnt2Id(counter);
dictField = new DictField(tableNum(CustTable), fieldId);
if (!dictField.isSystem())
{
value = custTable.(fieldId);
if(value)
{
info(strFmt('%1 = %2', dictField.label(), any2str(value)));
}
}
}
Dinamik tablo yapılarında kullanabileceğiniz bu yapıyı faydalı bulduğunuzu umarım.
Bol AX'lı günler,
Alper.
24 Şubat 2012 Cuma
Filter data with selected data from previous form / Formda seçilen değer ile açılan formu filtreleme
TR | ENG
Merhaba,
Bir formda çalışırken o form üzerindeki veriler ile ilgili başka bir formu açıp yeni açılan form üzerinde ilgili kayıta göre verinin filtrelenmesi gerekiyor ise yapmamız gereken çok kısa geliştirmeden bahsedeceğim.
Örneğin madde kartı üzerinden başka bir forma gidip yeni açılan form üzerindeki verileri madde kartındaki seçtiğimiz veri ile filtrelemek istiyoruz.
Öncelikle yeni bir tablo, form ve menu item oluşturuyoruz.
Tabloda ilişki kuracağımız alan olarak bizi ItemId ilgilendiriyor diğer alanlar size kalmış
Tabloyu açtıktan sonra formu oluşturuyor ve form üzerine tablonun istediğimiz alanlarını sürükleyip bırakıyoruz.
Formu kullanarak menuitemı display tipte oluşturup oluşturduğumuz menuitemı madde kartı formu üzerine buttonGroup a sürükleyip bırakıyoruz.
Şu ana kadar yaptıklarımız ile madde kartı üzerinde eklediğimiz butona tıklandığında yeni hazırladığımız form açılacak ama tüm değerleri gösterecek.
Şimdi filtreleme kısmına geçelim.
Yeni formumuzun veri kaynağının init methodunda super kısmından sonra aşağıdaki kod bloğunu eklememiz yeterli olacak.
if (element.args().dataset() == tablenum(InventTable))
{
SysQuery::findOrCreateRange(
YeniTablo_ds.query().dataSourceTable(
tablenum(YeniTablo)),fieldnum(YeniTablo,ItemId)).value(
element.args().record().(fieldnum(InventTable,ItemId)));
}
Yazdığımız kodun sadece InventTable dan gelen çağırılar için çalışmasını istediğimizden ilk satırda kontrol yapıyoruz.
Sonra SysQuery objesinin findOrCreateRange ile filtreleme için alanı yok ise yaratıyor var ise yaratmadan bulup değer atamamızı sağlıyor.
findOrCreateRange methodu ilk parametre olarak veri kaynağını ikinci parametre olarak alan kodu istiyor.
Formda kullandığımız veri kaynağının adının sonuna _ds ekleyerek veri kaynağına query() ile sorgusuna ve son olarak dataSourceTable ile de tablo idsini verdiğimiz tabloya ulaşabiliriz.
Elde ettiğimiz filtreye değer vermek için value methodunu kullanıyoruz ve paramtere olarak parametre ile gelen kayıdı element.args().record() ile alıyor ve sonrasında .(alankodu) ile kayıt kümesindeki belirttiğimiz alan kodlu alanı filtreye gönderiyoruz.
Kod kısa olsa bile anlatması biraz uzun sürdü, umarım işinize yarar.
Bol AX'lı günler.
Alper.
------------------------------------------------------------------------------------------------------------
Hi there,
If you want to filter data from previous form you would simply do the followings below.
Create new table, form and menu item.
Take menu item drag and drop it to form which will be used to called from.
After you do all this overwrite the init method of datasource on the new form and paste the code below just after your modifications (table names, filed names).
if (element.args().dataset() == tablenum(InventTable))
{
SysQuery::findOrCreateRange(
NewTable_ds.query().dataSourceTable(
tablenum(NewTable)),fieldnum( NewTable ,ItemId)).value(
element.args().record().(fieldnum(InventTable,ItemId)));
}
This is it you filtered your data with data which came from previous form.
What we just did is simply check is data coming from table we wanted
Find or create range on forms data source and filed by using "NewTable_ds.query().dataSourceTable(
tablenum(NewTable))" and "fieldnum( NewTable ,ItemId)" and finally assign filter value "element.args().record().(fieldnum(InventTable,ItemId))" as you can see we used element.args().record() to get row and .(filed number) to get rows specific column.
Hope you find it useful.
Happy AXing,
Alper.
Merhaba,
Bir formda çalışırken o form üzerindeki veriler ile ilgili başka bir formu açıp yeni açılan form üzerinde ilgili kayıta göre verinin filtrelenmesi gerekiyor ise yapmamız gereken çok kısa geliştirmeden bahsedeceğim.
Örneğin madde kartı üzerinden başka bir forma gidip yeni açılan form üzerindeki verileri madde kartındaki seçtiğimiz veri ile filtrelemek istiyoruz.
Öncelikle yeni bir tablo, form ve menu item oluşturuyoruz.
Tabloda ilişki kuracağımız alan olarak bizi ItemId ilgilendiriyor diğer alanlar size kalmış
Tabloyu açtıktan sonra formu oluşturuyor ve form üzerine tablonun istediğimiz alanlarını sürükleyip bırakıyoruz.
Formu kullanarak menuitemı display tipte oluşturup oluşturduğumuz menuitemı madde kartı formu üzerine buttonGroup a sürükleyip bırakıyoruz.
Şu ana kadar yaptıklarımız ile madde kartı üzerinde eklediğimiz butona tıklandığında yeni hazırladığımız form açılacak ama tüm değerleri gösterecek.
Şimdi filtreleme kısmına geçelim.
Yeni formumuzun veri kaynağının init methodunda super kısmından sonra aşağıdaki kod bloğunu eklememiz yeterli olacak.
if (element.args().dataset() == tablenum(InventTable))
{
SysQuery::findOrCreateRange(
YeniTablo_ds.query().dataSourceTable(
tablenum(YeniTablo)),fieldnum(YeniTablo,ItemId)).value(
element.args().record().(fieldnum(InventTable,ItemId)));
}
Yazdığımız kodun sadece InventTable dan gelen çağırılar için çalışmasını istediğimizden ilk satırda kontrol yapıyoruz.
Sonra SysQuery objesinin findOrCreateRange ile filtreleme için alanı yok ise yaratıyor var ise yaratmadan bulup değer atamamızı sağlıyor.
findOrCreateRange methodu ilk parametre olarak veri kaynağını ikinci parametre olarak alan kodu istiyor.
Formda kullandığımız veri kaynağının adının sonuna _ds ekleyerek veri kaynağına query() ile sorgusuna ve son olarak dataSourceTable ile de tablo idsini verdiğimiz tabloya ulaşabiliriz.
Elde ettiğimiz filtreye değer vermek için value methodunu kullanıyoruz ve paramtere olarak parametre ile gelen kayıdı element.args().record() ile alıyor ve sonrasında .(alankodu) ile kayıt kümesindeki belirttiğimiz alan kodlu alanı filtreye gönderiyoruz.
Kod kısa olsa bile anlatması biraz uzun sürdü, umarım işinize yarar.
Bol AX'lı günler.
Alper.
------------------------------------------------------------------------------------------------------------
Hi there,
If you want to filter data from previous form you would simply do the followings below.
Create new table, form and menu item.
Take menu item drag and drop it to form which will be used to called from.
After you do all this overwrite the init method of datasource on the new form and paste the code below just after your modifications (table names, filed names).
if (element.args().dataset() == tablenum(InventTable))
{
SysQuery::findOrCreateRange(
NewTable_ds.query().dataSourceTable(
tablenum(NewTable)),fieldnum( NewTable ,ItemId)).value(
element.args().record().(fieldnum(InventTable,ItemId)));
}
This is it you filtered your data with data which came from previous form.
What we just did is simply check is data coming from table we wanted
Find or create range on forms data source and filed by using "NewTable_ds.query().dataSourceTable(
tablenum(NewTable))" and "fieldnum( NewTable ,ItemId)" and finally assign filter value "element.args().record().(fieldnum(InventTable,ItemId))" as you can see we used element.args().record() to get row and .(filed number) to get rows specific column.
Hope you find it useful.
Happy AXing,
Alper.
22 Şubat 2012 Çarşamba
Error 29506 while installing SQL server management studio express 2005
Merhaba,
Windows 7 üzerinde SQL server management studio 2005 versiyonunu yüklemeye çalıştığınızda hata kodu olarak 29506 alıyorsanız aşağıdaki adımları izleyin.
Windows 7 üzerinde SQL server management studio 2005 versiyonunu yüklemeye çalıştığınızda hata kodu olarak 29506 alıyorsanız aşağıdaki adımları izleyin.
- Başlat -> Programlar -> Donatılar -> Komut Sistemi ' ne sağ tıklayıp yönetici olarak başlatın.
- SQL in kurulum dosyasının olduğu klasöre konumlanın.
- Kurulum dosyasının adını yazarak kurulumu başlatın.
When I try to install SQL server management studio express for 2005, then I got the 29506 error. To pass this error click start menu->accessories, right click on 'Command Prompt' and select run as administrator. on the command window, navigate to the path where you have the installation file. Now just type the file name and hit enter it will start the installer.
Alper.
16 Şubat 2012 Perşembe
The test form is only available for requests from the local machine
Merhabalar,
Web servisleri ile uğraşırken özellikle test aşamasında "The test form is only available for requests from the local machine" uyarısını geçmek istediğimizde yapmamız gereken işlem web.config dosyasını değişiklik için açıp <system.web> tagı altına aşağıdaki gibi ilgili tagları eklemek.
<configuration>
<system.web>
<webServices>
<protocols>
<add name=”HttpGet”/>
<add name=”HttpPost”/>
</protocols>
</webServices>
</system.web>
</configuration>
Hem AX entegrasyonları ile uğraşırken hemde AX dışındaki geliştirmelerinizde kullanabileceğiniz bir bilgi.
Bol AX lı günler,
Alper.
15 Şubat 2012 Çarşamba
TreeControl kullanımı
Sınıflandırma yapılması istendiğinde TreeControl kullanılabilir.
Treecontrol kullanırken dikkat edilmesi gereken kontrolü eklerken hangi düğüm (node) ün altında yer alacağı bilgisine hakim olmaktır.
Bu kontrolü sağlamak için TreeItemIdx tipli değişken tanımlıyoruz ve bu değişkeni ağaca yeni kırılım eklerken hangi kontrolün altında yer alacağını belirtmek için kullanıyoruz.
Aşağıdaki kodda madde kartı içerisinde dolaşıp madde grubu bazında maddeleri listeleyen bir ağaç yapısı oluşturuyoruz.
Kırılımların daha iyi anlaşılabilmesi için kırılımlara birer resim atıyoruz.
Resimler için ImageListAllp_Help sınıfındaki açık klasörü kök öğe için, kapalı kitabı madde grubu için, açık kitabıda bu maddeler için kullanıyoruz.
#resAppl
InventTable inventTable;
TreeItemIdx item,itemGroup,root;
ItemGroupId oldItemGroup;
ImageRes imageResItem,imageResGroup,imageResRoot;
ImageListAppl_Help imageList = new ImageListAppl_Help();
;
imageResRoot = imageList.image(#ImageFolderOpen);
imageResGroup = imageList.image(#ImageHelpTOCBookClosed);
imageResItem = imageList.image(#ImageHelpTOCBookOpen);
formTreeControl.setImagelist(imageList.imageList());
root = SysFormTreeControl::addTreeItem(formTreeControl,"Maddeler",FormTreeAdd::Root,"Maddeler",imageResRoot);
while select inventTable order by ItemGroupId
{
if (!oldItemGroup)
{
oldItemGroup = inventTable.ItemGroupId;
itemGroup = SysFormTreeControl::addTreeItem(formTreeControl,inventTable.ItemGroupId,root,inventTable.ItemGroupId,imageResGroup);
}
if (oldItemGroup != inventTable.ItemGroupId)
{
SysFormTreeControl::expandTree(formTreeControl,itemGroup);
oldItemGroup = inventTable.ItemGroupId;
itemGroup = SysFormTreeControl::addTreeItem(formTreeControl,inventTable.ItemGroupId,root,inventTable.ItemGroupId,imageResGroup);
}
item = SysFormTreeControl::addTreeItem(formTreeControl,inventTable.ItemId,itemGroup,inventTable.ItemId,imageResItem);
}
SysFormTreeControl::expandTree(formTreeControl,formTreeControl.getRoot(),1);
Hepsi bu bol AX lı günler.
Alper.
14 Şubat 2012 Salı
Sevgililer Gününüz Kutlu Olsun - Happy Valantines Day
Sevdiklerinizle birlikte sağlıklı sıhhatli bol Axapta'lı günler.
---
Happy Valantines day with your family,friends and AX
Billur, Alper
---
Happy Valantines day with your family,friends and AX
Billur, Alper
11 Şubat 2012 Cumartesi
Axapta Tahsisat İşlemleri
TAHSİSAT
Tahsisat yapılacak hesap üzerinde (Hesap planı) temel tabında tahsisat alanı seçilir. Tahsisat alanı seçilen hesap üzerinde kuruluş-tahsisat şartları adımları ile ulaşılan tabloda tahsisat şartları tanımlanır. Bu tabloda yeni kayıt denilerek hesabın işleyişinde virman yapılacak hesap bitiş hesabı alanında seçilir. Seçimin ardından bu hesabın işleyişinde kullanılacak boyutlar alıcı departman/mm/amaç alanlarında seçilir. Boyut tabında başlangıç departman/mm/amaç boyutlarında ise tahsisatı yapılacak hesabın boyutu seçilir. Tahsisat Yüzdesi ise tahsisat da kullanılan orandır.
Örn................................................................................................................................................
Tahsisat Yapılacak Hesap: 730.10.000
Tahsisat Şartları:
Bitiş Hesabı: 730.10.000
Alıcı Departman :02
Alıcı MM:Mal2
Başlangıç Departman :01
Başlangıç MM:Mal1
Tahsisat Oranı:40
Bitiş Hesabı: 760.10.000
Alıcı Departman :03
Alıcı MM:Mal3
Başlangıç Departman :01
Başlangıç MM:Mal1
Tahsisat Oranı:60
Girilen günlük kaydı:
730.10.000 .1000 Dept: 01 MM:Mal1
320.10.000 .1000 Dept: 01 MM:Mal1
Oluşan Muhasebe Kaydı:
730.10.000 .1000 Dept: 01 MM:Mal1
320.10.000 .1000 Dept: 01 MM:Mal1
730.10.000 .400 Dept: 02 MM:Mal2
760.10.000 .600 Dept: 03 MM:Mal3
730.10.000 .1000 Dept: 01 MM:Mal1
....................................................................................................................................................
Oluşturulan muhasebe kaydında tahsisatdan kaynaklanan işlemler için bordro numarası tutulmamaktadır. Alınan raporlarda bordro numarası kriteri konulamamalıdır. Dikkat edilmesi gereken bir diğer husus ise gider üzerinde vergi seçilmiş ise vergi raporlarında ilk hesap üzerinden raporlanmaktadır. Örneğin 770 hesap üzerinden tanımlanan bir tahsisat söz konusu ise ve 770 ve 760 hesaba tahsiste yapılacak ise raporlamalarda 770 hesap raporlanmaktadır
Sabit Kıymetlerin Devri için gerekli bilgiler
Sabit Kıymet ile ilgili tüm tanımlamaların tamamlanabilmesi için gerekli bilgiler tek bir Excel verilerek kullanıcılardan istenebilir. Sabit kıymet kurulumu için aslından birden fazla tabloya data girilmesi gerekmektedir. Örneğin sabit kıymet grubu, değer modeli, sabit kıymetler, sabit kıymet hareketleri, muhasebe entegrasyonu gibi. bununla birlikte kullanıcılara birden fazla doldurulacak Excel'i vermek geri dönüş zamanının artmasına neden olmaktadır. Genelde sabit kıymetler ya Excel'de takip edilmekte ya da takip edilen program üzerinde tek bir rapor üzerinde bir çok bilgi içermektedir. Dolayısı ile tek bir Excel'in doldurulmasını istemek kullanıcının geri dönüşünü rahatlatacak ve geçiş için gerekli datanın verilebilmesini sağlayacaktır.
Danışmanın bu aşamada yeteneğini ve bilgisini kullanarak gerekli bilgileri Excellere bölmesi ve aktarımı bu şekilde yapması her ne kadar zaman alıcı olarak gözükse de projenin devamlılığı açısından kolaylaştırıcı etkiye neden olacaktır.
Exceller aktarılmadan önce yapılması gereken kontrollerden bazıları şunlardır.
Danışmanın bu aşamada yeteneğini ve bilgisini kullanarak gerekli bilgileri Excellere bölmesi ve aktarımı bu şekilde yapması her ne kadar zaman alıcı olarak gözükse de projenin devamlılığı açısından kolaylaştırıcı etkiye neden olacaktır.
Exceller aktarılmadan önce yapılması gereken kontrollerden bazıları şunlardır.
- Negatif ekonomik ömürler var mı?
- Amortisman tutarı ya da gerçek tutarı negatif olan değerler var mı?
Aktarım sonrasında bir aylık amortisman hesaplattırılarak mutlaka kullanıcılara kontrol ettirilmelidir.
Aktarım için aşağıdaki bilgiler yeterli olmakla birlikte eğer sabit kıymet ile ilgili takip edilecek başka bilgiler varsa örneğin sigorta tarihi, açıklamalara, yerleşim, teknik bilgiler gibi mutlaka Excel'e eklenmelidir.
Sabit Kıymet Grubu | Sabit Kıymet Kodu | Sabit Kıymet Adı | Değer Kodu | Giriş Bedeli | Endekslenmiş Değer | Alım Tarihi | Amortisman Yeniden Değerleme Tutarı | X tarihine kadar olan Birikmiş Amortisman | X tarihine kadar yıl başından itibaren cari yıl amortismanı | 31.12.2004 tarihine kadar olan enflasyon düzeltmesi tutarı | 31.12.2004 tarihine kadar olan amortisman enflasyon düzeltmesi tutarı | Ekonomik Ömür Aylık) | Kalan Ömür (Aylık) | Amortisman Uygulanacak mı? (Evet/Hayır) | Beklenen Hurda Değer | Departman | Maliyet Merkezi | Amaç | Kıst Amortismana Tabi | Alım Hesabı | Amortisman Hesabı(257 Grup) | Amortisman Gider Hesabı(7* Grup) |
Sabit Kıymet Satışı için kullanılan hesaplar
Nakledilecek değer | Satış değeri tipi | Genel Muhasebe hesabı | Mahsup hesabı |
Önceki yılların amortismanı | Hepsi | 257.000 | 252.000 |
Bu yılın amortismanı | Hepsi | 257.000 | 252.000 |
Net Defter Değeri | Kar | 252.000 | 679.000 |
Net Defter Değeri | Zarar | 252.000 | 689.000 |
10 Şubat 2012 Cuma
Example of a module list for service industry
Usually these modules are used in service industry. Sure there are more forms, reports and inquiries but the most used ones are listed below:
GENERAL LEDGER
COMMON FORMS
Chart of Account Details
Ledger Budget
Fixed Asset Details
Dimensions
JOURNALS
Journal Entry
Cash Journal Entry
Fixed Assets
INQUIRIES
Voucher Transactions
Audit Trail
Posted Sales Tax
Fixed Asset Transactions
Fixed Asset Budget Transactions
REPORTS
Audit Trail
Fixed Asset Listing
Journal Ledger- Regular
Account Journal Entry
Journal Ledger – Draft
General Ledger – Date Interval
General Ledger
Balance List With Sum Account
Ledger Transaction List
Dimension Statement
Sales Tax Transactions
Financial Statement
Trial Balance
Divided Trial Balance
Balance List
Balance List Detailed
Sales Tax List
Fixed Asset Balances
Sales Tax Payment by Code
Transaction List by Date
Sales Tax Transactions – Details
Sales Tax Specification by Ledger Transaction
Fixed Asset Transactions
Ledger Budget
Annual Budget
Future Value of Fixed asset
PERIODIC
Exchange Adjustment
Exchange Adjustment with Exchange Rate
Recalculate Period Balances
Calculation of Mirror Accounts – Summary
Calculate Cash Flow Forecasts
Currency Requirement
Closing Revenue and Cost Accounts – Automatic
Opening Transactions
SETUP
Exchange Rates
Ledger Reasons
Parameters
Dimension Focuses
Financial Statement
Row Definition
Dimension Sets
Dimension Set Rules
Sales Tax Codes
Sales Tax Groups
Item Sales Tax Groups
Ledger Posting Groups
Sales Tax Authorities
Value Models
Fixed Asset Groups
Posting Profiles
Depreciation Profiles
Locations
Periods
Journal Names
System Accounts
Liquidity
Budget Model
Mirror Accounts
EXCHANGE NOTES
COMMON FORMS
Exchange Note Journal
REPORTS
Check Batch Report
Promissory Note Batch Report
Exchange Journal Ledger
Exchange Note Transaction History
Portfolio List
Portfolio List(KC/KS)
The Portfolio List as-of Date
Check Order by Customer
Daily Cash Receipt
Batch Report
Pending Customer Checks
Pending Company Checks
Customer Documents – Periodic
Customer Documents – Periodically
Customer Check Aging Report
Company Check Aging Report
PERIODIC
Calculation of Rediscount
SETUP
Parameters
Create Voucher Types
BANK
COMMON FORMS
Bank Account Details
Checks
INQUIRIES
Bank Transactions
Balance Control
REPORTS
Bank Account Statement
Bank Cash Flow Report
SETUP
Bank Transaction Type
Bank Groups
Parameters
ACCOUNTS RECEIVABLE
COMMON FORMS
Customer Details
INQUIRIES
Interest Journal
Invoice
REPORTS
Customer
Customer Base Data
Customer Phone List
Internal Account Statement
Customer Aging Report
Customer Balance List
Customer Account Statement
Interest Note
PERIODIC
Exchange Adjustment
Interest Calculation
Interest Note
SETUP
Customer Groups
Posting Profiles
Parameters
Interest
Payment Schedules
ACCOUNTS PAYABLE
COMMON FORMS
Vendor Details
Purchase Order Details
JOURNALS
Payment Journal
INQUIRIES
Packing Slip
Invoice
REPORTS
Vendors
Vendor Base Data
Vendor Phone List
Account Statement
Vendor Aging Report
Vendor Balance List
Vendor/Item Statistics
Item/Vendor Statistics
PERIODIC
Exchange Adjustment
SETUP
Vendor Groups
Posting Profiles
Parameters
Payment Schedules
Methods of Payment
INVENTORY MANAGEMENT
COMMON FORMS
Item Details
JOURNALS
Movement
REPORTS
Inventory Value per Item Group
Inventory Value by Inventory Dimension
PERIODIC
Closing and Adjustment
SETUP
Item Groups
Parameters
Dimension Groups
Inventory Model Groups
Counting Groups
Sites
Warehouses
Journal Names, Inventory
Posting
Forecast Models
Aktarımlar
Standart bir uygulamada aktarımlar 2 başlık altında değerlendirilebilir. Ana veri (Master Data) aktarımları, devir aktarımları (Transactions)
Veriler sisteme formlardan girilebileceği gibi Excel'den de aktarılabilir. Bazı verilerin Excel'den aktarımı zorunludur. Örneğin devir çekleri gibi.
Ana veriler:
Veriler sisteme formlardan girilebileceği gibi Excel'den de aktarılabilir. Bazı verilerin Excel'den aktarımı zorunludur. Örneğin devir çekleri gibi.
Ana veriler:
- Yeni Şirket Açma
- Para Birimleri
- Şirket Kurulumları
- Tüm Modüllerin Parametreleri
- Hesap Planı
- Müşteri Cari Kartı
- Satıcı Cari Kartı
- Banka Kartları
- Adresler ve Posta Kodları
- Stok Kartları
- Ürün Reçeteleri
- Sabit Kıymet Kartları ve ilgili Parametrik Yapı
- Vergiler
- Numara Serileri
- Dönemler
- Günlükler (Veri giriş formları - Muhasebe ve Stok Modülü altındaki)
- Tesis ve Ambarlar(Stok takip ve stoklama detayına göre konfigurasyon, renk, lokasyon gibi bilgiler)
- Ödeme Vadeleri (Müşteri/Satıcı)
- Yansıtma Hesapları
- Hesap Tipleri
- İşlem Tipleri (Otomatik gelecek hareket metinleri, açıklamalar)
- Muhasebe Entegrasyonları (Deftere Nakil Profilleri)
- Dimensions
Devir:
- Müşteri Hareketleri
- Satıcı Hareketleri
- Banka Hareketleri
- Mizan Devri (Müşteri, Satıcı, Banka,Stok Hesapları harici. Çünkü bu hesapların bakiyeleri yukarıdaki aktarımlar ile yapılmış olacaktır.)
- Çek Devri (Devir yapıldıktan sonra 1 defaya mahsus olarak çek modülündeki periyodik işlem çalıştırılmalıdır.)
- Sabit Kıymet Hareketleri
- Stok Devri
İlk kurulum için aşağıdaki veriler de sisteme atılabilir.
- İskontolar ve fiyat grupları
Kolay Gelsin,
Billur
Ax 4.0 - Ax2009 Farkları
Ax 4.0 ile Ax 2009 versiyon arasındaki gözlemlediğim kullanıcıların en çok kullanacakları fonksiyonel değişiklikler aşağıda listelenmiştir. Bu fonksiyonaliteler yalnızca alt yapı ile ilgili değil aynı zamanda kullanıcı dostu yapısını arttırmak için de yapılmıştır.
1)Faturalama işlemleri esnasında irsaliyeler seçilebilmektedir. İrsaliyeler stok işlemlerinde (InventTrans) faturalara bağlanmaktadır.
2)Satış siparişlerinde iadelerin giriş ekranı değişmiştir. Artık iadeler için kullanıcı dostu ayrı bir ekran düzenlenmiştir.
3)BA/BS, İndirilecek ve Hesaplanan KDV listeleri gibi raporlar Microsoft tarafından yeni versiyon üzerine getirilmiştir.
4)İş akış yapısı getirilmiştir.
5)Menü yapısında tüm ekranda menü görüntülenebilmektedir. Bu şekilde kullanıcılar menülerde hızlı gezinebilmektedirler.
6)Tesis yapısı getirilmektedir. Stok parametreleri tesis bazında kurulabilmektedir. Birden fazla üretim yeri olan firmalarda üretim yerine göre parametrik altyapı kullanılabilmektedir. Tesislerin altında ambarlar, ambarlara bağlı lokasyonlar sistemde takip edilebilmektedir. Planlama işlemleri bu şekilde de takip edilebilmektedir.
7)Bir ürüne birden fazla reçete tanımlaması tesis bazında yapılabilmektedir. Bu şekilde ürün reçeteleri, maliyetlendirme işlemleri tesis bazında farklılaşabilmektedir.
8)Axapta raporlarının bazılarının görüntüleri raporlama servisleri (Reporting Services) görüntüsüne kavuşturulmuştur. Bir sonraki versiyonda tüm raporların bu formatta alınabiliyor olması beklentiler arasındadır.
9)OLAP alt yapısı tamamen değiştirilerek, rapor tasarımları Visiual Studio üzerinden yapılmaktadır. Böylece visual studio bilen kullanıcıların rahatlıkla OLAP küplerini kurarak kullanılabilmesi amaçlanmıştır.
10)Her menünün altına aksiyon panoları ve yerleşimler menü adımına çeşitli standart sorgulamalar eklenmiştir.
11)Stok maliyet hesaplamaları hızlandırılmıştır. Bunun için stok kapanışlarında düzenlemelere gidilmiştir. Kapanış ile stok hareketlerinde devir satırı yaratılmaktadır.
12) Ekranlar menü çubuğundan da açılabilmektedir.
13)Ekranlar üzerinde Excel’e aktar butonu ile Excel’e aktarım yapmak mümkündür. Bu şekilde özet ekranında olan tüm veriler otomatik Excel'e aktarılmaktadır. Excel'e aktarılırken numerik alanların otomatik alt toplamı alınmaktadır. Aynı zamanda otomatik olarak süzme aktif olmaktadır. Excel'in tasarım tabı da aktif olarak hızlı bir şekilde Pivot oluşturulması için kullanıcılar yönlendirilmektedir. Belki de Ax için kullanıcıların en iyi şekilde kullanacakları lat yapı değişikliğinin bu olduğunu gözlemledim.
Bu fonksiyonaliteler haricinde yüzlerce değişiklikte sistem içinde yer almıştır. Bununla birlikte biz en çok kullanılan fonksiyonaliteleri burada listelemiş olduk.
Kolay Gelsin.
Billur
9 Şubat 2012 Perşembe
Eldeki ekranına madde adı ekleme
Stok yönetimi -> Sorgulamalar -> Eldeki ekranı üzerinde madde kodu yanına madde adı kolonu yer almakta.
Kullanıcılar madde kodundan ziyade madde adına aşina olduğundan madde adına göre filtreleme yapmak isteyebilirler.
Madde ad alanı display alan olduğundan bu alan üzerinde mevcut halde filtreleme yapılamamaktadır.
Normal durumlarda formun veri kaynağına ilgili tabloyu ekler ve ilişkisini belirttikten sonra display methodda görüntülenen alanımız hangisi ise tablodan sürükle bırak ile forma kopyalar filtrelemeyi aktif kılabiliriz.
Ancak Eldeki ekranında işler biraz daha farklı yürüyor.
Ekran birden fazla yerden tetiklenebilen ve dinamik içerikli bir form olduğundan ilişki ve filtreleme işlemlerini sınıflar üzerinde yapmakta bizim değişiklik yapacağımız sınıfın adı InventDimCtrl_Frm_OnHand methodumuzun adı modifyQuery olacak böylelikle formun veri kaynağında kurulacak olan ilişkilere direkt müdahele edebileceğiz.
sonrasında bu methodu çağıran form üzerindeki veri kaynağındaki executeQuery methoduna parametre ekleyeceğiz.
ilişkinin AX tarafından algılanabilmesi için Form Datasource a InventTable ekle ve adını ItemTable olarak yeniden adlandırıyoruz çünkü InventTable adı kod içerisinde daha önceden kullanılmış ve InventSum ile joinSource olarak ata
InventSum tablosuna InventTable releation ekliyoruz ItemId üzerinden
(c)InventDimCtrl_Frm_OnHand
void modifyQuery(
FormDataSource inventSum_DS,
FormDataSource inventDim_DS,
FormDataSource inventTable_DS
)
.
.
.
QueryBuildDataSource qbsInvent;
;
if (qbsInvent != null)
{
qbsInvent = inventTable_DS.query(). dataSourceName(inventTable_DS. name());
qbsInvent.orderMode(OrderMode: :GroupBy);
qbsInvent.addSortField( fieldnum(InventTable,ItemName) );
}
.
.
.
Sınıfı ileri doğru derlediğimizde modifyQuery i fazla yükleme ile kullanan sınıflara
FormDataSource inventTable_DS parametresini ekliyoruz.
(f) InventOnhandItem
InventSum -> executeQuery()
element.inventDimSetupObject() .modifyQuery(inventSum_DS, inventDim_DS,itemTable_DS);
Bol AX'lı günler,
Alper.
3 Şubat 2012 Cuma
Veri Tabanı Yedeği Alma
Merhaba,
Veri kaybını önlemek için veritabanı yedeği konusunun önemini hepimiz biliyoruz. Yedekleme işlemlerini Management Studio ile veritabanına sağ tıkla yedekle (Backup) yöntemi ile yapmak mümkün ancak programın kilitlenmesi durumunda veya işlemin yüzdesel olarak ne durumda olduğunun bilgisini istediğimiz aralıkta almak istersek yani kısacası işimizi kendimiz görmek ve kendi istediğimiz gibi özelleştirerek yapmak istersek aşağıdaki örnekten başlayabiliriz.
BACKUP DATABASE [veritabanıAdi] TO DISK = N'C:\veritabanıAdi' WITH NOFORMAT, NOINIT, NAME = N'Istenilen isim verilebilir', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
GO
Bu örneği istediğimzi gibi detaylandırmak mümkün ancak bizim şimdi vereceğimiz örnek en baz yedekleme işlemini gerçekleştiriyor olacak.
BACKUP DATABASE cümlesi yapacağımız işlemi belirtmekte.
sonrasında gelen köşeli parantez içerisindeki kısım veritabanının adını belirtiyor.
Yedekleme işlemini diske yapacağımızdan DISK ifadesini kullanıyor ve sonrasında yedeklemenin yapılacağı sürücü ve klasör bilgilerini veriyoruz. (Yedeklemeyi isterseniz Tape ünitesine de yapmak mümkün).
WITH NOFORMAT standart ön tanımlı değer olarak geliyor ve yedek üzerindeki başlık bilgisinin mevcut değer ile tutulur. Bu özelliği FORMAT olarak kullanmak tehlikeli bir işlemdir hatalı kullanımda yedeğiniz kullanılmaz hale gelir.
NOINIT parametresi ile daha önceden yedeklenmiş dosyaların üzerine yazma işlemi yapılmaz eğer üzerine yazma işlemi gerekiyorsa INIT parametresi kullanılmalı.
NAME ile yedeğe isim verilir.
SKIP ile yedeğin son kullanım tarihinin kontrolünü devre dışı bırakıyoruz. Eğer üzerine yazmak gerekiyorsa NOSKIP ile daha önceki yedeklerin geçerli olup olmadığı bilgisi kontrol edilebilir. Kontrol için kullanılacak tarih bilgisini EXPIREDATE parametresi ile atayabilir veya RETAINDAYS ile kaç gün sonra üzerine yazılmasına izin verilmesi bilgisi verilebilir.
NOREWIND ve NOUNLOAD parametreleri tape yedekleme işlemlerinde kullanılıyor ve performans arttırımı için tercih edilebilecek parametreler.
ve son parametremiz STATS ile mesaj bölümüne ne sıklıkla bilgi düşmesini istiyorsak o değeri yazıyoruz ön tanımlı değeri 10 olan bu değeri isterseniz 2 ye düşürüp %2 lik değişimlerde ekrana bilgi düşmesini sağlayabiliriz.
Sorunsuz yedeklemeler dilerim.
Alper.
Kaydol:
Kayıtlar (Atom)