[gelöst] Problem mit Record in einem Report

11. April 2008 15:58

Hallo,

ich habe folgende Code im Report Rechnung
Code:
//  HH.10.04.2008    ** Zoll-Andruck **
 IF "Sales Invoice Line"."No." = '' THEN
  Zoll.INIT
 ELSE
  Zoll.GET("Sales Invoice Line"."No.");
//  ENDE             ** Zoll-Andruck **


Zoll ist eine Variable mit einem reccord auf Tabelle 27.
Ich hole mir in den Positionen zu den Artikeln aus der Artikelzeile die Zolltarifnummer. So weit so gut klappt es auch. Nur wir haben gewisse Texte für Sonderfertigung oder Absprachen.
Diese Texte habe ich unter Tabelle 7 'Standard Texte' gespeichert.
-Wenn ich nun einen Auftrag mit einen dieser Texte abrechne bekomme ich einen Fehlermeldung item '2' existiert nicht. (2 ist einer der Texte).

Kann ich eine Abfrage machen vor meinem Code auf Gültigkeit so das er mir meinen Code nicht ausführt, wenn es den Artikel in der Tabelle 27 nicht gibt ?

Danke schon mal

mfg Harrison
Zuletzt geändert von Harrison am 14. April 2008 09:58, insgesamt 1-mal geändert.

11. April 2008 16:05

Leider verstehe ich nicht, was der zweite Abschnitt (Artikel abfragen) mit dem ersten (Standardtexte) zu tun hat, aber der Ansatz für Abschnitt zwei könnte ja so aussehen:

Code:
Zoll.INIT;
IF ("Sales Invoice Line".Type = "Sales Invoice Line".Type::Item) AND
    ("Sales Invoice Line"."No." <> 0)  THEN
  IF Artikel.GET("Sales Invoice Line."No.") THEN
    IF Zoll.GET("Sales Invoice Line"."No.") THEN;


Statt einer Verkettung habe ich 3 einzelne IF-Abfragen implementeirt, damit so wenig Datenbankabfragen wie nötig ausgeführt werden.

11. April 2008 16:07

Du könntest anstatt

Code:
IF "Sales Invoice Line"."No." = '' THEN
  Zoll.INIT
 ELSE
  Zoll.GET("Sales Invoice Line"."No.");

folgenden Code schreiben

Code:
IF "Sales Invoice Line".Type = IF "Sales Invoice Line".Type::Item THEN
  IF "Sales Invoice Line"."No." = '' THEN
    Zoll.INIT
   ELSE
     Zoll.GET("Sales Invoice Line"."No.");

Mit der neuen Zeile prüfst du, ob es sich um einen Artikel handelt. Ist dies nicht der Fall wird der nachfolgende Code nicht ausgeführt.

Gruß, Marc
Zuletzt geändert von Marc Teuber am 11. April 2008 16:11, insgesamt 1-mal geändert.

11. April 2008 16:09

Jetzt darfst du entscheiden, welche Lösung du schöner findest ;-)

11. April 2008 16:12

Natalie hat geschrieben:Jetzt darfst du entscheiden, welche Lösung du schöner findest ;-)

Also ich würde meine nehmen. ;-)

11. April 2008 16:14

Deine Lösung kann aber einen Laufzeitfehler verursachen, falls (theoretisch) Zoll.GET = false ist ;-)
Außerdem wird Zoll nicht zurück gesetzt, wenn Art <> Artikel ist und könnte damit versehentlich angedruckt werden ;-)

12. April 2008 09:47

Danke Ihr beiden,

habe beide Versionen probiert. Bei deiner Natalie habe ich eine Typen Problem Code <> Interger in Zeile
Code:
... ("Sales Invoice Line"."No." <> 0)  THEN
 ...
finde leider keinen Grund um daran weiter zu testen
und bei deinem Marc tritt das Phänomen auf das die Zeile nun nach jedem Artikeltext angedruckt wird.
ich habe eine eigene Section dafür eingefügt in der ich eine Entscheidung treffe ob es ein Innlandskunde ist oder Außland um dann die Zollltarifnummer anzudrucken
Code:
 IF Zoll."Tariff No."='' THEN
  CurrReport.SHOWOUTPUT(FALSE)
 ELSE BEGIN
  IF "Sales Invoice Header"."Ship-to Country Code" = 'DE' THEN
   CurrReport.SHOWOUTPUT(FALSE)
  ELSE
   CurrReport.SHOWOUTPUT(TRUE)
 END;

Wegen Spargründen wollte ich nicht bei Innländischen Kunden die Nummer drucken, wenn es keine einfache Möglichkeit gibt der Section zu sagen sie soll pro Artiekel nur einmal gedruckt werden füge ich sie in eine bestehende Section ein die eh nur einmal gedruckt wird.

mfg Harrison

12. April 2008 15:02

Ganz einfach:
statt ("Sales Invoice Line"."No." <> 0) THEN hätte es lauten sollen:

Code:
("Sales Invoice Line"."No." <> '')  THEN

14. April 2008 09:59

Danke,

auch hier laufen jetzt meine Scripte.

mfg Harrison