Barcode Fehler...

12. Februar 2007 15:46

Hallo folgenden Fehler bekomme ich wenn ich mit der von Mibuso angebotenen Option einen Barcode erstellen wil...

---------------------------
Microsoft Business Solutions-Navision
---------------------------
Der Name der Datei "c:\Navibar.exe 000100{11{120{60{c:\temp\bild.bmp" enthält ein ungültiges Zeichen.

Prüfen Sie bitte den Dateinamen. Lesen Sie in Ihrem Betriebssystemhandbuch nach, wie gültige Dateinamen definiert sind.

---------------------------
OK
---------------------------


Hab die barcode.ocx richtig registriert... und die navibar.exe wird auch richtig angesprochen! Getest habe ich es in dem ich die Ausgabe von NaVision kopiert und ales verknüpfung ausgeführt habe... erstellte ihr mir eine bmp datei!

Kennt jemand diesesn Fehler... Betriebssystem ist XP!

12. Februar 2007 15:55

Hallo,
ich bin nicht sicher, probiere den String in je 3 Anführungszeichen zu "Verpacken".
Code:
"""c:\Navibar.exe 000100{11{120{60{c:\temp\bild.bmp"""


Dieses hat mir zumindest bei WSH Scripten geholfen, wenn im String ein Leerzeichen war.
Gruß Mikka

12. Februar 2007 16:00

schon etwas besser... nun was jetzt?!

Code:
Das Betriebssystem findet den Pfad nicht, den Sie für die Datei "'c:\navibar.exe 000100{11{120{60{c:\temp\bild.bmp'"  eingegeben haben.

12. Februar 2007 21:11

Woran es genau liegt kann ich natürlich nicht sagen. Aber mit folgendem Code hab ich es erfolgreich getestet. Vielleicht findest du damit den Fehler:

Code:
    PROCEDURE ExecNavibar@1000000093();
    VAR
      BarcodePicturePath@1000000000 : Text[250];
      NavibarProgram@1000000001 : Text[250];
      NavibarCommand@1000000011 : Text[500];
      TypeString@1000000003 : Text[30];
      Value@1000000008 : Text[30];
      Type@1000000002 : Integer;
      Successful@1000000004 : Integer;
      WindowStyle@1000000006 : Integer;
      WaitOnReturn@1000000007 : Integer;
      Width@1000000009 : Integer;
      Height@1000000010 : Integer;
      WshShell@1000000005 : Automation "{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B} 1.0:{72C24DD5-D70A-438B-8A42-98424B88AFB8}:'Windows Script Host Object Model'.WshShell";
    BEGIN
      BarcodePicturePath := 'C:\Temp\tempimage.bmp';
      NavibarProgram := 'C:\Temp\Navibar.exe';
      Type := 11;
      WindowStyle := 0;
      WaitOnReturn := 1;
      Value := '000100';
      Width := 120;
      Height := 60;

      TypeString := FORMAT(Type);

      IF Type < 10 THEN BEGIN
        TypeString := '0' + TypeString;
      END;

      NavibarCommand :=
          '"' + NavibarProgram + '"' +
          STRSUBSTNO(' %1%2%3%4%5',
          ' ' + Value + '{',    // Code to generate
          TypeString + '{',     // Barcodetype
          FORMAT(Width) + '{',  // Width in pixel
          FORMAT(Height) + '{', // Height in pixel
          BarcodePicturePath);

      CREATE(WshShell);
      Successful := WshShell.Run(NavibarCommand, WindowStyle, WaitOnReturn);
      CLEAR(WshShell);
    END;

12. Februar 2007 22:30

also das Problem hatte ich sich gelöst... es klappt jetzt... jedoch habe ich ein anderes Problem was ich morgen aber erst von der arbeit beschrieben kann... da ich hier keine informationen zu verfügung habe!

13. Februar 2007 11:17

Problem doch nicht behoben... es besteht weiterhin...

mein Code...

Code:
IF NOT ae.GET("No.","Sales Unit of Measure") THEN CLEAR (ae);
IF ae."Item No."<> '' THEN BEGIN
ok:= SHELL(STRSUBSTNO('%1%2%3%4%5%6',
    'c:\navibar.exe',                       // Programm
    ' ' + ae."Item No."+'{',                // code to generate
    '01'+'{',                               // barcodetype
    '120'+'{',                              // width in pixel
    '60'+'{',                               // high in pixel
    'c:\temp\bild.bmp'));                   // destination for the .bmp-file

Picture.IMPORT('c:\temp\bild.bmp');
END;


nach dem Run kommt folgendes Fenster...

Sie führen zum ersten Mal die folgende Datei aus:

