[gelöst] Word Dolument aus Navision erstellen

18. Oktober 2006 11:18

Ich habe eine Wordvorlage für ein Angebot. Nun möchte ich diese Vorlage aus Naviosn heraus füllen und verändern. Öffnen der Vorlage ist kein Problem, doch wie geht es weiter?
Habe in keinem Forum bis jetzt etwas dazu gefunden.

Hat jemand schon Erfahrungen mit diesem Thema?
Bin für jeden Tip dankbar

Michael
Zuletzt geändert von mespelage am 19. Oktober 2006 11:22, insgesamt 1-mal geändert.

18. Oktober 2006 15:46

Hallo Michael,

ich habe mal was ähnliches Programmiert. Es wurde dabei auch eine Vorlage geöffnet und dann wurden die in der Vorlage definierten Textfelder (Platzhalter) mit Werten aus Navision gefüllt. Wäre das bei dir auch so?

Gruß, Marc

19. Oktober 2006 07:25

@@marc
genau das meine ich

Michael

19. Oktober 2006 10:31

Also ich habe das folgendermaßen gemacht:

Code:
TemplateName := 'Dokument.dot';

IF ISCLEAR(WordApp) THEN
  IF NOT CREATE(WordApp, FALSE) THEN
    ERROR('Konnte keine Word-Instanz erstellen!');

IF NOT EXISTS(TemplateName) THEN
  ERROR('Wordvorlage %1 existiert nicht!', TemplateName);

WordDoc := WordApp.Documents.Add(TemplateName);

WordRange := WordApp.ActiveDocument.Fields.Item(1).Result;
WordRange.Text := '1. Textfeld im Dokument füllen';

WordRange := WordApp.ActiveDocument.Fields.Item(2).Result;
WordRange.Text := '2. Textfeld im Dokument füllen';

WordApp.ScreenUpdating(TRUE);
WordApp.Visible := TRUE;
WordApp.Activate;


Die verwendeten Variablen (WordApp, WordDoc & WordRange) sind alle vom Type "Automation" und dann vom Subtype:

1. Microsoft Word 9.0 Object Library.Application
2. Microsoft Word 9.0 Object Library.Document
3. Microsoft Word 9.0 Object Library.Range

Gruß, Marc

Word Dokument mit Navisin-Daten füllen

19. Oktober 2006 10:53

Bei mir sieht es so aus:

Dokument-Textmarken füllen und drucken

Name DataType Subtype Length
WDApp Automation Unknown Automation Server.Application
WDDoc Automation Unknown Automation Server.Document
WDRange Automation Unknown Automation Server.Range
WDTable Automation Unknown Automation Server.Table
WDBookmark Automation Unknown Automation Server.Bookmark

Code:
WDDoc := WDApp.Documents.AddOld(filename);
//WDRange := WDDoc.Bookmarks.Item(a).Range; // Auch Item(1), da die alte TextMarke durch Range.Text ersetzt wurde
//WDRange.Text('Eintrag Nr. 2!');
Textmarke := 'Anschrift';
IF Debitor."Sachbearbeiter  Buchhaltung" <>'' THEN
  Debitor.Kontaktperson := Debitor."Sachbearbeiter  Buchhaltung";
AdrFormat.Debitor(DebAdr,Debitor);
WDDoc.Bookmarks.Item(Textmarke).Range.Text(DebAdr[1]+CRLF+DebAdr[2]+CRLF+DebAdr[3]+CRLF+DebAdr[4]                                         +CRLF+DebAdr[5]+CRLF+DebAdr[6]+CRLF+DebAdr[7]+CRLF+DebAdr[8]);
Textmarke := 'Stichtag';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(Stichtag);
Textmarke := 'Ansprechpartner';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(Anrede);
Textmarke := 'StichKurz';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(StichtagKurz);
IF Debitor.Bewegung > 0 THEN
  Art := Lasten
ELSE
  Art := Gunsten;
Textmarke := 'Art';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(Art);
Textmarke := 'Saldo';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(BalConCurr+' '+FORMAT(WährungSummenPuffer.Totalbetrag));
filename := AusgabePfad+'Debitor '+Debitor."Nr."+' '+BalConCurr+'.doc';
WDDoc.SaveAs2000(filename);
IF Drucken = TRUE THEN
  WDDoc.PrintOut2000;
WDDoc.Close;


19. Oktober 2006 11:21

@@ Marc

funktioniert einwandfrei

@@ TomTom64

deine Version werde ich auch noch testen, schein noch einige Feinheiten zuhaben.

Danke an euch beide

Michael

7. Mai 2007 14:02

Hi

