Buscar en este blog

domingo, 8 de octubre de 2017

Crear una entrada de presupuesto por código - Microsoft Dynamics Ax 2012

Aquí como hacer una entrada de presupuesto:

static void createBudgetHeaderAndLine(Args _args)
{
    BudgetTransactionHeader         header;
    BudgetTransactionLine           line;

    AxBudgetTransactionHeader       axHeader;
    AxBudgetTransactionLine         axLine;

    header.initValue();
    header.Date = 18\09\2017;
    header.BudgetModelId = PurchParameters::find().GRWModelId;
    header.BudgetTransactionCode = BudgetTransactionCode::findByBudgetTransactionCode(PurchParameters::find().GRWBudgetTransactionCode).RecId;

    axHeader = AxBudgetTransactionHeader::newBudgetTransactionHeader(header);
    axHeader.save();

    axLine = AxBudgetTransactionLine::construct();
    axLine.parmBudgetTransactionHeader(axHeader.parmRecId());
    axLine.parmLedgerDimension(5637146826);
    axLine.parmDate(18\09\2017);
    axLine.parmTransactionCurrencyAmount(30);
    axLine.parmBudgetType(BudgetType::Expense);
    axLine.parmTransactionCurrency("MXN");
    axLine.save();

    info(strFmt("Entrada de presupuesto creada: %1", header.TransactionNumber));

}

Y en Ax se ve algo como esto:




Post relacionados:
Autoliquidación de transacciones (Auto settlement) por código X++ - Dynamics Ax 2012
Validar si existe un archivo y la extensión del mismo por código - Dynamics Ax 2012
Lista de remisiones asociadas a una factura por código X++ en Dynamics Ax 2012


No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 



viernes, 6 de octubre de 2017

Autoliquidación de transacciones (Auto settlement) por código X++ - Dynamics Ax 2012

Para hacer la liquidación en automático de dos transacciones podemos usar el siguiente código:

static void autoSettlementExWill(Args _args)
{
    VendTrans                   vendTransFrom, vendTransTO;
    VendTransOpen               vendTransOpenFrom, vendTransOpenTo;
    CustVendOpenTransManager    SettleManager;
    Common                      originator;
    boolean                     settled;

    try
    {
        vendTransFrom = vendTrans::find(5637155127);
        vendTransTO = vendTrans::find(5637155128);
               
        //Revisando que no esten erradas las transacciones
        if(!vendTransFrom.Closed && !vendTransTo.Closed)
        {
            select firstonly vendTransOpenFrom
                where vendTransOpenFrom.RefRecId == vendTransFrom.RecId
                && vendTransOpenFrom.AccountNum == vendTransFrom.AccountNum;

            select firstonly vendTransOpenTo
                where vendTransOpenTo.RefRecId == vendTransTo.RecId
                && vendTransOpenTo.AccountNum == vendTransTo.AccountNum;

            originator = vendTransFrom.vendInvoiceJour().vendTable_InvoiceAccount();
            SettleManager = custVendOpenTransManager::construct(originator);  //en el originator solo hay custtable y vendtable en el swicht
            SettleManager.updateTransMarked(vendTransOpenFrom, true);
            SettleManager.updateTransMarked(vendTransOpenTo, true);
            settled = SettleManager.settleMarkedTrans();
           
            info(strFmt("Asiento liquidado: %1, con %2", vendTransFrom.Voucher, vendTransTO.Voucher));
        }
        else
            warning(strFmt("Las transacciones de los asientos: %1 y %2, no estan abiertas.", vendTransFrom.Voucher, vendTransTO.Voucher));
    }
    catch
    {
        error(strFmt("No fue posible liquidar las transacciones de proveedor. Asientos no liquidados: %1, con %2",
        vendTransFrom.Voucher, vendTransTO.Voucher));
    }

}




Post relacionados:
Crear y postear un LedgerVoucher en Ax 2012
Usuario actual, nombre de usuario, moneda de la empresa Dynamics Ax 2012
Lookup para dimensiones financieras personalizadas - Microsoft Dynamics Ax 2012 R2



No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 




martes, 12 de septiembre de 2017

Validar si existe un archivo y la extensión del mismo por código - Dynamics Ax 2012


Cuando se requiere validar si un archivo aún existe en una ruta y/o validar el tipo de archivo de acuerdo a la extensión, se puede usar dos opciones. Con una de ellas se debe tener cuidado porque no funciona si se requiere para un proceso batch.


