【问题标题】:Issue importing transfer journal through x++通过 x++ 导入传输日志的问题
【发布时间】:2020-04-16 13:17:55
【问题描述】:

我有以下问题:以下代码完美运行:

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 的大小不存在。当我查看我的 itemId 的 inventSize 表时,大小存在,我认为这是 inventJournalTrans 中的 inventDimId 问题,但它们与第一个代码示例非常相似。我的所有数据都与第一个示例相同,但不是硬编码的,而是来自读取我的 csv 文件。

我花了很多时间调试,没有发现任何问题,但错误消息仍然存在 我正在使用 Dynamics AX V4 SP1。 非常感谢您的帮助。

【问题讨论】:

  • 您确定 ItemId 正在按预期从文件中检索到吗?
  • 你用的是哪个版本?
  • 您在调试时是否尝试过以下操作:首先,将读取 csv 文件的代码中的所有值替换为硬编码值,使其正常工作。然后,将这些值一一替换为 csv 文件中的值。每次更换后检查代码是否仍然有效。这样,您可以确定导致问题的值。然后,将该值写入一个单独的变量,并将其与保存硬编码值的变量进行比较。比较代码中的两个值以确保它们相等。就像一个疯狂的猜测:检查 csv 文件是否存在编码问题。
  • 倒数第二行,你有inventJournalTrans.TransDate = str2date(conpeek(filerecord,9),123);。应该是_filerecord 而不是filerecord?这是 AX 2009 还是 2012?
  • 调试时,在顶部抛出一个conView(_filerecord),并使用它来验证CSV数据的内容。听起来您的 Item+Size 组合无效,因此虽然尺寸可能存在,但它可能对该项目无效。

标签: axapta x++


【解决方案1】:

当您从文件中读取时,总是修剪尾随空格。您可以使用strRtrim 函数来做到这一点。

像这样:

InventDim_To.InventSizeId = strRtrim(conpeek(_fileRecord,11));

【讨论】:

  • 此外,请查看strLRtrim(),并使用if(InventSize::Exists(conPeek(_fileRecord, 11))) 进行完整性检查。如果返回 false,则您知道大小不存在并且包含特殊字符。
猜你喜欢
  • 1970-01-01
  • 2019-03-14
  • 2022-07-25
  • 2023-04-04
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-22
相关资源
最近更新 更多