logo-softwarestudio-2020-600

export_xlsx.aspx

Oprogramowanie magazynowe online

Pobieranie danych z bazy danych SQL i zapisanie ich w pliku Excel pakietu Microsoft Office z formacie XLSX (od wersji Office 2007) jest możliwe za pomocą uniwersalnej transakcji export_xlsx.aspx. Transakcja pozwala na eksport dowolnych danych bez żadnego formatowania i ozdabiania i zapis w pliku xlsx.

Transakcja wymaga przy uruchomieniu podania parametru  kod wskazującego unikalny skorowidze definiujący jakie dane mają być pobrane z bazy i pod jaką nazwę plik ma zostać utworzony.

Oprogramowanie magazynowe online

Przykład uruchomienia

export_xlsx.aspx?kod=KNASO

gdzie KNASO oznacza kod skorowidza XLSX

Po utworzeniu plik XLSX można pobrać klikając na przycisk pobierz

Skorowidz XLSX

Za pomocą skorowidza określamy jakie dane mają zostać pobrane z bazy (za pomocą zapytania SQL) oraz nazwę pliku pod jaką plik zostanie zapisany w folderze /App_Xls/.

Zapytanie SQL

Można zdefiniować dowolne prawidłowe zapytanie do bazy zwracające wyniki w postaci tabeli. Przykład prostego zapytania:

select indeks, nazwaas from knaso

Zwraca dwie kolumny z tabeli knaso.

W zapytaniu można użyć zmiennych, aby wpłynąć na wyniki pobieranych danych np.:

  • @KTO – zmienna określająca zalogowanego użytkownika
  • @ODDZIAL – zmienna określająca symbol oddziału do jakiego zalogowany jest użytkownik
  • @MAGAZYN – zmienna określająca symbol magazynu do jakiego zalogowany jest użytkownik
  • @MPK – zmienna określająca symbol komórki do jakiego zalogowany jest użytkownik

Nazwa pliku

Musimy określić jak chcemy, aby plik z danymi się nazywał, może to być dowolna prawidłowa nazwa bez znaków specjalnych. Zalecamy nie korzystania w nazwie pliku ze znaków odstępu – spacji. Przykład nazwy pliku: raport.xlsx

Jeżeli nazwa pliki nie będzie się kończyła .xlsx to program automatycznie doda rozszerzenie pliku jako .xlsx

W nazwie pliku możemy użyć zmiennych aby nazwa była tworzona w sposób unikalny

  • @KTO – zostanie zastąpiona nazwą zalogowanego użytkownika.
  • @DATA – zostanie zastąpiona informację o roku, miesiącu i dniu utworzenia pliku w formacie yyyy-mm-dd
  • @CZAS – zostanie zastąpiona czasem utworzenia pliku w formacie hh-mm

Zmienne można dowolnie łączyć, przykłady użycia nazw plików ze zmiennymi:

  • @KTO_raport_knaso.xlsx
  • @KTO_raport_knkon_@DATA.xlsx
  • @DATA_@CZAS_@KTO_raport.xlsx

Jeżeli w nazwie pliku użyjemy zmiennej przekazywanej przez parametr (pierwszy znak to @ lub _) wówczas w nazwie pojawi się wartość tego parametru. Przykładowo definiujemy nazwę pliku jako:

WMS_DPMAG__TYPDOK_@KTO

a parametr jaki przekazujemy uruchamiając transakcję zawiera _TYPDOK

np. role_sys/export_xlsx.aspx?1=1&kod=WMS_DPMAG_TYPDOK&_TYPDOK=PZB

wówczas utworzony zostanie plik np. WMS_DPMAG_PZB_LOGIN.xlsx

Opcjonalny parametr

Uruchamiając transakcję możemy użyć opcjonalnego parametru

btnclose

Jeżeli wartość parametru jest ustawiona na 1 to pod przyciskiem pozwalającym na pobranie pliku będzie przycisk pozwalający na zamknięcie okna

np. export_xlsx.aspx?typ=KNASO&btnclose=1

Zastosowanie w sytuacji gdy transakcję eksportu uruchamiamy w oknie.

Przykłady zastosowań

Zestawienie dokumentów magazynowych

Ustawiamy skorowidz XLSX, kod = V_DPMAG, zapytanie do widoku SQL, nazwy kolumn zamieniamy na nazwy polskie, łatwe dla użytkownika końcowego.

SELECT [DDOWOD] ,[NRDOKUMENTU] AS [NUMER DOKUMENTU] ,[PRX] AS [RODZAJ DOKUMENTU] ,[TYPDOK] AS [TYP DOKUMENTU] ,[INDEKS] ,[NAZWAAS] AS [NAZWA ARTYKUŁU] ,[ADRES] ,[NRPALETY] AS [NUMER NOŚNIKA] ,[NRSERII] AS [NUMER PARTII] ,[TERMINWAZNOSCI] AS [DATA WAŻNOŚCI] ,[DATAPRODUKCJI] AS [DATA PRODUKCJI] ,CAST(ilosc as int) AS [ILOŚĆ] , [SKROCO] AS [KONTRAHENT] ,[MIEJSCOWOSC] AS [MIEJSCOWOŚĆ] ,[ULICA] ,[REFNO] AS [NUMER REFERENCYJNY] ,[KIEDY] ,[ODDZIAL] AS [ODDZIAŁ] FROM [v_dpmag] where ACH='1' AND ODDZIAL='@ODDZIAL' ORDER BY NRDOKUMENTU

