21. Januar 2021 17:45
Hi!
Folgendes wäre möglich:
Du benötigst ein neues Feld in der Printer Selection Tabelle (78). Nennen wir es Location.
Das gleiche Feld benötigst du in der User Setup Tabelle (91).
Der Primärschlüssel der Tabelle 78 müsste um das Location-Feld erweitert werden. (Damit man mehr als einmal BenutzerID='' und Berichts-ID=0 anlegen kann. Nämlich für jeden eigenen Standort. Gepflegt werden die Drucker dann also nicht mehr nach Benutzer-ID, sondern hauptsächlich über die Location. ALso z.B.: Benutzer='', Berichts-ID=0, Standort=Büro, Druckername=A --> Alle Benutzer mit Standort "Büro" im Benutzersetup drucken alle Belege auf Printer A)
Das Feld könnte ein Optionsfeld sein, welches alle Möglichen Standorte enthält oder auch auf eine Hintergrundtabelle zeigen, wo dynamisch Standorte gepflegt werden können. Ich empfehle Zweiteres.
Gib den Benutzern eine Möglichkeit (z.B. über eine eigene BenutzersetupPage) den Wert des Location-Feldes, welches zur Benutzereinrichtungstabelle gehört, einzustellen.
Pflege deine Drucker, zusammen mit den gewünschten Standorten, in der Tabelle 78.
Passe die Codeunit 1 Function FindPrinter so an, dass erst nach dem im UserSetup hinterlegten Standort gesucht wird. In etwa so:
- Code:
IF NOT PrinterSelection.GET(UserSetup.Location,USERID,ReportID) THEN
IF NOT PrinterSelection.GET(UserSetup.Location,'',ReportID) THEN
IF NOT PrinterSelection.GET(UserSetup.Location,USERID,0) THEN
IF PrinterSelection.GET(UserSetup.Location,'',0) THEN;
Bleibt das Ergebnis leer, könnte jetzt noch die Standardprogrammierung folgen. Aber Achtung: Aufgrund der Primärschlüsseländerung, kannste das nicht mehr mit dem GET machen, sondern eher so:
- Code:
IF NOT FindPrinterByNavStandard(PrinterSelection,USERID,ReportID) THEN
IF NOT FindPrinterByNavStandard(PrinterSelection,'',ReportID) THEN
IF NOT FindPrinterByNavStandard(PrinterSelection,USERID,0) THEN
IF FindPrinterByNavStandard(PrinterSelection,'',0) THEN;
Wobei die FindPrinterByNavStandard dann so ausschaut:
- Code:
FindPrinterByNavStandard(VAR PrinterSelection : Record "Printer Selection";UserID : Code[50];ReportID : Integer) : Boolean
CLEAR(PrinterSelection);
PrinterSelection.SETRANGE("User ID",UserID);
PrinterSelection.SETRANGE("Report ID",ReportID);
IF PrinterSelection.FINDFIRST THEN
EXIT(TRUE);
EXIT(FALSE)
Grüße