Version 26 (modified by jachtelik, 12 years ago) |
---|
Integracja z Forte
Menu
- Konfiguracja źródła danych
- Instalacja widoków w FORTE
- Tworzenie połączenia z systemami zewnętrznymi
- SyncAssist - eksport danych z eDokumentów do systemu Forte FK
- OnTimer() - import i eksport danych do/z Forte HM
5.1 Włączanie działania OnTimer()
5.2 Informacje o możliwościach wykorzystania procedury OnTimer()
Konfiguracja źródła danych
Pierwszym krokiem integracji jest zdefiniowanie odpowiedniego źródła danych do baqzy danych systemu FORTE HANDEL. Do tego celu przechodzimy do Ustawień > Panel Sterowania > Pozostałe ustawienia > Źródła danych. W otwartym oknie wybieramy Nowe, a następnie definiujemy parametry połączenia.
- Identyfikator źródła danych - wprowadzamy nazwę połączenia, przykładowo FORTE_HANDEL.
- Sterownik - wybieramy sterownik połączenia, np. MsSQL lub ODBC.
- Ciąg połączenia - ciąg połączenia do bazy danych. Dla MsSQL może to być np.
Server=<adres serwera bazy danych np. 192.168.0.1>;Database=<nazwa bazy danych>;Uid=<uużytkownik>;Pwd=<hasło>;
(Rys.1 Ciąg połączenia z systemem Forte)
Na tym kończy się pierwszy etap integracji.
Instalacja widoków w FORTE
Idąc dalej musimy przygotować na bazie danych systemu FORTE HANDEL. W tym celu mając uprawnienia w systemie Ms SQL Server do tworzenia obiektów na bazie danych wykonujemy skrypt z lokalizacji:public_html/apps/edokumenty/modules/Settings/BSConnectSettings/install/sql/externals/symfonia_forte_handel/01_install_relations_crt.sql:
Tworzenie połączenia z systemami zewnętrznymi
Kolejnym krokiem w tym procesie jest modyfikacja pliku config.inc. Należy dodać lub zmodyfikować wpis w tym pliku:
define('SYNC_ACTIVE','NEW');
Po ponownym zalogowaniu w systemie pojawia się przycisk w menu Narzędzia > Połączenia z systemami zewnętrznymi. Widok przycisku przedstawia poniższy rysunek:
(Rys.2 Połączenia z systemami zewnętrznymi)
Domyślnie żadne połączenie nie jest zdefiniowane. Połączenie tworzymy klikając polecenie Nowy.
(Rys.3 Okno definiowania połączenia z systemem Forte)
W nowo otwartym oknie należy wypełnić pola:
- Nazwę połączenia z systemem zewnętrznym - nazwa musi być unikalna,
- Wybrać identyfikator systemu SYMFONIA_FORTE
- Wskazać źródło wymiany. Jeżeli nie istnieje to można utworzyć.
(Rys.4 Okno definiowania źródła wymiany danych)
W źródle wymiany wprowadzamy:
- unikalną nazwę,
- wybieramy typ z listy rozwijanej (opis poniżej),
- źródło danych (dla typu DB),
- nazwa schematu w bazie Forte (najczęściej będzie to edokumenty - również dla połączeń typu DB)
- ścieżkę składu (dla typów XML i CUSTOM_XML)
- klasę (dla typu CUSTOM_XML)
Źródło wymiany danych może być następujących typów:
- DB - Wymiana poprzez bazę danych. Wymaga istnienia dedykowanych widoków lub odpowiednich zapytań SQL
- XML - wymiana danych poprzez pliki XML. Podaje się ścieżkę do katalogu będącego składem plików
- CUSTOM_XML - jw. z tą różnicą, że wymagana jest dedykowana klasa PHP do obsługi takiego transferu.
Gdy posiadamy już połączenie z systemem zewnętrznym należy skopiować pliki map np.
cp APP_DATA/var/tpl/sync/SYMFONIA_FORTE_HANDEL_columns_map.ini APP_DATA/etc/sync/
a następnie zmienić nazwę skopiowanego pliku w katalogu sync na <IDENTYFIKATOR_Z_BS_CONNECT_SYSTEMS>_columns_map.ini np. 1_columns_map.ini, gdzie jest identyfikator połączenia z okna połączeń z systemami zewnętrznymi.
Przykładowa zawartość takiego pliku to:
[CONTACT] nazwa = name_1 skrot = name_2 kodpocz = code__ rejon = woj___ ulica = street dom = bldnum lokal = fltnum miejscowosc = city__ nip = nip___ pesel = pesel_ regon = regon_ kraj = countr fax = faxnum email = email_ www = www___ telefon1 = ph_num telefon2 = ph_num nazwisko = cntprs imie = cntprs Uwagi = notes_ [DOCUMENT] data = data__ terminplat = paytrm kod = symbol netto = netto_ vat = vat___ brutto = brutto dctype = dctype acorid = acorid [PRODUCT] kod = symbol nazwa = name__ jm = unitid vat = vat_id katalog=pgr_id stanmin = quamin cena_zakupu = purcst cena_sprzedazy = netto_ [FKELEMENT] lp = prior_ kodtw = symbol opis = dscrpt jm = unitnm ilosc = quantm cenanetto = netto_ vat_id = vat_id kodtw = depsym opis = depnam opis = mname_
To jeszcze nie wszystko. Należy również ustawić zasady importu dla danego modułu. Otóż wchodzimy w Połączenia z systemami zewnętrznymi, wybieramy połączenie, edytujemy je - przechodzimy do zakładki Synchronizacja. W tej zakładce wybieramy np. Produkty i dajemy edytuj. W nowym oknie wybieramy akcję i edytujemy ją. Wprowadzamy tam zasady, wg których przebiegnie dalsza akcja.
(Rys.5 Edycja zasad importu danych)
(Rys.6 Edycja zasad importu danych)
Po tak zdefiniowanych elementach należy przejść do odpowiedniego modułu, wybieramy przycisk Połączenie >> <Nazwa połączenia> >> <akcja do wykonania>
(Rys.7 Przyykładowe pobranie dokumentów)
SyncAssist - eksport danych z eDokumentów do systemu Forte FK
<TODO>
OnTimer() - import i eksport danych do/z Forte HM
W systemie Forte (HM) dostępny jest mechanizm wywoływania procedur. Jest to zestaw różnych procedur. Jedną z nich jest OnTimer(). Jest to swego rodzaju Raport, który jest uruchamiany w określonych interwałach czasu.
Włączanie działania OnTimer()
- Mając odpowiednie uprawnienia administratora w systemie Forte HM Z lewego panelu wybieramy menu Ustawienia.
- Po otwarciu się w prawym panelu okna z danymi Ustawień przechodzimy do Ustawienia > Firma > Parametry pracy.
- W prawym panelu przechodzimy do Wykonywanie procedur > OnTimer.
- Po zaznaczeniu OnTimer wybieramy edytuj i wybieramy TAK, a następnie zapisujemy.
Informacje o możliwościach wykorzystania procedury OnTimer()
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:
- język raportów AmBasic - język skryptowy własny dostępny w Handlu Forte, który umieszczamy bezpośrednio w raporcie, jest kombinacją języka VB oraz C, nie posiada dobrej dokumentacji (ta co jest, to załączam do niniejszej instrukcji).
- język VBA, czyli Visual Basic For Applications - produkt wykorzystywany przez Microsoft m.in. w produktach pakietu Office. Jest dość okrojona wersja Visual Basic-a, ale do tych potrzeb jest po prostu rewelacyjna.
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.
- W systemie Forte Handel uruchamiamy z menu VBA > VBA IDE. Uruchamia się środowisko programowania VBA, w którym utworzymy skrypt integracyjny.
- Otwieramy UserElement z lewego Panelu >> pokazuje się okno kodu VBA.
- Wprowadzamy kod VBA skryptu:
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
- Aby wywołać powyższy skrypt dodajemy w tym samym module metodę:
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.
Załączniki
- img001.png (31.9 KB) - dodany przez jachtelik 12 years temu.
- img002.png (49.7 KB) - dodany przez jachtelik 12 years temu.
- forte001.jpg (109.7 KB) - dodany przez jachtelik 12 years temu.
- forte002.jpg (54.1 KB) - dodany przez jachtelik 12 years temu.
- forte003.jpg (60.9 KB) - dodany przez jachtelik 12 years temu.
- forte004.jpg (107.8 KB) - dodany przez jachtelik 12 years temu.
- forte005.jpg (240.1 KB) - dodany przez jachtelik 12 years temu.
-
Generowanie Zamówienia Obcego.vb
(5.4 KB) - dodany przez jachtelik
12 years temu.
Skrypt przykładowy VBA generowania zamówienia obcego