zunächst mal muss ich sagen das ich absoluter Neuling im Bereich Navision Programierung bin und momentan Praktikant bin (bis September dann beginnt die Ausbildung). Ich möchte diese Zeit allerdings möglichst gut nutzen und auch etwas Produktives tun.

Meine Aufgabe ist die Erstellung eines Reports in Navision 3.70 der direkt in ein Word Dokument gespeichert werden soll. Es handelt sich hierbei um ein Skillprofiel. Es soll deshalb in Word "exportiert" werden das es nachträglich editierbar ist. Jetzt habe ich über google dieses Forum und den Code schnippsel entdeckt. Meine bitte bzw. Frage kann mir einer von euch mal den gesamten Code (mit allen Globals usw.) schicken ? Ich würde mir gerne auf diese art und weiße das Verständnis für diese Funktion erarbeiten denn mein Vorgesetzter hat sehr wenig zeit mir Erklärungen zu geben, deshalb muss ich versuchen mir es mit Hilfe von meinen Unterlagen und Hilfe von extern beizubringen.

Besten dank schon mal für eure Unterstützung.

Gruß Marc

7. Mai 2007 14:59

Hallo BT_Marc,

"Herzlich Willkommen" hier im Forum.

Mit dem Export nach Word kenne ich mich nicht aus, allerdings könnte ich mir Vorstellen das es bereits hierzu Themen gibt.
-->Schau mal mit der Foren-Suche (Suchbegriff Word).
(Ich vermute, das es ähnlich dem Excelexport kommen dürfte, also kannst evtl. auch hier fündig werden!)

Ggf. können auch andere Foren-Mitglieder dir weiterhelfen.
Gruß Mikka

7. Mai 2007 15:18

Also ich habe schon das ganze Forum durchsucht jedoch nicht das Gefunden was ich suche. Wie gesagt Navision soll "einfach" (so wie bei Excel auch möglich) ein neues Word Dokument erstellen und dort ein Skillprofiel reinschreiben.

Mein Problem ist das es bei mir einfach schon mal daran mangelt wie ich Navision überhaupt dazu bewegen kann ein Word Dokument (oder Vorlage) zu öffnen.

Gruß Marc

7. Mai 2007 15:36

Hallo Marc,
studiere hierzu einfach die Codeunit 5054 (Word Management) und nimm dir die Zeit, innerhalb der Kontaktverwaltung das Erstellen von Briefen zu "Debuggen". Hier ist das Rad bereits erfunden.

Viele Grüsse und viel Spass
Fido

7. Mai 2007 16:09

Würde ich gerne machen nur leider bekomme ich folgende Meldung:

Ihre Zugriffsrechte erlauben es ihnen nicht, Das Objekt System-'Design, Module, Standart' zu benutzen. Wenden sie sich an ihren Systemadministrator wenn ihre Zugriffsrechte geändert werden sollen.

Eigentlich habe ich die Suepr rolle und somit voll zugrif das ist wohl das Entwickler Lizenz problem oder ?

7. Mai 2007 21:04

Da du auch NAV 5 einsetzt solltest du dir mal das neue Feature der Stylesheets genauer ansehen. Hier kannst du mit vorhandenen Daten (ich gehe davon aus, dass ihr eine Skill-Tabelle bereits habt) per XSL (Stylesheet, nicht zu verwechseln mit XLS) ein Dokument aufbauen.

8. Mai 2007 08:56

Ich brauch es aber für die 3er Version da die 5er momentan nur zur erprobung dient und wir Pruduktive mit der 3.70 arbeiten. (Noch)

Re: Word Dokument mit Navisin-Daten füllen

3. Juli 2007 09:12

TomTom64 hat geschrieben:Bei mir sieht es so aus:

Dokument-Textmarken füllen und drucken

Name DataType Subtype Length
WDApp Automation Unknown Automation Server.Application
WDDoc Automation Unknown Automation Server.Document
WDRange Automation Unknown Automation Server.Range
WDTable Automation Unknown Automation Server.Table
WDBookmark Automation Unknown Automation Server.Bookmark

Code:
WDDoc := WDApp.Documents.AddOld(filename);
//WDRange := WDDoc.Bookmarks.Item(a).Range; // Auch Item(1), da die alte TextMarke durch Range.Text ersetzt wurde
//WDRange.Text('Eintrag Nr. 2!');
Textmarke := 'Anschrift';
IF Debitor."Sachbearbeiter  Buchhaltung" <>'' THEN
  Debitor.Kontaktperson := Debitor."Sachbearbeiter  Buchhaltung";
