Niniejszy artykuł jest częścią opisu dostępnego pod adresem Integracja z Forte
Dla celów integracji z systemem można wykorzystać mechanizm procedur dostępny w systemie Forte (HM). Procedura jest to pewnego rodzaju raport, który napisany jest w języku stworzony przez Sage Symfonię: AmBasic. Jedną z takich procedur jest raport OnTimer(), który może być uruchamiany w określonych interwałach czasu.
Mając już włączony mechanizm wykonywania raportu OnTimer musimy wykonać raport. Raport jest opcjonalny, gdyż wszystkie niezbędne instrukcje można oczywiście ująć w OnTimerze.
HMF ofertuje wiele możliwości wykonania procedur. Są to:
Na potrzeby integracji sugeruje się wykorzystać język VBA. Import danych do Forte HM (na przykładzie generowania dokumentu Zamówienia Obcego przedstawiam poniżej.
Private Sub GenerateZO()
' Deklaracje zmiennych
Dim oFactory As Object
Dim oRec As Object 'Rekord danych
Dim nError
Dim sDocumentType As String ' Typ dokumentu
Dim sDesc As String ' Opis dokumentu
Dim sClientCode As String 'Nazwa kontrahenta
Dim sProductCode As String 'Kod produktu
Dim sQuantity As String ' Ilosc
Dim sPrice As String ' Cena netto
Dim sPath As String ' ścieżka katalogu z plikami wyeksportowanymi z eDokumentów
Dim sBkpPath As String ' ścieżka katalogu, do którego odczytane i przetworzone pliki
' zostaną przeniesione po zakończonym procesie
Dim sName As String ' nazwa pliku
Dim sFileName As String ' kompletna ścieżka do pliku
Dim iFileNum As Integer ' znacznik pliku do operacji Input, Line Input
Dim sBuf As String ' Bofor stringu odczytanego z pliku
Dim iCounter As Integer ' Licznik przebiegu po liniach pliku
Dim iNumber As Integer ' Licznik przebiegu po liniach pozycji produktu w pliku
Dim oFileSystem As Object ' Obiekt do operacji na plikach
Set oFileSystem = CreateObject("Scripting.FileSystemObject")
sPath = "C:\Users\ztestowy\dane\"
sBkpPath = "C:\Users\ztestowy\dane\done\"
sName = Dir$(sPath & "*.txt") ' Pobranie listy plików w katalogu
Do While sName <> "" ' Jeżeli/dopóki istnieją pliki w katalogu to wykonaj dalsze operacje
sFileName = sPath & sName ' Ustawienie pełnej ścieżki dokumentu
iFileNum = FreeFile()
iCounter = 1 ' Licznik przebiegu po liniach pliku
iNumber = 0 ' Licznik przebiegu po pozycjach dokumentu.
' Dopuszczalne wartości dla jednej pozycji dokumentu to 0-2
' 0 - symbol produktu
' 1 - ilość
' 2 - cena netto
Open sFileName For Input As iFileNum
' Tworzenie obiektów deklaracji danych
Set oFactory = Application.PropertyAp("HFactory")
Set oRec = oFactory.NewObject("BIORec") ' Rekord danych, który zostanie wstawiony do systemu
sDocumentType = "ZMO" ' Typ dokumentu: Zamówienie obce
nError = oRec.SetField("typDk", Trim(sDocumentType)) ' Ustawienie typu dokumentu
Do While Not EOF(iFileNum)
Line Input #iFileNum, sBuf
Select Case iCounter
Case Is = 1 ' Wywołanie identyfikatora kontrahenta
sClientCode = "" & Trim(sBuf)
nError = oRec.BeginSection("danekh")
nError = oRec.SetField("KhKod", Trim(sClientCode))
nError = oRec.EndSection()
Case Is = 2 ' Opis dokumentu
sDesc = Trim(sBuf)
nError = oRec.SetField("opis", Trim(sDesc))
Case Is > 2 ' Pozycje dokumentu
Select Case iNumber
Case Is = 0 ' Kod produktu
sProductCode = Trim(sBuf)
nError = oRec.BeginSection("Pozycja dokumentu")
nError = oRec.SetField("kod", Trim(sProductCode))
Case Is = 1 ' Ilość
sQuantity = Trim(sBuf)
nError = oRec.SetField("ilosc", Trim(sQuantity))
Case Is = 2 ' Cena netto
sPrice = Trim(sBuf)
nError = oRec.SetField("cena", Trim(sPrice))
nError = oRec.EndSection()
End Select
iNumber = iNumber + 1 ' Inkrementacja licznika
If iNumber > 2 Then
iNumber = 0 ' Resetowanie wartości licznika
End If
End Select
iCounter = iCounter + 1
Loop
Dim oFunction As Object
Set oFunction = oFactory.NewObject("BFunkcja")
' Wywołanie generowania dokumentu
Dim DocumentID As Long
DocumentID = oFunction.ImportZO(oRec) ' GENEROWANIE DOKUMENTU ZAMÓWIENIA OBCEGO
Close iFileNum ' Zamykanie pliku
oFileSystem.MoveFile sFileName, sBkpPath & sName ' Przeniesienie pliku do katalogu bkp
sName = Dir()
Loop
End Sub
Private Sub MainDoc_TryToOpen(ByVal Category As String, ByVal Group As String, Name As String, ByVal ActionType As AmOpenAction, Cancel As Boolean) 'Procedura ta wykonywana jest w momencie uruchamiania okna bądź raportu If Name = "OnTimer" Then GenerateZO End Sub
W takim przypadku w momencie każdorazowego uruchomienia procedury OnTimer uruchomi się metoda GenerateZO i pliki w katalogu zostaną wczytane do bufora systemu HMF.