Import z pliku XLS (excel)

Moduł konfiguracji programu StudioSystem posiada funkcjonalność pozwalającą na ustawienie parametrów do uniwersalnego importu danych do bazy SQL z plików w formacie XLS lub XLSX (Microsoft Excel) lub plików tekstowych typu CSV (dat).

import xls konfiguracja

Schematy importu danych

Import realizowany jest za pomocą dedykowanej transakcji (role_sys/import_xls.aspx) jednak, aby import został wykonany należy odpowiednio skonfigurować schemat za pomocą którego dane będą pobierane. Można wgrywać dowolne dane do dowolnych tabel na podstawie dowolnej liczby schematów importu danych z plików XLS.

W przykładach omówimy najczęściej wykorzystywane konfiguracje schematów importu kartotek magazynowych i kontrahentów oraz dokumenty zleceń wydań z magazynu. Za pomocą schematów można jednak przekazywać dowolne informacje w tym konfigurację oprogramowania pomiędzy różnymi instalacjami – bazami danych.

 

Schemat składa się z dwóch części zapisywanych w tabeli x_xls:

  • Nagłówka – ogólne informacje dotyczące schematu
    • AKTYWNE – możliwość wyłączenia schematu do wyboru przez użytkownika.
    • NAZWA – nazwa schematu.
    • TABELA – nazwa tabeli bazy SQL do której mają zostać dopisane dane.
    • ZAKŁADKA – numer zakładki z arkusza excela w której zapisane są dane do importu. Domyślnie jest to pierwsza zakładka numerowane od 0.
    • KOLEJNY SCHEMAT – podanie numeru referencyjnego schematu jaki ma być wykonany automatycznie jako kolejny. Zastosowanie gdy w 1 pliku excela (XLS) zapisane są dane które mają być wgrane do różnych tabel powiązanych, np. dokument zlecenia i kartoteki klientów.
    • REFNO – numer referencyjny schematu nadawany automatycznie w momencie tworzenia nowego schematu – dopisywania rekordu w tabeli.
    • ŹRÓDŁO DANYCH – domyślnie puste, powoduje zapis danych w tabeli w bazie na podstawie definicji connection string softwarestudioConnectionString, można podać inną nazwę połączenia do bazy aby dokonać zapisu w innej bazie np. customConnectionString.
    • DEFINICJA UPDATE – standardowo import wykonuje polecenie dopisywania danych do bazy (INSERT) możemy jednak zmienić tryb na aktualizację danych wypełniając kolumnę poleceniem UPDATE= i podając nazwę kolumny stanowiącej klucz aktualizacji danych np. UPDATE=INDEKS oznacza, że dane będą aktualizowane wg unikalnej kolumny INDEKS. W przypadku gdy chcemy zablokować powielanie importowanych pozycji możemy wprowadzić warunek INSERT. Na przykład dla kartoteki asortymentowej, w której chcemy uniknąć powielenia kodów EAN zastosujemy : EANASN,1=1. W tym przypadku EANASN jest wartością porównywaną pomiędzy importowanym plikiem a wartościami w tabeli, natomiast warunek 1=1 wynika z konstrukcji zapytania. Ważnym jest, żeby porównanie było prawdziwe – logiczne 1, ponieważ odnosi się do warunku filtrowania. Inne możliwe rozwiązanie to np. EANASN,magazyn=@MAGAZYN.
    • SYSTEMOWE – oznaczenie czy dany zapis stanowi konfigurację systemową i będzie kopiowany z bazy root podczas instalacji
    • ROLASYS – możliwość oznaczenia schematu wg symbolu roli systemowej, tak aby wyświetlając transakcję importu (import_xls.aspx) móc pozwolić użytkownikowi wybrać pozycje tylko dla roli w której pracuje użytkownik. W przypadku polecenie UPDATE warunek jest dodawany do klauzuli WHERE czyli aktualizowane będą rekordy dla wskazanego symbolu roli systemowej.
    • MAGAZYN – możliwość ograniczenia wyboru schematów importu do pozycji przypisanych do danego magazynu, w przypadku polecenie UPDATE warunek jest dodawany do klauzuli WHERE czyli aktualizowane będą rekordy dla wskazanego symbolu magazynu.
    • PRX – możliwość ograniczenia wyboru schematów importu do pozycji przypisanych do oznaczenia PRX
    • FILTR – możliwość wprowadzenia dowolnego dodatkowego warunku filtrowania wykorzystywanego przy aktualizacji danych (UPDATE). Warunek pozwala wykluczyć wykonanie update dla pozycji, która nie spełnia dodatkowego warunku. Warunek może zawierać odwołania do zmiennych systemowych np. @MAGAZYN, @ODDZIAL, @MPK, @FIRMA, @KTO
    • TYP_PLIK – Dla rekordu nagłówkowego (typdanych=H), określa w jakim formacie będzie importowany plik, domyślnie gdy jest pusta wartość w kolumnie lub NULL jest to plik w formacie *.xls, ale można wpisac *.dat, *.txt, *.csv do importu plików tekstowych
    • SEPARATOR- dla defnicji importu z plików typu CSV należy podać znaki znak będzie znacznikiem podziału poszczególnych kolumn, należy podać znak przecinek (,) średnik (;) lub pionowa kreska – pipe (|).
  • Pozycji – okno otwiera się po zaznaczeniu w tabeli nagłówka schematu i wybraniu polecenia „Edytuj kolumny”
    • AKTYWNE – możliwość wyłączenia z importu określonej kolumny
    • KOLEJNOŚĆ – pozwala określić w jakiej kolejności kolumny będą przetwarzane i zapisywane w historii importu.
    • OPIS KOLUMNY – informacja co zawierać powinna kolumna
    • KOLUMNA SQL – nazwa kolumny w tabeli do której mają zostać wpisane dane
    • WARTOŚĆ – informacja jaka ma zostać wpisana do do bazy SQL
      • Wartość odczytana z tabeli w excelu podana jest wprost jako nazwa kolumny z pliku XLS – zalecane jest stosowanie tego samego nazewnictwa co w bazie SQL dla ułatwienia konfiguracji schematu i diagnostyki. Zaleca się używanie jako nazw kolumn ciągów znaków bez znaków specjalnych MINUS oraz SPACJI, zamiast spacji należy czy myślnika zaleca się używać znak podkreślenia . Czyli kolumna zawierająca kod pocztowy nie może nazywać się [KOD POCZTOWY],  a powinna [KODPOCZTOWY] lub [KOD_POCZTOWY].
      • Wartość odczytywane z tabeli w pliku excel podawana jako numer kolumny tabeli, w sytuacji, gdy kolumna jest PUSTA (brak nazwy nagłówka kolumny), przykładowo kolumna C nie zawiera nazwy i jest pusta to w konfiguracji wpisujemy numer kolumny 3.
      • Wartość wynikająca z połączenia treści odczytywany z dwóch lub więcej kolumn pliku excel mogą być zapisane w jednej kolumnie tabeli bazy danych SQL. W takim wypadku należy wymienić kolumny z jakich mają być dane odczytane, kolumny rozdzielamy znakiem |. Przykładowo chcemy odczytać nazwę kontrahenta z pliku z danymi SAP, gdzie dane w SAP są w 3 kolumnach to definiujemy wartość jako: Name|Name 2|Name 3. W takiej sytuacji dane z tych kolumn zostaną odczytane i zapisane w jednej kolumnie NAZWA tabeli knkon.
      • Podstawienie (zamiana) znaków lub fraz w trakcie importu. Możemy w sposób dynamiczny zamienić dowolne znaki (frazy) odczytywane z pliku XLS(x) i zapisać zmienione wartości w bazie danych. W takim wypadku w kolumnie FILTR dla danej pozycji definiujemy warunek dla wykonania polecenie replace, w następujący sposób. Dane do zamiany wpisujemy StaraFraza1=NowaFraza1|StaraFraza2=NowaFraza2, czyli poszczególne polecenia rozdzielamy znakiem |, a same frazy do zamiany znakiem =. Przykładowo chcemy usunąć z danych znaczniki #, w takim wypadku wprowadzamy #= . Jeżeli jednocześnie chcemy zamienić frazę Sp. z oo na Sp. z o.o. to wpisujemy #= |Sp. z oo=Sp. z o.o.
      • Wartość stała wpisywana do kolumny tabeli SQL poprzedzona musi być symbolem #, np. ACH ma mieć przypisaną wartość 1, to wprowadzamy #1
      • Wartość zmienna odczytywana z kontekstu zalogowanego użytkownika poprzedzona musi być symbolem @, Odczytywany może być każdy parametr przypisany do zalogowanego użytkownika  (kolumny z tabeli _users) oraz specjalne parametry np.
        • @ROLA – kod roli do której zalogowany jest użytkownik, odczyt z tabeli _users
        • @ROLASYS – kod roli systemowej do której zalogowany jest użytkownik, odczyt z tabeli _users
        • @ODDDZIAL – symbol oddziału do którego zalogowany jest użytkownik, odczyt z tabeli _users
        • @MAGAZYN – kod magazynu w jakim pracuje użytkownik, odczyt z tabeli _users
      • Wartość uzyskiwana w wyniku działania funkcji poprzedzona znakiem $
        • $REFNO – generuje nowy unikalny numer referencyjny rekordu
        • $DOKUMENT_REFNO – pobiera numer referencyjny importu danych, wykorzystywany gdy chcemy całość importu oznaczyć wspólnym identyfikatorem, np. pozycje dokumentu zlecenia magazynowego mają być zgrupowane w jeden dokument.
        • $POZYCJA_REFNO – pobiera numer referencyjny dla importowanego rekordu i zapisuje identyczną wartość we wszystkich kolumnach dla importowanego rekordu, np. dpzle.REFNO_DPZLE i dpzle.REFNO_POZYCJA.
        • $LICZNIK – nadaje kolejny numer dokumentu wykorzystując funkcje numeracji. Wartość wymaga wskazania parametrów pozwalających określić metodę i format zwracanego numeru, np. $LICZNIK,AAA,BBB,#RR#XXXX (http://www.programmagazyn.pl/numeracja-dokumentow-funkcja-licznik/) :
          • AAA – 3 znakowy identyfikator numeracyjny
          • BBB – 3 znakowy symbol dodawany na początku numeru
          • #RR#XXXX – format zwracanych danych funkcji licznik, gdzie RR oznacza symbol roku, a XXXX formatowanie kolejnego numeru.
        • $NRIDODN – odczytuje identyfikator kontrahenta wybranego z listy podczas importu – lista rekordów z tabeli KNKON wyświetla gdy transakcja jest uruchamiana z parametrem nridodn
        • $TEST_WYSTEPOWANIA – funkcja pozwala odczytać dowolną informację z dowolnej tabeli na podstawie wybranej kolumny. Przekazujemy 4 parametry: po przecinku za nazwą funkcji, np. odczyt identyfikatora kontrahenta na podstawie nazwy skróconej $TEST_WYSTEPOWANIA,NRIDODN,KNKON,SKROCO,NAZWA_KLIENTA
          • NRIDODN – to nazwa kolumny, której wartość chcemy odczytać, np. identyfikator kartoteki klienta
          • KNKON – nazwa tabeli z której dane będą pobrane, np. kartoteka klientów
          • SKROCO – nazwa kolumny w tabeli wg której będzie wykonywane poszukiwanie rekordu, np. nazwa skrócona
          • NAZWA_KLIENTA – nazwa kolumny w pliku excel w której przechowywana jest informacja do wyszukania np. nazwa skrócona
        • $TEST_WYSTEPOWANIA – druga wersja funkcji pozwala odczytać dowolną informację z dowolnej tabeli na podstawie wybranej kolumny. Przekazujemy 5 parametrów: po przecinku za nazwą funkcji, np. odczyt identyfikatora kontrahenta na podstawie nazwy skróconej $TEST_WYSTEPOWANIA,NRIDODN,KNKON,SKROCO,NAZWA_KLIENTA,FILTR
          • NRIDODN – to nazwa kolumny, której wartość chcemy odczytać, np. identyfikator kartoteki klienta
          • KNKON – nazwa tabeli z której dane będą pobrane, np. kartoteka klientów
          • SKROCO – nazwa kolumny w tabeli wg której będzie wykonywane poszukiwanie rekordu, np. nazwa skrócona
          • NAZWA_KLIENTA – nazwa kolumny w pliku excel w której przechowywana jest informacja do wyszukania np. nazwa skrócona
          • FILTR – przekujemy dodatkowy warunek filtrowania w celu sprecyzowania pozycji, której szukamy. Możemy podać dowolny poprawny warunek filtrowania i wykorzystać zmienne: @NRIDODN, @ROLASYS, @MAGAZYN, @ODDZIAL
        • $ID_IMPORT – numer referencyjny importu
        • $ID_XLS – numer referencyjny wzorca importu refno z tabeli x_xls
        • $SUBSTRING – funkcja pozwalająca wykonać polecenie substring na danych pobranych z pliku XLS. Wymagane jest podanie 4 parametrów: np. $SUBSTRING,INDEKS,3,10
          gdzie:

          • pierwszy to nazwa funkcji $SUBSTRING
          • drugi parametr to nazwa kolumny z pliku XLS skąd mają być pobrane dane
          • trzeci parametr wskazuje od którego znaku mają być dane czytane
          • czwarty parametr wskazuje ile znaków ma być odczytanych, jeżeli podamy wartość 0 to będą odczytane wszystkie dane do końca ciągu znaków. Powyższy przykład wywołania oznacza pobranie danych z kolumny INDEKS od 3 znaku i maksymalnie kolejnych 10 znaków.
        • $DPCEC – funkcja pozwala zapisywać dane z kolumn tabeli excela bezpośrednio do tabeli dpcec jako cechy dla danego wiersza. Przykładowo importujemy kartoteki do których w jednej tabeli excela zapisane są cechy. Cechy te chcemy zaimportować bezpośrednio do tabeli dpcec, wykorzystujemy do tego funkcje $DPCEC. Więcej na ten temat: http://www.programmagazyn.pl/studio-system/konfiguracja/ustawienia/import-z-excela-plik-xls/funkcja-dpcec/
        • $FILTR – funkcja pozwala określić czy rekord zawierający określone dane może być dopisany do bazy czy też nie. Możemy określić czy dane zostaną dopisane jeżeli kolumna zawiera określoną frazę czy też zostaną dopisane gdy jej nie zawiera. Funkcja wymaga wskazania parametrów w następujący sposób: $FILTR:NAZWA_KOLUMNY_EXCEL|OPERATORWARTOŚĆ
          gdzie: OPERATOR przyjmuje wartość = (zawiera) lub ! (nie zawiera)
          np
          $FILTR:Tax code 1|=113
          oznacza, że importowane będą wyłącznie rekordy gdy w kolumnie Tax code 1 znajdzie się wartość 113
          lub inny przykład
          $FILTR:Tax code 1|!#
          oznacza, że importowane będą rekordy, gdy w polu Tax code 1 nie będzie znaku #. Rekordy zawierające ten znak będą ignorowane.
    • TYP DANYCH – oznaczenie w jaki sposób dane wgrywane do bazy SQL mają być formatowane
      • B – format typu logicznego True/False. Program weryfikuję poprawność wprowadzonych danych, jeżeli dane w tabeli excel są niepoprawne to zostanie zapisana wartość false, Dopuszczalne wartości do zapisu jako True to: T, t, TAK, tak, 1, pozostałe zostaną zinterpretowane jako false.
      • C – format tekstowy lub daty z pliku XLSX
      • D – format daty dla danych z pliku XLS, w przypadku formatu XLSX należy korzystać z typu C lub E. Program weryfikuje czy podane dane są poprawne w formacie daty ROK-MIESIĄC-DZIEŃ.
      • E – format tekstowy, ale wartość pusta jest zamieniana na NULL, zastosowanie przy imporcie dat z pliku XLSX
      • F – format numeryczny dla wartości zmiennej (float)
      • M – (-1) * format numeryczny dla wartości całkowitych (int). Wartość numeryczna z kolumny Excela jest mnożona przez (-1) – w ten sposób otrzymujemy wartości liczbowe ujemne. Typ danych wykorzystywany przy imporcie np. zleceń ZWZ.
      • N – format numeryczny dla wartości całkowitych (int)
      • T – format datetime. Dane w formacie yyyy-MM-rr HH:mm lub yyyy-MM-rr HH:mm:ss
    • WYMAGANE – oznaczenie na TAK oznacza że rekord zostanie skopiowany do bazy danych pod warunkiem że dana kolumna tabeli excel zawiera informacje, jeżeli jest pusta (brak danych) to rekord nie będzie do bazy SQL wgrany. Oznaczenie pozwala ograniczyć błędne wpisy z wierszy o brakujących danych wymaganych przez bazę SQL.

