1. Opis ogólny
2. Format utworzonych danych
3. Funkcja przenosząca
4. Przygotowanie bazy SQL
5. Skrypt przenoszący
6. Przykład zestawienia
7. Uwagi i zastrzeżenia
8. Tematy powiązane
1. Opis ogólny
Program przenosi dane Trawers ERP do wskazanej, zewnętrznej bazy SQL.
Baza zewnętrzna ma charakter hurtowni danych. Może służyć jako źródło
informacji do tworzenia raportów, statystyk i analiz.
Raporty i analizy
Popularny generator raportów Qlik może sięgać po dane do bazy SQL.
NOTE: W programie Trawers jest wyspecjalizowana funkcja, która przygotowuje
do raportowania w Qlik.
Qlik. Analizy. Raporty
Tylko do odczytu
Baza SQL służy tylko do odczytu. Ew. zmiany w bazie SQL nie będą przenoszone
do zbiorów (tabel) w bazie danych Trawersa.
Baza ma strukturę informacyjną zgodną z bazą Trawersa, tzn. zawiera
takie same tabele (zbiory) i kolumny (pola) w tabelach.
Program zapisze dane w postaci umożliwiającej wczytanie do bazy SQL.
W katalogu /trinout program utworzy skrypt SQL, a dane umieści
w katalogu /trinout/sql
Do przenoszenia danych zastosowane zostały specjalizowane polecenia SQL:
------------------------
PostgreSQL: COPY FROM PGSQL PostgreSQL Server
MS SQL : BULK INSERT MSSQL Microsoft SQL Server
MySQL : LOAD DATA MYSQL MySQL Server
------------------------
2. Format utworzonych danych
Funkcja przenosząca dane tworzy 2 elementy:
----------
*.dat
----------
Dane użytkowe (pliki danych), które skrypt SQL użyje do wypełnienia
(załadowania) bazy sql.
----------
skrypt SQL
----------
Skrypt, który wypełnia (ładuje) bazę sql danymi użytkowymi *.dat
Domyślna nazwa skryptu: trawers.sql
Pozostałe czynności powinien wykonać administrator bazy danych SQL.
Powinien wykonać skrypt, sprawdzić ew. skorygować i wykonać powtórnie.
Skrypt SQL, np. trawers.sql, używa specjalnych poleceń SQL
do ładowania danych:
------------------
PGSQL: COPY FROM
MSSQL: BULK INSERT
MYSQL: LOAD DATA
------------------
Takie rozwiązanie jest dużo bardziej wydajne, niż zastosowanie
polecenia INSERT dla każdego wiersza.
Zapisane dane mają strukturę i zawartość zbiorów Trawersa.
Ze względu na to, że struktura tabel może się zmieniać,
w skrypcie przenoszącym dane zastosowano polecenia usuwające
i następnie tworzące tabele na nowo z aktualną strukturą.
Dlatego, aby zachować spójność danych pod względem powiązań między
dokumentami, kartotekami i tabelami, w przypadku powtórnego ładowania,
należy załadować wszystkie zbiory od początku.
3. Funkcja przenosząca
AD > Dane dla Baz SQL > Przenoszenie danych do SQL [AD_PGZ92]
Funkcja przenosząca dane ma opcje:
* Nazwa skryptu przenoszącego: trawers.sql
* Formaty bazy SQL: PGSQL, MSSQL, MYSQL
* Kodowanie: ISO / WIN / UTF8
* Katalog zapisu danych: %SQL%
* Zbiory do przeniesienia: Domyślnie: Wszystkie
Funkcje przenoszącą dane można wykonać w trybie AutoRun, np. w nocy.
AutoRun Procesy automatyczne
Parametry procesu AutoRun (przykład)
--- Nazwa parametru ---------- --- Wartość ------
Zapisz SQL do pliku trawers.sql
Format PGSQL
Kodowanie ISO
Katalog %SQL%
Polecenia księgowania N
Scalać zbiory okresowe N
Zakres O
Ostatnie 1
Rok od 2020
Miesiąc od 01
Rok do 2020
Miesiąc do 02
[WYBORY_OPERATORA] KIM + KSOM + DOK MG
Parametr: [Wszystkie zbiory] ma stałą wartość [T]
Oznacza to, że domyślnie przenoszone są wszystkie zbiory.
Aby przenosić tylko wybrane [*] zbiory należy zapisać parametry jako wybory operatora.
Parametr [WYBORY_OPERATORA] zawiera nazwę wyborów operatora, tu [KIM + KSOM + DOK MG]
Parametry odczytane z wyborów operatora mają priorytet nad parametrami AutoRun.
Jeżeli nie ma lub nie uda się odczytać wyborów operatora to przyjmowane są parametry AutoRun.
Ostatnie wybory operatora
4. Przygotowanie bazy SQL
Przed przeniesieniem do bazy SQL, trzeba zainstalować wybrany
silnik bazy danych SQL oraz utworzyć bazę.
5. Skrypt przenoszący
Aby zautomatyzować przenoszenie, warto utworzyć skrypt przenoszący dane,
który będzie uruchamiany np. w nocy. Skrypt ten wywoła funkcje zapisującą
dane programu Trawers w trybie AutoRun, a następnie wywoła
polecenie wczytania danych do bazy SQL.
tr2sql.bin
--------------------------------------------------------------
#!/bin/sh
# 01/2011
# Przeniesienie danych z Trawersa do bazy SQL
# -baza SQL musi być wcześniej utworzona
# -w Trawersie proces przenoszący musi być zapisany w tabeli
# procesów automatycznych
TR_DATABASE=trawers
TR_KATALOG=/opt/trawers5/dane
TR_FIRMA=FP
TR_OPERATOR=AA
export TERM=linux
cd $TR_KATALOG/bin
echo 'kopiowanie dbf --> dat '
./tr5x.exe //gtnull --operator=$TR_OPERATOR --firma=$TR_FIRMA --proces=AD_PGZ92
cd $TR_KATALOG/trtres/trinout
# Import dla bazy PostgreSQL
#psql -f trawers.sql
# Import dla bazy MySQL
echo 'kopiowanie dat --> sql '
mysql -u root $TR_DATABASE < trawers.sql
--------------------------------------------------------------
-> uruchomienie zapis cron
--------------------------------
crontab -e
5 0 * * * /trawers/bin/tr2sql.sh
--------------------------------
6. Przykład zestawienia
W celu kontroli poprawności przeniesienia, można sprawdzić stany magazynowe:
widoki.sql
-----------------------------------------------------------
#
# Indeksy potrzebne do widoku
#
CREATE INDEX mg00glft_indeks on mg00glft (indeks)
CREATE INDEX mg00imft_indeks on mg00imft (indeks)
CREATE INDEX mg00cnft_indeks on mg00cnft (indeks)
CREATE INDEX mg00cnft_mag_indeks on mg00cnft (mag,indeks)
-----------------------------------------------------------
--------------------------------------------------------------------------------------
#
# Widok wartości magazynów (w trawersie realizowane przez MG_WARTOSC())
#
CREATE VIEW TrfpMagazynIndeksWartosc (mag, indeks, wycena, milosc, mcena, mwartosc) AS
SELECT gl.mag, gl.indeks, im.wycena, gl.milosc, gl.mcena, gl.milosc*gl.mcena
FROM mg00glft AS gl, mg00imft AS im
WHERE gl.indeks=im.indeks AND im.wycena REGEXP '[ESD]'
UNION
SELECT cn.mag, cn.indeks, im.wycena, sum(cn.pilosc), 0, sum(cn.pilosc*cn.pcena)
FROM mg00cnft AS cn, mg00imft AS im
WHERE cn.indeks=im.indeks AND im.wycena REGEXP '[LF]'
GROUP BY concat(cn.mag,cn.indeks);
--------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------
#
# Wartość bieżąca magazynów
#
select mag,sum(milosc),sum(mwartosc) from TrfpMagazynIndeksWartosc group by mag union
select '',sum(milosc),sum(mwartosc) from TrfpMagazynIndeksWartosc;
--------------------------------------------------------------------------------------
7. Uwagi i zastrzeżenia
* Funkcja przenosząca nie przenosi pól memo do bazy MySQL.
Memo. Notatka o dowolnej długości tekstu, która podczas wyświetlania
przywijana jest (skrolowana) w oknie na ekranie.
Opisy: Memo i Remark
W definicji struktury zbioru pole >memo< oznaczone jest: M 10 0
Baza danych. Słownik