Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: smily68 am April 30, 2012, 21:52:53

Titel: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: smily68 am April 30, 2012, 21:52:53
Hallo

Folgende Konstellation:
Wenn ich in einem Auftragserfassungs-Formular einen neuen Auftrag erfasse, springt der Fokus auf das Feld Kunden-Nr (cboAuftrK_kun_IDF)
Dieses Feld kann nur verlassen werden, wenn man eine Kunden-Nr eingibt.

Hier der entsprechende Code

Private Sub cboAuftrK_kun_IDF_LostFocus()
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
   
    Dim strText As String
   
    strText = "Es ist keine Kunden-Nr vorhanden"

    If IsNull(Me.cboAuftrK_kun_IDF) Then
        If Kundenstamm = False Then
            MsgBox (strText)
            Me.cboAuftrK_kun_IDF.SetFocus
            Exit Sub
        End If
    End If
End Sub

Habe ich einen Auftrag eröffnet ohne, dass der entsprechende Kunde existiert, gibt es einen Button, der mir den Kundenstamm öffnet. Hier kann ich einen Kunden eröffnen und die entsprechende Kunden-Nr in das Feld Kunden-Nr im entsprechenden Aufrag schreiben.

Meine Frage / Problem: Mit meinem Script kann ich diesen code der mir den Kundenstamm öffnet nicht mehr ausführen. Wie kann ich nun meinen Code umbauen, dass ich den kundenstamm öffnen kann, jedoch alle anderen Manipulationen gesperrt bleiben, bis ich eine Kunden-Nr erfasst habe.

Gruss Daniel
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: smily68 am April 30, 2012, 21:55:48
Hallo

Ich habe ausversehen einen Code in das Forum gestellt, den ich zum Testen und Ausprobieren geschrieben habe. Hier ist der richtige Code:

Private Sub cboAuftrK_kun_IDF_LostFocus()
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
   
    Dim strText As String
   
    strText = "Es ist keine Kunden-Nr vorhanden"

    If IsNull(Me.cboAuftrK_kun_IDF) Then
            MsgBox (strText)
            Me.cboAuftrK_kun_IDF.SetFocus
            Exit Sub
    End If
End Sub

Gruss Daniel
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: Beaker s.a. am April 30, 2012, 22:07:41
Hallo Daniel,
Verlagere den Code ins Ereignis BeforeUpdate des Feldes.

Private Sub cboAuftrK_kun_IDF_BeforeUpdate(Cancel As Integer)
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
   
    Dim strText As String
   
    strText = "Es ist keine Kunden-Nr vorhanden"

    If IsNull(Me!cboAuftrK_kun_IDF) Then
        If Kundenstamm = False Then
            MsgBox (strText)
            Cancel = True
            Me!DeinButton.SetFocus
        End If
    End If
End Sub

Ein andere Vorgehensweise wäre (ich mach das so),
die Anlage eines Auftrages vom Kundenformular aus
anzustossen.
Es doch so, dass bevor Du einen Auftrag bekommst,
musst Du immer erstmal einen Kunden haben.
IMO gilt das sogar bei Neukunden - ohne Kunde kein Auftrag.
hth
gruss ekkehard
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: smily68 am Mai 01, 2012, 11:52:56
Hallo

Ja für einen Auftrag braucht man immer einen Kunden. Wenn ich es nicht weiss, ob der Kunde schon vorhanden ist, muss ich immer zuerst im Kundenstamm nachschauen. Diesen Vorgang möchte ich ersparen. So kann man im Auftrag nach dem Kunden suchen. Ist diesr nicht vorhanden, kann man aus dem Auftrag den Kundenstamm öffnen, einen Kunden erfassen un die Kunden-Nr direkt in den offenen Auftrag schreiben. So habe ich es programmiert.
Mit meinem Script den ich hier abgebildet habe, möchte ich nun verhindern, dass man am Auftrag Daten erfasst, ohne das ein Kunde im Auftrag erfasst ist, resp. ich möchte verhindern, dass man eine Systemfehlermeldung bekommt wenn der Kunde fehlt. Nun möchte ich diese zwei Bedingungen irgendwie zusammenfügen. Mit deinem Code kann ich aber weiterhin an meinem Auftrag Daten erfassen, den Auftrag schliessen usw. Diese Mainipulationen rufen aber die ungewünschte Systemfehlermeldung hervor, dass er keinen Wert im Feld soundso findet.

Meine Frage wie kann ich nun diese zwei Bedingungen verknüpfen.

Gruss Daniel
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: Stapi am Mai 01, 2012, 12:14:35
Hallo

Dann lege doch in dein Auftragsformular eine Kombifeld mit auswahl deiner angelegten Kunden an, ist der Kunde noch nicht angelegt wird er ergänzt. Erst nach Auswahl und erfolgter Eingabe eines gültigen Kunden darf es möglich sein Positionen dem Auftrag hinzu zufügen
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: Beaker s.a. am Mai 01, 2012, 17:11:02
Hallo Daniel,
Dann rufe doch direkt die Ereignisprozedur des Buttons auf.

Private Sub cboAuftrK_kun_IDF_LostFocus()
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
   
    Dim strText As String
   
    strText = "Es ist keine Kunden-Nr vorhanden"

    If IsNull(Me.cboAuftrK_kun_IDF) Then
            MsgBox (strText)
            Call Me!DeinButton_Click()
    End If
End Sub

gruss ekkehard
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: bahasu am Mai 01, 2012, 18:54:59
N'abend,

was hast Du vorgesehen, wenn Deine Datenbank-Benutzer gar nicht in das Feld gehen, also auch kein LostFocus-Ereignis eintreten kann?
z.B nutzt Du das Formular-Ereignis "Vor Aktualisierung"?

Harald
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: Beaker s.a. am Mai 01, 2012, 21:25:11
Hallo Harald,
ZitatWenn ich in einem Auftragserfassungs-Formular einen neuen Auftrag erfasse, springt der Fokus auf das Feld Kunden-Nr (cboAuftrK_kun_IDF)
Sollte Deine Frage beantworten.
gruss ekkehard
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: smily68 am Mai 07, 2012, 15:03:04
Hallo Ekkehard

Deine Lösung funktioniert bei mir nicht. Wenn ich einen neuen Auftrag eröffnen und das Feld cboAuftrK_kun_IDF verlasse bringt er Fehler beim Kompilieren Syntaxfehler

Hier der Code

Private Sub cboAuftrK_kun_IDF_LostFocus()
'Ueberprüfung ob eine Kunden-Nr vorhanden ist.
   
    Dim strText As String
   
    strText = "Es ist keine Kunden-Nr vorhanden"

    If IsNull(Me.cboAuftrK_kun_IDF) Then
            MsgBox (strText)
            Call Me!cmdKunde_Click()
    End If
End Sub


Gruss Daniel
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: Josef P. am Mai 07, 2012, 17:10:29
Hallo!

Mit Me!xxx rufst du im Prinzip Me.Controls("xxx") auf. Da cmdKunde_Click aber eine Prozedur ist, ist die in der Controls-Auflistung nicht enthalten. ;-)

Call cmdKunde_Click()

Falls cmdKunde_Click public deklariert ist, würde auch noch
Call Me.cmdKunde_Click()
funktionieren.

Noch etwas bezüglich Benennenung: cmdKunde_Click beschreibt eigentlich nicht, was passiert - denn geklickt wird bestimmt nicht.

Ich würde den Code nach folgenden Prinzip umgestalten:
private sub cmdKunde_Click()
  Call NeuenKundenErstellen() ' Anm.: nur als Beispiel - ich weiß nicht, was ablaufen soll.
End sub

private sub NeuenKundenErstellen()
  ...
End sub

Private Sub cboAuftrK_kun_IDF_LostFocus()
   CheckKundenNummer
End Sub

private sub CheckKundenNummer()

   If IsNull(Me.cboAuftrK_kun_IDF) Then
           MsgBox "Es ist keine Kunden-Nr vorhanden"
           Call NeuenKundenErstellen()
   End If

   ' und weiter?

End Sub


mfg
Josef
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: Beaker s.a. am Mai 07, 2012, 20:23:48
Hallo Daniel,
Sorry, habe ich zu kurz drüber nachgedacht, und
das, sogar wider besseres Wissen, so runtergeschrieben.
Wie's richtig ist, hat Josef Dir geschrieben (Danke).
Und wie es noch besser geht, siehst Du auch in
seinem Post.
gruss ekkehard
Titel: Re: Innerhalb Sub Prozess auslösen eines Button
Beitrag von: smily68 am Mai 17, 2012, 22:13:54
Hallo

In unserer Diskussion haben wir uns sehr von meinem ursprünglichen Ziel entfernt. Mein Ziel war, dass man in einem Auftrag in dem die Kunden Nr noch nicht erfasst ist, nur zwei Aktionen ausführen kann. Den Kundenstamm oder eine Kundenvollindexsuchmaske mit einem Button aufrufen.

Ich habe es nun auf eine andere Weise gelöst. Ich habe eine Funktion geschrieben, die mir zwingende Felder kontrolliert, Kunden-Nr, MWST-Code usw.
In allen relevanten Sub habe ich nun diese Funktion als Bedingung eingebaut. Wenn sie nicht erfüllt ist, kommt eine Meldung die sagt ob die Kunden-Nr oder die MWSt oder usw. fehlt.

Gruss Daniel