import xls konfiguracja ustawienia ogólne

import xls konfiguracja ustawienia kolumny

 

Import danych z pliku XLSX

W celu odczytania pliku w formacie XLSX należy wprowadzić w kolumnie TYP_PLIK wartość *.xlsx, puste pole lub NULL oznacza, że dane będą odczytywane z pliku w formacie XLS.

 Import danych

Import wykonuje się za pomocą transakcji role_sys/import_xls.aspx

import xls menu

import xls transakcja

 

Transakcja pozwala na wybranie pliku do importu, wybór schematu jaki ma być użyty do wgrywania danych i opcjonalnie kontrahenta.

 

import plik xls

Parametry uruchamiania transakcji

Uruchamiając transakcję role_sys/import_xls.aspx można określić pewne zachowania

Wybór kontrahenta

Pozycja wyboru kontrahenta pojawia się wyłącznie, gdy uruchamiając transakcję import_xls.aspx wywołamy z parametrem nridodn=

np. role_sys/import_xls.aspx?nridodn=

Jeżeli parametr ma wartość pustą to wyświetlona lista pozwali na wybór kontrahenta, jeżeli jednak podany identyfikator kontrahenta (nridodn) jako wartość, to zostanie ona automatycznie ustawiona bez możliwości jej zmiany. Zastosowanie – gdy chcemy importować dane uruchamiając transakcję w kartotece kontrahenta.