AdrFormat.Debitor(DebAdr,Debitor);
WDDoc.Bookmarks.Item(Textmarke).Range.Text(DebAdr[1]+CRLF+DebAdr[2]+CRLF+DebAdr[3]+CRLF+DebAdr[4]                                         +CRLF+DebAdr[5]+CRLF+DebAdr[6]+CRLF+DebAdr[7]+CRLF+DebAdr[8]);
Textmarke := 'Stichtag';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(Stichtag);
Textmarke := 'Ansprechpartner';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(Anrede);
Textmarke := 'StichKurz';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(StichtagKurz);
IF Debitor.Bewegung > 0 THEN
  Art := Lasten
ELSE
  Art := Gunsten;
Textmarke := 'Art';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(Art);
Textmarke := 'Saldo';
WDDoc.Bookmarks.Item(Textmarke).Range.Text(BalConCurr+' '+FORMAT(WährungSummenPuffer.Totalbetrag));
filename := AusgabePfad+'Debitor '+Debitor."Nr."+' '+BalConCurr+'.doc';
WDDoc.SaveAs2000(filename);
IF Drucken = TRUE THEN
  WDDoc.PrintOut2000;
WDDoc.Close;




Wenn du jetzt noch ein Create und ein Clear zum schluss für jede Application machst dann gehts!

Frage zum Code

3. August 2007 17:14

Hallo Marc,

hätte da noch ein paar Fragen zu Deinem Code. Also der Zweck ist ja Word aus NAV zu starten und dabei Daten mitzugeben. Wo übergibst Du denn in dem Code die Daten?
Item(1) und Item(2) sind die Marker in Word? Wie legt man diese Marker in Word denn an?
Mit welchem Code könnte man z.B. den Namen von Debitor 10000 beim Aufruf von Word übergeben? Und wie müsste die Wordvorlage dazu aussehen?

Vielen Dank schonmal für die Antworten!

Gruss, Blue



Marc Teuber hat geschrieben:Also ich habe das folgendermaßen gemacht:

Code:
TemplateName := 'Dokument.dot';

IF ISCLEAR(WordApp) THEN
  IF NOT CREATE(WordApp, FALSE) THEN
    ERROR('Konnte keine Word-Instanz erstellen!');

IF NOT EXISTS(TemplateName) THEN
  ERROR('Wordvorlage %1 existiert nicht!', TemplateName);

WordDoc := WordApp.Documents.Add(TemplateName);

WordRange := WordApp.ActiveDocument.Fields.Item(1).Result;
WordRange.Text := '1. Textfeld im Dokument füllen';

WordRange := WordApp.ActiveDocument.Fields.Item(2).Result;
WordRange.Text := '2. Textfeld im Dokument füllen';

WordApp.ScreenUpdating(TRUE);
WordApp.Visible := TRUE;
WordApp.Activate;


Die verwendeten Variablen (WordApp, WordDoc & WordRange) sind alle vom Type "Automation" und dann vom Subtype:

1. Microsoft Word 9.0 Object Library.Application
2. Microsoft Word 9.0 Object Library.Document
3. Microsoft Word 9.0 Object Library.Range

Gruß, Marc

Re: Frage zum Code

2. September 2008 10:56

Sorry dass ich den alten Thread wiederbelebe, aber wollte mich jetzt auch mal damit auseinander setzen ;)

BlueInTheSky hat geschrieben:Hallo Marc,

hätte da noch ein paar Fragen zu Deinem Code. Also der Zweck ist ja Word aus NAV zu starten und dabei Daten mitzugeben. Wo übergibst Du denn in dem Code die Daten?


ohne es getestet zu haben, würde sagen hier:
Code:
WordRange := WordApp.ActiveDocument.Fields.Item(1).Result;
WordRange.Text := '1. Textfeld im Dokument füllen';


den Text kannst ja dort auch einfach mit einer Variablen füllen...
WordRange.Text := DEINEVARIABLE;

BlueInTheSky hat geschrieben:Item(1) und Item(2) sind die Marker in Word? Wie legt man diese Marker in Word denn an?


Das würde mich auch mal interessieren.

Zudem bekomme ich beim kompilieren schon eine Fehlermeldung.
Habe Office 2007 und die Automation Variablen dementsprechend geändert
z.B: 'Microsoft Word 12.0 Object Library'.Application
Hat das schon jemand mit Office 2007 getestet?

Habe den Fehler mal angehangen.
Wenn ich den Namen der Variablen ändere, wird er halt in der Meldung auch entsprechend geändert...

Gruß
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Re: [gelöst] Word Dolument aus Navision erstellen

2. September 2008 13:27

sieh mal hier: http://www.msdynamics.de/viewtopic.php?f=33&t=2408&p=6984&hilit=mehrfach+definiert#p6984

Michael