Benutzer bzw. Druckergruppen

6. Juli 2018 13:02

Hallo @ALL,

gibt es eine Möglichkeit, Drucker für bestimmte Belge Benutzergruppen zuzuweisen?(Keine Einzel Benutzer Zuweisung)

Beispiel:
Also User1 aus der Benutzergruppe Vertrieb druckt ein Angebot auf den zentralen Vertriebsdrucker.


Gruß und wennes soweit ist ein schönes Wochenende


Tobias

Re: Benutzer bzw. Druckergruppen

6. Juli 2018 16:12

Nicht im Standard.

Ich habe mir dazu ein neues Feld in der Druckerauswahl (Tabelle 78), sowie im Benutzersetup (Tabelle 91) angelegt. Dieses nennt sich in meinem Fall "Standort".
In der Codeunit 1 habe ich dann die Funktion "FindPrinter" so abgeändert, dass das neue Feld bei der Druckersuche herangezogen wird. Erst wenn kein Drucker gefunden wird, dann wird wieder der Standard verwendet.

Folgendes musst du dazu beachten. Damit du keine Primärschlüsselverletzung bekommst (Denn durch das neue Feld möchtest du dir ja das Anlegen der Benutzer IDs ersparen, hast dann aber keine eindeutigen Primärschlüssel mehr), musst du das neue Feld mit in den Primärschlüssel nehmen. Dadurch müsstest du dann auch den Standard ändern und mit Setrange und Findfirst, statt Get arbeiten. Aber dazu reicht ja eine kleine Hilfsfunktion.
Ich habe hier noch eine Überprüfung drinnen, ob der Drucker tatsächlich existiert.


Code:
FindPrinter(ReportID : Integer) : Text[250]
CLEAR(PrinterSelection);

//P01 suche definierten Standortdrucker. Wird keiner gefunden, geht es weiter mit der Standardprogrammierung. >>>
LocationPrinter := FindPrinterByLocation(ReportID);
IF LocationPrinter <> '' THEN
  EXIT(LocationPrinter);
PrinterSelection.SETCURRENTKEY("User ID","Report ID");

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;

// Der GET Aufruf aus dem Standard kann nicht mehr verwendet werden, da ein neuer Primärschlüssel existiert.
// Stattdessen wird die Funktion FindPrinterByNavStandard aufgerufen in der mittels SETRANGE gefiltert wird.
// Siehe Oben über diesem text.
//
//IF NOT PrinterSelection.GET(USERID,ReportID) THEN
//  IF NOT PrinterSelection.GET('',ReportID) THEN
//    IF NOT PrinterSelection.GET(USERID,0) THEN
//      IF PrinterSelection.GET('',0) THEN;
//
// P01 <<<

EXIT(PrinterSelection."Printer Name");



Code:
FindPrinterByLocation(ReportID : Integer) : Text[250]
//P01 RZ
CLEAR(PrinterSelection);
CLEAR(Printer);

//Zurück zum Standard wenn User nicht im User Setup
IF NOT UserSetup.GET(USERID) THEN
  EXIT('');

//Zurück zum Standard wenn "Standort" im User Setup leer ist
IF UserSetup.Standort = '' THEN
  EXIT('');

//Suche Druckernamen in Tabelle 78
PrinterSelection.SETCURRENTKEY(Standort,"User ID","Report ID");
IF NOT PrinterSelection.GET(UserSetup.Standort,USERID,ReportID) THEN
  IF NOT PrinterSelection.GET(UserSetup.Standort,'',ReportID) THEN
    IF NOT PrinterSelection.GET(UserSetup.Standort,USERID,0) THEN
      IF PrinterSelection.GET(UserSetup.Standort,'',0) THEN;

//Zurück zum Standard wenn kein Druckername in Tabelle 78 gefunden
IF PrinterSelection."Printer Name" = '' THEN
  EXIT('');

//Prüfe ob Druckername genauso in der Systemtabelle "Printer" existiert.
//Andernfalls: Suche ersten Drucker welcher mit dem Druckernamen aus Tabelle 78 anfängt
//Dies ist nötig, da ThinPrint Drucker nach dem eigentlichen Druckernamen noch verschiedene Dinge anhängen (Benutzername und Druckernr.)
Printer.SETRANGE(Name,PrinterSelection."Printer Name");
IF Printer.FINDFIRST THEN
  EXIT(PrinterSelection."Printer Name")
ELSE BEGIN
  CLEAR(Printer);
  //Printer.SETFILTER(ID,'%1..',PrinterSelection."Printer Name");
  Printer.SETFILTER(ID,'%1',PrinterSelection."Printer Name" + '*');
  IF Printer.FINDFIRST THEN
    EXIT(Printer.ID);
END;

EXIT('');


Code:
FindPrinterByNavStandard(VAR PrinterSelection : Record "Printer Selection";UserID : Code[50];ReportID : Integer) : Boolean
//P01 RZ
CLEAR(PrinterSelection);

PrinterSelection.SETRANGE("User ID",UserID);
PrinterSelection.SETRANGE("Report ID",ReportID);
IF PrinterSelection.FINDFIRST THEN
  EXIT(TRUE);

EXIT(FALSE)

Re: Benutzer bzw. Druckergruppen

11. Juli 2018 13:34

Super vielen Dank,

genau das war was ich suche!

Werde es mal ausprobieren und dann Feedback geben.

lg
Tobias