Autor Thema: Werte aus Spalten abfragen und prüfen, aber wie??  (Gelesen 2221 mal)

Offline Belgarion

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Hallo,

ich habe ein Problem.

Folgende Aufgabenstellung.
Ein Mitarbeiter kann 3 verschiedene Produkte herstellen. Jedes dieser Produkte dauert unterschiedlich lange, so ergibt sich folgende Rechnung.

ZE=Zeiteinheit

Produkt 1:    1 ZE  
Produkt 2:    2 ZE
Produkt 3:    3 ZE

Nun hat ein Arbeiter am Tag 6 ZE zur Verfügung. Bedeutet also entweder 6 Stk Produkt 1, oder 3 Stk Produkt 2.... Jedoch besteht auch die Moeglichkeit die Produkte zu mischen. Also 2x Produkt 1 und 2x Produkt 2.

Der Mitarbeiter ist ein Dokument und der Auftrag (Produkt) ist ein Dokument was eingestellt wird. Wählt man nun die Art des Produktes aus (1, 2, oder 3) soll Notes eine Warnung ausgeben, falls die Anzahl von 6 Zeiteinheiten am Tag überschritten werden.

Die Frage ist, wie gehe ich am besten an die Sache ran???


Bitte helft mir...


Belgarion
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Signaturen sind doof!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #1 am: 19.08.02 - 20:07:06 »
Wählt der MA nur einmalig sein Tagespensum aus oder kann das auch über den Tag hinweg erfolgen ??
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #2 am: 19.08.02 - 20:09:53 »
Ich würde da mit einer dynamischen Tabelle arbeiten. Schau dir mal

http://www-10.lotus.com/ldd/sandbox.nsf/ByDateNJ/f2acda4419a5e3cd00256c0e00314e05?OpenDocument

an.

Das könnte dir weiterhelfen
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Belgarion

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #3 am: 19.08.02 - 20:11:29 »
Hmm, hoffe habe deine Frage richtig verstanden.


Die Aufträge werden im voraus für den Mitarbeiter vergeben oder auch am selben Tag. Er hat immer nur 6 ZE am Tag. Wieviel ZE jedes Produkt in Anspruch nimmt habe ich über ein Script Feld+Button gelöst, welches den aktuell für diesen Auftrag benötigte ZE auflistet. Nur fragt halt noch nichts ab, ob an dem Tag inklusive dieses Auftrages mehr ZE's als 6 sind.


Belgarion
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Signaturen sind doof!

Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.730
  • Geschlecht: Männlich
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #4 am: 19.08.02 - 20:23:31 »
dann schaue dir das mit der dynamischen Tabelle an; da wird auch eine Summe aus irgendeinem Wert berechnet. Da musst du dann nur noch einen Logik einbauen, da abfragt ob der Wert > 6 ist. Wenn Jaa, *MÖÖÖÖÖPP*, gehen die Lichter an.

eknori
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline Belgarion

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #5 am: 19.08.02 - 22:11:46 »
ui is das kompliziert!

ich krieg das net hin....

Gibt es keine andere Möglichkeit?


Belgarion
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Signaturen sind doof!

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #6 am: 19.08.02 - 23:14:11 »
1. Weg:

1.1. Lege für jeden MA ein "Stammblatt" an.
Dieses Stammblatt identifizierst Du über dessen Personalnummer oder Name+Vorname+Geburtsdatum oder oder....

1.2. Dann legst Du einen weiteren Doctypus an, der als Response zum Stammblatt erstellt wird. In der Responsemaske kommt Dein Produkt 1-2-oder 3 und die ZE hinein

1.3. beim Speichern des Response-Docs zwingend über den Aktions-Button "Speichern" wird über
@SetDocField( Dokument-ID ; Feldname ; neuerWert )
und
@GetDocField( DokumentUNID ; Feldname )
gearbeitet.

GetDoc holt sich die Info aus dem Stammdoc des MA, SetDoc schreibt etwas rein. Und zwar was?

1. Info: aktl. Datum (damit die ZE nur zu einem Tag verrechnet werden)
2. Info: ZE
beide Infos kommen in 2 separate Felder.

