Aquí muestro cómo crear un diario de transferir en Dynamics Ax 2009
static void ISSinventtransferjournal(Args _args)
{
InventJournalTable inventJournalTable;
InventJournalTrans inventJournalTrans;
InventJournalCheckPost inventJournalCheckPost;
NumberSeq num;
InventDim frominventDim,ToinventDim;
;
ttsbegin;
inventJournalTable.clear();
num = new NumberSeq();
num = NumberSeq::newGetNum(InventParameters::numRefTransferId());
inventJournalTable.initFromInventJournalName(InventJournalName::find(InventParameters::find().TransferJournalNameId));
inventJournalTable.Description = InventJournalName::find(InventParameters::find().TransferJournalNameId).Description;
inventJournalTable.SystemBlocked = true;
inventJournalTable.insert();
//línea 1
inventJournalTrans.clear();
inventJournalTrans.initFromInventJournalTable(inventJournalTable);
inventJournalTrans.ItemId = "AAA";
//frominventDim.wMslocationid = "";
frominventDim.inventSiteId ="CAD";
frominventdim.InventLocationId = "FABRICA";
frominventdim.inventBatchId = "1a";
//Toinventdim.wmslocationid = "";
ToinventDim.InventSiteId = "CAD";
ToinventDim.InventLocationId = "FERT";
ToinventDim.inventBatchId = "1a";
ToinventDim = InventDim::findOrCreate(ToinventDim);
frominventDim = InventDim::findOrCreate(frominventDim);
inventJournalTrans.InventDimId = frominventDim.inventDimId;
inventJournalTrans.initFromInventTable(InventTable::find("AAA"));
inventJournalTrans.Qty = 1;
inventJournalTrans.ToInventDimId = ToinventDim.inventDimId;
inventJournalTrans.TransDate = SystemDateget();
inventJournalTrans.insert();
inventJournalTable.NumOfLines = 1;
inventJournalCheckPost = InventJournalCheckPost::newJournalCheckPost(JournalCheckpostType::Post,inventJournalTable);
inventJournalCheckPost.run();
inventJournalTable.SystemBlocked = false;
inventJournalTable.update();
ttscommit;
info(strfmt("Diario: %1 creado.", inventJournalTable.JournalId));
}
Post relacionados:
Reserva de inventario por línea de venta por código x++, Dynamics Ax 2009
Dialogo para seleccionar nombre de archivo FileName
Crear una orden de producción en Dyamics Ax 2009 por código x++
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.
Buscar en este blog
jueves, 23 de febrero de 2017
miércoles, 15 de febrero de 2017
Crear una orden de producción en Dyamics Ax 2009 por código x++
Ejemplo para crear una orden de producción y llevarla por los distintos estados: la estimación, la lista de selección, el inicio, reportar como terminada y el fin.
static void createProductionOrder(Args _args)
{
ProdQty qty = 2;
ItemId item = 'AAA-PT';
ProdTable prodtable;
InventTable inventTable;
InventDim inventDim;
ProdMultiCostEstimation prodMultiCostEstimation;
ProdMultiScheduling prodMultiScheduling;
ProdMultiRelease prodMultiRelease;
ProdMultiStartUp prodMultiStartUp;
ProdMultiReportFinished prodMultiReportFinished;
ProdMultiHistoricalCost prodMultiHistoricalCost;
Args args = new Args();
ProdParmStartUp prodParmStartUp;
;
// Inicializar InventTable
inventTable = inventTable::find(item);
prodtable.initValue();
prodtable.initFromInventTable(inventTable);
prodtable.ItemId = inventTable.ItemId;
prodtable.DlvDate = today();
prodtable.DlvTime = DateTimeUtil::time(DateTimeUtil::utcNow());
prodtable.QtySched = qty;
prodtable.RemainInventPhysical = qty;
// Inicializar InventDim
inventDim.initValue();
prodtable.BOMId = BOMVersion::findActive(prodtable.ItemId,
prodtable.BOMDate,
prodtable.QtySched,
inventDim).BOMId;
prodtable.RouteId = RouteVersion::findActive(prodtable.ItemId,
prodtable.BOMDate,
prodtable.QtySched,
inventDim).RouteId;
// Inicializar BOMVersion
prodtable.initBOMVersion();
// Inicializar RouteVersion
prodtable.initRouteVersion();
//Personalizar lote
inventDim = inventDim::find(prodtable.InventDimId);
inventDim.inventBatchId = "2011-302005";
inventDim = inventDim::findOrCreate(inventDim);
prodtable.InventDimId = inventDim.inventDimId;
//Dependiendo de la configuración, esto puede ser necesario o no
ProdTable.ProdGroupId = "AGR";
//Usando ProdTable para crear la orden
prodtable.type().insert();
// Indica la orden de producción que se creo
setPrefix( 'Número de orde de producción');
info(prodtable.ProdId);
// Estimation
prodMultiCostEstimation = ProdMultiCostEstimation::construct(args);
runBaseMultiParm::initParm(ProdMultiCostEstimation);
prodMultiCostEstimation.insert(prodTable, ProdMultiCostEstimation.defaultParmBuffer());
prodMultiCostEstimation.run();
// Scheduling
prodMultiScheduling = ProdMultiScheduling::construct(ProdSchedMethod::OperationScheduling);
runBaseMultiParm::initParm(prodMultiScheduling);
prodMultiScheduling.insert(prodTable, prodMultiScheduling.defaultParmBuffer());
prodMultiScheduling.run();
// Release
prodMultiRelease = ProdMultiRelease::construct(args);
runBaseMultiParm::initParm(ProdMultiRelease);
prodMultiRelease.insert(prodTable, prodMultiRelease.defaultParmBuffer());
prodMultiRelease.run();
// Start up
prodMultiStartup = ProdMultiStartUp::construct(args);
runBaseMultiParm::initParm(prodMultiStartup);
prodMultiStartup.insert(prodTable, prodMultiStartup.defaultParmBuffer());
prodMultiStartup.runISS();
// Report as Finished
prodMultiReportFinished = ProdMultiReportFinished::construct(args);
runBaseMultiParm::initParm(ProdMultiReportFinished);
prodMultiReportFinished.insert(prodTable, ProdMultiReportFinished.defaultParmBuffer());
prodMultiReportFinished.runISS();
// End the Order
prodMultiHistoricalCost = ProdMultiHistoricalCost::construct(args);
runBaseMultiParm::initParm(ProdMultiHistoricalCost);
prodMultiHistoricalCost.insert(prodTable, ProdMultiHistoricalCost.defaultParmBuffer());
prodMultiHistoricalCost.run();
}
Post relacionados:
Reserva de inventario por línea de venta por código x++, Dynamics Ax 2009
Dialogo para seleccionar nombre de archivo FileName
Crear búsquedas por nombre de producto en métodos display
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.
static void createProductionOrder(Args _args)
{
ProdQty qty = 2;
ItemId item = 'AAA-PT';
ProdTable prodtable;
InventTable inventTable;
InventDim inventDim;
ProdMultiCostEstimation prodMultiCostEstimation;
ProdMultiScheduling prodMultiScheduling;
ProdMultiRelease prodMultiRelease;
ProdMultiStartUp prodMultiStartUp;
ProdMultiReportFinished prodMultiReportFinished;
ProdMultiHistoricalCost prodMultiHistoricalCost;
Args args = new Args();
ProdParmStartUp prodParmStartUp;
;
// Inicializar InventTable
inventTable = inventTable::find(item);
prodtable.initValue();
prodtable.initFromInventTable(inventTable);
prodtable.ItemId = inventTable.ItemId;
prodtable.DlvDate = today();
prodtable.DlvTime = DateTimeUtil::time(DateTimeUtil::utcNow());
prodtable.QtySched = qty;
prodtable.RemainInventPhysical = qty;
// Inicializar InventDim
inventDim.initValue();
prodtable.BOMId = BOMVersion::findActive(prodtable.ItemId,
prodtable.BOMDate,
prodtable.QtySched,
inventDim).BOMId;
prodtable.RouteId = RouteVersion::findActive(prodtable.ItemId,
prodtable.BOMDate,
prodtable.QtySched,
inventDim).RouteId;
// Inicializar BOMVersion
prodtable.initBOMVersion();
// Inicializar RouteVersion
prodtable.initRouteVersion();
//Personalizar lote
inventDim = inventDim::find(prodtable.InventDimId);
inventDim.inventBatchId = "2011-302005";
inventDim = inventDim::findOrCreate(inventDim);
prodtable.InventDimId = inventDim.inventDimId;
//Dependiendo de la configuración, esto puede ser necesario o no
ProdTable.ProdGroupId = "AGR";
//Usando ProdTable para crear la orden
prodtable.type().insert();
// Indica la orden de producción que se creo
setPrefix( 'Número de orde de producción');
info(prodtable.ProdId);
// Estimation
prodMultiCostEstimation = ProdMultiCostEstimation::construct(args);
runBaseMultiParm::initParm(ProdMultiCostEstimation);
prodMultiCostEstimation.insert(prodTable, ProdMultiCostEstimation.defaultParmBuffer());
prodMultiCostEstimation.run();
// Scheduling
prodMultiScheduling = ProdMultiScheduling::construct(ProdSchedMethod::OperationScheduling);
runBaseMultiParm::initParm(prodMultiScheduling);
prodMultiScheduling.insert(prodTable, prodMultiScheduling.defaultParmBuffer());
prodMultiScheduling.run();
// Release
prodMultiRelease = ProdMultiRelease::construct(args);
runBaseMultiParm::initParm(ProdMultiRelease);
prodMultiRelease.insert(prodTable, prodMultiRelease.defaultParmBuffer());
prodMultiRelease.run();
// Start up
prodMultiStartup = ProdMultiStartUp::construct(args);
runBaseMultiParm::initParm(prodMultiStartup);
prodMultiStartup.insert(prodTable, prodMultiStartup.defaultParmBuffer());
prodMultiStartup.runISS();
// Report as Finished
prodMultiReportFinished = ProdMultiReportFinished::construct(args);
runBaseMultiParm::initParm(ProdMultiReportFinished);
prodMultiReportFinished.insert(prodTable, ProdMultiReportFinished.defaultParmBuffer());
prodMultiReportFinished.runISS();
// End the Order
prodMultiHistoricalCost = ProdMultiHistoricalCost::construct(args);
runBaseMultiParm::initParm(ProdMultiHistoricalCost);
prodMultiHistoricalCost.insert(prodTable, ProdMultiHistoricalCost.defaultParmBuffer());
prodMultiHistoricalCost.run();
}
Post relacionados:
Reserva de inventario por línea de venta por código x++, Dynamics Ax 2009
Dialogo para seleccionar nombre de archivo FileName
Crear búsquedas por nombre de producto en métodos display
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.
miércoles, 8 de febrero de 2017
Reserva de inventario por línea de venta por código x++, Dynamics Ax 2009
Este es un ejemplo para simular la reserva de productos con dimensión financiera especifica, en este caso, un número de lote y número de serie en Dynamics Ax 2009.
Nota: este ejemplo ejecutado desde un job te puede mandar un error de "El cursor no es válido para crear una instancia recordViewCache." o "The cursor is invalid for instantiating recordViewCache." esto se debe a que la clase desde donde lo ejecutes debe tener la propiedad RunOn en Server.
Nota: este ejemplo ejecutado desde un job te puede mandar un error de "El cursor no es válido para crear una instancia recordViewCache." o "The cursor is invalid for instantiating recordViewCache." esto se debe a que la clase desde donde lo ejecutes debe tener la propiedad RunOn en Server.
static void reserveInventoryForSalesLine(Args _args)
{
SalesLine salesLine;
InventUpd_Reservation reservation;
InventDim inventDimCriteria;
InventDimParm inventDimParm;
InventMovement inventMovement;
InventQty qty;
;
salesLine = salesLine::findRecId(5637148606); // RecId de la línea de venta
if (!salesLine)
{
return;
}
inventMovement = InventMovement::construct(salesLine);
inventDimCriteria = InventDim::find(salesLine.inventDimId);
inventDimCriteria.inventBatchId = '202023';//número de lote especifico de donde se quiere hacer la reserva
inventDimCriteria.inventSerialId = '1234512'; //número de serie especifico de donde se quiere hacer la reserva
inventDimParm = inventMovement.initDimParmAutoReserv(inventDimCriteria);
reservation = InventUpd_Reservation::newMovement(inventMovement, -1, false);
reservation.parmInventDimFixed(InventDimFixedClass::inventDimParm2InventDimFixed(inventDimParm));
reservation.parmInventDimCriteria(inventDimCriteria);
reservation.parmInventDimParm(inventDimParm);
reservation.updateNow();
info("termino");
}
Post relacionados:
Consultas en tablas con ValidTimeState
Crear lookup en clase dialog
Crear búsquedas por nombre de producto en métodos display
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.
Post relacionados:
Consultas en tablas con ValidTimeState
Crear lookup en clase dialog
Crear búsquedas por nombre de producto en métodos display
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.
miércoles, 1 de febrero de 2017
Dialogo para seleccionar nombre de archivo FileName
Este es un ejemplo de cómo hacer un job que lance un dialogo y se pueda seleccionar el nombre del archivo.
static void DialogFilePath(Args _args)
{
Dialog dialog;
Filename filename;
DialogField dialogFilename;
//Definiendo filtro de ciertos tipos de archivos
container conFilter = ["Microsoft Excel 97-2003 Worksheet (.xls)" ,"*.xlsx"];
//container conFilter = ["Comma Seperated Value .txt ", "*.csv"];
;
dialog = new dialog();
dialog.caption("Importar archivo");
dialogFilename = dialog.addField(typeId(FilenameOpen));//extendedTypeStr(FilenameOpen)); //extendedTypeStr es para 2012
//Aplicando filtro de archivos
dialog.filenameLookupFilter(conFilter);
dialog.run();
if(dialog.closedOk())
{
filename = dialogFileName.value();
info(filename);
}
}
Este es el resultado:
Post relacionados:
Crear empleado, alta y baja por código x++
Escribir XML desde Ax 2012
Listar objetos que pertenecen a un proyecto
Crear empleado, alta y baja por código x++
Escribir XML desde Ax 2012
Listar objetos que pertenecen a un proyecto
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.
Suscribirse a:
Entradas (Atom)