Axapta 通过x+发布导入转账日记账+;
我有以下问题:以下代码工作正常:Axapta 通过x+发布导入转账日记账+;,axapta,x++,Axapta,X++,我有以下问题:以下代码工作正常: inventJournalTrans.clear(); inventJournalTrans.initFromInventJournalTable(inventJournalTable); inventJournalTrans.ItemId = "100836M"; frominventDim.InventLocationId="SD"; frominventDim.wMSLocationId = '11_RECEPTION'; fromInventDim.I
inventJournalTrans.clear();
inventJournalTrans.initFromInventJournalTable(inventJournalTable);
inventJournalTrans.ItemId = "100836M";
frominventDim.InventLocationId="SD";
frominventDim.wMSLocationId = '11_RECEPTION';
fromInventDim.InventSizeId = '1000';
fromInventDim.inventBatchId = 'ID057828-CN';
ToinventDim.InventLocationId = "SD";
ToInventDim.wMSLocationId = '11_A2';
ToInventDim.InventSizeId = '1000';
ToInventDim.inventBatchId = 'T20/0001/1';
ToinventDim = InventDim::findOrCreate(ToinventDim);
frominventDim = InventDim::findOrCreate(frominventDim);
inventJournalTrans.InventDimId = frominventDim.inventDimId;
inventJournalTrans.initFromInventTable(InventTable::find("100836M"));
inventJournalTrans.Qty = -0.5;
inventJournalTrans.ToInventDimId = ToinventDim.inventDimId;
inventJournalTrans.CostAmount = InventJournalTrans.calcCostAmount(-abs(any2real(strReplace('-0.5',',','.'))));
inventJournalTrans.TransDate = SystemDateget();
inventJournalTrans.insert();
inventJournalCheckPost = InventJournalCheckPost::newJournalCheckPost(JournalCheckpostType::Post,inventJournalTable);
inventJournalCheckPost.parmThrowCheckFailed(_throwserror);
inventJournalCheckPost.parmShowInfoResult(_showinforesult);
inventJournalCheckPost.run();
它正确创建转账日记账行并成功过账转账日记账
我的要求是从csv文件导入日记账行。我编写了以下代码:
inventJournalTrans.clear();
inventJournalTrans.initFromInventJournalTable(inventJournalTable::find(_journalID));
InventJournaltrans.ItemId = conpeek(_filerecord,4);
inventDim_From.InventLocationId = 'SD';
inventDim_From.wMSLocationId = '11_RECEPTION';
InventDim_from.InventSizeId = conpeek(_fileRecord,11);
InventDim_From.inventBatchId = strfmt("%1",conpeek(_fileRecord,5));
InventDim_To.InventLocationId = 'SD';
inventDim_To.wMSLocationId = strfmt("%1",conpeek(_fileRecord,10));
InventDim_To.InventSizeId = conpeek(_fileRecord,11);
InventDim_To.inventBatchId = strfmt("%1",conpeek(_fileRecord,6));
InventDim_From = InventDim::findOrCreate(inventDim_From);
inventDim_To = InventDim::findOrCreate(inventDim_To);
InventJournalTrans.InventDimId = inventDim_From.inventDimId;
InventJournalTrans.initFromInventTable(InventTable::find(conpeek(_filerecord,4)));
inventJournalTrans.Qty = -abs(any2real(strReplace(conpeek(_fileRecord,8),',','.')));
inventJournalTrans.ToInventDimId = inventDim_To.inventDimId;
InventJournalTrans.CostAmount = InventJournalTrans.calcCostAmount(-abs(any2real(strReplace(conpeek(_fileRecord,8),',','.'))));
inventJournalTrans.TransDate = str2date(conpeek(filerecord,9),123);
InventJournalTrans.insert();
使用insert()方法时出现以下错误:itemId的大小不存在。当我在inventSize表中查看我的itemId时,大小是存在的,我认为这是inventJournalTrans中的inventDimId问题,但它们与第一个代码示例非常相似。我的所有数据都与第一个示例相同,但不是硬编码的,并且来自于读取我的csv文件
我花了很多时间调试,没有发现任何错误,但错误消息仍然存在
我使用的是Dynamics AX V4 SP1。
非常感谢您的帮助。当您阅读文件时,请始终修剪尾随空格。您可以使用函数来实现这一点 像这样:
InventDim_To.InventSizeId = strRtrim(conpeek(_fileRecord,11));
是否确实正在按预期从文件中检索ItemId?您使用的是哪个版本?调试时是否尝试了以下操作:首先,将读取csv文件的代码中的所有值替换为硬编码值,以便该文件正常工作。然后,用csv文件中的值逐个替换这些值。每次更换后检查代码是否仍然有效。通过这种方式,您可以识别导致问题的值。然后,将该值写入单独的变量,并将其与保存硬编码值的变量进行比较。比较代码中的两个值以确保它们相等。正如猜测:检查csv文件是否存在编码问题。倒数第二行是
inventJournalTrans.TransDate=str2date(conpeek(filerecord,9),123)代码>。它应该是\u filerecord
而不是filerecord
?这是AX 2009还是2012?调试时,在顶部抛出一个conView(\u filerecord)
,并使用它来验证CSV数据的内容。听起来您的Item+Size组合无效,因此虽然该大小可能存在,但它可能对该项目无效。此外,请签出strlTrim()
,如果(InventSize::Exists(conPeek(_fileRecord,11)))
,进行健全性检查。如果返回false,则知道大小不存在,并且包含特殊字符。