static void ValidateFile(Args _args)
{
Contracts contract;
boolean existe;
System.IO.FileInfo fileInfo;
container datosArchivo;
str extArchivo;

//se busca un registro de una tabla que en uno de sus campos contiene un path completo del tipo c:\\carpeta1\archivo.docx
contract = Contracts::find("CONTRATO 050717");

//Opción 1: del lado del server, si funciona en procesos batch
new InteropPermission(InteropKind::ClrInterop).assert();
fileInfo = new System.IO.FileInfo(contract.AttachmentPath);
extArchivo = fileInfo.get_Extension();
existe = fileInfo.get_Exists();
CodeAccessPermission::revertAssert();

if (existe)
{
  info("si existe");

  //Valida si es un word
  if(strStartsWith(extArchivo, ".do"))
    info("si es doc");
  else
    info("no es doc");
}
else
{
  info("no existe");
}

//Opción 2 - del lado del cliente, no funciona bajo procesos batch
if (WinAPI::fileExists(itsContract.AttachmentPath))
{
  info("si existe 2");

  //Valida si es un word
  new InteropPermission(InteropKind::ClrInterop).assert();
  datosArchivo = Global::fileNameSplit(contract.AttachmentPath);
  CodeAccessPermission::revertAssert();

  if(strStartsWith(conPeek(datosArchivo, 3), ".do"))
    info("si es doc 2");
  else
    info("no es doc 2");
}
else
{
  info("no existe 2");
}

}



Post relacionados:
Registrar diario de producción por código, Dynamics Ax 2009, X++
Métodos display y métodos edit en un datasource o tablas temporales, Dynamics Ax 2012
Imprimir factura electrónica (México) a partir de una CustInvoiceJour por código - Dynamics Ax 2012



No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 


martes, 15 de agosto de 2017

Métodos display y métodos edit en un datasource o tablas temporales, Dynamics Ax 2012


Formularios: se debe poner el datasource como parámetro en caso de usar el display o edit en formularios.
Tablas temporales: se debe pasar como parámetro la tabla misma.


display str dispDebitor(simtcotetmp _simtcotetmp)
{
    simtDebitor deb;
    ;

    select nume, prenume from deb where deb.Ident == _simtcotetmp.IdDebitor; 
    return deb.Nume;
}

edit NoYes MarkSKUs(boolean set,
InventTable Invent,
NoYes _markSKUs)
{

if (set)
{
MarkMap.insert(Invent.RecId,_markSKUs);
MarkMap.valueSet();

else
{
if (MarkMap.exists(Invent.RecId))
{
_markSKUs = MarkMap.lookup(Invent.RecId);
}


return _MarkSKUs;
}



Post relacionados:
Crear un campo edit en un control de usuario en Enterprise Portal de Dynamics Ax 2012 R2
Crear búsquedas por nombre de producto en métodos display
Cómo crear un proyecto con todos los elementos de una capa - Microsoft Dynamics Ax 2012



No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma. 


sábado, 22 de julio de 2017

Imprimir factura electrónica (México) a partir de una CustInvoiceJour por código - Dynamics Ax 2012

Les comparto cómo mandar a PDF una factura electrónica a partir de la custInvoiceJour

static void SaveReportToPDFFromController(Args _args)
{
    EInvoiceCFDISalesController_MX salesInvoiceController;
    EInvoiceCFDIReportContract_MX salesInvoiceContract;
    Args                    args = new Args();
    SrsReportRunImpl        srsReportRun;
    CustInvoiceJour         custInvoiceJour;
    ReportName              reportName = "EInvoiceCFDIReport_MX.Report";
    EInvoiceJour_MX         eInvoiceJour_MX;
    SrsPrintMgmtExecutionInfo   srsPrintMgmtExecutionInfo;
    srsPrintMgmtExecutionInfo = new srsPrintMgmtExecutionInfo();
    select firstOnly custInvoiceJour where custInvoiceJour.RecId == 5637322330;
    select eInvoiceJour_MX
        where eInvoiceJour_MX.RefRecId == custInvoiceJour.RecId &&
              eInvoiceJour_MX.RefTableId == custInvoiceJour.TableId;
    args.record(eInvoiceJour_MX);
    salesInvoiceController = new EInvoiceCFDISalesController_MX();
    salesInvoiceController.parmReportName(reportName);
    salesInvoiceContract = salesInvoiceController.parmReportContract().parmRdpContract();
    salesInvoiceContract.parmRecordId(eInvoiceJour_MX.RecId);
    salesInvoiceController.parmArgs(args);
    srsReportRun = salesInvoiceController.parmReportRun() as SrsReportRunImpl;
    salesInvoiceController.parmReportRun(srsReportRun);
    salesInvoiceController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
    salesInvoiceController.parmReportContract().parmPrintSettings().overwriteFile(true);
    salesInvoiceController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
    salesInvoiceController.parmReportContract().parmPrintSettings().fileName(@"C:\Users\xxx\aloha.pdf");
    salesInvoiceController.parmReportContract().parmReportExecutionInfo(srsPrintMgmtExecutionInfo);
    salesInvoiceController.runReport();

}





No olvides que te puedes unir a la página en Facebook Aprendiendo Dynamics Ax donde únicamente se tratan temas de desarrollo y se busca crear una comunidad de desarrollador@s de Ax en nuestro idioma.