Archive for the ‘ x++ ’ Category

Global bir findRecId() metodunu nasıl yazabiliriz

Merhaba

Ax ile yazılım yaparken bir çok kez RecId ye göre sorgulama yapmak zorunda kalmışsınızdır. Genelde Tablolarda findRecId() metodu bulunmaz. Ya direk select cümleciği yazarsınız veya tabloya  findRecId() metodu eklersiniz. Bu daha  iyi bir çözüm olur tabiki. Ancak global  klasına findRecId() metodu eklmek ve heryerden kullanmak daha pratik bir çözüm olabilir. Nasıl yazabileceğimize bakalım.

Herhangi bir tabloyu parametre olarak alabileceği için common kullanıyoruz.

static common findRecId(common _table,
                        RecId   _recId,
                        Boolean _forUpdate = false)
{
Read more

Herhangi bir tablo satırını bire bir çoğaltmak

Merhaba

Örneğin bir SalesTable kaydınız var. Bu kaydın bütün alanlarını başka bir satıra kopyalamak istiyorsunuz. Standartta olan data() metodunu kullanabilirsiniz. Örnek verecek olursak.

static void RecorKopyala(Args _args)
{
    SalesTable salesTable;
    SalesTable salesTableCopy;
    ;
    salesTable = SalesTable::find(“s00001″);
      salesTableCopy.data(salesTable);
    salesTableCopy.SalesId = “s0002″;
    salesTableCopy.insert();
    // salesTable ve salesTableCopy aynı bilgileri içerirler SalesId hariç
}
Read more

Axaptada txt dosya okuyup SalesLine’ a kayıt atmak

Merhaba

Daha  önce txt formatında bir dosyayı okumakla ilgili bir makale yazmıştım. Buradan okuyabilirsiniz.

Aynı örneği biraz geliştirdim. Öncelikle dosyayı diyalogtan alıyoruz ve tab ile ayrılmış halini pars edip container a atıyoruz. Daha sonra burdaki satırlardan SalesLine oluşturuyoruz.

Örnek text dosyamız böyle olsun boşluklar tab. Editorden dolayı burada net anlaşılamıyor. 

NameAlias  Name                         Vergi  Adet   Fiyat

40306445    DAVIDOFF GOLD      0     2.00     14.00
40318523     KENT WHITE              0    1.00       7.00
40329055    CAMEL KISA BOX     8    7.00      18.00

Örenğimiz şöye :
void TxtTransfer()
{
    FileName            fileName  ;
    container           c;
    FileIOPermission    permission;
    TextBuffer          textBuffer;
    str                 readText;
    str                 readLine , strlineamount;
    int                 etgline  ;
    int                 i = 0;
    Dialog              dialog = new Dialog(“Dosya seçiniz.”);
    DialogField         dfFileName;
    SalesLine           txtSalesLine;
    InventTable         inventTable;
    InventItemSalesSetup InventItemSalesSetup;
    InventDim           txtinventDim;

    Amount              lAmount,KDV;
    ;
    #File

    dfFileName = dialog.addField(typeId(FileNameOpen));
    dialog.filenameLookupFilter(["All files", #AllFiles]);

Read more

String bir değişkeni raporda barkod olarak göstermek

Merhaba,

Bu çalışmada CustAccount alanını raporda barkod olarak nasıl gösterebileceğimizi öğreneceğiz.

Öncelikle verikaynağında (DataSource) CustTable Olan bir rapor hazırlayalım. Tasarım kısmında CustTableBody olsun ve CustAccoun ‘u sürükleyip bırakalım. Bu rapor ÅŸu anda CustAccount ‘ ları  listelemektedir.  Bundan sonra CustAccount ‘un yanına barkodu nasıl yazdıracağımıza baklaım.

Raporun ClassDecleration :

Buradan barkodun boyutlarını belirleyebilirsiniz.

public class ReportRun extends ObjectRun
{
    BarCodecode39    ordercodeId;
    #DEFINE.BarCodeFontSize(75)
    #DEFINE.BarCodeWidth(9000)
    #DEFINE.BarCodeHeight(900)
}

init metodumuz :

Read more

ExistsJoin ve NotExistJoin ile Lookup yazmak

Merhaba

Şöyle bir istek olsun.  Seçilecek vergi numarası ne müşteri nede satıcı tablosunda kullanılmış olsun. Bu gibi bir istekte notexistjoin kullanabiliriz. Eğer müşteride veya satıcıda  kullanılanlar listelensin denseydi existjoin kullanacaktık.

client static void lookupETGVATNum (FormStringControl ctrl, Common common)
{
    SysTableLookup          sysTableLookup = SysTableLookup::newParameters(tablenum(TaxVATNumTable), ctrl);
    Query                   query = new Query();
    QueryBuildDataSource    queryBuildDataSource = query.addDataSource(tablenum(TaxVATNumTable));
    QueryBuildRange         queryBuildRange = queryBuildDataSource.addRange(fieldnum(TaxVATNumTable, CountryRegionId));
    QueryBuildDataSource    qdbs;
    ;

// CustTable müşteri tablosunda olmayanları getiriyoruz
    qdbs  = queryBuildDataSource.addDataSource(tablenum(CustTable));
    qdbs.addLink(fieldnum(TaxVATNumTable , vatNum ),fieldnum(CustTable , vatNum ));
    qdbs.joinMode(joinmode::NoExistsJoin);

Read more

Axaptada yazıcı ayarlarına müdahale etmek

Merhaba,

Axaptada yazıcı ayarlarına printJobSettings() klası ile  mudahale edebilirsiniz.

Örneğin bir raporunuzun  3 kopya olarak basılmasını istiyorsunuz. Bunu elle yazıcı ayarlarından seçebileceğiniz gibi

kodlada bu işlemi otomatik yapabilirsiniz. Bunun için init metodunda şu kodu yazmanız yeterli.

element.printJobSettings().enableCopies(true);
element.printJobSettings().copies(3); // 3 kopya yazdır

Selamlar.

Axaptada bir formun hangi menuItem ile çağırıldığını bulmak

Merhaba,

Örneğin sizden LedgerJournalTable formunun kambiyo senetleri günlüğünden çağırıldığında  bazı ek işlemler yapmanızı istediler.

Kambiyo senetlerinden Kambiyo senedi günlüğünü (yani LedgerJournalTable formunu) açan  “LedgerJournalTableExchangeNote” isimli MenuItemdır.

Burada iki yöntem kullanılabilir.
Birincisi: MenuItem’ ın isminden ayırabilirsiniz.

if (element.args().menuItemName() == menuitemDisplaystr(LedgerJournalTableExchangeNote))
{
info(“Beni kambiyo senetlerinden çağırdılar.”);
}

İkincisi:ParmEnum ile ayırabilirsiniz ki bu daha şık olur.

Öncelikle MenuItem’ın EnumTypeParameter ve EnumParameter özelliklerini tanımlamalıyız.
Bizim kullandığımız LedgerJournalTableExchangeNote menuItem’mı için zaten  standartta tanımlamalar yapılmış olduÄŸunda aÅŸağıdaki ÅŸekilde kullanabiliriz.

if (element.args().parmEnum() == LedgerJournalType::ExchangeNote)
{
     info(“Beni kambiyo senetlerinden çağırdılar.”);  Â
}

Axaptada hiyerarşık bir tabloyu ağaç yapısıyla yönetmek

Merhaba

Bazı durumlarda hiyerarşık yapılar kurmak zorunda kalabilirsiniz. Bunu yönetmenin en iyi yolu ağaç(Tree) yapısını kullanmaktır. Axapta standardında bir çok yerde ağaç yapısını görebilirsiniz. Örneğin: LedgerRowDefDesigner formunda sürükle bırakla çalışan bir ağaç yapısı mevcut. Ayrıca  tutorial_Form_TreeControl örnek formu da size fikir verebilir.

Ben örneğimde bir hiyerarşi tablosunun form açıldığında ağaç yapısıyla görüntülenmesini ve  ağaç elemanlarının (Node)  bu form vasıtasıyla düzenlenmesinin (güncelleme , silme ve ekleme) nasıl yapılacağını anlatacağım.

Örnek olarak şöyle bir tablomuz  olsun :

ETGItemGroupTable :    ItemGroupId    ,    ItemGroupName    ,    ItemGroupLevel   ,    ItemGroupIdParent
ItemGroupId  ,   ItemGroupIdParent   =  EDT – DTItemGroupId

ItemGroupId  ,   ItemGroupIdParent   aynı EDT den oluşturuyoruz. Hiyerarşik yapıyı ItemGroupIdParent sayesinde kuracağız.

ItemGroupLevel   Burada  hiyerarşiyle pek ilgisi olmayan benim kurgumla alakalı olan bir seviye kodu var. Ben bu hiyerarşideki bütün elamanların birer seviye kodu olsun istiyorum ve bu kod 1-8 arasında olabilir. Formda gerekli kontrolleri buna göre yazıyorum.

Ulaşmak istediğim form görünümü şu şekilde

Yeni bir form oluşturup veri kaynağını ekleyip tasarımdada gerekli elemanları ekleyelim. Ağaç elemanımızı da ekledikten sonra bazı metodlar yazmamız gerekiyor onlara gecelim.

Read more

WinAPI::createDirectoryPath ‘de “$” iÅŸareti hatası

Merhaba

Örenğin şöyle bir adresimiz olsun:

filePath = \\10.34.32.21\axapta$\Ozluk;

WinAPI::createDirectoryPath(filePath);

Komutu ile klasor oluşturmaya çalışırsanız hata alırsınız. Çünki $ işaretinden kaynaklanan bir sorun var.
WinAPI::createDirectoryPath(filePath) metodunda kullanılan strlen(filePath) fonksiyonu $ işartetinden dolayı doğru sonuç döndüremiyor.

createDirectoryPath metodunun içeriğine bakalım:

Read more

Sevk İrsaliyesi Tasarımı

Merhaba

Ax üzerinde sevk irsaliyesi ve fatura tasarımı gibi işler çetrefilli işlerdir.  Axaptada tasarımsal işlemler genelde zordur.

Ancak belli bazı noktaları bilip mudahalelerinizi yaparsanız kolay bir şekilde istediğiniz güncellemeyi yapmış olursunuz.

Biz bu makalemizde Ax uzerinde matbu bir sevk irsaliyesi tasarımının nasıl yapılabileceğinden bahsedeceğiz.

Öncelikle Ax’ta standart Sevk Ä°rsaliyesi  “SalesPackingSlip”  raporudur. Denemek için  “CustPackingSlipJournal” formundan “Önizleme/Yazdır “  butonunda çıkan Kopya ve Orjinal butonundan  Sevk Ä°rsaliyesi bastırabilirsiniz.

Asıl olan “SalesPackingSlip” raporunda deÄŸiÅŸiklik yapmayalım. Çogaltip  “ETGSalesPackingSlip” ismini verelim. Ve MenuItem  oluÅŸturalım. OluÅŸturdÄŸumuz item için multiselect özelliÄŸini yes yapalım.

“ETGSalesPackingSlip” raporunda dizaynında “Generated Design” kısmında irsaliyemizin tasarımını görebilirsiniz.

Burada istenilen deÄŸiÅŸikler yapılabilir. Ä°stenmeyen alanlar çıkartılıp yeni alanlar eklenebilir. Ancak bizim yapacağımız matbu tasarım standarttan çok farklı olduÄŸu için ben “Generated Design” ‘da bulunan bütün alanaları siliyorum. Bu iÅŸlemden sonra raporu derleyip hata veren kısımları yorum satırı haline getiriyorum. Kendim 4 tane ProgramableSection açıyorum. Bunlar:

1.  Sct1 : Başlık bilgilerinin olacağı kısım.

2. Sct2 : İrsaliye satırlarının olacağı kısım.

3. Sperater : Satırlarda eksik kalan kısımları tamamlamak için kullacağım boş bir satır.

4. Sct3 : Toplam ve alt bilgilerin görüneceği kısım. 

Sct1 için örnek olarak iki tane display metod yazayım diğerlerini siz ihtiyacınıza göre ekleyebilirsiniz.

display name dispDeliveryName()
{
      return CustPackingSlipJour.DeliveryName;

}

Read more

Page 11 of 17« First...910111213...Last »