also
_checktag:=@GetDocField( DokumentUNID des Stammdocs ; "Datum" );
_ZE:=@GetDocField( DokumentUNID des Stammdocs ; "ZE" );
und nun Check, ob die Infos von heute oder nicht von heute sind:
_weiche=@if(@today<>@texttotime(_checktag);"yes";"no");
wenn die neue ZE nicht auf den gleichen Tag fällt, wie die bisherigen Einträge im Stammdoc, dann...sonst...
_ZEAdd:=@if(_weiche:="yes";<FeldausaktuellemProduktDoc>;_ZE+<FeldausaktuellemProduktDoc>);
Kontrolle, ob ZE nun 6 Einheiten überschritten hat:
@if(_ZEAdd>6;@return(@prompt([ok];"ACHTUNG";"DU KAPITALISTENAUSBEUTER!!!!));@success);
wenn Test bestanden, nun neue ZE im Stammdoc setzen und ggbfl. neues Datum:
@if(_weiche="yes";@do(@SetDocField( Dokument-ID des Stammdocs ; Datum ; @today );@SetDocField( Dokument-ID des Stammdocs ; ZE ; _ZEAdd ));@SetDocField(Dokument-ID des Stammdocs ; ZE ; _ZEAdd ));
FileSave noch
und
FileCloseWindow

soweit einigermaßen klar, was ich meine?
Einzigstes Problem ist, wie Du an die DocID des Stammds rankommst. Nun, das lät sich regeln, entweder Du erstellt ein echtes Response zum MA Stammdoc, wenn Du eine neue ZE meldest (@SetDocField($Ref;"Field on Parent Doc";"Value") = $REF enthält die ID des Parents). Oder, Du liest über einen dblookup die ID des MA Docs aus.

Soweit das in Kurzform. Auch wenn die Produkte mit unterschiedlichen Laufzeiten nicht drin sind, ist das ja letztlich fast egal, da Du die Regel hast, nicht mehr als 6 ZE.  Man muß vorher nur einen kleinen Zwischenstep einlegen, da man nicht mehr das ZE Feld direkt auslesen kann. Einfach einen Multiplikator setzen...am besten als Schlüsselwortfeld mit Alias
Produkt 1 | 1
Produkt 2 | 2
Produkt 3 | 3
und da Notes den Alias liefert, diesen einfach per texttonumber in eine Zahl umwandeln, dann haste Deine effektive ZE für diesen gegebenen Auftrag.
also leicht variierte Formel zu oben:
_ZEAdd:=@if(_weiche="yes";@texttonumber(<FeldausaktuellemProduktDoc>);_ZE+@texttonumber(<FeldausaktuellemProduktDoc>));
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Offline Belgarion

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #7 am: 20.08.02 - 12:31:05 »
Hi,

hab 3 Probleme:

1. Wenn ich mit $REF das Stammdokument abfrage, dann sagt er mit keine 32-Zeichen Hex-Code (oder so). Wie kann ich das beheben? Habe das Dokument Mitarbeiter als Dokument und das Dok Auftrag als Antwort.

2. Was passiert wenn ein Auftrag vor Fertigstellung storniert wird? Kann diese Formel das beachten?

3. Sehe ich das richtig das ich für jeden Auftrag dann 2 Dokumente anlegen muß? Also außer dem Stammblatt des Mitarbeiters? Oder wird in den beiden Feldern alle Daten gespeichert. Ich dachte immer nur ein Wert...


MfG Belgarion
Signaturen sind doof!

Offline Belgarion

  • Frischling
  • *
  • Beiträge: 25
  • Geschlecht: Männlich
  • I love YaBB 1G - SP1!
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #8 am: 20.08.02 - 12:47:14 »
Mein Code sieht wie folgt aus:


_checktag:=@GetDocField($Ref; "Datum" );
_ZE:=@GetDocField( $Ref; "ZE" );
_weiche=@If(@Today!=@TextToTime(_checktag);"yes";"no");
_ZEAdd:=@If(_weiche="yes";Erg;_ZE+Erg);
@If(_ZEAdd>6;@Return(@Prompt([OK];"ACHTUNG";"DU KAPITALISTENAUSBEUTER!!!!"));@Success);
@If(_weiche="yes";@Do(@SetDocField( $REF; Datum ; @Today );@SetDocField( $REF ; ZE ; _ZEAdd ));@SetDocField($REF ; ZE ; _ZEAdd ))


Und gibt beschriebenen Fehler aus.

Belgarion
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »
Signaturen sind doof!

Offline Rob Green

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.651
  • Geschlecht: Männlich
    • Meipor
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #9 am: 20.08.02 - 14:42:35 »
1. Wenn ich mit $REF das Stammdokument abfrage, dann sagt er mit keine 32-Zeichen Hex-Code (oder so). Wie kann ich das beheben? Habe das Dokument Mitarbeiter als Dokument und das Dok Auftrag als Antwort.

= solange das response nicht gespeichert wurde, existiert kein $REF. Daher im Parent ein hidden Field einrichten, daß dessen Documentuniqueid speichert. Dann im Response bei Eigenschaften "Formeln übernehmen Werte..." anhaken. Dazu ein hidden Field, das als Vorgabewert oder Berechnet beim Anlegen das Feld mit der ID namentlich aus dem Parent anspricht. SO hast Du von Anfang an die Info, die auch $REF enthält. Nämlich die ID des Parents wie gesagt.
Dann einfach eine Formel hinzufügen:
_ID:=@if(@isvalaible($REF);$REF;FeldausParent)
und
@getdocfield(_ID.....)
Das ist deswegen praktisch, da sich ja die $REF durch Kopieren der DB verändert und wenn Du nur das selbst berechnete Feld ansprichst, hast Du einen veralteten Bezug und mußt händisch die Bezüge wiederherstellen.
Das bezieht sich natürlich nur auf gespeicherte ZE Meldungen, wenn die warum auch immer - weil Pferde eben k... - neu berechnet werden müßten.


2. Was passiert wenn ein Auftrag vor Fertigstellung storniert wird? Kann diese Formel das beachten?
schau mal in der Help nach @isdocbeingsaved.
Das kannst Du als Eintrittsbedingung für die Ausführung der Formel nehmen. Nur wenn gespeichert wird, triggert die ganze Formel los. Mit @return brichst Du ab.
Also:
@if(@isdocbeingsaved;@success;@return(void));
und Rest der Formel


3. Sehe ich das richtig das ich für jeden Auftrag dann 2 Dokumente anlegen muß? Also außer dem Stammblatt des Mitarbeiters? Oder wird in den beiden Feldern alle Daten gespeichert. Ich dachte immer nur ein Wert...

Das war wie gesagt ein Weg von vielen möglichen Wegen. Welchen Weg Du wählst, hängt von dem exakten Procedere ab, die Deine User durchgehen und welcher Weg Dir am schnellsten, stabilsten, ... erscheint. Mußt schon selbst wissen. Momentan hast Du die Mitarbeiterdocs (als quelle für die aktuelle ZE Berechnung) und die ZE Meldungen, also 2 Doctypen.
Ich hätte nur 1 Doc genommen und dort die Berechnungen ganz simpel vorgenommen.
Vielleicht verdirbt Geld wirklich den Charakter.
Auf keinen Fall aber macht Mangel an Geld ihn besser.
(John Steinbeck)

Meiporblog: http://www.meipor.de/blog
allg. Unternehmerblog: http://www.m-e-x.de/blog

Glombi

  • Gast
Re: Werte aus Spalten abfragen und prüfen, aber wi
« Antwort #10 am: 23.08.02 - 10:22:52 »
Hallo Belgarion,

pro Auftrag gibt es ein Dokument, oder? Falls ja, kannst Du das wie folgt machen:

Im QuerySave oder PostRecalc:

Hole Dir in eine Collection alle Aufträge, die er an dem Tag hat. Dazu eine Ansicht machen, die in der ersten sortierten Spalte folgende Formel hat:
Annahme: Datum des Auftrags steht im Feld Datum, Name des Mitarbeiter im Feld Mitarbeiter
@Text(Datum) + Mitarbeiter

In der Zugriffsformel nur die Dokumente anzeigen, die tatsächlich berücksichtigt werden sollen. D.h. bspw., keine stornierten oder in Arbeit.
SELECT Form = "Auftrag" & (Status != "storniert" | Status != "In Arbeit")

Weiter....
Annahme: Feld für "Produkt" = Produkt


dim ws as New NotesUIWorkspace
dim uidoc as NotesUIDocument
set uidoc = ws.CurrentDocument
dim thisdoc as NotesDocument
set thisdoc = uidoc.Document

dim session as New NotesSession
dim db = session.CurrentDatabase
dim view as NotesView
set view = db.GetView("hier der Viewname von oben")
dim dc as NotesDocumentCollection
dim doc as NotesDocument

dim ze_zaehler as Integer
ze_zaehler = 0
CONST MAX_ZE = 6
dim key as string
key = cstr(thisdoc.Datum(0)) & thisdoc.Mitarbeiter(0)

set dc = view.GetAllDocumentsByKey(key,true)

set doc = dc.GetFirstDocument
while not (doc is nothing)

if doc.UniversalID <> thisdoc.UniversalID then
select case doc.Produkt(0)

case "Produkt 1":
ze_zaehler = ze_zaehler + 1

case "Produkt 2":
ze_zaehler = ze_zaehler + 2

case "Produkt 3":
ze_zaehler = ze_zaehler + 3


end select
end if

set doc = dc.GetNextDocument(doc)
wend

if ze_zaehler > MAX_ZE then

msgbox "Der Mitarbeiter hat bereits Aufträge für " & cstr(MAX_ZE) & " Zeiteinheiten!"

continue = false

end if


Mit doc.UniversalID <> thisdoc.UniversalID wird verhindert, dass das aktuelle Dokument bei der Summierung der anderen Aufträge mit berücksichgt wird.

Eleganter wäre das ganze noch, wenn Du bereits in der Auftragsmaske die ZE berechnest. Dann kannst Du Dir den Select case... Teil schenken,
also wenn die ZE im Feld "ZE" stehen, sähe das so aus:

set doc = dc.GetFirstDocument
while not (doc is nothing)

if doc.UniversalID <> thisdoc.UniversalID then

ze_zaehler = ze_zaehler + doc.ZE(0)

end if

set doc = dc.GetNextDocument(doc)



Ich hoffe, das hilft Dir weiter

Gruß
Andreas
« Letzte Änderung: 01.01.70 - 01:00:00 von 1034200800 »

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz