Aus Excel importieren (DEV)

Bild Microsoft Dynamics NAV 2016

Re: Aus Excel importieren (DEV)

Beitragvon fiddi » 27. Februar 2018 18:07

Hallo,

HINWEIS: Bitte möglichst Vollzitate vermeiden

Hast du es schon mal versucht den Text einer Date oder Datetime- Variable mit EVALUATE zuzuweisen?

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Aus Excel importieren (DEV)

Beitragvon navCH » 27. Februar 2018 18:08

Habe gerade versucht das erste Record zu inserten und bekam folgende Meldung:

Fehler.PNG
Fehler.PNG (4.9 KiB) 574-mal betrachtet


Debugger bleibt vor Sheet:=Book.Worksheets.Item('ROM Artikel Import Vorlage V1');
stehen

Was mache ich falsch?

Mfg
Benutzeravatar
navCH
 
Beiträge: 522
Registriert: 23. Oktober 2012 09:33
Realer Name: Christian W

Re: Aus Excel importieren (DEV)

Beitragvon navCH » 27. Februar 2018 18:59

navCH hat geschrieben:Habe gerade versucht das erste Record zu inserten und bekam folgende Meldung:

Fehler.PNG


Debugger bleibt vor Sheet:=Book.Worksheets.Item('ROM Artikel Import Vorlage V1');
stehen

Was mache ich falsch?

Mfg



hat sich erledigt, hatte eine falsche Zuweisung.
Aber er insertet nicht in die Tabelle :cry:
Benutzeravatar
navCH
 
Beiträge: 522
Registriert: 23. Oktober 2012 09:33
Realer Name: Christian W

Re: Aus Excel importieren (DEV)

Beitragvon navCH » 27. Februar 2018 19:27

Code: Alles auswählen
KatalogArtikelROM.CHANGECOMPANY('Mandant1');
h:='2';
CREATE(App,FALSE, TRUE);
App.Visible(TRUE);
Book:=App.Workbooks.Open('C:\Users\adm\Desktop\ROM\ROMArtikelImportVorlageV2.xlsx');

Sheet:=Book.Worksheets.Item('Artikel Import Vorlage V1');

KatalogArtikelROM.SETCURRENTKEY(Hersteller,HerstellerArtikel,EinkaufPreiseinheit,EinkaufMengeneinheit,GueltigAbDatum);
IF KatalogArtikelROM.FINDLAST THEN BEGIN
KatalogArtikelROM.Hersteller:=Sheet.Range('A'+h).Value;
KatalogArtikelROM.HerstellerArtikel:=Sheet.Range('B'+h).Value;

EVALUATE(listenpreis,Sheet.Range('C'+h).Value);
KatalogArtikelROM.Listenpreis:=listenpreis;

//leere Felder noch auf 0 setzen
KatalogArtikelROM.Rabattgruppe:=Sheet.Range('D'+h).Value;

KatalogArtikelROM.Warengruppe:=Sheet.Range('E'+h).Value;
KatalogArtikelROM.Sachkonto:=Sheet.Range('F'+h).Value;
KatalogArtikelROM.ALieferant:=Sheet.Range('G'+h).Value;

//leere Felder noch auf 0 setzen
KatalogArtikelROM.ALieferantKurzbezeichnung:=Sheet.Range('H'+h).Value;
KatalogArtikelROM.ARabattArt1:=Sheet.Range('I'+h).Value;
//leere Felder noch auf 0 setzen
EVALUATE(arabattWert1,Sheet.Range('J'+h).Value);
KatalogArtikelROM.ARabattWert1:=arabattWert1;
//leere Felder noch auf 0 setzen
KatalogArtikelROM.ARabattArt2:=Sheet.Range('K'+h).Value;

EVALUATE(arabattWert2,Sheet.Range('L'+h).Value);
KatalogArtikelROM.ARabattWert2:=arabattWert2;

KatalogArtikelROM.ARabattArt3:=Sheet.Range('M'+h).Value;

EVALUATE(arabattWert3,Sheet.Range('N'+h).Value);
KatalogArtikelROM.ARabattWert3:=arabattWert3;

KatalogArtikelROM.ARabattArt4:=Sheet.Range('O'+h).Value;

EVALUATE(arabattWert4,Sheet.Range('P'+h).Value);
KatalogArtikelROM.ARabattWert4:=arabattWert4;

EVALUATE(aendPreis,Sheet.Range('Q'+h).Value);
KatalogArtikelROM.AEndPreis:=aendPreis;

KatalogArtikelROM.BLieferant:=Sheet.Range('R'+h).Value;

KatalogArtikelROM.BLieferantKurzbezeichnung:=Sheet.Range('S'+h).Value;

KatalogArtikelROM.BRabattArt1:=Sheet.Range('T'+h).Value;

EVALUATE(bRabattWert1, Sheet.Range('U'+h).Value);
KatalogArtikelROM.BRabattWert1:=bRabattWert1;

KatalogArtikelROM.BRabattArt2:=Sheet.Range('V'+h).Value;

EVALUATE(bRabattWert2,Sheet.Range('W'+h).Value);
KatalogArtikelROM.BRabattWert2:=bRabattWert2;

KatalogArtikelROM.BRabattArt3:=Sheet.Range('X'+h).Value;

EVALUATE(bRabattWert3,Sheet.Range('Y'+h).Value);
KatalogArtikelROM.BRabattWert3:=bRabattWert3;

KatalogArtikelROM.BRabattArt4:=Sheet.Range('Z'+h).Value;

EVALUATE(bRabattWert4, Sheet.Range('AA'+h).Value);
KatalogArtikelROM.BRabattWert4:=bRabattWert4;

EVALUATE(bEndPreis,Sheet.Range('AB'+h).Value );
KatalogArtikelROM.BEndPreis:=bEndPreis;

KatalogArtikelROM.CLieferant:=Sheet.Range('AC'+h).Value;

KatalogArtikelROM.CLieferantKurzbezeichnung:=Sheet.Range('AD'+h).Value;

KatalogArtikelROM.CRabattArt1:=Sheet.Range('AE'+h).Value;

EVALUATE(cRabbatWert1, Sheet.Range('AF'+h).Value);
KatalogArtikelROM.CRabattWert1:=cRabbatWert1;

KatalogArtikelROM.CRabattArt2:=Sheet.Range('AG'+h).Value;

EVALUATE(cRabbatWert2,Sheet.Range('AH'+h).Value);
KatalogArtikelROM.CRabattWert2:=cRabbatWert2;

KatalogArtikelROM.CRabattArt3:=Sheet.Range('AI'+h).Value;

EVALUATE(cRabbatWert3,Sheet.Range('AJ'+h).Value);
KatalogArtikelROM.CRabattWert3:=cRabbatWert3;

KatalogArtikelROM.CRabattArt4:=Sheet.Range('AK'+h).Value;

EVALUATE(cRabbatWert4, Sheet.Range('AL'+h).Value);
KatalogArtikelROM.CRabattWert4:=cRabbatWert4;

EVALUATE(cEndPreis,Sheet.Range('AM'+h).Value);
KatalogArtikelROM.CEndPreis:=cEndPreis;

EVALUATE(lagerPreisEinheit,Sheet.Range('AN'+h).Value);
KatalogArtikelROM.LagerPreiseinheit:=lagerPreisEinheit;

KatalogArtikelROM.LagerMengeneinheit:=Sheet.Range('AO'+h).Value;

EVALUATE(einkaufsPreiseinheit, Sheet.Range('AP'+h).Value);
KatalogArtikelROM.EinkaufPreiseinheit:=einkaufsPreiseinheit;

KatalogArtikelROM.EinkaufMengeneinheit:=Sheet.Range('AQ'+h).Value;

