<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich habe eine Spalte ("BIN") mit einer Reihe verschiedener Zeichenwerte, und jede Zeile in der Datenmenge bezieht sich auf eine eindeutige Einheit, die getestet wurde. Ohne das Dataset umwandeln / zusammenfassen zu wollen, möchte ich eine Spaltenformel erstellen, die den Benutzer mit einem ListBox-Dialogfeld mit einem Satz aller eindeutigen Werte in der Spalte "BIN" auffordert. Nachdem Sie die gewünschten Werte in der ListBox ausgewählt haben, wird für die Einheiten mit einem Wert in der Spalte "BIN" der Wert 1 für die generierte Spalte ("BIN_DISPOSITION") und die Spalten, deren Einheiten keine "BIN" aufweisen, festgelegt "Wert, der mit der ListBox-Auswahl übereinstimmt, hat einen Wert von 0 für die generierte Spalte (" BIN_DISPOSITION ").
Beispiel:
Wenn der Benutzer die Formelspalte ausführt und "BIN2" und "BIN3" auswählt, ist die folgende Ausgabe erwünscht.
Einheit#
| BEHÄLTER | BIN_DISPOSITION (generiert mit Spaltenformel) |
|---|
Einheit 1 | BIN1 | 0 |
| Einheit 2 | BIN2 | 1 |
| Einheit 3 | BIN2 | 1 |
| Einheit 4 | BIN1 | 0 |
| Teil 5 | BIN3 | 1 |
Skript:
bin_values_all = {} ;
bin_values_all_sorted = {} ;
bin_values_selected = {} ;
Ob ( Reihe () == 1 .
Für jede Reihe ( Ob ( ! Enthält ( bin_values_all . : BEHÄLTER [ Reihe ()]) .
Einfügen in ( bin_values_all . : BEHÄLTER [ Reihe ()])
) ;
bin_values_all_sorted = Aufsteigend sortieren ( bin_values_all ) ;
Neues Fenster ( "BIN-Wertauswahl" Modal,
Umrissfeld ( "BIN-Wertauswahl" .
Pfund = Listenfeld (
bin_values_all_sorted
) .
Button Box ( "OK" .
bin_values_selected = Pfund << GetSelected
) ;
Ob ( Enthält ( bin_values_selected . : BEHÄLTER ) .
1 .
0
) ;
Ich musste das bedingte If (Row () == 1 ...) hinzufügen, damit die Dialog- und Listengenerierung nicht mehr als einmal ausgeführt wurde, aber meine Variablendeklarationen darüber würden anscheinend jedes Mal neu initialisiert werden ist nicht was ich will.
Ich war mir nicht ganz sicher, ob es einen integrierten Weg gab, dies zu tun oder nicht.
Ich frage mich, ob jemand Ideen hat.
Vielen Dank,
JP
Ich habe herausgefunden, wie ich das schaffen kann.
Anstatt die Listen vor der ersten bedingten Anweisung zu initialisieren, setze ich sie in den Fall Row () == 1 und konvertierte sie mit dem Präfix '::' in globale Variablen.
Ob ( Reihe () == 1 .
:: bin_values_all = {} ;
:: bin_values_all_sorted = {} ;
:: bin_values_selected = {} ;
Für jede Reihe ( Ob ( ! Enthält ( bin_values_all . : BEHÄLTER [ Reihe ()]) .
Einfügen in ( bin_values_all . : BEHÄLTER [ Reihe ()])
) ;
bin_values_all_sorted = Aufsteigend sortieren ( bin_values_all ) ;
Neues Fenster ( "BIN-Wertauswahl" Modal,
Umrissfeld ( "BIN-Wertauswahl" .
Pfund = Listenfeld (
bin_values_all_sorted
) .
Button Box ( "OK" .
bin_values_selected = Pfund << GetSelected
) ;
Ob ( Enthält ( bin_values_selected . : BEHÄLTER ) .
1 .
0
) ;