Ausführbare Datei: c:\navibar.exe 101101{11{120{60{c:\temp\bild.bmp
Parameter:

Beachten Sie, dass Sie möglicherweise eine Datei ausführen,
die Schaden auf Ihrem Computer anrichten kann.

Halten Sie diese ausführbare Datei und ihre Parameter für vertrauenswürdig?

---------------------------
Ja Nein
---------------------------


eigentlich sollte doch die Anwenudng nur bei ausführbare Datei stehen und die Parameter dann darunter... oder?! Was ist da nur los...

dann kommt folgende Fehlermeldung...

Der Name der Datei "c:\navibar.exe 0724{11{120{60{c:\temp\bild.bmp" enthält ein ungültiges Zeichen.

Prüfen Sie bitte den Dateinamen. Lesen Sie in Ihrem Betriebssystemhandbuch nach, wie gültige Dateinamen definiert sind.


Und ganz ehrlich ich bin am Verzweifeln...

im MiBuSo - Forum wurde das thema auch schon behandelt nur werde ich net schlau draus... Hier der Link

13. Februar 2007 17:25

Du musst den Dateinamen und den parameter getrennt übergeben und den Dateinamen als Textkonstante definieren, damit nicht die Frage aus deinem 1. Zitat kommt.
Dass der Parameter getrennt übergeben werden muss, wurde auch hier im Forum schon diskutiert, such mal nach Stichwort Shell....

14. Februar 2007 08:28

Guten Morgen,

hab gestern nochmal ein wenig rumgefummelt und bin zu folgenden Ergebnis gekommen...

<< meine Datei liegt im Textformat im Anhang! Report ID 50078
Code-Teile stammen aus dem Beitrag von MiBuSO


Habe jetzt nur folgende 2 Probleme...

1. die Prozedur CheckFileCreated wird nicht aufgerufen... fehler meldung ist:
Es sollte eine Mindestanzahl von Parametern angegeben werden, wenn Sie diese Funktion aufrufen. Zum Beispiel:

MeineFunktion( .. , .. , .. )
ROUND(MeineVariable)
ROUND(MeineVariable,0.05)


Und dann funktioniert der Import des Bildes nicht. Ich vermute das er früher Importieren will als die Datei überhaupt erstellt wurde... Wie kann ich das Problem zur Not so lösen ohne die Prozedur CheckFileCreated zu benutzen?!

Danke schon mal im Voraus!

Noch einen Schönen Tag!

MfG Mk
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

14. Februar 2007 09:20

mk-gfx hat geschrieben:die Prozedur CheckFileCreated wird nicht aufgerufen... fehler meldung ist:

Code:
PROCEDURE CheckFileCreated@1000000007(lBolExit@1000000000 : Boolean;lRecFile@1000000001 : Record 2000000022;lIntCount@1000000002 : Integer);


BEGIN
      lBolExit := FALSE;
      lIntCount := 0;

      REPEAT
        lIntCount += 1;
        lRecFile.RESET;
        lRecFile.SETRANGE(Path,'c:\temp');
        lRecFile.SETRANGE("Is a file",TRUE);
        lRecFile.SETRANGE(Name,Item."No." + '.bmp');
        IF lRecFile.FIND('-') THEN
          lBolExit := TRUE
        ELSE BEGIN
          lRecFile.SETRANGE(Path,'c:\');
          IF lRecFile.FIND('-') THEN;
            SLEEP(100);
        END;
      UNTIL lBolExit OR (lIntCount > 1000);
    END;


Die Funktion "CheckFileCreated" erwartet das du Parameter übergibst:
lBolExit
lRecFile
lIntCount

Die Funktion würde ich schon benutzen.
Evtl. erstelle ein SLEEP(1000), somit wartet Navision eine Sekunde und das Dateisystem hat Zeit die Datei zu Schreiben.

Gruß Mikka


**Edit by Mikka**
Mit der Tabelle "File" hatte ich auch schon mal Probleme schau mal hier:
[Gelöst] Merkwürdiges Verhalten der Tabelle File
Wenn du es hiermit lösen kannst, dann brauchst du auch nicht den SLEEP einbauen!

14. Februar 2007 09:36

Die Funktion "CheckFileCreated" erwartet das du Parameter übergibst:
lBolExit
lRecFile
lIntCount


Ja aber welchen Wert bzw Parameter erwartet er jetzt?

Soweit funktioniert es erstmal mit SLEEP!

14. Februar 2007 10:17

Hmm,

ist der Report noch Original?
Weil z.B. "lRecFile" auf die Systemtabelle "File" zeigt, also müsste hier ein entsprechender Record übergeben werden.
Ich kann aber keinen solchen finden (ausser in "CheckFileCreated").

"lBolExit" und "lIntCount" ist 1x ein Boolscher Wert und 1x ein Integer.

Der Funktionsaufruf könnte so aussehen:
Code:
CheckFileCreated(DEIN_BOOL,DEIN_Rec_File,DEIN_Integer);


Wenn ich mich richtig erinnere ist auf der Navision CD im Order ..Doc\
der "Application Designers Guide" als PDF Datei.
In diesen werden Funktionsaufrufe mit und ohne Parameter erläutert.
***************
Ich habe mir den Codeblock nochmal angeschaut:
So wie ich die Funktion Interpretiere sind "lBolExit" und "lIntCount" nur Abbruchbedingen. Also sollten diese nicht als Parameter sondern als lokale Variable definiert sein.
Das gleiche gilt für den "lRecFile" vermutlich auch, da ja auf "Item."No." + '.bmp' gefiltert wird.
Somit braucht der Funktionsaufruf keine Parameter.

Gruß Mikka

14. Februar 2007 11:47

Danke Mikka...

ich versuche ja eben auch die dieses CheckFileCreated ohne Parameter zu übergeben... jedoch ohne erfolg...

14. Februar 2007 12:05

mikka hat geschrieben:Hmm,

ist der Report noch Original?
Weil z.B. "lRecFile" auf die Systemtabelle "File" zeigt, also müsste hier ein entsprechender Record übergeben werden.
Ich kann aber keinen solchen finden (ausser in "CheckFileCreated").


ja der Report ist noch original...

Musste grade feststellen das ich keine file tabelle habe... ist sie versteckt?

14. Februar 2007 12:15

Danke Mikka...
ich versuche ja eben auch die dieses CheckFileCreated ohne Parameter zu übergeben... jedoch ohne erfolg...

Schau mal in die lokalen Parameter / Variablen der Funktion.
Du musst die Parameter löschen und dafür gleichnamige Variablen anlegen.
Dann kannst du die Funktion ohne Parameter aufrufen.
Wenn eine Funktion Parameter "erwartet", kannst du das im Funktionskopf erkennen.

Ich habe hier als Beispiel zwei Funktionen aufgeführt.
OhneParameter: Hier ist in den Klammern nichts weiter zu sehen, also werden keine Parameter erwartet.
MitParameter: Hier ist zu sehen, das ein Integer und eine Record Variable der Tabelle Item erwartet wird.
Innerhalb der Funktion sind diese Variablen ale "ErwatetWert" und "ErwartetRecord" ansprechbar.
Code:
OhneParemeter()

MitParameter(ErwarteWert : Integer;ErwarteRecord : Record Item)


Ich hoffe das ich mich Verständlich ausgedrückt habe. :roll:
(Ich kann dir nur dringend raten den Applicat Designers Guide zu lesen!)
Gruß Mikka

14. Februar 2007 12:23

Habs jetzt abgeändert...

nur jetzt hängt sich NaVision auf... kompilierung hat geklappt... alles schick eigentlich!

Hab ich jetzt das Problem wie du damals mit dem File?

Ja die Guide werde ich auch lesen... bin ja noch jung und grade frisch dabei was NaVision und die Programmierung angeht!

Könnt ihr deutsche Lehrgänge empfehlen?

[hr]

#### edit ####
Scheint doch jetzt zu gehen... nur es dauert wohl etwas länger ca. ne minute für ein BArcode... normal ist das nicht?

Danke Mikka schon mal für deine ausführliche Hilfe!

aktuelle Version als *.txt
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Zuletzt geändert von mk-gfx am 14. Februar 2007 12:33, insgesamt 2-mal geändert.

14. Februar 2007 12:25

Musste grade feststellen das ich keine file tabelle habe... ist sie versteckt?


Ja, es ist eine versteckte Systemtabelle.
Die kannst du sehen, wenn du z.B. eine neue Form erstellst und bei der Tabellenauswahl ganz nach unten Scollst.
Ich habe Damals auch einen "Aha Effekt" gehabt.
Gruß Michael

15. Februar 2007 08:13

Morgen... hab mal versucht den Fehler einzugrenzen...

die Prozedur CheckFileCreated() durchläuft er wohl die kompletten tausend mal und springt nicht zu "lBolExi" und wenn nicht die anzahl der Durchläufe von lIntCount zum Beispiel auf 1 setze... geht ratz fatz und der Report ist da!

Also muss doch noch irgendwo ein Haken in der Przedur sein oder? Und ich finde ihn leider nicht :(

MfG

15. Februar 2007 10:31

Die Tabelle File funktioniert nur korrekt, wenn z.B. die Prozedur für die Abfrage in einer eigenen Codeunit steht und diese vorher jeweils sauber per CLEAR(codeunit) zurückgesetzt wird. Ein CLEAR auf das Record File kann auch nicht schaden.

Ich verstehe allerdings den Sinn der Prozedur CheckFileCreated() nicht so ganz.

1. kann man WshShell.Run mit einem Parameter WaitOnReturn aufrufen (siehe mein Code oben), damit die Bearbeitung Synchron läuft und eine Abfrage unnötig ist.

2. Man beim IMPORT über den Rückgabewert feststellen kann, ob der IMPORT erfolgreich war und hier ggf. ein SLEEP benutzen (nicht benötigt bei Lösung 1).

Schau doch nochmal genau über meine Funktion, vllt. findet sich die ein oder andere Lösung bereits dort...