Klauzula WHERE zawiera definicje filtrowania wg kolumny oddział, gdzie wartość zostanie wpisana w zależności do jakiego oddziału jest zalogowany użytkownik.

oraz kolumna nazwy pliku: @KTO_DPMAG

W efekcie powstaje plik adasie3078_dpmag.xlsx

plik xlsx

Pobieranie danych z określonego przedziału czasowego

Definiujemy zapytanie

SELECT [DDOWOD] ,[NRDOKUMENTU] AS [NUMER DOKUMENTU] ,[PRX] AS [RODZAJ DOKUMENTU] ,[TYPDOK] AS [TYP DOKUMENTU] ,[INDEKS] ,[NAZWAAS] AS [NAZWA ARTYKUŁU] ,[ADRES] ,[NRPALETY] AS [NUMER NOŚNIKA] ,[NRSERII] AS [NUMER PARTII] ,[TERMINWAZNOSCI] AS [DATA WAŻNOŚCI] ,[DATAPRODUKCJI] AS [DATA PRODUKCJI] ,CAST(ilosc as int) AS [ILOŚĆ] , [SKROCO] AS [KONTRAHENT] ,[MIEJSCOWOSC] AS [MIEJSCOWOŚĆ] ,[ULICA] ,[REFNO] AS [NUMER REFERENCYJNY] ,[KIEDY] ,[ODDZIAL] AS [ODDZIAŁ] FROM [v_dpmag] where ACH='1' AND ODDZIAL='@ODDZIAL' AND DDOWOD BETWEEN '@DATAOD' AND '@DATADO' ORDER BY KIEDY DESC

gdzie zmienne@DATAOD oraz @DATADO zostaną przekazane przy uruchomieniu transakcji w następujący sposób:

export_xlsx?typ=V_DPMAG&@DATAOD=2014-01-15&@DATADO=2014-10-15

W efekcie dane zostaną odfiltrowane wg dat przekazanych w parametrze uruchamiającym transakcję.

plik xlsx filtr wg dat

Dynamiczne przekazywanie parametrów

Powyższy przykład pozwala na dowolne wykonanie zapytania, gdyż każdy parametr przekazany przy uruchamianiu i zaczynający się od symbolu @ lub _ (podkreślenie)  będzie podstawiony w zapytaniu jego wartością. No dobrze, to pozwala nam filtrować dane w dowolny sposób, ale użytkownik nie będzie przecież zmieniać parametr uruchamiania transakcji ot tak. Aby zrealizować takie zadanie należy do uruchomienia transakcji wykorzystać transakcję x_run.aspx, która pozwoli użytkownikowi na wybór danych, które będą przekazane do transakcji eksportu do xlsx.

np. warunek where  typdok=’_TYPDOK’

Filtrowanie dokumentów według rodzaju

Chcemy pobrać z bazy wyłącznie dokumenty dla których w kolumnie PRX jest zapisana informacja PZ, korzystamy ze standardowego zapytania do bazy zmieniając warunek filtrowania, klauzula WHERE dodajemy PRX =’@PRX’

SELECT [DDOWOD] ,[NRDOKUMENTU] AS [NUMER DOKUMENTU] ,[PRX] AS [RODZAJ DOKUMENTU] ,[TYPDOK] AS [TYP DOKUMENTU] ,[INDEKS] ,[NAZWAAS] AS [NAZWA ARTYKUŁU] ,[ADRES] ,[NRPALETY] AS [NUMER NOŚNIKA] ,[NRSERII] AS [NUMER PARTII] ,[TERMINWAZNOSCI] AS [DATA WAŻNOŚCI] ,[DATAPRODUKCJI] AS [DATA PRODUKCJI] ,CAST(ilosc as int) AS [ILOŚĆ] , [SKROCO] AS [KONTRAHENT] ,[MIEJSCOWOSC] AS [MIEJSCOWOŚĆ] ,[ULICA] ,[REFNO] AS [NUMER REFERENCYJNY] ,[KIEDY] ,[ODDZIAL] AS [ODDZIAŁ] FROM [v_dpmag] where PRX ='@PRX' AND ACH='1' AND ODDZIAL='@ODDZIAL' AND DDOWOD BETWEEN '@DATAOD' AND '@DATADO' ORDER BY KIEDY DESC

gdzie zmienną @PRX przekażemy przy uruchomieniu transakcji w następujący sposób:

export_xlsx?typ=V_DPMAG&@DATAOD=2014-01-15&@DATADO=2014-10-15&@PRX=PZ

Jeżeli uruchomimy transakcję podając inną wartość @PRX to dane zostaną odflitrowane dla innego rodzaju dokumentów np.

export_xlsx?typ=V_DPMAG&@DATAOD=2014-01-15&@DATADO=2014-10-15&@PRX=WZ

czyli dokumenty wydania.

Pobieranie danych z innej bazy niż domyślna

Standardowo zapytanie wykonywane jest dla domyślnej bazy programu StudioSystem, można jednak za pomocą parametru connectionstring wskazać nazwę połączenia do dowolnej innej bazy np. bazy CUSTOM, np.

export_xls.aspx?kod=my_knaso&connectionstring=customConnectionString

Dane zostaną pobrane z bazy zdefiniowanej w pliku web.config pod nazwą customConnectionString