EVALUATE(faktor,Sheet.Range('AR'+h).Value);
KatalogArtikelROM.Faktor:=faktor;

KatalogArtikelROM.Bezeichnung:=Sheet.Range('AS'+h).Value;

KatalogArtikelROM.NetLink:=Sheet.Range('AT'+h).Value;

KatalogArtikelROM.Artikelgruppe:=Sheet.Range('AU'+h).Value;

KatalogArtikelROM.TeileKlasse:=Sheet.Range('AV'+h).Value;

KatalogArtikelROM.TeileArt:=Sheet.Range('AW'+h).Value;

KatalogArtikelROM.TeileGruppe:=Sheet.Range('AX'+h).Value;

EVALUATE(mindestMenge,Sheet.Range('AY'+h).Value);
KatalogArtikelROM.Mindestmenge:=mindestMenge;

KatalogArtikelROM.EAN:=Sheet.Range('AZ'+h).Value;

EVALUATE(gueltigABDatum, Sheet.Range('BA'+h).Value);
KatalogArtikelROM.GueltigAbDatum:=gueltigABDatum;

KatalogArtikelROM.Status:=Sheet.Range('BB'+h).Value;

EVALUATE(kupferBasis,Sheet.Range('BC'+h).Value);
KatalogArtikelROM.KupferBasis:=kupferBasis;

EVALUATE(kupferZahl,Sheet.Range('BD'+h).Value );
KatalogArtikelROM.KupferZahl:=kupferZahl;

EVALUATE(aluBasis, Sheet.Range('BE'+h).Value);
KatalogArtikelROM.AluBasis:=aluBasis;

EVALUATE(aluZahl, Sheet.Range('BF'+h).Value);
KatalogArtikelROM.AluZahl:=aluZahl;

EVALUATE(bleiBasis,Sheet.Range('BG'+h).Value );
KatalogArtikelROM.BleiBasis:=bleiBasis;

EVALUATE(bleiZahl,Sheet.Range('BH'+h).Value);
KatalogArtikelROM.BleiZahl:=bleiZahl;



//h:=INCSTR(h);
KatalogArtikelROM.INSERT;
END;


Ich versuche das in die Tabelle zu schreiben.
Aber in der Tabelle steht nichts drin.
Vielleicht kann mir jemand helfen woran es kiegt?

Beste GrĂĽĂźe,
Christian
Benutzeravatar
navCH
 
Beiträge: 522
Registriert: 23. Oktober 2012 09:33
Realer Name: Christian W

Re: Aus Excel importieren (DEV)

Beitragvon navCH » 28. Februar 2018 10:14

Guten Morgen!

Kann ich auch Recordvariablen verwenden, ohne ein Dataitem angelegt zu haben?
Ich habe praktisch meinen Code nur in ein OnPreReport() reingeschrieben.
Muss ich TRUE im Insert(TRUE) verwenden, wenn ich im OnPreReport() ausfĂĽhre?
Schreibt irgendwie nicht in die Tabelle.

GruĂź,
Christian
Benutzeravatar
navCH
 
Beiträge: 522
Registriert: 23. Oktober 2012 09:33
Realer Name: Christian W

Re: Aus Excel importieren (DEV)

Beitragvon navCH » 28. Februar 2018 12:38

Hallo.

Wie bekomme ich denn die ganzen Felder ĂĽber ExcelBuffer in die Tabelle?
Oder jemand ne Idee, wenn ich das Insert auf die Tabelle mache, wie es richtig funktioniert?

GruĂź
Christian
Zuletzt geändert von McClane am 28. Februar 2018 15:01, insgesamt 2-mal geändert.
Grund: Keine Vollzitate! (schon gar nicht von sich selbst)
Benutzeravatar
navCH
 
Beiträge: 522
Registriert: 23. Oktober 2012 09:33
Realer Name: Christian W

Re: Aus Excel importieren (DEV)

