8 Haziran 2016 Çarşamba

AXAPTA - Bir malzeme çekme listesi veya satırını iptal

Tüm listenin iptali:
 
WMSPickingRouteCancel::newWMSPickingRoute(wMSPickingRoute).run(); 

Bir satırın iptali:


WMSPickingLineCancel::newWMSPickingLineCancel(wMSOrderTrans).run(); 

6 Mayıs 2016 Cuma

AXAPTA - Sign fonksiyonu düzgün çalışmıyor

AX 2009 ve 2012'deki sign fonksiyonu düzgün çalışmıyor. Negatif değerler için -1, sıfır için 0 ve pozitif değerler için +1 döndürmesi gerekirken negatif değerler için -1 ve diğer tüm değerler için +1 döndürüyor.

Global'deki Sign:

static real sign(real num)
{
    return num >= 0 ? 1 : -1;
}


Benim yaptığım düzeltme:

static int sign(real num)
{

   if (num < 0)
    return -1;
   else
    return num > 0 ? 1 : 0;
}

5 Mayıs 2016 Perşembe

AXAPTA - Malzeme çekme listesi oluşturmak

Bir forum sayfasından bulduğum çözümü kendim için class haline getirdim:

class KRC_WMSOrder
{
    WMSShipment         wmsShipment;
    SalesTable          salesTable;
    WMSPickingRoute     wmsPickingRoute;
    WMSPickingRouteLink wmsPickingRouteLink;
    salesLine           salesLine;
}


void createOrderLine(Qty _qty = salesLine.RemainSalesPhysical)
{

    InventMovement                  inventMovement;
    WMSOrder                        wmsOrder;
    WMSOrderCreate                  orderCreate;
    WMSOrderTrans                   wmsOrderTrans;
    ;
    inventMovement = InventMovement::construct(salesLine);
    orderCreate = WMSOrderCreate::newMovement(inventMovement,_qty);
    orderCreate.parmMustBeWMSOrderControlled(true);
    orderCreate.parmQty(_qty);
    orderCreate.parmMaxQty(_qty);
    orderCreate.run();
    wmsOrder = orderCreate.parmWMSOrder();
    wmsOrder.updateShipment(wmsShipment,_qty, wmsPickingRoute.PickingRouteID);
}


void createWmsPickingRoute()
{
    ;
    wmsPickingRoute.clear();
    wmsPickingRoute.initTypeOrderPick(wmsShipment, WMSExpeditionStatus::Activated,
        WMSPickRequestTable::construct(salesTable),"", true);
    wmsPickingRoute.ActivationDateTime = DateTimeUtil::utcNow();
    wmsPickingRoute.insert();
}


void createWmsPickingRouteLink()
{
    ;
    wmsPickingRouteLink.clear();
    wmsPickingRouteLink.initFromSalesTable(salesTable);
    wmsPickingRouteLink.initFromWMSPickingRoute(wmsPickingRoute);
    wmsPickingRouteLink.insert();
}


void createWmsShipment()
{
    ;
    wmsShipment.clear();
    wmsShipment.initTypeOrderPick();
    wmsShipment.insert();
}


SalesLine  parmSalesLine(SalesLine _salesLine = salesLine)
{
    ;
    salesLine = _salesLine;
    return salesLine;
}


SalesTable  parmSalesTable(SalesTable _salesTable = salesTable)
{
    ;
    salesTable = _salesTable;
    return salesTable;
}


void reserveItem(Qty _qty = salesLine.RemainSalesPhysical)
{
    InventUpd_Reservation   invUpdReservation;
    ;
    invUpdReservation = InventUpd_Reservation::newInventDim(InventMovement::construct(salesLine,InventMovSubType::None),
        salesLine.inventDim(),_qty,false);
    invUpdReservation.updateNow();
}


Örnek kullanım:

KRC_WMSOrder            kWMS = new krc_wmsorder();
kWMS.createWmsShipment();
;
ttsbegin;
kWMS.parmSalesTable(salesTable);
kWMS.createWmsPickingRoute();
kWMS.createWmsPickingRouteLink();
kWMS.parmSalesLine(salesLine);
kWMS.reserveItem();
kWMS.createOrderLine();

ttscommit;

AXAPTA - Formun args parametresi ile gelen kayda göre otomatik filtre yapmasını engellemek

Bu sorunun cevabını bir forum sayfasından buldum:


KRC_PlanWaves_DS.query().dataSourceNo(1).clearDynalinks();

24 Mart 2016 Perşembe

AXAPTA - Sysmailer ile mail gönderirken türkçe harf sorunu

SysMailer class ile mail gönderirken aşağıdaki kırmızı satırı eklemediğinizde türkçe harfler mailde çıkmayacaktır. Bu çözümü bir blog'dan bulmuştum ancak yerini şu an hatırlayamıyorum:


   SysEmailParameters  parameters;
    SysMailer           mailer;
    ;
    new InteropPermission(InteropKind::ComInterop).assert();
        parameters = SysEmailParameters::find();

        mailer = new SysMailer();
        if (parameters.SMTPRelayServerName)
        {
            mailer.SMTPRelayServer(parameters.SMTPRelayServerName,
                               parameters.SMTPPortNumber,
                               parameters.SMTPUserName,
                               SysEmailParameters::password(),
                               parameters.NTLM);
        }
        else
        {
            mailer.SMTPRelayServer(parameters.SMTPServerIPAddress,
                               parameters.SMTPPortNumber,
                               parameters.SMTPUserName,
                               SysEmailParameters::password(),
                               parameters.NTLM);
        }
        mailer.fromAddress(fromAddr);
        mailer.tos().appendAddress(toAddr);
        mailer.subject(subject);
        //türkçe harflerin düzgün gitmesi için:
        mailer.bodyCharSet("Windows-1254");
        if(FileName)
            mailer.attachments().add(FileName);
        mailer.ccs().appendAddress(ccAddr);
        mailer.bccs().appendAddress(bccAddr);
        mailer.htmlBody(body);
        mailer.sendMail();
    }
    CodeAccessPermission::revertAssert();

2 Mart 2016 Çarşamba

AXAPTA - Bir tablo alanının label değerini bulmak

Bir tablonun bir alanının label değerini bulmanın iki yolu var:

Eğer field label değerini direk extended data tipinden alıyorsa:


    if (curext()=="krc" && this.RBOInventItemGroupId == "")
        ret = checkfailed(strfmt("'%1' alanı doldurulmalıdır!..",
            new SysDictType(extendedTypeNum(RBORetailGroupId)).label()));

Eğer tabloda alana bir etiket yazıldıysa:

    if (curext()=="krc" && this.RBOInventItemGroupId == "")
        ret = checkfailed(strfmt("'%1' alanı doldurulmalıdır!..",
            new SysDictField(tablenum(WholeSalesCampaignGroup),
fieldnum(WholeSalesCampaignGroup,RBOInventItemGroupId)).label()));
 

5 Şubat 2016 Cuma

AXAPTA - Kullanıcının grid başlığından filtreyi değiştirmesini engelleme

SysQuery::findOrCreateRange(InventDim_DS.query().dataSourceTable(tablenum(InventDim)),fieldnum(InventDim,InventSiteId)).status(RangeStatus::Locked);