IBM Sterling地图编辑器:在204 EDI中是否有方法对OID进行排序我需要一些帮助/想法关于如何做这件事
这是输入文件
ISA*...
GS*...
...
S5*2*CU*34140*L~
G62*68*20220531~
AT8*G*L*34140*4437~
PLD*27~
N1*ST*COSTCO STORE AAAA*93*0000000761~
N3*1013 HOMER STREET ~
N4*CITY*CA*90210~
OID*SO1241*135020070**PC*1*L*0~
L5**Certificate Of Sale~
AT8*G*L*0*1~
OID*SO1241*135020070**PC*24*L*0~
L5**AIRBAG~
AT8*G*L*0*24~
OID*SO1157*135020014**PC*1*L*0~
L5**Certificate Of Sale~
AT8*G*L*0*1~
OID*SO1241*135020070**PC*1080*L*30720~
L5**APPLES 2 lb~
AT8*G*L*30720*3840~
OID*SO1157*135020014**PC*1070*L*3420~
L5**ORANGES 12 oz~
AT8*G*L*3420*570~
OID*SO1241*135020070**PC*1*L*0~
L5**GPS TRACKER~
AT8*G*L*0*1~
L3*...
SE*...
GE*...
IEA*...
这是我想要得到的输出文件,EDI到POSITIONAL
HDR1: PO 135020070
ITEM: Certificate Of Sale,QTY 1
ITEM: AIRBAG,QTY 24
ITEM: APPLES 2 lb,QTY 1080
ITEM: GPS TRACKER,QTY 1
HDR1: PO 135020014
ITEM: Certificate Of Sale,QTY 1
ITEM: ORANGES 12 oz,QTY 1070
当前这是我的MAP正在做的
HDR1: PO 135020070
ITEM: Certificate Of Sale,QTY 1
ITEM: AIRBAG,QTY 24
HDR1: PO 135020014
ITEM: Certificate Of Sale,QTY 1
HDR1: PO 135020070
ITEM: APPLES 2 lb,QTY 1080
HDR1: PO 135020014
ITEM: ORANGES 12 oz,QTY 1070
HDR1: PO 135020070
ITEM: GPS TRACKER,QTY 1
这是我当前的代码(扩展OID规则),生成上面的映射
if sPONum = "" | (sPONum != "" & sPONum != #0324) then
begin
//CREATE PO HEADER
sPONum = #0324;
iCU = iCU + 1;
$POGroup[iCU].#TEMP_DUNS = sDUNS;
$POGroup[iCU].#PONumber = #0324;
//CREATE ITEM LINE
//RESET ITEM LINE FOR EACH PO
iItem = 0;
iItem = iItem + 1;
iOID = iOID + 1;
$TEMP_ITEM[iCU][iItem].#TEMP_Qty = #0380:4;
$TEMP_ITEM[iCU][iItem].#TEMP_Description = $0320_L5[iS5][iOID][1].#0079:2;
end
else
begin
iItem = iItem + 1;
iOID = iOID + 1;
$TEMP_ITEM[iCU][iItem].#TEMP_Qty = #0380:4;
$TEMP_ITEM[iCU][iItem].#TEMP_Description = $0320_L5[iS5][iOID][1].#0079:2;
end
任何提示和指针的地图编辑器的主人在那里非常感谢你的帮助
欢呼我想出来的面条式代码。我相信有更有效的方法。任何人都可以提出更优雅的建议。
它不是最好的,但它对我的目的有效。由于iOID = iOID + 1;
iFOUND = 0;
iCount = 0;
While iCount < iOID DO
begin
iCount = iCount + 1;
//PO HDR FOUND
if $POGroup[iCount].#PONumber = #0324 & iFOUND = 0 then
begin
iFOUND = iCount;
end
end
if iFOUND = 0 then
begin
//CREATE PO HEADER
iNewPO = iNewPO + 1;
$POGroup[iNewPO].#PONumber = #0324;
$POGroup[iNewPO].#TEMP_DUNS = sDUNS;
$POGroup[iNewPO].#TEMP_PODt = sPODt;
$POGroup[iNewPO].#STATUS_CODE = sStatusCode;
$POGroup[iNewPO].#SCAC = sSCAC;
$POGroup[iNewPO].#SID = sSID;
$POGroup[iNewPO].#SONum = #0127:7;
strdate($0300_S5[iS5].#0373:2,"%Y%m%d", $POGroup[iNewPO].#DeliveryDt);
$TEMP_MESSAGE[iNewPO][1].#MSG = sShipType;
//CREATE FIRST ITEM LINE
//RESET FLAT FILE ITEM LINE FOR EACH PO
iItem = 1;
$TEMP_ITEM[iNewPO][iItem].#TEMP_Qty = #0380:4;
$TEMP_ITEM[iNewPO][iItem].#TEMP_Description = $0320_L5[iS5][iOID][1].#0079:2;
end
else
begin
//FIND MAX ITEM LINE FOR FOUND PO INDEX
iItmMax = 0;
iCount = 0;
While iCount < iOID DO
begin
iCount = iCount + 1;
//Loop to each item and find the max
if $TEMP_ITEM[iFOUND][iCount].#TEMP_Qty != "" then iItmMax = iCount;
end
//SET THE MAX ITEM PLUS ONE
iItem = iItmMax + 1;
//CREATE ITEM LINE
$TEMP_ITEM[iFOUND][iItem].#TEMP_Qty = #0380:4;
$TEMP_ITEM[iFOUND][iItem].#TEMP_Description = $0320_L5[iS5][iOID][1].#0079:2;
end