Zmiany pomiędzy wersją 26 and wersją 27 dla DeployerGuide/Customization/Forte

Pokaż
Ignoruj:
Data i czas:
11/13/12 11:11:40 (12 years temu)
Autor:
jachtelik (IP: 213.227.67.33)
Komentarz:

--

Legend:

Bez zmian
Dodane
Usunięte
Zmienione
  • DeployerGuide/Customization/Forte

    v26 v27  
    141141<TODO> 
    142142== !OnTimer() - import i eksport danych do/z Forte HM == #ontimer 
    143  
    144 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. 
    145  
    146 === Włączanie działania !OnTimer() === #ontimer_on 
    147  
    148  * Mając odpowiednie uprawnienia administratora w systemie Forte HM Z lewego panelu wybieramy menu Ustawienia.  
    149  * Po otwarciu się w prawym panelu okna z danymi Ustawień przechodzimy do ''Ustawienia > Firma > Parametry pracy''.  
    150  * W prawym panelu przechodzimy do ''Wykonywanie procedur > !OnTimer''. 
    151  * Po zaznaczeniu !OnTimer wybieramy edytuj i wybieramy TAK, a następnie zapisujemy. 
    152  
    153 === Informacje o możliwościach wykorzystania procedury !OnTimer() === #wykorzystanie_ontimer 
    154 Mając już włączony mechanizm wykonywania raportu !OnTimer musimy wykonać raport. 
    155 Raport jest opcjonalny, gdyż wszystkie niezbędne instrukcje można oczywiście ująć w !OnTimerze. 
    156  
    157 HMF ofertuje wiele możliwości wykonania procedur. Są to: 
    158  * 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). 
    159  * 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. 
    160  
    161  
    162 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. 
    163  1. W systemie Forte Handel uruchamiamy z menu VBA > VBA IDE. Uruchamia się środowisko programowania VBA, w którym utworzymy skrypt integracyjny. 
    164  2. Otwieramy UserElement z lewego Panelu >> pokazuje się okno kodu VBA. 
    165  3. Wprowadzamy kod VBA skryptu: 
    166 {{{ 
    167 Private Sub GenerateZO() 
    168  
    169  
    170 ' Deklaracje zmiennych 
    171 Dim oFactory As Object 
    172 Dim oRec As Object 'Rekord danych 
    173 Dim nError 
    174  
    175 Dim sDocumentType As String ' Typ dokumentu 
    176 Dim sDesc As String ' Opis dokumentu 
    177 Dim sClientCode As String 'Nazwa kontrahenta 
    178 Dim sProductCode As String 'Kod produktu 
    179 Dim sQuantity As String ' Ilosc 
    180 Dim sPrice As String ' Cena netto 
    181  
    182 Dim sPath As String ' ścieżka katalogu z plikami wyeksportowanymi z eDokumentów 
    183 Dim sBkpPath As String  ' ścieżka katalogu, do którego odczytane i przetworzone pliki 
    184                         ' zostaną przeniesione po zakończonym procesie 
    185 Dim sName As String ' nazwa pliku 
    186 Dim sFileName As String ' kompletna ścieżka do pliku 
    187 Dim iFileNum As Integer ' znacznik pliku do operacji Input, Line Input 
    188 Dim sBuf As String ' Bofor stringu odczytanego z pliku 
    189 Dim iCounter As Integer ' Licznik przebiegu po liniach pliku 
    190 Dim iNumber As Integer ' Licznik przebiegu po liniach pozycji produktu w pliku 
    191 Dim oFileSystem As Object ' Obiekt do operacji na plikach 
    192  
    193 Set oFileSystem = CreateObject("Scripting.FileSystemObject") 
    194  
    195 sPath = "C:\Users\ztestowy\dane\" 
    196 sBkpPath = "C:\Users\ztestowy\dane\done\" 
    197 sName = Dir$(sPath & "*.txt") ' Pobranie listy plików w katalogu 
    198  
    199 Do While sName <> "" ' Jeżeli/dopóki istnieją pliki w katalogu to wykonaj dalsze operacje 
    200         sFileName = sPath & sName ' Ustawienie pełnej ścieżki dokumentu 
    201          
    202         iFileNum = FreeFile() 
    203  
    204         iCounter = 1 ' Licznik przebiegu po liniach pliku 
    205         iNumber = 0 ' Licznik przebiegu po pozycjach dokumentu. 
    206                     ' Dopuszczalne wartości dla jednej pozycji dokumentu to 0-2 
    207                     ' 0 - symbol produktu 
    208                     ' 1 - ilość 
    209                     ' 2 - cena netto 
    210         Open sFileName For Input As iFileNum 
    211  
    212         ' Tworzenie obiektów deklaracji danych 
    213         Set oFactory = Application.PropertyAp("HFactory") 
    214         Set oRec = oFactory.NewObject("BIORec") ' Rekord danych, który zostanie wstawiony do systemu 
    215  
    216         sDocumentType = "ZMO" ' Typ dokumentu: Zamówienie obce 
    217         nError = oRec.SetField("typDk", Trim(sDocumentType)) ' Ustawienie typu dokumentu 
    218  
    219         Do While Not EOF(iFileNum) 
    220                         Line Input #iFileNum, sBuf 
    221                          
    222                         Select Case iCounter 
    223                                 Case Is = 1 ' Wywołanie identyfikatora kontrahenta 
    224                                          
    225                                         sClientCode = "" & Trim(sBuf) 
    226                                         nError = oRec.BeginSection("danekh") 
    227                                                 nError = oRec.SetField("KhKod", Trim(sClientCode)) 
    228                                         nError = oRec.EndSection() 
    229                                 Case Is = 2 ' Opis dokumentu 
    230                                         sDesc = Trim(sBuf) 
    231                                         nError = oRec.SetField("opis", Trim(sDesc)) 
    232                                 Case Is > 2 ' Pozycje dokumentu 
    233                                          
    234                                          
    235                                         Select Case iNumber 
    236                                                 Case Is = 0 ' Kod produktu 
    237                                                         sProductCode = Trim(sBuf) 
    238                                                         nError = oRec.BeginSection("Pozycja dokumentu") 
    239                                                         nError = oRec.SetField("kod", Trim(sProductCode)) 
    240                                                          
    241                                                 Case Is = 1 ' Ilość 
    242                                                         sQuantity = Trim(sBuf) 
    243                                                         nError = oRec.SetField("ilosc", Trim(sQuantity)) 
    244                                                          
    245                                                 Case Is = 2 ' Cena netto 
    246                                                         sPrice = Trim(sBuf) 
    247                                                         nError = oRec.SetField("cena", Trim(sPrice)) 
    248                                                         nError = oRec.EndSection() 
    249                                     
    250                                         End Select 
    251                                          
    252                                         iNumber = iNumber + 1 ' Inkrementacja licznika 
    253                                         If iNumber > 2 Then 
    254                                                 iNumber = 0 ' Resetowanie wartości licznika 
    255                                         End If 
    256                                  
    257                                  
    258                         End Select 
    259                          
    260                         iCounter = iCounter + 1 
    261                          
    262             Loop 
    263  
    264                 Dim oFunction As Object 
    265                 Set oFunction = oFactory.NewObject("BFunkcja") 
    266                  
    267                 ' Wywołanie generowania dokumentu 
    268                 Dim DocumentID As Long 
    269                 DocumentID = oFunction.ImportZO(oRec) ' GENEROWANIE DOKUMENTU ZAMÓWIENIA OBCEGO 
    270  
    271                 Close iFileNum ' Zamykanie pliku 
    272                  
    273                 oFileSystem.MoveFile sFileName, sBkpPath & sName ' Przeniesienie pliku do katalogu bkp 
    274                  
    275                 sName = Dir() 
    276 Loop 
    277  
    278 End Sub 
    279  
    280 }}} 
    281  4. Aby wywołać powyższy skrypt dodajemy w tym samym module metodę: 
    282 {{{ 
    283 Private Sub MainDoc_TryToOpen(ByVal Category As String, ByVal Group As String, Name As String, ByVal ActionType As AmOpenAction, Cancel As Boolean) 
    284  'Procedura ta wykonywana jest w momencie uruchamiania okna bądź raportu 
    285   
    286  If Name = "OnTimer" Then GenerateZO 
    287 End Sub 
    288 }}} 
    289  
    290 W takim przypadku w momencie każdorazowego uruchomienia procedury !OnTimer uruchomi się metoda GenerateZO i pliki w katalogu zostaną wczytane do bufora systemu HMF. 
     143[DeployerGuide/Customization/Forte/ForteOnTimer Integracja z Forte HM przy pomocy !OnTimer()]