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.
Transakcja export_xlsx służy do generowania pliku Excel (.xlsx) na podstawie danych pobranych z bazy SQL
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
- @REFNO – zmienna sesyjna użytkownika lub parametr odczytywany z linku np. export_xlsx.aspx?typ=KNASO&refno=01234567890
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

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ę.

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
Proces ten składa się z kilku etapów
Inicjalizacja i pobranie parametrów
Podczas ładowania strony export_xlsx.aspx.cs
, system pobiera parametry użytkownika przechowywane w sesji. Jeśli brakuje wymaganego parametru KOD
, system zwraca komunikat błędu i przerywa operację.
Jeśli parametr KOD
jest dostępny, zapytanie SQL pobiera definicję słownika XLSX z tabeli x_skorowidze
. Wartości parametrów użytkownika (REFNO
, MAGAZYN
, ODDZIAŁ
, MPK
) są podstawiane do zapytania SQL w celu personalizacji danych eksportowanych do pliku.
Przygotowanie nazwy pliku
Nazwa pliku eksportowanego do Excel jest generowana dynamicznie i może zawierać m.in. nazwę użytkownika, datę oraz godzinę. Jeśli użytkownik nie poda własnej nazwy pliku, system automatycznie generuje standardową nazwę zakończoną .xlsx
.
Wykonanie zapytania SQL i eksport danych
Zapytanie SQL zdefiniowane w słowniku jest uruchamiane w bazie danych, a zwrócone dane są konwertowane na plik Excel. Proces eksportu odbywa się za pomocą metody CreateExcelFile.CreateExcelDocument()
. Jeśli eksport zakończy się sukcesem, system zapisuje operację w dzienniku.
Generowanie odpowiedzi i interakcja z użytkownikiem
Plik jest zapisywany na serwerze i jego ścieżka jest przekazywana do interfejsu użytkownika. Skrypt JavaScript export_xlsx.js
aktualizuje stronę, informując użytkownika o powodzeniu lub błędzie operacji. W przypadku sukcesu użytkownik otrzymuje przycisk umożliwiający pobranie pliku.
Obsługa błędów
Jeśli wystąpi błąd w dowolnym etapie procesu, system generuje komunikat błędu. Może on dotyczyć:
- Braku definicji XLSX w bazie,
- Problemów z wykonaniem zapytania SQL,
- Niepowodzenia w generowaniu pliku.
Ostatecznie użytkownik może pobrać wygenerowany plik lub zobaczyć komunikat o błędzie.
Opis działania Page_Load
Metoda Page_Load
w pliku export_xlsx.aspx.cs
odpowiada za inicjalizację procesu eksportu danych do pliku Excel (.xlsx
). Jest to kluczowy moment w cyklu życia strony, gdzie pobierane są parametry żądania, wykonywane zapytanie SQL i generowany plik wynikowy.
1. Deklaracja zmiennych
Na początku metody deklarowane są zmienne używane w procesie:
cPlikXLSX
– ścieżka do pliku wynikowego.cBtnZamknij
– parametr do obsługi przycisku zamknięcia okna.cNazwaPliku
– nazwa pliku wynikowego.cZapytanie
– treść zapytania SQL, które zostanie wykonane.
2. Obsługa pierwszego ładowania strony (IsPostBack
)
Kod wykonuje się tylko wtedy, gdy strona ładuje się po raz pierwszy, zapobiegając wielokrotnemu przetwarzaniu danych.
if (!IsPostBack)
3. Pobranie parametrów z QueryString
System pobiera parametr kod
z adresu URL, np.:
export_xlsx.aspx?kod=ABC123
Jeśli parametr kod
nie istnieje, użytkownik otrzymuje komunikat błędu i proces jest przerywany:
if (requestParams.Get("kod") == null)
{
cKomunikat = "Brak parametru KOD</div>";
return;
}
4. Pobranie konfiguracji eksportu z bazy danych
Na podstawie wartości kod
pobierane są ustawienia eksportu z tabeli x_skorowidze
:
System.Data.DataTable dt = ssSys.ssTabela("SELECT top(1) * FROM x_skorowidze WHERE PRX='XLSX' AND kod=@KOD and aktywne=1 ", MyParameters);
Jeśli zapytanie nie zwróci żadnych wyników, użytkownik otrzymuje komunikat:
if (dt.Rows.Count == 0)
{
cKomunikat = "Brak definicji słownika XLSX dla kodu: " + requestParams.Get("kod");
return;
}
5. Personalizacja zapytania SQL
Treść zapytania SQL jest pobierana z bazy (dt.Rows[0]["UWAGI"].ToString()
) i dostosowywana do użytkownika poprzez dynamiczne podstawienie parametrów sesji:
cZapytanie = cZapytanie.Replace("@REFNO", pUserParametry["REFNO"].ToString());
cZapytanie = cZapytanie.Replace("@KTO", User.Identity.Name);
cZapytanie = cZapytanie.Replace("@MAGAZYN", pUserParametry["MAGAZYN"].ToString());
cZapytanie = cZapytanie.Replace("@ODDZIAL", pUserParametry["ODDZIAL"].ToString());
cZapytanie = cZapytanie.Replace("@MPK", pUserParametry["MPK"].ToString());
Dodatkowo, jeśli w QueryString
znajdują się dodatkowe parametry zaczynające się od @
lub _
, są one podstawiane do zapytania:
foreach (var cParam in requestParams.AllKeys)
{
if (cParam != null && cParam.Substring(0, 1) == "@")
{
cZapytanie = cZapytanie.Replace(cParam.ToString(), requestParams.Get(cParam.ToString()).ToString());
}
}
6. Generowanie nazwy pliku
System tworzy nazwę pliku wynikowego na podstawie szablonu:
cNazwaPliku = dt.Rows[0]["OPIS"].ToString().ToUpper();
if (!cNazwaPliku.EndsWith(".xlsx"))
{
cNazwaPliku += ".xlsx";
}
Dodatkowo nazwa może zawierać:
- Nazwę użytkownika (
@KTO
), - Datę (
@DATA
), - Czas (
@CZAS
).
cNazwaPliku = cNazwaPliku.Replace("@KTO", User.Identity.Name.Replace("\\", "_"));
cNazwaPliku = cNazwaPliku.Replace("@DATA", DateTime.Now.ToShortDateString());
cNazwaPliku = cNazwaPliku.Replace("@CZAS", DateTime.Now.ToShortTimeString().Replace(":", "-"));
7. Przechowywanie parametrów eksportu w sesji
Wszystkie parametry są zapisywane w sesji, aby mogły być później wykorzystane podczas generowania pliku:
System.Collections.Generic.Dictionary<string, string> wParametry = new System.Collections.Generic.Dictionary<string, string>();
wParametry.Add("KODXLSX", requestParams.Get("kod"));
wParametry.Add("PLIKXLSX", cPlikXLSX);
wParametry.Add("NAZWAPLIKU", cNazwaPliku);
wParametry.Add("ZAPYTANIESQL", cZapytanie);
wParametry.Add("CONNECTIONSQL", cConn);
wParametry.Add("BTNCLOSE", "0");
Session["ssExport_xlsx"] = wParametry;
8. Obsługa błędów
Jeśli w trakcie przetwarzania wystąpi błąd, system zapisuje komunikat o błędzie:
catch (Exception er)
{
cKomunikat = "Błąd eksportu 2: " + er.Message;
}
Podsumowanie
Page_Load
pobiera parametry z URL i sesji użytkownika.- Sprawdza, czy podany kod istnieje w bazie.
- Personalizuje zapytanie SQL i nazwę pliku.
- Przechowuje parametry w sesji.
- Obsługuje błędy i informuje użytkownika o problemach.
Dzięki temu proces eksportu do Excela działa dynamicznie, umożliwiając pobieranie danych na podstawie różnych parametrów wejściowych.
Czytaj więcej:
Transakcja JQS
Transakcja JQS w systemie SoftwareStudio umożliwia szybkie i elastyczne przetwarzanie danych w środowisku aplikacji webowej. Dzięki niej użytkownicy mogą efektywnie zarządzać informacjami i dostosowywać funkcjonalności do indywidualnych potrzeb biznesowych.
adm_widok_kolumny.aspx
adm_widok_kolumny.aspx to kluczowa transakcja dla zarządzania strukturą widoków w systemie StudioSystem. Dzięki automatyzacji procesu generowania i aktualizacji kolumn, system zapewnia elastyczność i spójność w prezentacji danych.
export_csv.aspx
Systemy działające w ramach StudioSystem można integrować z innymi systemami poprzez przekazywanie danych za pomocą plików z danymi. Jedną z wielu dostępnych opcji jest zapis danych do pliku tekstowego. Uniwersalna transakcja pozwalająca na eksportowanie dowolnych danych z bazy do pliku tekstowego typu CSV, TXT. Całość konfiguracji opiera się definicje skorowidza kod CSV. Konfiguracja Konfigurację ustawia się za pomocą
j_xml.aspx
Transakcja j_xml.aspx to transakcja pozwalająca na eksport wybranych danych z bazy do pliku XML. Wskazanie danych do eksportu Do wskazania danych, które mają zostać wyeksportowane służy skorowidz XML Kolumny skorowidza AktywneKod – służy do identyfikacji zdefiniowanego zapytania przy wywołaniu transkacjiKolumny – kolumny, podane po przecinku, które mają zostać wyeksportowaneTabela – nazwa tabeli, z której ma nastąpić eksportWarunek – warunek
submenu_8.aspx
Menu szczegółów platformy jest jedną z najbardziej przydatnych funkcji platformy, ponieważ pozwala użytkownikom łatwo uporządkować informacje o projekcie w jednym miejscu.