21. Okt 2009 

Etiketten

Für einen Kunden habe ich eine Medienverwaltung eingerichtet, also Bücher, Zeitungen und Zeitschriften, CDs, DVDs, Spielesammlungen etc. Inzwischen sind fast 4.000 Datensätze zusammen.

Die Dame, die das Archiv führt, hat sich in den Jahren mit dem Etiketten-Editor Etiketten gestaltet. Die Etiketten kommen auf jedes Exemplar, wie sich das in einer Bücherei so gehört. Jetzt erzählte sie mir, sie lege manche Datensätze doppelt an, weil sie für jedes Exemplar ein Etikett ausgedruckt braucht.

Meine Aufgabenstellung also: je nach Anzahl der Exemplare mehr als ein Etikett ausdrucken und das mit dem Etiketten-Editor.

Zuerst dachte ich, das geht nicht! Dann kommt, wie immer mit 4D, wär doch gelacht! Kurze Frage in die 4D Werkstatt: geht das und wenn ja wie?

danielm

Wenige Minuten später antwortet Daniel Müller:

Da gibt es einen Trick, den ich bisher noch nicht sinnvoll eingesetzt habe, aber der eventuell die Lösung sein könnte: Man kann mit 4D Auswahlen erzeugen, die mehrmals den selben Datensatz enthalten. Mit CREATE SELECTION FROM ARRAY kann man, zumindest war es so, als ich es vor einiger Zeit mit 4D 2004 entdeckt habe, durch Verwendung von mehrfach vorkommenden record numbers eine Selection erzeugen, die mehrmals den gleichen Datensatz enthält.

Es klappt tatsächlich. Hier der Code aus der V2003er-Datenbank:

CREATE EMPTY SET([TITEL];"ManualSelect")
If (Records in set("UserSet")>0)
  COPY SET("UserSet";"ManualSelect")
End if
CUT NAMED SELECTION([TITEL];"CurrSelection")
USE SET("ManualSelect")

ARRAY LONGINT($t_RecordNbrs_L;0)
ARRAY INTEGER($t_Exemplare_L;0)
SELECTION TO ARRAY([TITEL];$t_RecordNbrs_L;[TITEL]BUCH_ExemplarZahl;$t_Exemplare_L)
$N:=Size of array($t_RecordNbrs_L)
For ($i;$N;1;-1)
  If ($t_Exemplare_L{$i}>1)
    $recordNbr_L:=$t_RecordNbrs_L{$i}
    $M:=$t_Exemplare_L{$i}-1
    For ($j;1;$M)
      $size_L:=Size of array($t_RecordNbrs_L)+1
      INSERT ELEMENT($t_RecordNbrs_L;$size_L;1)
      $t_RecordNbrs_L{$size_L}:=$recordNbr_L
    End for
  End if
End for
SORT ARRAY($t_RecordNbrs_L;>)
CREATE SELECTION FROM ARRAY([TITEL];$t_RecordNbrs_L)
PRINT LABEL(Current form table->;Char(1))
USE NAMED SELECTION("CurrSelection")
HIGHLIGHT RECORDS("ManualSelect")

Ville merci Daniel

4D Themen: Berichte in Arbeit