14. März 2006 20:13

Ich hoffe, der Zahnklempner hat nur den Weisheitszahn gezogen und die Weisheit dort gelassen, wo sie hingehört ;-)
Ich wünsche eine gute Genesung.

16. März 2006 09:56

Gute Morgen,

tja, kann jetzt wieder einigermaßen feste Nahrung zu mir nehmen. Mit der restlichen Weisheit bin ich mir nicht so sicher. Ich hatte ja das Problem mit dieser Fehlermeldung. Jetzt habe ich, wie Marc empfohlen hatte, versucht eine feste Nummer einzusetzen und zwar

(Salesheader.VALIDATE("Sell-to Customer No.", '01010100');

Da bekomme ich dann gleich die Meldung:

"Sie dürfen keinen Nummern manuell eingeben. Wenn Sie Nummern manuell zuweisen möchten, aktivieren Sie Manuelle Nr. In Nummernserie V-RG+"

Sehr interessant. Scheinbar zieht sich das Formular eine Nummer aus einem bestimmten Nummernkreis. Jetzt muss ich nur noch rausfinden, wo diese Nummern generiert werden und wie das Problem umgehen kann. Natürlich freue ich mich wieder über jeden Hinweis.

Grüße

Markus

16. März 2006 10:01

Hi Markus,

gehe in einen VK-Auftrag und klicke im Feld "Nr." auf den Button "...". So gelangst du in den Nummernserie. Dort gibt es eine Spalte "Manuelle Nr.". In dieser Spalte muss du ein Häkchen setzen. Somit ist das Setzen einer manuellen Nr. im VK-Kopf möglich.

Gruß, Marc

16. März 2006 10:36

Hi Marc, ja hat funktioniert. Aber wie bekomme ich es hin, dass eine Rechnung für einen neuen Debitor erstellen kann. Indem ich vor der Gliederungsnummer eine Null voranstelle und hinten ein BP anhänge, erzeuge ich eine neue Debitoren Nummer wie folgt:


SalesLine.VALIDATE("Sell-to Customer No.",'0' + BuHaPauschale2003.Gliederungsnummer + 'BP');

Warum kann das System die Nummer nicht einfach erzeugen? Bekomme die Meldung "Debitor 010101100BP existiert nicht". Ich habe in der Tabelle "SalesLine" festgestellt, dass eine Nummerserie namens DEB gibt. Diese setzt sich aus der Gliederungsnummer + BP zusammen, also bspw. 01010110BP.

16. März 2006 10:40

Gibt es denn den Debitor 010101100BP bei dir nicht? Wenn nicht, ist die Fehlermeldung doch korrekt.

16. März 2006 10:47

In der Tat, es gibt diesen Debitor (noch) nicht. Am besten ich prüfe vorher mit einer Bedingung, ob dieser Debitor vorhanden ist.

16. März 2006 11:12

Klar, das geht dann nicht. Wenn der Debitor nicht existiert, dann kann ich auch keinen VK-Auftrag erstellen.

Wie du schon sagtest, würde ich vorher mit IF GET prüfen, ob es den Debitor gibt oder nicht.

16. März 2006 13:14

Musste gerade zwischendurch was anderes erledigen. Ich habe jetzt eine IF Bedingung voran gestellt:


IF SalesHeader."Sell-to Customer No." = BuHaPauschale2005.Gliederungsnummer THEN BEGIN
SalesHeader.VALIDATE("Sell-to Customer No.", BuHaPauschale2005.Gliederungsnummer);

Der Report läuft durch und erzeugt auch Rechnungen. Das erkenne ich an der fortlaufenden Nr. und dem Buchungsdatum. Jedoch sind das auch die einzigen Felder im Header, die gefüllt werden. Alle Felder der SalesLine bleiben komplett leer?

16. März 2006 13:16

Also wenn ich das richtig verstanden habe solltest du eher wie folgt abfragen

If Customer.Get(BuHaPauschale2005.Gliederungsnummer) then begin
.
.
.
End;

Oder?

16. März 2006 15:50

Oh Ja, stimmt :roll:

Nun, wenn ich den Report laufen lassen bekomme ich die Aufforderung: Sie müssen eine Geschäftsbuchungsgruppe zu Debitor xy angeben. Habe die Tabelle Customer geprüft und festgestellt, dass einige Debitoren keine Geschäftsbuchungsgruppe zugeordent haben. Dann habe ich folgenden Code geschrieben:


Customer.INIT;
IF Customer."Gen. Bus. Posting Group" = '' THEN
Customer."Gen. Bus. Posting Group" := 'IN';
Customer.INSERT;

Dann bekomme ich die Meldung:

Debitor xy existiert bereits?

16. März 2006 15:54

Nee mit diesem Code willst du ja dann Debitoren anlegen.

Das müsste ungefähr wie folgt aussehen:

If Customer.Get(BuHaPauschale2005.Gliederungsnummer) then begin
SalesHeader.Init
SalesHeader.Insert(TRUE)
SalesHeader.Validate(Sell-to Customer No.", BuHaPauschale2005.Gliederungsnummer);
.
.
SalesHeader.Modify(TRUE);
End;

Dadurch prüfst du als erstes ob der Debitor existiert, wenn dies der Fall ist wird die Rechnung erstellt. Verstehst wie ich mein?

16. März 2006 15:56

Anstatt dem
Code:
Customer.INSERT;

folgendes schreiben
Code:
Customer.MODFIY;

16. März 2006 15:58

Hm? Ich dachte er will Verkaufskopf-Datensätze anlegen und nicht den Debitor abändern?

16. März 2006 16:01

Schon klar, nicht INSERT, sondern MODIFY :oops:

16. März 2006 16:04

Ich sollte die Postings nicht immer nur überfliegen, sorry :oops:

16. März 2006 17:43

So das funktioniert jetzt soweit. ABER ich habe Probleme die richtige Geschäftsbuchungsgruppe zuzuordnen. Habe folgenden Code geschrieben:



BuHaPauschale2005 - OnAfterGetRecord()

IF (Customer.GET(BuHaPauschale2005.Gliederungsnummer)) THEN BEGIN
IF Customer."Gen. Bus. Posting Group" = '' THEN
Customer."Gen. Bus. Posting Group" := 'NATIONAL';
Customer.MODIFY;
SalesHeader.INIT;
SalesHeader."Document Type" := SalesHeader."Document Type"::Invoice;
SalesHeader."Shortcut Dimension 2 Code" := '2406';
SalesHeader.VALIDATE("Sell-to Customer No.", BuHaPauschale2005.Gliederungsnummer);
SalesHeader.VALIDATE("No.",'');
SalesHeader.VALIDATE("Posting Date", WORKDATE);
SalesHeader.VALIDATE("Gen. Bus. Posting Group", Customer."Gen. Bus. Posting Group");
SalesHeader.INSERT(TRUE);
SalesLine;
END;


SalesLine()

SalesLine.INIT;
SalesLine."Document Type" := SalesLine."Document Type"::Invoice;
SalesLine."Document No." := SalesHeader."No.";
SalesLine."Line No." := 10000;
SalesLine."Gen. Bus. Posting Group" := SalesHeader."Gen. Bus. Posting Group";
SalesLine."VAT Bus. Posting Group" := 'NATIONAL';
SalesLine.Description := BuHaPauschale2005.Beschreibung;
SalesLine.Type := SalesLine.Type::"G/L Account";
SalesLine.VALIDATE("No.", '1370');
SalesLine.VALIDATE(Quantity, 1);
SalesLine.VALIDATE("Unit Price", BuHaPauschale2005.Betrag);
SalesLine.INSERT;

Die Fehlermeldung lautet:
"Die MwSt.-Buchungsmatrix Einr. existiert nicht. Identifizierte Felder und Werte: MwSt.-Geschäftsbuchungsgruppe='NATIONAL',MwSt.-Produktbuchungsgruppe=''"
Offensichtlich reicht es nicht aus auf 'NATIONAL' zu verweisen. Die Tabelle MwSt.-Buchungsmatrix hat einen zusammengesetzten Key. Wie weise ich denn die richtige Buchungsgruppe zu?

16. März 2006 19:01

Kleine Anmerkung zwischendurch:
Es erhöht die Lesbarkeit, wenn ihr Programmcodes mittels des Buttons Bild als solchen formatiert, da dann auch die Code-Einrückung besser erkennbar wird.


Beispiel (Code als normaler Text):
IF Customer.GET('4711') THEN
MESSAGE('Debitor wurde gefunden.')
ELSE
ERROR('Debitor existiert nicht.');


Beispiel (Code als solcher formatiert):
Code:
IF Customer.GET('4711') THEN
  MESSAGE('Debitor wurde gefunden.')
ELSE
  ERROR('Debitor existiert nicht.');


(Ich will damit niemandem auf die Füße treten, sondern nur die Lesbarkeit der Beiträge erhöhen.)

16. März 2006 20:34

Hast du Debitoren bei denen die MwSt.-Produktbuchungsgruppe leer ist? Schau mal nach... dann bekommst ebenfalls diesen Fehler!

Kann man ja gut abfiltern in ändern!


Mfg. André

17. März 2006 09:46

Ja in der Tat haben einige Debitoren keine MwSt.-Geschäftsbuchungsgruppen hinterlegt. Die Felder sind leer. Eigentlich möchte ich diese Felder mit der Buchungsgruppe IN bzw. NATIONAL (16) befüllen.

17. März 2006 09:57

@ AndreM nun, wenn er die Geschäftsbuchungsgruppe des neuen Debitors nicht mit Validate füllt, dann wird natürlich auch nicht der Vorgabewert eingetragen. Aber es geht hier um die mwst-PRODUKT-Buchungsgruppe, die ist nicht beim Debitor sondern beim Artikel/Sachkonto hinterlegt....


@mgerhartz:
Du solltest Deinen Code mit der Prüfung auf leere GenBusPostingGroup
wie folgt modifizieren:

aus
Code:
IF Customer."Gen. Bus. Posting Group" = '' THEN
Customer."Gen. Bus. Posting Group" := 'NATIONAL';

machst Du
Code:
IF Customer."Gen. Bus. Posting Group" = '' THEN
   Customer.VALIDATE("Gen. Bus. Posting Group",'NATIONAL');

Dann wird auch die VATBusPostingGroup mit der Vorgabe ausgefüllt.
im Salesheader reicht dann normalerweise der Validate auf die Debitorennummer, dann werden die Buchungsgruppen automatisch gefüllt

Du musst aber in der Salesline auch die MWST-Produktbuchungsgruppe angeben. Da das Feld bei Dir leer ist, sucht er in der Buchungsmatrix auch nach der Kombination ("national" und "") also leeres Feld in der Spalte MWST-Produktbuchungsgruppe...

Du könntest diese natürlich auch im Sachkonto hinterlegen, dann wird die Salesline mit dieser Gruppe beim Validate auf die Sachkontonummer gefüllt.

17. März 2006 10:34

Guten Morgen Michael,

danke für den Hinweis. Hab den Code jetzt folgendermaßen geändert: (@ Timo: Diesmal auch Formkonform :-) )


Code:

IF (Customer_Rec.GET(BuHaPauschale2005.Gliederungsnummer)) THEN BEGIN
  IF Customer_Rec."Gen. Bus. Posting Group" = '' THEN
    Customer_Rec.VALIDATE(Customer_Rec."Gen. Bus. Posting Group",'NATIONAL');
    Customer_Rec.MODIFY;


  SalesHeader_Rec.INIT;
  SalesHeader_Rec."Document Type" := SalesHeader_Rec."Document Type"::Invoice;
  SalesHeader_Rec."Shortcut Dimension 2 Code" := '2406';
  SalesHeader_Rec.VALIDATE("Sell-to Customer No.", BuHaPauschale2005.Gliederungsnummer);
  SalesHeader_Rec.VALIDATE("No.",'');
  SalesHeader_Rec.VALIDATE("Posting Date", WORKDATE);
  SalesHeader_Rec.VALIDATE("Gen. Bus. Posting Group", Customer_Rec."Gen. Bus. Posting Group");
  SalesHeader_Rec.INSERT(TRUE);

  SalesLine_Rec.INIT;
  SalesLine_Rec."Document Type" := SalesLine_Rec."Document Type"::Invoice;
  SalesLine_Rec."Document No." := SalesHeader_Rec."No.";
  SalesLine_Rec."Line No." := 10000;
  SalesLine_Rec.VALIDATE(SalesLine_Rec."VAT Prod. Posting Group",'');
  SalesLine_Rec."VAT Bus. Posting Group" := SalesHeader_Rec."VAT Bus. Posting Group";
  SalesLine_Rec.Description := BuHaPauschale2005.Beschreibung;
  SalesLine_Rec.Type := SalesLine_Rec.Type::"G/L Account";
  SalesLine_Rec.VALIDATE("No.", '1370');
  SalesLine_Rec.VALIDATE(Quantity, 1);
  SalesLine_Rec.VALIDATE("Unit Price", BuHaPauschale2005.Betrag);
  SalesLine_Rec.INSERT;
 
END;



Dafür bekomme ich jetzt den Hinweis (s. screenshot) Das ist aber wirklich eine ganz schön verstrickte Angelegenheit. Wenn ich das richtig verstehe, wird das Feld "Art", dass ja eigentlich mit folgendem Code befüllt.


Code:
SalesHeader_Rec."Document Type" := SalesHeader_Rec."Document Type"::Invoice;



Wieso wird denn dann das Feld mit falschen Infos befüllt?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

17. März 2006 10:39

Die Fehlermeldung bezieht sich nicht auf den Document-Type sondern auf die Spalte Type, die solltest du vorher füllen.
probier es mal mit folgender Reihenfolge in der Verkaufs-Zeile:
Code:
  SalesLine_Rec.INIT;
  SalesLine_Rec."Document Type" := SalesLine_Rec."Document Type"::Invoice;
  SalesLine_Rec."Document No." := SalesHeader_Rec."No.";
  SalesLine_Rec."Line No." := 10000;
  SalesLine_Rec.Type := SalesLine_Rec.Type::"G/L Account";
  SalesLine_Rec.VALIDATE("No.", '1370');
  SalesLine_Rec.Description := BuHaPauschale2005.Beschreibung;
  SalesLine_Rec.VALIDATE(SalesLine_Rec."VAT Prod. Posting Group",'MWST_16');  //oder wie auch immer die Gruppe heissen soll
  SalesLine_Rec."VAT Bus. Posting Group" := SalesHeader_Rec."VAT Bus. Posting Group";
  SalesLine_Rec.VALIDATE(Quantity, 1);
  SalesLine_Rec.VALIDATE("Unit Price", BuHaPauschale2005.Betrag);
  SalesLine_Rec.INSERT;

Die Description auch erst wie hier im Beispiel nach der Nummer füllen, weil sie sonst beim Validate der Nummer mit dem Namen des Sachkontos überschrieben wird.
Zuletzt geändert von Michael Schumacher am 17. März 2006 12:27, insgesamt 1-mal geändert.

17. März 2006 11:57

Hallo Michael, die Sache mit der Geschäftsbuchungsgruppe funktioniert komischerweise immer noch nicht. Ich stelle noch mal den kompletten Code rein:


Code:

IF (Customer_Rec.GET(BuHaPauschale2005.Gliederungsnummer)) THEN BEGIN
  IF Customer_Rec."Gen. Bus. Posting Group" = '' THEN
    Customer_Rec.VALIDATE("Gen. Bus. Posting Group",'NATIONAL');
    Customer_Rec.MODIFY;


  SalesHeader_Rec.INIT;
  SalesHeader_Rec."Document Type" := SalesHeader_Rec."Document Type"::Invoice;
  SalesHeader_Rec."Shortcut Dimension 2 Code" := '2406';
  SalesHeader_Rec.VALIDATE("Sell-to Customer No.", BuHaPauschale2005.Gliederungsnummer);
  SalesHeader_Rec.VALIDATE("No.",'');
  SalesHeader_Rec.VALIDATE("Posting Date", WORKDATE);
  SalesHeader_Rec.VALIDATE("VAT Bus. Posting Group", 'NATIONAL');
  SalesHeader_Rec.VALIDATE("Gen. Bus. Posting Group",'');
  SalesHeader_Rec.INSERT(TRUE);

 
SalesLine_Rec.INIT;
  SalesLine_Rec."Document Type" := SalesLine_Rec."Document Type"::Invoice;
  SalesLine_Rec."Document No." := SalesHeader_Rec."No.";
  SalesLine_Rec."Line No." := 10000;
  SalesLine_Rec.Type := SalesLine_Rec.Type::"G/L Account";
  SalesLine_Rec.VALIDATE("No.", '1370');
  SalesLine_Rec.Description := BuHaPauschale2005.Beschreibung;
  SalesLine_Rec.VALIDATE(SalesLine_Rec."VAT Prod. Posting Group",'');
  SalesLine_Rec.VALIDATE("VAT Bus. Posting Group", SalesHeader_Rec."VAT Bus. Posting Group");
  SalesLine_Rec.VALIDATE(Quantity, 1);
  SalesLine_Rec.VALIDATE("Unit Price", BuHaPauschale2005.Betrag);
  SalesLine_Rec.INSERT;
END;



Bekomme immer noch den Hinweis, dass die MwSt.-Geschäftsbuchungsmatrix nicht existiert und folgende Werte aufweist: Geschäftsbuchungsgruppe "National", Produktbuchungsgruppe "". Zwischenzeitlich hatte es mal funktioniert. ?????

17. März 2006 12:25

sorry, hab ich vorhin nicht so genau drauf geachtet, aber mit der Zeile

SalesLine_Rec.VALIDATE(SalesLine_Rec."VAT Prod. Posting Group",'');

sagst du ja explizit, dass diese Mwst-Produktbuchungsgruppe leer sein soll.
Wenn diese im Sachkonto festgelegt ist, dann lass die Zeile weg, sonst trage hinter dem Komma den Wert ein, den die Gruppe bekommen soll.
Es hatte vorher wahrscheinlich mal funktioniert, weil im Sachkonto was drinsteht, und der Validate auf das Sachkonto NACH der Vergabe der leeren Buchungsgruppe aufgerufen wurde, da bekommst du dann nur einen Fehler, wenn im Konto auch nix steht.

20. März 2006 13:13

Tja, nach einem entspannenden Wochenende hab ich's endlich geschnallt, wo ich die Produkt- und Geschäftsbuchungsgruppen hinterlegen muss. Peinlich :oops: Ich möchte mich aber nochmals für eure Hilfe bedanken. Special greetings to Michael, Marc, JanV und natürlich Timo.

So long.....

Markus