15. September 2019 15:34
Hallo Ihr da draußen
Wir haben seit kurzem den Zustänigkeiteneinheitencode (Tab. 18) gepflegt. NAV findet in der Verkaufspreistabelle aber die Preise nicht mehr, da unsere Mitarbeiter vergessen haben den Zuständigkeiteneinheitencode dort auch zu pflegen. Nun möchte ich gerne, dass überall, wo beim Debitor der Wert hinterlegt ist, in der Tabelle Verkaufspreise auch der Wert eingefügt wird.
Meine Vorgehensweise:
Customer.GET("Sales Price"."Sales Code");
if Customer."Responsibility Center" <> '' then begin
if "Sales Price"."Sales Code" <> '' then begin
"Sales Price"."Responsibility Center" := Customer."Responsibility Center";
"Sales Price".MODIFY;
end;
end;
Klappt leider nicht...
Für einen Gedankenanstoß wäre ich wirklich dankbar.
Herzliche Grüße
16. September 2019 08:24
Hallo BotoxWade,
dein Quelltext ist leichter zu lesen und zu verstehen, wenn du ihn zwischen so genannte Code-Tags setzt. Insbesondere deine Formatierungen werden so auch beibehalten.
Daher bitten wir dich, vor und nach deinem Quelltext diese Code-Tags einzufügen. Beispiel:
[code]Dein Quelltext[/code]
Gruß, Kowa
MSDynamics.de-Team
16. September 2019 08:27
Guten Morgen
bitte nutze im Forum die "Code"-Funktion (gibt es einen Button), wenn du Quellcode einbindest - EDIT - kowa war schneller
mir fehlt bei dir eine Filterung auf die Table "Sales Price" und das der Datensatz gelesen wird.
z.B.:
- Code:
salesPrice.SETRANGE("Sales Type",salesPrice."Sales Type"::Customer");
salesPrice.SETRANGE("Sales Code",<<DEINDEBITOR>>);
IF salesPrice.FIND('-') THEN BEGIN
...
END;
--> nur als Beispiel zu verstehen
Das RespCenter an "Sales Price" ist aber kein Standard - verstehe nicht, warum das da dran hängt!
16. September 2019 08:35
sweikelt hat geschrieben:Das RespCenter an "Sales Price" ist aber kein Standard - verstehe nicht, warum das da dran hängt!
Etliche Add-ons wie z.B. Technischer Großhandel haben die Preisfindung dafür erweitert.
Zur Frage selber: Auch FINDSET und REPEAT-UNTIL wäre hier wohl nach dem Filtern angebracht.
16. September 2019 08:37
Ist dein Code als 1) Stapelverarbeitung gedacht, oder möchtest die Ergänzung immer dann automatisch vornehmen, 2) sobald beim Debitor eine Zuständigkeitseinheit eingetragen wird? Ich hab das als 1) interpretiert.
BotoxWade hat geschrieben:Nun möchte ich gerne, dass überall, wo beim Debitor der Wert hinterlegt ist, in der Tabelle Verkaufspreise auch der Wert eingefügt wird.
Diese Aussage passt nicht zum Code.
Als Code würde ich erwarten:
- Finde alle Debitoren, wo der der Zuständigkeitseinheitencode gefüllt ist
- Pro Debitor (den du ja schon im Zugriff hast), finde alle zugehörigen Debitorenpreise und aktulaisiere diese (siehe Antwort von sweikelt)
Dein aktueller Code dagegen scheint "Sales Price" am Wickel (also als Basis) zu haben, wobei wir nicht sehen können, wie du den Datensatz geholt hast. Durch einen Report wahrscheinlich?
18. September 2019 10:34
Hallo zusammen
Vielen Dank schon mal für die Antworten.
Ich habe das jetzt mal so geändert, wobei ich die Einschränkung auf 20097 nicht machen wollte, da ja alle Debitoren/Verkaufspreise bearbeitet werden sollten.
salesPrice.SETRANGE("Sales Type",salesPrice."Sales Type"::"Customer");
salesPrice.SETRANGE("Sales Code", '20097');
IF salesPrice.FIND('-') THEN BEGIN
Customer.GET("Sales Price"."Sales Code");
if Customer."Responsibility Center" <> '' then begin
if "Sales Price"."Sales Code" <> '' then begin
"Sales Price"."Responsibility Center" := Customer."Responsibility Center";
"Sales Price".MODIFY;
END;
end;
end;
Als Fehlermeldung kommt jetzt:
'Die Verkaufpreis existiert nicht...'
Herzliche Grüße
18. September 2019 11:22
Hallo,
salesPrice und "Sales Price" sind verschiedene Variablen.salesPrice hast du mit FIND "im Zugriff".
"Sales Price" ist nicht bestimmt. Du solltest immer salesPrice verwenden.
REPEAT .. UNTIL Schleife hast du immer noch nicht eingebaut
Andreas
18. September 2019 11:22
Hallo BotoxWade,
2. Versuch:
Dein Quelltext ist leichter zu lesen und zu verstehen, wenn du ihn zwischen so genannte Code-Tags setzt. Insbesondere deine Formatierungen werden so auch beibehalten.
Daher bitten wir dich, vor und nach deinem Quelltext diese Code-Tags einzufügen. Beispiel:
[code]Dein Quelltext[/code]
Gruß, Kowa
MSDynamics.de-Team
19. September 2019 07:49
Kowa hat geschrieben:Hallo BotoxWade,
2. Versuch:
Dein Quelltext ist leichter zu lesen und zu verstehen, wenn du ihn zwischen so genannte Code-Tags setzt. Insbesondere deine Formatierungen werden so auch beibehalten.
Daher bitten wir dich, vor und nach deinem Quelltext diese Code-Tags einzufügen. Beispiel:
[code]Dein Quelltext[/code]
Gruß, Kowa
MSDynamics.de-Team
Meinst Du so?
- Code:
salesPrice.SETRANGE("Sales Type",salesPrice."Sales Type"::Customer);
salesPrice.SETRANGE("Sales Code", '20097');
IF salesPrice.FIND('-') THEN BEGIN
Customer.GET(salesPrice."Sales Code");
IF Customer."Responsibility Center" <> '' THEN BEGIN
IF salesPrice."Sales Code" <> '' THEN BEGIN
salesPrice."Responsibility Center" := Customer."Responsibility Center";
salesPrice.MODIFY;
END;
END;
END;
19. September 2019 08:02
Versuch es doch mal so:
- Code:
salesPrice.SETRANGE("Sales Type",salesPrice."Sales Type"::Customer);
salesPrice.SETRANGE("Sales Code", '20097');
IF salesPrice.FIND('-') THEN BEGIN
REPEAT
Customer.GET(salesPrice."Sales Code");
IF Customer."Responsibility Center" <> '' THEN BEGIN
IF salesPrice."Sales Code" <> '' THEN BEGIN
salesPrice."Responsibility Center" := Customer."Responsibility Center";
salesPrice.MODIFY;
END;
END;
UNTIL salesPrice.NEXT = 0;
END;
wobei die Prüfung auf einen nicht-leeren "Sales Code" in Zeile 7 durch den Filter in Zeile 2 unnötig wäre.
Ich gehe mal davon aus, dass das Feld "Responsibility Center" in der VK-Preis-Tabelle nicht im Primärschlüssel der Tabelle enthalten ist.
19. September 2019 08:15
JRenz hat geschrieben:Versuch es doch mal so:
- Code:
salesPrice.SETRANGE("Sales Type",salesPrice."Sales Type"::Customer);
salesPrice.SETRANGE("Sales Code", '20097');
IF salesPrice.FIND('-') THEN BEGIN
REPEAT
Customer.GET(salesPrice."Sales Code");
IF Customer."Responsibility Center" <> '' THEN BEGIN
IF salesPrice."Sales Code" <> '' THEN BEGIN
salesPrice."Responsibility Center" := Customer."Responsibility Center";
salesPrice.MODIFY;
END;
END;
UNTIL salesPrice.NEXT = 0;
END;
wobei die Prüfung auf einen nicht-leeren "Sales Code" in Zeile 7 durch den Filter in Zeile 2 unnötig wäre.
Ich gehe mal davon aus, dass das Feld "Responsibility Center" in der VK-Preis-Tabelle nicht im Primärschlüssel der Tabelle enthalten ist.
Hallo
Vielen Dank Dir.
Der Primärschlüssel der Tabelle ist:
- Code:
Item No.,Sales Type,Sales Code,Starting Date,Currency Code,Variant Code,Unit of Measure Code,Minimum Quantity,Responsibility Center
Es kommt aber immer noch der Fehler, das er den Verkaufspreis nicht findet.
19. September 2019 08:50
Ah, da das "Responibility Center" Teil des Schlüssels ist, reicht eine Zuweisung nicht. Dafür gibt es den Befehl RENAME.
19. September 2019 08:51
BotoxWade hat geschrieben:Meinst Du so?
Ja, aber dabei jeweils den ursprünglichen Beitrag bearbeiten, keinen neuen erstellen!
19. September 2019 09:05
Hallo,
wenn man der Logik von NAV folgt, dann sollte das Responsibilty-Center nicht als letzter teil des Schlüssels gewählt werden. Es sei denn man kann sicherstellen, dass die Zuständigkeitseinheit immer gefüllt ist, und man keine Preise hat, die unabhängig von der Zuständigkeitseinheit sind (Responsibilty-Center- Code ='').
Da NAV für die Preisfindung teilweise ein FINDLAST macht, sollte man sehr genau prüfen, an welcher Stelle im Schlüssel die Zusändigkeitseinheit am besten hin passt, unter (Berücksichtigung von Mindestmengen, Einheiten,...) Außerdem solltest du überprüfen, ob dir die Bestpreisfindung da nicht ein Schnippchen schlägt, und du diese Funktion ebenfalls deaktivieren musst.(nicht unerheblicher Aufwand).
Gruß Fiddi
19. September 2019 09:20
Hallo
Ich erkläre noch mal, was ich vorhabe.
Unser Vertrieb hat auf der Debitorenkarte angefangen die Zuständigkeiteneinheitencodes zu pflegen, die vorher grundsätzlich leer waren. In der Tabelle Verkaufspreis ist dieses Feld jedoch nicht geplegt worden, also ohne Eintrag. Daher läuft dann die Preisfindung an der Stelle ins Leere.
Mein Gedanke war, zu prüfen, ob beim Debitor der Zuständigkeiteneinheitencode gefüllt ist, und wenn ja, diesen dann in alle Zeilen der Tabelle Verkaufspres, die den Deintor betreffen, rein zu schreiben. Somit wird die Preifindung wieder funktionieren.
Vielleicht ist das Problem, dass es Debitoren gibt, die unter Umständen keinen Eintrag in der Tabelle Verkaufspreis haben.
Herzliche Grüße
BotoxWade
19. September 2019 09:47
Hallo,
du solltest nur die Daten in der Verkaufspreis-Tabelle pflegen, die auch besonders sind, sonst pflegst du ich später zu Tode (oder gar nicht mehr, da die Anwender alles manuell machen, weil es zuviel Aufwand ist).
Wenn ihr keine Preise habt, die von der Zuständigkeitseinheit abhängen, dann lasse um Gottes Willen das Feld aus der Tabelle.
Desweiteren musst du dir überlegen, ob der Preis von Kunden abhängig ist (egal in welchem Laden (=Zuständigkeitseinheit) der Kunde kauft, er bekommt den gleichen Preis). Dann hat die Zuständigkeitseinheit nichts in der Preistabelle zu suchen. Oder der Preis ist vom Laden abhängig (auf der Düsseldorfer Kö wird man andere Preise aufrufen, als in Oer-Erkenschwick. [ Das soll jetzt keine Beleidigung gegen Oer-Erkenschwick sein
]). Dann wird man die Zuständigkeitseinheit pflegen müssen, um unterschiedliche Preise pro Filiale pflegen zu können.
Oder du hast eine Mischung aus beiden. Bekannte Kunden bekommen Ihre Preise global, die Laufkundschaft bekommt von der Filiale abhängige Preise.
Auch solltest du dir überlegen wovon denn die Zuständigkeitseinheit im Beleg abhängig ist. Vom Debitor, weil eure Zuständigkeitseinheiten "Großhandel" und "Einzelhandel" heißen (dann beim Debitor hinterlegen), oder von der Filiale weil eure Zusändigkeitseinheiten "München-HBF" und "München-Flughafen" heißen (dann beim Verkäufer hinterlegen).
Gruß Fiddi
19. September 2019 10:18
@BotoxWade Ich befürchte mein Beitrag ging unter.
m_schneider hat geschrieben:Ah, da das "Responibility Center" Teil des Schlüssels ist, reicht eine Zuweisung nicht. Dafür gibt es den Befehl RENAME.
19. September 2019 12:15
m_schneider hat geschrieben:@BotoxWade RENAME.
[/quote]
IIRC ist RENAME für umbenennen von Feldinhalten vom Primary Key da?
19. September 2019 14:06
ERP-Berater hat geschrieben:m_schneider hat geschrieben:@BotoxWade RENAME.
IIRC ist RENAME für umbenennen von Feldinhalten vom Primary Key da?
Ja.
BotoxWade hat geschrieben:...
Der Primärschlüssel der Tabelle ist:
- Code:
Item No.,Sales Type,Sales Code,Starting Date,Currency Code,Variant Code,Unit of Measure Code,Minimum Quantity,Responsibility Center
...
20. September 2019 08:20
Hallo Michael
Vielen Dank für Deinen Tipp. Jedoch weiß ich ihn nicht zu nutzen...
Grüße,
BotoxWade
20. September 2019 08:26
Hallo
Noch mal einige grunsätzliche Bemerkungen:
-Der Zuständigkeiteinheitencode soll dazu verwendet werden, die Debitoren den entsprechenden Niederlassungen zuzuordnen.
-Wenn für einen Debitor eine Preis abgespeichert wird, dazu gibt es eine Funktionalität in unserer NAV-Version, dann wird der Zuständigkeiteinheitencode automatisch gefüllt.
-Das Problem sind halt die alten Einträge in der Tabelle Verkaufspreis, wo der Zuständigkeiteinheitencode zu den Kunden fehlt. Da muss halt nachgearbeitet werden. Händisch kaum zu machen, da nach jeder Änderung des Feldes die Frage kommt, ob man das Feld wirklich ändern will. Das würde mehrere Tage/Wochen dauern.
Herzliche Grüße
BotoxWade
20. September 2019 08:33
Eine Alternative für zukünftige Probleme dieser Art, ist das Tool "Datenmigration" (Standard in der Einrichtung). Damit kannst du Daten aus/in Excel im/exportieren. In zukünftigen Versionen heißt es dann RapidStart.
Eventuell könnte dir auch der VK-Preisvorschlag helfen.
Der Code könnte so funktionieren.
- Code:
salesPrice.SETRANGE("Sales Type", salesPrice."Sales Type"::Customer);
salesPrice.SETRANGE("Sales Code", '20097');
salesPrice.SETFILTER("Responsibility Center", '<>%1', ''); //Um wirklich nur die leeren zu finden.
IF salesPrice.FIND('-') THEN BEGIN
REPEAT
Customer.GET(salesPrice."Sales Code");
IF Customer."Responsibility Center" <> '' THEN BEGIN
salesPrice.RENAME(
salesPrice.Item No.,
salesPrice.Sales Type,
salesPrice.Sales Code,
salesPrice.Starting Date,
salesPrice.Currency Code,
salesPrice.Variant Code,
salesPrice.Unit of Measure Code,
salesPrice.Minimum Quantity,
Customer."Responsibility Center";
END;
UNTIL salesPrice.NEXT = 0;
END;
Edit:
Die Frage nach dem Ändern des Datensatzes kann man umgehen, indem man einfach einen neuen Datensatz anlegt und den alten löscht.
20. September 2019 08:38
@BotoxWade
Wenn für einen Debitor eine Preis abgespeichert wird, dazu gibt es eine Funktionalität in unserer NAV-Version, dann wird der Zuständigkeiteinheitencode automatisch gefüllt.
- Darf der Debitor nur in der einen Niederlassung kaufen?
- Bekommt der Debitor den Preis nur, wenn er in der Niederlassung kauft?
Wenn du beides mit NEIN beantwortest, dann benötigst du den Zuständigkeitseinheitencode in der Preistabelle nicht.
Gruß Fiddi
20. September 2019 08:46
Wenn nur leere Felder zu versorgen sind: Statt RENAME sollte hier auch
diese Methode funktionieren. Die geht auch bedeutend schneller, wenn keine Änderungen in verknüpfte Tabellen durchgereicht werden müssen.
25. September 2019 10:39
Hier isser:
- Code:
salesPrice.SETRANGE("Sales Type", salesPrice."Sales Type"::Customer);
salesPrice.SETRANGE("Sales Code", '20097');
salesPrice.SETFILTER("Responsibility Center", '<>%1', ''); //Um wirklich nur die leeren zu finden.
IF salesPrice.FIND('-') THEN BEGIN
REPEAT
Customer.GET(salesPrice."Sales Code");
IF Customer."Responsibility Center" <> '' THEN BEGIN
salesPrice.RENAME(
salesPrice."Item No.",
salesPrice."Sales Type",
salesPrice."Sales Code",
salesPrice."Starting Date",
salesPrice."Currency Code",
salesPrice."Variant Code",
salesPrice."Unit of Measure Code",
salesPrice."Minimum Quantity",
Customer."Responsibility Center");
END;
UNTIL salesPrice.NEXT = 0;
END;
Grüße
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.