Hallo,
Ik probeer orderregels vanuit excel te importeren, met behulp van de kruisverwijzings tabel zoek ik de artikelen op.
Nu importeerd hij alleen maar de regel waar het artikelnummer juist is ingevuld en de regel waar een kruisverwijzing met 3 cijfers in staat. Staan in de kruisverwijzing meer cijfers, dan leest hij dit niet in (ondanks dat de kruisverwijzing klopt.).
onderstaand de gebruikte code.
Heeft iemand enig idee hoe ik dit probleem kan oplossen.
NrRiga := 0;
TotRiga:= ExcelTemp.COUNT;
CLEAR(ImportTotIntG);
CLEAR(ImportItemIntG);
CLEAR(ImportCrossItemIntG);
SalesLineRecG2.RESET;
SalesLineRecG2.SETRANGE("Document Type","Sales Header"."Document Type");
SalesLineRecG2.SETRANGE("Document No.","Sales Header"."No.");
IF SalesLineRecG2.FIND('+') THEN
NextLineNoIntG := SalesLineRecG2."Line No."
ELSE
NextLineNoIntG := 0;
CrossReference.RESET;
CrossReference.SETCURRENTKEY("Cross-Reference No.");
WindowDlgG.OPEN('Import order #1###########################################################\'+
'File Excel #2###########################################################\'+
'Sheet Excel #3###########################################################\'+
' @4@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@');
WindowDlgG.UPDATE(1,"Sales Header"."No." + ' ' + "Sales Header"."Bill-to Name");
WindowDlgG.UPDATE(2,FileName);
WindowDlgG.UPDATE(3,SheetName);
ExcelTemp.RESET;
IF ExcelTemp.FIND('-') THEN REPEAT
NrRiga += 1;
WindowDlgG.UPDATE(4,ROUND((10000/TotRiga)*NrRiga,1));
NoSc1 := FALSE;
NoSc2 := FALSE;
IF (ExcelTemp."Row No." <> 1) THEN BEGIN
IF (ExcelTemp."Column No." = 1) THEN BEGIN
ImportTotIntG += 1;
ErrorItemBlnG := FALSE;
EVALUATE(Excel_ItemCdeG,ExcelTemp."Cell Value as Text");
IF ItemRecG.GET(Excel_ItemCdeG) THEN BEGIN
ItemCdeG := Excel_ItemCdeG;
ImportItemIntG += 1;
END ELSE BEGIN
CrossReference.SETCURRENTKEY("Cross-Reference No.");
CrossReference.SETRANGE("Cross-Reference No.",Excel_ItemCdeG);
IF CrossReference.FIND('-') THEN BEGIN
ItemCdeG := CrossReference."Item No.";
ImportCrossItemIntG += 1;
END ELSE BEGIN
ErrorItemBlnG := TRUE;
END;
END;
END;
IF (ExcelTemp."Column No." = 2) THEN BEGIN
EVALUATE(Excel_QtyDecG,ExcelTemp."Cell Value as Text");
END;
END;
IF (Excel_ItemCdeG <> '') AND (ExcelTemp."Column No." = 2) THEN BEGIN
IF NOT ErrorItemBlnG THEN BEGIN
ItemRecG.GET(ItemCdeG);
// IF Art.Blocked THEN BEGIN
// TxtErr := TxtErr+' block';
// ErroreGenerale := TRUE;
// ErroreArticolo := TRUE;
// END;
// IF (Art.Divisione = '6')
// OR (Art."Qualifica prodotto" = '99') THEN BEGIN
// TxtErr := TxtErr+' div6 o qual99';
// ErroreGenerale := TRUE;
// ErroreArticolo := TRUE;
// END;
// IF NOT ErroreArticolo THEN BEGIN
// Art.SETRANGE("Location Filter","Sales Header"."Location Code");
// Art.CALCFIELDS("Net Change");
// IF Art."Net Change" < Excel_Qta THEN BEGIN
// TxtErr := TxtErr+' giac '+FORMAT(Art."Net Change");
// ErroreGiacenza := TRUE;
// ErroreGenerale := TRUE;
// OutFile.WRITE(OutText + ';' + TxtErr);
// OutText := '';
// TxtErr := '';
// END;
// END;
// END;
// IF ErroreArticolo THEN BEGIN
// ErroreArticolo := FALSE;
// OutFile.WRITE(OutText + ';' + TxtErr);
// OutText := '';
// TxtErr := '';
// END ELSE BEGIN
SalesLineRecG.SuspendStatusCheck(Sospendi);
NextLineNoIntG += 10000;
SalesLineRecG.INIT;
SalesLineRecG.VALIDATE("Line No.",NextLineNoIntG);
SalesLineRecG.VALIDATE("Document Type","Sales Header"."Document Type");
SalesLineRecG.VALIDATE("Document No.","Sales Header"."No.");
SalesLineRecG.INSERT(TRUE);
SalesLineRecG.VALIDATE(Type,SalesLineRecG.Type::Item);
// Art.GET(ArticoloTemp);
SalesLineRecG.VALIDATE("No.",ItemCdeG);
SalesLineRecG.VALIDATE(Quantity,Excel_QtyDecG);
// IF (Excel_PU <> 0) THEN BEGIN
// SalesLineRecG.VALIDATE("Unit Price",Excel_PU);
// //SalesLineRecG.VALIDATE("Line Discount %",0);
// //SalesLineRecG.VALIDATE("% Sconto 1",0);
// //SalesLineRecG.VALIDATE("% Sconto 2",0);
// END;
// IF (NOT NoSc1 AND (Excel_SC1 <> 0)) THEN BEGIN
// SalesLineRecG.VALIDATE("% Sconto 1",Excel_SC1);
// END;
// IF (NOT NoSc2 AND (Excel_SC2 <> 0)) THEN BEGIN
// SalesLineRecG.VALIDATE("% Sconto 2",Excel_SC2);
// END;
// IF NoSc1 THEN
// SalesLineRecG.VALIDATE("% Sconto 1",0);
// IF NoSc2 THEN
// SalesLineRecG.VALIDATE("% Sconto 2",0);
// SalesLineRecG.VALIDATE("Salesperson Code");
SalesLineRecG.MODIFY(TRUE);
// IF ErroreGiacenza AND ("Sales Header"."Location Code" <> '0') THEN BEGIN
// Nrig += 10000;
// T83."Journal Template Name" := 'ARTICOLO';
// T83."Journal Batch Name" := 'RETTREND';
// T83."Line No." := Nrig;
// T83.VALIDATE("Posting Date",WORKDATE);
// T83.VALIDATE("Entry Type",T83."Entry Type"::"Positive Adjmt.");
// T83.VALIDATE("Item No.",Art."No.");
// T83."Document No." := 'RR-'+TestataOrdine."Location Code";
// T83.Description := 'Giac. '+FORMAT(Art."Net Change") + ' Ord. '+FORMAT(SalesLineRecG.Quantity);
// T83.VALIDATE("Location Code",TestataOrdine."Location Code");
// T83.VALIDATE(Quantity,SalesLineRecG.Quantity-Art."Net Change");
// T83.VALIDATE(T83."Unit Cost",0);
// T83.INSERT(TRUE);
// END;
END;
END;
UNTIL ExcelTemp.NEXT = 0;
0
Comments
Ik wist niet dat string en string geevalueerd moeten worden.
Daarnaast, als je string niet word ingelezen wanneer er meer dan 3 cijfers of karakters in staan, is dat wat je moet oplossen.
Zijn je variabelen groot genoeg?
Gebruik ook liefst de [code] tag om dit weer te geven, want nu wordt ik misselijk hiervan {niet alleen om de inspringing, maar vooral om de (gelukkig in commentaar) T83 tabel code}
|To-Increase|
Naar nu blijkt werkt het alleen maar als er een letter in de codering staat en werkt het crossreference zoeken niet als er alleen cijfers in staan.
En nu willen ze dat natuurlijk gebruiken. (in Dynamincs Nav 5.0)
Hoewel de cell value as text wordt gebruikt, kan het zijn dat Excel toch een of ander formaat heeft doorgedrukt.
Maar je antwoord is een wezenlijk verschil met je originele vraag, dus verder onderzoek heeft uitgewezen dat het aan de cijfers ligt
Indien aan de kruisverwijzingen punten en/of komma's beginnnen te hangen. strip ze dan voor je op artikelen gaat zoeken.
(Dat is artikelen EN kruisverwijzingen)
als je daarnaast ook kruisverwijzingen hebt met komma's en punten in. Dan zit je met een groter probleem
Nu ik weet niet hoe ver deze import gaat, maar als het order nog wordt nagekeken door een medewerker zou je eventueel ook de lijnen zonder resultaat importeren in description lines.
Dan kan de medewerker dit aanpassen en verder afhandelen.
|To-Increase|