Wir haben eine Warenwirtschaft und ich will über die com-Schnittstelle eine Rechnung anlegen und diese füllen, beispielsweise mit der Adresse des Kunden. Ich habe die Hilfe von SelectLine zur Anbindung ein wenig durchgeschaut und hab nun folgendes Skript geschrieben:
Code: Alles auswählen
********************************************************************************
* Hier wird ein SelectLine-Prozess aufgerufen, der sich in SelectLine *
* per COM-Schnittstelle einloggt und dort dann seine Befehle ausführt. *
* Es gibt auch Schleifen hier, die mit dem Programmablauf an sich nichtszu tun *
* haben, sind jedoch nötig, damit keine Fehler auftreten. Diese Schleifen *
* verhindern den "Beschuss" von SelectLine mit Befehlen, wenn es noch nicht *
* bereit ist. *
********************************************************************************
#include "activex.ch"
PROCEDURE selectline_rechnung
LOCAL oSelectLine, oleBeleg
oSelectLine := CreateObject("XFakt.App")
********************************************************************
* Hier wird überprüft, ob SelectLine überhaupt installiert ist, *
* und zwar durch Prüfen, ob das oSelectLine-Objekt leer ist. *
********************************************************************
IF Empty( oSelectLine )
MsgBox( "SelectLine ist not installed" )
ENDIF
************************************************************
* Diese Schleife wartet so lange, bis SelectLine eingeloggt*
* ist. *
************************************************************
DO WHILE .NOT. oSelectLine:LoginReady()
END DO
************************************************************
* Wartet so lange, bis SelectLine bereit für Befehle ist. *
* Muss nach jedem Befehl aufgerufen werden, da sich sonst *
* SelectLine abschießt ?! *
************************************************************
DO WHILE .NOT. oSelectLine:ApplicationReady()
END DO
oSelectLine:Login( char2var("kürzel","C"), char2var("passwort","C"))
************************************************************
* Aufruf des Mandant "AWAWI" *
************************************************************
oSelectLine:GetMandant("AWAWI",0)
// Hier kommen die auszuführenden Befehle hin, mit der 2ten Schleife dazwischen
oleBeleg := oSelectLine:NeuerBelegAuto(char2var("R","C"))
DO WHILE .NOT. oSelectLine:ApplicationReady()
END DO
oleBeleg:SetAdresse(char2var("1","C")) --------------------------------> DAS IST DAS PROBLEM !
************************************************************
* Das SelectLine-Objekt muss zerstört werden, da sonst *
* unnötige Ressourcen beanschlagt werden. *
************************************************************
oSelectLine:destroy()
RETURN
Und hier noch der zugehörige Ausschnitt aus der SelectLine-Anleitung:
5. Beleg-Objekt - IOleBeleg
Mit dem Beleg-Objekt können Belege erstellt werden.
Das Objekt wird mit der Funktion NeuerBeleg des Fakt-Objektes erstellt.
Alle Funktionen die mit "Set" beginnen haben dieselbe Funktionalität wie in der Belegmaske, wenn ein
Wert in das entsprechende Feld eingegeben wird. (z.B.: SetAdresse füllt alle Adressfelder etc. des
Belegs mit den Vorgabewerten aus dem Kundenstamm)
Funktion Bemerkung
SetDatum(const Datum: WideString) Ändert oder setzt das Belegdatum.
SetAdresse(const KunLie: WideString) Ändert oder setzt die Belegadresse.
KunLie muss eine gültige Kunden bzw.
Lieferantennummer enthalten.
SetMitarbeiter(const Mit: WideString)
SetLiefertermin(Liefertermin: TDateTime)
SetPreisgruppe(const Preisgruppe:
WideString)
Gültige Werte sind '0'-'9'
SetPreistyp(const PreisTyp: WideString) Ändert oder setzt den Preistyp.
Gültige Werte sind 'B'-Brutto, 'N'-Netto, 'S'-Steuerfrei
SetRabattgruppe(const RabGru:
WideString)
RabGru - gültiger Schlüssel aus den Rabattgruppen