np. role_sys/import_xls.aspx?nridodn=1231546

 

Wybór schematu importu

Możemy wskazać jaki schemat ma być automatycznie podstawiony, tak aby użytkownik tylko wskazał plik i mógł uruchomić import danych. W tym celu należy przekazać parametr refno i podać numer identyfikujący dany schemat importu, np. role_sys/import_xls.aspx?refno=123465790

 

Wskazanie stałej ścieżki importu

Parametr path umożliwia wskazanie skąd (z jakiej lokalizacji serwera) ma nastąpić import pliku. Parametr wymaga nie tylko podania ścieżki dostępu do pliku ale także wskazania jego nazwy. Po wskazaniu ścieżki i nazwy importowanego pliku wywołanie transakcji następuje bezobsługowo, tzn. po wywołaniu transakcji plik zostaje automatycznie zaimportowany. W przypadku jeżeli import wymaga wskazania wartości NRIDODN musi zostać on zaszyty w parametrach transakcji lub import winien zostać wywołany z poziomu kartoteki kontrahentów z wymuszeniem wcześniejszego wskazania kartoteki kontrahenta, którego import dotyczy.

Przykład wywołania transakcji z parametrem path (wywołany z poziomu rejestru kartotek klientów):

/role_sys/import_xls.aspx?refno=3336161320190&raport=1&path=c:\iis_demo\test_xls\Amadeus.xls&nridodn=

Po wykonaniu transakcji wyświetlany jest raport informujący o zaimportowanych rekordach do bazy

raport

Przykład aktualizacji danych UPDATE

Chcemy z pliku XLS zaktualizować informacje o stanach dostępnych oraz cenach zakupu jakie przekazuje nad dostawca. Dane chcemy wgrać do kartotek asortymentowych (tabela KNASO) dla magazynu MG, rola DAN, gdzie identyfikatorem każdej kartoteki jest indeks towarowy. W kolumnie Definicja UPDATE wpisujemy polecenie UPDATE=INDEKS, w kolumnie rola DAN, w kolumnie Magazyn MG

schematy importu danych excel xls

 

Następnie definiujemy kolumny danych które będą pobierane z arkusza excel

  • INDEKS, do identyfikacji kartoteki, oznaczamy jako wymagana, kolumna w bazie INDKES, kolumna w pliku xls to Indeks
  • Cena do aktualizacji ceny zakupu, kolumna w bazie CENZAK, kolumna w pliku xls to Cena
  • Stan do aktualizacji ilości dostępnej, kolumna w bazie ILOSC kolumna w pliku xls to Stan

schematy importu danych excel

Konfiguracja gotowa, można uruchamiać polecenie importu.