BBASIC Help-Funktionen
Der Einstieg in die APP-Entwicklung mit BBasic

Der Einstieg in die Programmierung und APP-Enbtwicklung geht am einfachsten mit Beispielen und durch COPY-Paste

Wie liefern ein funktionsfähiges-Muster-Plugin mit - das die komplette Verwaltung eines Ortsverbandes einer Partei erledigt.

Was Sie im mitglelieferten Beispiel-Plugin sehen:

An dem hier abgebildeten Makro sehen Sie eindrucksvoll wie mächtig BBasic ist. Die gesamte Lagerverwaltung in einer Programm-Zeile.

Die Buchhaltung sehen Sie garnicht erst - die wird im Befehl "bbasic.Fakt_AusgangsrechnungAnlegen" mit angelegt. ggf. sogar auf abweichende Erlöskonten etc.

Dim ausgre As DataClass.CustomerBills = bbasic.Fakt_AusgangsrechnungAnlegen(False, "ABO:" + kunde.Adress.Name + " " + artikel.Name, kunde.Id, _ketteninfo.Startwert, 0, today, RechnungsBemerkung$, RechnungsBemerkung2

Ohne die hilfreiche Dokumentation ist das Programm nur wenige Leilen lang.

SEPA_Lastschrift.Create_SEPA(kunde.Adress.Bezeichnung, kunde.Konto.AccountingUniqueID + "ABO", kunde.Adress.Banking_Sepa_MandateID, kunde.Adress.Banking_Sepa_MandateDate, "ABO " + artikel.Name + " " + periodendatum.YYYYMM, bank.IBAN, bank.BIC, genAbsolute(ausgre.Open_Value), 0, kunde.Konto.AccountingUniqueID, "Last " + periodendatum.YYYYMM, kunde.Adress.EMail, 0)

Das sind mächtige Befehle die Ihnen hier zur Verfügung stehen!

Sie finden das komplette Muster finden Sie im Verzeichnis BBasic\ProgrammNET\Samples

Sie können es mit VisualStudio - welches Sie kostenlos im Internet von Microsoft herunterladen können - jederzeit selbst ändern.
Das ist auch die Herangehensweise die wir zum Einstieg empfehlen. Copy - Paste - und ein paar Anpassungen... und sich dann schrittweise weiter vortasten.
Deshalb haben wir uns auch für dieses Muster entschieden - es hat alle wesentlichen Aspekte bereits zum Kopieren.

Hinweise zum Programmieren eigener Apps in BBasic

 

 

Wie sie starten

Download des kostenlosen Visual-Studio von Microsoft

 

Ab jetzt können Sie im Programm stöbern und Veränderungen durchführen

Damit das Programm nach Änderungen auch gestartet wird müssen Sie die DLL-Datei ins Pluginverzeichnis kopieren ODER in der CONIG-Datei unter dem PC-Namen "PluginPath"

den Pfad der DLL eintragen, damit auf Ihrem PC auch Plugins aus diesem Pfad geladen werden.

 Muster - Rechnungerstellung mit Finanzbuchhaltung und Lastschrift in wenigen Zeilen - hier ohne Beschreibung, deshalb nochmals deutlich kürzer

  Public Sub abobuchen()
        Dim bbasic As New XBBMain(bbsys, "ABO Buchen")
        Dim tb As New BBasic.Class_Textbild(bbsys)
        Dim periodendatum As New BBDate
        periodendatum.DatumStr = "31.12." + Date.Now.Year.ToString
        Dim Buchungsdatum As New BBDate
        Buchungsdatum.SetToday()

        tb.edef("Artikel", "", Class_bbsys.TextbildLaengen.TBL_Artikel, 1)
        tb.edef("Bis Datum", periodendatum.DatumStr, Class_bbsys.TextbildLaengen.TBL_Datum, 2)
        tb.edef("Buchung Datum", Buchungsdatum.DatumStr, Class_bbsys.TextbildLaengen.TBL_Datum, 3)
        tb.Eingabe(2, "ABOBuchen")
        While tb.ReturnCode < 0
            tb.Wartebischen()
        End While
        If tb.ReturnCode > 0 Then
            tb.Entfernen()
            Exit Sub
        End If

        Dim PointerToArtikel_des_Abo% = tb.TXTInteger(1)
        If PointerToArtikel_des_Abo = 0 Then
            tb.Entfernen()
            Exit Sub
        End If
        periodendatum = tb.TXTBBDate(2)
        Buchungsdatum = tb.TXTBBDate(3)

        Dim RechnungsBemerkung$ = "Folge_ABO-Buchung"
        Dim RechnungsBemerkung2$ = "ABO: " + periodendatum.YYYYMMDD + " " + bbsys.Cache.ArtikelName(PointerToArtikel_des_Abo)

        Dim abo As New Abos(bbsys)
        abo.Search("PointerToArtikel =" + Str(PointerToArtikel_des_Abo) + " and " + "Enddatum >=" + periodendatum.QSQLDT + " and startdatum <" + periodendatum.QSQLDT + " and (isnull(abgerechnetbis) or (abgerechnetbis < " + periodendatum.QSQLDT + "))")

        Dim druck As New BBasic.Drucker(bbsys, "Liste der Abo-Buchungen Stichtag:" + periodendatum.DatumStr, "")
        druck.SetSchrift_SmallFontKlein9()
        druck.TabelleStart(">1000|<2000|>500", "Rechnung|Name|Betrag")

        Dim anz As Integer = 0
        While abo.Nof
            anz = anz + 1
            Dim kunde As New DataClass.Customer(bbsys, abo.PointerToKunde)
            Dim trid% = bbsys.TransAktionStarten("ABO:" + kunde.AdressFromCache.Bezeichnung)

            Dim _ketteninfo As KettenInfo = bbasic.Fakt_REPOS_StarteKette("A" + abo.PointerToArtikel.ToString + "." + abo.PointerToKunde.ToString)
            bbasic.Fakt_REPOS_EinzelneKettenZeileSchreiben(_ketteninfo, abo.PointerToArtikel, 1, abo.Preis, "", 0, "", 0#, 0, 0&)
            bbasic.Fakt_REPOS_KetteAbschliessen(_ketteninfo) 'Es kommen keine weiteren Artikel mehr

            Dim ausgre As DataClass.CustomerBills = bbasic.Fakt_AusgangsrechnungAnlegen(False,"ABO:" + kunde.Adress.Name + " " + bbsys.Cache.ArtikelName(abo.PointerToArtikel),
kunde.Id, _ketteninfo.Startwert, 0,Buchungsdatum, RechnungsBemerkung$, RechnungsBemerkung2$, 0)

            If bbsys.Config_ConfigurationSQLCached("ABO/AUTO/ABOLAGERBUCHEN") = "1" Then
                Dim lagerok_int%
                bbasic.Art_LagerBestandVeraendernOderTesten(PointerToArtikel_des_Abo, 1, abo.Preis, XBBMain.BestandveraenderungsFlag.BESTANDVFLagerAbbuchen, lagerok_int%,
"ABO " + ausgre.EXTNummer + " " + kunde.Adress.Name, 0, kunde.Konto.AccountingUniqueID) 
            End If
    
            Dim bemerkung$ = ""
            If kunde.Adress.PaymentMode > 0 Then
                Dim SEPA_Lastschrift As New BBasic.DataClass.Direct_Debit(bbsys)
                Dim bank As New BBasic.DataClass.Banken(bbsys)
                If bank.TryLoadBank(kunde.PointerToAdress) Then
                    Dim lastid% = SEPA_Lastschrift.Create_SEPA(kunde.Adress.Bezeichnung, kunde.Konto.AccountingUniqueID + "ABO", kunde.Adress.Banking_Sepa_MandateID,
                                  kunde.Adress.Banking_Sepa_MandateDate, "ABO " + bbsys.Cache.ArtikelName(abo.PointerToArtikel) + " " + periodendatum.YYYYMM, bank.IBAN, bank.BIC,
                                  ausgre.Open_Value, 0, kunde.Konto.AccountingUniqueID, "Last " + periodendatum.YYYYMM, kunde.Adress.EMail, 0)
                    bemerkung$ = "Lastschrift " + lastid.ToString
                End If

            Else
                bemerkung$ = "Keine Lastschrift"
            End If
     
            abo.AbgerechnetBis.Datum = periodendatum.Datum
            abo.Bemerkung = bemerkung
            abo.Save()

            bbsys.TransAktionBeenden("ABO:" + kunde.Adress.Name, trid%, False) 'Jetzt ist alles erledigt. Alle Daten schreiben
            druck.TabelleBunt(ausgre.EXTNummer + vbTab + kunde.AdressFromCache.Bezeichnung + vbTab + FormatierteZahl(ausgre.REBetrag), Drucker.TabellenFarbe.TABF_Normal)

            If bbsys.Config_ConfigurationSQLCached_Integer("ABO/AUTO/ANZAHLAUSDRUCKE") > 0 Then
                bbasic.Fakt_RechnungDrucken_Sub_Designer(ausgre.Id, "ABORECHNUNG",bbsys.Config_ConfigurationSQLCached_Integer("ABO/AUTO/ANZAHLAUSDRUCKE"),
                                                     0, 0, Class_bbsys.ListAusgabe.ListAusgabe_Drucker, True,  True)

            End If
            abo.Next() 'Nächstes Abo suchen
        End While
        druck.Endprint()
        bbsys.MSGBox("heutige Abobuchungen (Anz:" + anz.ToString + ") automatisch verarbeitet")

    End Sub

 

 

 

Example Title
Copy Code
'Die Klasse ABO (siehe hier im Quelltext. Automatisch Generiert)
Dim abo As New Abos(bbsys)
abo.Search("PointerToArtikel =" + Str(PointerToArtikel_des_Abo) + " and " +
"Enddatum >=" + periodendatum.QSQLDT + " and startdatum <" + periodendatum.QSQLDT + " and (isnull(abgerechnetbis) or (abgerechnetbis < " + periodendatum.QSQLDT + "))")
'(virtuellen)Drucker für Protokoll initialisieren
Dim druck As New BBasic.Drucker(bbsys, "Liste der Abo-Buchungen Stichtag:" + periodendatum.DatumStr, "")
druck.SetSchrift_SmallFontKlein9()
druck.TabelleStart(">1000|<2000|>500", "Rechnung|Name|Betrag")
Dim anz As Integer = 0
While abo.Nof
anz = anz + 1
'------------------------
Dim kunde As New DataClass.Customer(bbsys, abo.PointerToKunde)
'Wir nutzen Transaktionen - damit die Daten immer konsistent sind
Dim trid% = bbsys.TransAktionStarten("ABO:" + kunde.AdressFromCache.Bezeichnung) 'Transaktionsid damit das Programm die korrekte Reihenfolge überprüfen kann
'Als erstes müssen die Artikel-Postitionen der Rechnung geschrieben werden
'(Nennt sich Kette - weil es eine aneinanderreihung von Artikelpositionen ist)
Dim _ketteninfo As KettenInfo = bbasic.Fakt_REPOS_StarteKette("A" + abo.PointerToArtikel.ToString + "." + abo.PointerToKunde.ToString)
'Die og Nummer ABO xxxxx.xxxxx ist unwichtig - erscheint aber in den Protokoll-Dateien wie Transakt - könnte hilfreich werden
bbasic.Fakt_REPOS_EinzelneKettenZeileSchreiben(_ketteninfo,
abo.PointerToArtikel, 'Welcher artikel
1, 'Stückzahl (Menge)
abo.Preis, 'Preis
"", 0, 'Alles Standard
"", 'ggf. Zusatztext zur Artikel-Position
0#, 0, 0&) 'Alles Standard
'Ggf. noch weitere Zeilen (Artikel-Positionen der Rechnung)...
'bbasic.Fakt_REPOS_EinzelneKettenZeileSchreiben(_ketteninfo, PointerToArtikel_des_Abo, menge, preis#, "", 0, "Zusatztext", Ggf_SonmderEK#, 0, 0&)
'Alle Zeilen fertig
bbasic.Fakt_REPOS_KetteAbschliessen(_ketteninfo) 'Es kommen keine weiteren Artikel mehr
'Jetzt wird die eigentliche Ausgangsrechnung angelegt
Dim ausgre As DataClass.CustomerBills = bbasic.Fakt_AusgangsrechnungAnlegen(False,
"ABO:" + kunde.Adress.Name + " " + bbsys.Cache.ArtikelName(abo.PointerToArtikel), 'Text
kunde.Id, 'Welcher Kunde
_ketteninfo.Startwert, 'Welche Artikel (siehe oben)
0, 'Keine Proforma-Rechnung
Buchungsdatum, 'Buchungsdatum
RechnungsBemerkung$, RechnungsBemerkung2$, 'Bemerkung
0) 'Rabatt
 
'--------------------------------------
'TODO?? Soll Lagerbuchung durchgeführt werden?
If bbsys.Config_ConfigurationSQLCached("ABO/AUTO/ABOLAGERBUCHEN") = "1" Then 'Wir haben soeben einen neuen Config-Eintrag definiert. Der ist im Standard '' (Leer)
Dim lagerok_int%
bbasic.Art_LagerBestandVeraendernOderTesten(PointerToArtikel_des_Abo, 'Welcher Artikel soll gebucht werden
1, 'Wieviel Stück sollen gebucht werden
abo.Preis, 'Der Wert der veränderung
XBBMain.BestandveraenderungsFlag.BESTANDVFLagerAbbuchen, 'Das Lager soll abgebucht werden (ggf. Reservierung oder Gutschrift als Möglichkeiten)
lagerok_int%, 'Rückgabewert der zB bei Produktion oder nur Test bestimmte Infos erhält
"ABO " + ausgre.EXTNummer + " " + kunde.Adress.Name, 'Text in der Lagerkartei
0, 'Lagerposition 0=Standard
kunde.Konto.AccountingUniqueID) 'KontoID
End If
'------------------------------------------------bis hier------------------------------
 
Dim bemerkung$ = ""
'---------------------------------------
'SEPA - Lastschrift anlegen - wenn der Kunde einen Abbuchungsauftrag erteilt hat
'---------------------------------------
If kunde.Adress.PaymentMode > 0 Then
Dim SEPA_Lastschrift As New BBasic.DataClass.Direct_Debit(bbsys)
Dim bank As New BBasic.DataClass.Banken(bbsys)
If bank.TryLoadBank(kunde.PointerToAdress) Then 'Hat der Kunde überhaupt eine Bank hinterlegt
Dim lastid% = SEPA_Lastschrift.Create_SEPA(kunde.Adress.Bezeichnung, 'Name
kunde.Konto.AccountingUniqueID + "ABO", 'Kennzeichen für den Kunden
kunde.Adress.Banking_Sepa_MandateID, 'Mandat
kunde.Adress.Banking_Sepa_MandateDate, 'Mandat vom (Datum)
"ABO " + bbsys.Cache.ArtikelName(abo.PointerToArtikel) + " " + periodendatum.YYYYMM, 'Lastschrift-Text
bank.IBAN, bank.BIC, 'Bank Konto
genAbsolute(ausgre.Open_Value), 'Offener Rechnungsbetrag - vorsichtshalber gerundet (keine halben Cent)
0, 'Fälligkeit in Tagen (sofort)
kunde.Konto.AccountingUniqueID, 'Fibu-Kontonummer zum automatischen Buchen später
"Last " + periodendatum.YYYYMM, 'FiBu-Bemerkung zum automatischen Buchen später
kunde.Adress.EMail, 'EMail-Adresse zur vorgeschriebenen Vorab-Information
0) 'Mandant 0=Aktueller Mandant
bemerkung$ = "Lastschrift " + lastid.ToString
End If
Else
bemerkung$ = "Keine Lastschrift"
' Kunde zahlt selbst
End If
'Update - das diese Periode berechnet ist - damit nicht ggf 2x berechnet wird
abo.AbgerechnetBis.Datum = periodendatum.Datum
abo.Bemerkung = bemerkung
abo.Save()
 
bbsys.TransAktionBeenden("ABO:" + kunde.Adress.Name, trid%, False) 'Jetzt ist alles erledigt. Alle Daten schreiben
druck.TabelleBunt(ausgre.EXTNummer + vbTab + kunde.AdressFromCache.Bezeichnung + vbTab + FormatierteZahl(ausgre.REBetrag), Drucker.TabellenFarbe.TABF_Normal)
If bbsys.Config_ConfigurationSQLCached_Integer("ABO/AUTO/ANZAHLAUSDRUCKE") > 0 Then 'Wir haben soeben einen neuen Config-Eintrag definiert. Der ist im Standard '' (Leer)
'TODO?? Soll Rechnung gedruckt werden? (Wenn Kommunikationsflag Fibu wird automatisch per Mail verschickt)
bbasic.Fakt_RechnungDrucken_Sub_Designer(ausgre.Id,
"ABORECHNUNG",'Formular
bbsys.Config_ConfigurationSQLCached_Integer("ABO/AUTO/ANZAHLAUSDRUCKE"), 'Anzahl ausdrucke
0, 'Defnition wie gerundet werden soll 0=Standard
0, 'Soll der Designer aufgerufen werden (0=Nein)
Class_bbsys.ListAusgabe.ListAusgabe_Drucker, 'Ausgabe auf den Drucker bzw EMail (nicht Vorschau)
True, 'Versuche die EMail zu nutzen - falls hinterlegt
True) 'Direkt als EMail verschicken - falls zulässig
End If
 
'--------------------------------------------------------------------------------------------
abo.Next() 'Nächstes Abo suchen
See Also

Technische Dokumentation

Programmieren mit BBasic