Beitragvon ERP-Berater » 28. Februar 2018 13:35

navCH hat geschrieben:Guten Morgen!

Christian


Hallo,

ich hab mal deine Postings ĂĽberflogen.

Da du unter Zeitdruck zu stehen scheinst, gehst du vielleicht nicht so strukturiert vor, wie du solltest?

Ich habe den subjektiven Eindruck, dass dir Programmier-Basics in C/AL fehlen.

Ich bin leider kein Profi-Entwickler, aber evtl. helfen dir diese 2 Wege:

1. http://www.navision24.de/tutorials/echt ... eugen.html

2. bei deinem Systemhaus (oder vergleichbar) anrufen und fragen, ob man dir für kleines Geld aus Programming 1 oder 2 denjenigen Teil per TeamViewer zeigt, der mit Excel-Import/Export über diese Buffertabellen geht. Dauer evtl. 2-3 Std. für -ich rate mal rein ins Blaue- 300 €.
Zuletzt geändert von McClane am 28. Februar 2018 14:57, insgesamt 1-mal geändert.
Grund: Werbung entfernt
ERP-Berater
 
Beiträge: 146
Registriert: 27. September 2017 17:06
Arbeitsort: D-A-CH
Bezug zu Microsoft Dynamics: Freiberufler
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2009,2013,2016

Re: Aus Excel importieren (DEV)

Beitragvon enh » 28. Februar 2018 20:49

Ich wĂĽrde dazu raten die Excel Buffer Tabelle mit ihren Funktionen zu nutzen. Als Beispiel kannst du im Standard z. B. in Report 81 "Import Budget from Excel" nachschauen wie das funktionieren kann.
enh
 
Beiträge: 2330
Registriert: 5. Februar 2014 15:42
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Aus Excel importieren (DEV)

Beitragvon sweikelt » 1. März 2018 13:17

navCH hat geschrieben:Kann ich auch Recordvariablen verwenden, ohne ein Dataitem angelegt zu haben?

-> wenn du gar kein DataItem hast, dann brauchste auch kein Report! ....nimm einfach eine Codeunit und schreib deine Funktionen und rufe die dann im OnRun-Trigger auf....dann einfach Codeunit starten
-> wenn du es unbedingt mit einem Report machen willst, nimm wenigsten ein DataItem -> von mir aus Integer mit Filter auf Number = 1
navCH hat geschrieben:Muss ich TRUE im Insert(TRUE) verwenden, wenn ich im OnPreReport() ausfĂĽhre?

--> nö, außer du willst, dass der Insert-Trigger ausgeführt wird -> wenn eh nix in deinem Trigger steht, dann kannst du auch Triggereinsatz ausführen
Benutzeravatar
sweikelt
Microsoft Partner
Microsoft Partner
 
Beiträge: 1776
Registriert: 18. November 2010 10:15
Wohnort: Oschatz
Realer Name: Stephan Weikelt
Arbeitsort: Berlin
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 3-2018 | D365BC

Re: Aus Excel importieren (DEV)

Beitragvon navCH » 1. März 2018 13:39

sweikelt hat geschrieben:
navCH hat geschrieben:Kann ich auch Recordvariablen verwenden, ohne ein Dataitem angelegt zu haben?

-> wenn du gar kein DataItem hast, dann brauchste auch kein Report! ....nimm einfach eine Codeunit und schreib deine Funktionen und rufe die dann im OnRun-Trigger auf....dann einfach Codeunit starten
-> wenn du es unbedingt mit einem Report machen willst, nimm wenigsten ein DataItem -> von mir aus Integer mit Filter auf Number = 1


Ich habe mich fĂĽr einen Report mit Integer DataItem entschieden :-D

GruĂź
Christian
Benutzeravatar
navCH
 
Beiträge: 522
Registriert: 23. Oktober 2012 09:33
Realer Name: Christian W

Re: Aus Excel importieren (DEV)

Beitragvon fiddi » 1. März 2018 14:35

sweikelt hat geschrieben:-> wenn du gar kein DataItem hast, dann brauchste auch kein Report! ....nimm einfach eine Codeunit und schreib deine Funktionen und rufe die dann im OnRun-Trigger auf....dann einfach Codeunit starten
-> wenn du es unbedingt mit einem Report machen willst, nimm wenigsten ein DataItem -> von mir aus Integer mit Filter auf Number = 1


1. Den Report nimmt man i.d.R. weil man welche lizensiert hat die noch nicht belegt sind, bei Codeunits sieht das häufig etwas magerer aus.
2. Man muss beim Report kein Dataitem haben, wenn da nicht sinnvolles passiert. Man kann den Code auch in den OnPreReport schreiben.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Aus Excel importieren (DEV)

Beitragvon navCH » 1. März 2018 17:05

fiddi hat geschrieben:
sweikelt hat geschrieben:-> wenn du gar kein DataItem hast, dann brauchste auch kein Report! ....nimm einfach eine Codeunit und schreib deine Funktionen und rufe die dann im OnRun-Trigger auf....dann einfach Codeunit starten
-> wenn du es unbedingt mit einem Report machen willst, nimm wenigsten ein DataItem -> von mir aus Integer mit Filter auf Number = 1


1. Den Report nimmt man i.d.R. weil man welche lizensiert hat die noch nicht belegt sind, bei Codeunits sieht das häufig etwas magerer aus.
2. Man muss beim Report kein Dataitem haben, wenn da nicht sinnvolles passiert. Man kann den Code auch in den OnPreReport schreiben.

GruĂź Fiddi


Alles klar und danke fĂĽr die info!

GruĂź
Christian
Benutzeravatar
navCH
 
Beiträge: 522
Registriert: 23. Oktober 2012 09:33
Realer Name: Christian W

Re: Aus Excel importieren (DEV)

Beitragvon fiddi » 1. März 2018 17:28

Hallo Christian.

Nochmal der Hinweis: Bitte vermeide Vollzitate


Bitte benutze den Antwortbutton unter dem Beitrag.

GruĂź Fiddi
Wer aufhört besser zu werden, hat aufgehört gut zu sein. (frei nach Philip Rosenthal)
Frage beantwortet? Schreibe bitte [Gelöst] vor den Titel des ersten Beitrags.
Bitte erst suchen, dann fragen. Bitte beachte den kleinen Community-Knigge.
Kein Support per PN, Mail, IM oder Telefon! DafĂĽr ist dieses Forum da.
fiddi
Moderator
Moderator
 
Beiträge: 7091
Registriert: 9. Juni 2008 10:13
Realer Name: Hans Heinrich Fiddelke
Arbeitsort: Bremen
Bezug zu Microsoft Dynamics: Microsoft Partner
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: NAV2.6-aktuell

Re: Aus Excel importieren (DEV)

Beitragvon navCH » 2. März 2018 10:35

@fiddi: Ok, Keine Vollzitate!
Benutzeravatar
navCH
 
Beiträge: 522
Registriert: 23. Oktober 2012 09:33
Realer Name: Christian W

Re: Aus Excel importieren (DEV)

Beitragvon pakos47 » 23. Juli 2018 14:06

Ted hat geschrieben:Warum nutzt du nicht einfach einen XML Port?
xmlport.png

(Integer ist Temporär)


Dazu mal eine Anmerkung, wenn ich das versuche kommt eine Fehlermeldung.
Die Fehlermeldung lautet:
"UngĂĽltige Daten auf Stammebene. Zeile 1, Position 1."

Kann damit jemand was anfangen?
pakos47
 
Beiträge: 5
Registriert: 23. Juli 2018 14:01
Bezug zu Microsoft Dynamics: SchĂĽler / Student
Microsoft Dynamics Produkt: Microsoft Dynamics NAV

Re: Aus Excel importieren (DEV)

Beitragvon slgeorg » 14. August 2018 11:18

Hi navCH,

ich habe dafĂĽr eine Codeunit angelegt und im OnRun Trigger folgenden Code hinterlegt:

Code: Alles auswählen
ServerFileName := FileManagement.UploadFile('','');
IF ServerFileName = '' THEN
  EXIT;

SheetName := ExcelBuffer.SelectSheetsName(ServerFileName);
IF SheetName = '' THEN
  EXIT;

ExcelBuffer.LOCKTABLE;
ExcelBuffer.OpenBook(ServerFileName,'Excelblatt Name');
ExcelBuffer.ReadSheet;

TotalRowCount := ExcelBuffer.COUNT;

InsertData;


Die Funktion InsertData sieht dann folgendermaĂźen aus:

Code: Alles auswählen
LOCAL InsertData()
FOR i := 1 TO TotalRowCount DO BEGIN
  IF i = 1 THEN
    i += 3;
  IF i = 1563 THEN
    EXIT;
  EVALUATE(JobStructure,GetValueAtCell(i,1));
  EVALUATE(JobNo,GetValueAtCell(i,2));
  EVALUATE(JobTaskNo,GetValueAtCell(i,3));
  EVALUATE(LineNo,GetValueAtCell(i,4));
  JobPlanningLine.SETRANGE("Job Structure Type",1);
  JobPlanningLine.SETRANGE("Job No.",JobNo);
  JobPlanningLine.SETRANGE("Job Task No.",JobTaskNo);
  JobPlanningLine.SETRANGE("Line No.",LineNo);
  IF JobPlanningLine.FINDFIRST THEN BEGIN
    EVALUATE(EntryNoPerf,GetValueAtCell(i,5));
    JobPlanningLine."Ledger Entry No." := EntryNoPerf;
    JobPlanningLine.MODIFY;
  END;
END;


Die Variable i ist jeweils die Zeilennummer und der 2. Parameter ist die Spalte.
Der Evaluate konvertiert mir den Text aus dem Excel in den jeweiligen Datentyp.

Wenn du dein Date wie beschrieben in folgendem Format bekommst, als z.B. 09092016 dann kannst du dies so verwenden:
Die DateLoc wäre in deinem Fall die Excel Spalte mit dem Datum.
Code: Alles auswählen
//get document date
EVALUATE(DocumentDateYear,COPYSTR(DateLoc,1,4));
EVALUATE(DocmentDateMonth,COPYSTR(DateLoc,5,2));
EVALUATE(DocumentDateDay,COPYSTR(DateLoc,7,2));

DocumentDate := DMY2DATE(DocumentDateDay,DocmentDateMonth,DocumentDateYear);



GetValueAtCell sieht dann so aus:
Code: Alles auswählen
LOCAL GetValueAtCell(RowNo : Integer;ColNo : Integer) : Text
IF ExcelBufferLoc.GET(RowNo,ColNo) THEN
  EXIT(ExcelBufferLoc."Cell Value as Text");


Variablen sind wie folgt definiert:
Code: Alles auswählen
Name   DataType   Subtype   Length
ServerFileName   Text      
FileManagement   Codeunit   File Management   
ExcelBuffer   Record   Excel Buffer   
SheetName   Text      
TotalRowCount   Integer      
i   Integer      


Solltest du Fragen haben, kannst du dich gerne melden.

GrĂĽĂźe
slgeorg
slgeorg
 
Beiträge: 8
Registriert: 1. Juni 2018 12:56
Realer Name: Slava Georgiev
Arbeitsort: Daimler TSS GmbH
Bezug zu Microsoft Dynamics: End-Anwender
Microsoft Dynamics Produkt: Microsoft Dynamics NAV
Microsoft Dynamics Version: 2016 CU 13

Vorherige

ZurĂĽck zu NAV 2016

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast