﻿{"id":4927,"date":"2017-08-30T13:22:28","date_gmt":"2017-08-30T13:22:28","guid":{"rendered":"http:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/?post_type=ht_kb&#038;p=4927"},"modified":"2020-09-24T07:25:58","modified_gmt":"2020-09-24T07:25:58","slug":"edycja-wykresow","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/dokumentacja\/edycja-wykresow\/","title":{"rendered":"Instrukcja u\u017cytkownika: Edycja wykres\u00f3w"},"content":{"rendered":"<div class=\"su-list\" style=\"margin-left:0px\">\n<div class=\"su-spoiler su-spoiler-style-fancy su-spoiler-icon-caret su-spoiler-closed\" data-scroll-offset=\"0\" data-anchor-in-url=\"no\"><div class=\"su-spoiler-title\" tabindex=\"0\" role=\"button\"><span class=\"su-spoiler-icon\"><\/span>Spis tre\u015bci<\/div><div class=\"su-spoiler-content su-u-clearfix su-u-trim\">\n<h3><a href=\"#ideawykr\">Og\u00f3lna idea wykres\u00f3w<\/a><\/h3>\n<h3><a href=\"#uszczkonc\">Uszczeg\u00f3\u0142owienie koncepcji<\/a><\/h3>\n<h3><a href=\"#interface\">Interface U\u017cytkownika<\/a><\/h3>\n<h3><a href=\"#implementacja\">Implementacja techniczna<\/a><\/h3>\n<h3><a href=\"#przykl\">Przyk\u0142ad<\/a><\/h3>\n<\/div><\/div>\n<\/div>\n<a name=\"ideawykr\"><\/a><\/p>\n<h1><strong>Og\u00f3lna idea wykres\u00f3w<\/strong><\/h1>\n<p>Idea wykres\u00f3w polega na stworzeniu jednolitego, sp\u00f3jnego mechanizmu pozwalaj\u0105cego m.in. na wygodne definiowanie wykres\u00f3w (inaczej: analiz) prezentuj\u0105cych graficznie i\/albo tabelarycznie wybrane dane z\u00a0bazy, pod\u0142\u0105czanie wykres\u00f3w w\u00a0przewidzianych (przez programist\u0119) punktach programu i\u00a0wykonywanie. Jest to wi\u0119c mechanizm analogiczny jak w\u00a0przypadku wydruk\u00f3w. Z\u00a0jedn\u0105 zasadnicz\u0105 r\u00f3\u017cnic\u0105. Mianowicie wydruki s\u0105 z\u00a0samej swej natury pasywne \u2013 wykresy natomiast posiadaj\u0105 bardzo wa\u017cn\u0105 cech\u0119 aktywno\u015bci.<\/p>\n<p><strong><u>Aktywno\u015b\u0107 wykresu<\/u><\/strong> polega na mo\u017cliwo\u015bci jego interakcji z\u00a0U\u017cytkownikiem, w\u00a0tym tak\u017ce na mo\u017cliwo\u015bci wykonania wykresu podrz\u0119dnego po klikni\u0119ciu przez U\u017cytkownika w\u00a0wybrany punkt. Interakcja nast\u0119puje po wykonaniu przez U\u017cytkownika odpowiedniej akcji na bie\u017c\u0105cym wykresie i\u00a0mo\u017ce mie\u0107 posta\u0107: <div class=\"su-list\" style=\"margin-left:0px\">\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Eksploracji wykresu<\/li>\n<\/ul>\n<p>Eksploracja polega na wybraniu jednego z\u00a0punkt\u00f3w bie\u017c\u0105cego wykresu i\u00a0zag\u0142\u0119bieniu si\u0119 w\u00a0niego to znaczy wykonaniu wykresu podrz\u0119dnego dla danych pobranych z\u00a0tego punktu.<\/p>\n<p>Mo\u017cna np. klikn\u0105\u0107 na \u2018kawa\u0142ku tortu\u2019 obrazuj\u0105cym \u0142\u0105czne obroty na wybranym rejestrze kasowym\/bankowym i\u00a0dosta\u0107 podwykres obrazuj\u0105cy rozbicie warto\u015bci tego \u2018kawa\u0142ka\u2019 na obroty poszczeg\u00f3lnych raport\u00f3w. Mamy tu do czynienia z\u00a0tzw. akcj\u0105 drill-down. Nast\u0119pnie mo\u017cna wybra\u0107 jeden z\u00a0raport\u00f3w i, klikaj\u0105c w\u00a0punkt jemu odpowiadaj\u0105cy, wy\u015bwietli\u0107 list\u0119 zapis\u00f3w sk\u0142adaj\u0105cych si\u0119 na obroty tego raportu (ta z\u00a0kolei akcja, polegaj\u0105ca na wy\u015bwietleniu listy a\u00a0nie podwykresu jest nazywana drill-through).<\/p>\n<p>Oczywi\u015bcie mamy mo\u017cliwo\u015b\u0107 powrotu z\u00a0eksploracji do poprzedniego wykresu (tzw. nadwykresu; jest to tzw. akcja drill-up) a\u017c do wykresu, od kt\u00f3rego zacz\u0119li\u015bmy. Ca\u0142o\u015b\u0107 przypomina wi\u0119c surfowanie po stronach WWW \u2013 nieprzypadkowo zatem, jak si\u0119 przekonamy p\u00f3\u017aniej, okno wynikowe z\u00a0wykresami posiada wiele analogii do przegl\u0105darki internetowej.<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Prze\u0142adowania (od\u015bwie\u017cenia) danych na wykresie<\/li>\n<\/ul>\n<p>Po zmianie przez U\u017cytkownika parametr\u00f3w wp\u0142ywaj\u0105cych na dane na wykresie jest mo\u017cliwe prze\u0142adowanie tych danych, a\u00a0wi\u0119c powt\u00f3rne wykonanie wykresu. Od\u015bwie\u017cenie wykresu mo\u017ce r\u00f3wnie\u017c by\u0107 wykonane (na \u017c\u0105danie) bez zmiany jakichkolwiek warto\u015bci parametr\u00f3w (np. ze wzgl\u0119du na mo\u017cliwo\u015b\u0107 zmian dokonanych w\u00a0bazie w\u00a0zwi\u0105zku z\u00a0normaln\u0105 prac\u0105 tej albo innych stacji roboczych).<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Zmiany parametr\u00f3w graficznych wykresu<\/li>\n<\/ul>\n<p>W\u015br\u00f3d mo\u017cliwych do zmiany parametr\u00f3w mog\u0105 si\u0119 tak\u017ce znajdowa\u0107 parametry graficzne nie wp\u0142ywaj\u0105ce na same dane wykresu ale okre\u015blaj\u0105ce jego posta\u0107 graficzn\u0105 (np. powi\u0119kszenie, typ wykresu, wymiarowo\u015b\u0107: 3D\/2D,&#8230;). Te parametry r\u00f3wnie\u017c mo\u017cna zmienia\u0107 na bie\u017c\u0105co z\u00a0poziomu okna z\u00a0wykresem.<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Wydrukowania wykresu na drukarce graficznej<\/li>\n<\/ul>\n<p>Wydruk wykresu jest realizowany poprzez mechanizm wydruku bie\u017c\u0105cego widoku oraz standardowym mechanizmem wydruk\u00f3w. B\u0119dzie o\u00a0tym mowa w\u00a0rozdziale po\u015bwi\u0119conym wydrukom wykres\u00f3w.<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <strong>Zmiany ustawie\u0144 graficznych wykresu<\/strong> (np. typu wykresu, jego tytu\u0142u, zmiany palety kolor\u00f3w i\u00a0inne).<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <strong>Resetuj ustawienia wykresu<\/strong> \u2013 przywraca domy\u015blne ustawienia graficzne.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <strong>Eksport wykresu<\/strong> &#8211; zapis wykresu w\u00a0formie graficznej w\u00a0jednym ze standardowych format\u00f3w graficznych.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <strong>Eksport<\/strong> \u2013 zapis danych w\u00a0formie tekstowej w\u00a0jednym ze standardowych format\u00f3w tekstowych.<\/li>\n<\/ul>\n<p>Integracja modu\u0142u wykres\u00f3w z\u00a0reszt\u0105 systemu polega na udost\u0119pnieniu przez modu\u0142 wykres\u00f3w mechanizmu podobnego jak w\u00a0przypadku wydruk\u00f3w: w\u00a0dowolnym oknie aplikacji programista mo\u017ce udost\u0119pni\u0107 obs\u0142ug\u0119 analiz.<\/p>\n<p>Z punktu widzenia U\u017cytkownika wykresy s\u0105 zwykle dost\u0119pne w\u00a0tych samych punktach programu (tzw. punkty wywo\u0142ania wykres\u00f3w, w\u00a0skr\u00f3cie: wywo\u0142ania), co wydruki. Do ka\u017cdego punktu wywo\u0142ania mo\u017cna pod\u0142\u0105czy\u0107 dowoln\u0105 ilo\u015b\u0107 wykres\u00f3w (tzw. wykres\u00f3w startowych), z\u00a0kt\u00f3rych jeden jest domy\u015blny (domy\u015blno\u015b\u0107 analiz mo\u017cna zmienia\u0107 przez prze\u0142\u0105czanie specjalnej flagi okre\u015blonej na poziomie pod\u0142\u0105czenia, a w\u00a0przypadku nie ustawienia tej flagi na \u017cadnym z\u00a0po\u0142\u0105cze\u0144 wykres\u00f3w startowych domy\u015blnym wykresem jest pierwszy w\u00a0kolejno\u015bci lp \u2013 kolejno\u015b\u0107 t\u0105 mo\u017cna zmienia\u0107 wykorzystuj\u0105c mechanizm b\u0105belkowania).<\/p>\n<p>Wykresy mog\u0105 by\u0107 zagnie\u017cd\u017cane tzn. ka\u017cdy wykres mo\u017ce mie\u0107 dowoln\u0105 ilo\u015b\u0107 pod\u0142\u0105czonych do niego (pod)wykres\u00f3w (dzieci). Z\u00a0drugiej strony ten sam wykres mo\u017ce by\u0107 r\u00f3wnocze\u015bnie pod\u0142\u0105czony do dowolnej ilo\u015bci (nad)wykres\u00f3w (ojcowie). Zagnie\u017cd\u017canie wykres\u00f3w mo\u017ce zawiera\u0107 zap\u0119tlenia, tzn. wykres a\u00a0mo\u017ce mie\u0107 podwykres B, kt\u00f3ry z\u00a0kolei posiada podwykres a\u00a0(co wi\u0119cej, wykres mo\u017ce by\u0107 pod\u0142\u0105czony nawet do samego siebie).<\/p>\n<p>Edycja (dodawanie, modyfikacja, testowanie, usuwanie) wykres\u00f3w, ich pod\u0142\u0105czanie (tak\u017ce warunkowe) do punkt\u00f3w wywo\u0142ania oraz do siebie nawzajem, ustalanie domy\u015blno\u015bci i\u00a0kolejno\u015bci a\u00a0tak\u017ce r\u00f3\u017cne inne operacje s\u0105 dost\u0119pne z\u00a0poziomu specjalnego drzewa hierarchii wykres\u00f3w.<\/p>\n<p>Wykresy, podobnie jak wydruki, s\u0105 podzielone na dwie grupy:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> wykresy standardowe (dostarczane przez Comarch)<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> wykresy u\u017cytkownika (definiowane).<\/li>\n<\/ul>\n<p>Edycja wykres\u00f3w standardowych przez U\u017cytkownika jest bardzo ograniczona \u2013 sprowadza si\u0119 do zmiany dost\u0119pno\u015bci wykresu (globalny \/ operatora lub stanowiska), zmiany ustawie\u0144 opcji wysy\u0142ania wyniku oraz prze\u0142\u0105czania domy\u015blno\u015bci wykres\u00f3w.<\/p>\n<p>Wyniki wykonania wykres\u00f3w (ich graficzna posta\u0107 i\/albo dane tabelaryczne sk\u0142adaj\u0105ce si\u0119 na serie danych wykresu) s\u0105 umieszczane na specjalnym oknie wynikowym analiz. Okno to stanowi dla U\u017cytkownika w\u0142a\u015bciwe \u015brodowisko pracy z\u00a0analizami. To tu U\u017cytkownik widzi wyniki analizy, mo\u017ce zmienia\u0107 parametry i\u00a0przelicza\u0107 wykres, tu tak\u017ce mo\u017ce nawigowa\u0107 po grafie wykres\u00f3w (eksplorowa\u0107 wykresy czyli przechodzi\u0107 do podwykres\u00f3w i\u00a0wraca\u0107 z\u00a0powrotem) oraz wykonywa\u0107 inne, pomocnicze operacje (np. drukowanie wynik\u00f3w, ich zapis do pliku w\u00a0wybranym formacie czy wysy\u0142anie wynik\u00f3w analizy do innych program\u00f3w).<br \/>\n<a name=\"uszczkonc\"><\/a><\/p>\n<h1><strong>Uszczeg\u00f3\u0142owienie koncepcji<\/strong><\/h1>\n<h2><strong>Hierarchiczna struktura wykres\u00f3w (nawigacja po grafie wykres\u00f3w)<\/strong><\/h2>\n<h3><strong>Przyciski wykres\u00f3w na toolbarze, punkty wywo\u0142ania wykres\u00f3w<\/strong><\/h3>\n<p>Jak powiedziano na pocz\u0105tku, w\u00a0programie istniej\u0105 specjalne punkty (tzw. punkty wywo\u0142ania wykres\u00f3w, w\u00a0skr\u00f3cie: wywo\u0142ania), do kt\u00f3rych mo\u017cna pod\u0142\u0105cza\u0107 analizy. Od strony U\u017cytkownika punkty te s\u0105 zazwyczaj to\u017csame z\u00a0punktami pod\u0142\u0105czania wydruk\u00f3w: tam gdzie na toolbarze pojawiaj\u0105 si\u0119 przyciski wydruk\u00f3w, zwykle pojawiaj\u0105 si\u0119 tak\u017ce kontrolki do obs\u0142ugi wykres\u00f3w. S\u0105 to dwa przyciski: przycisk z\u00a0ikon\u0105 wykresu, kt\u00f3rego naci\u015bni\u0119cie powoduje wykonanie domy\u015blnego wykresu startowego oraz przycisk z\u00a0ikon\u0105 strza\u0142ki w\u00a0d\u00f3\u0142 powoduj\u0105cy rozwini\u0119cie popup-menu z\u00a0wyborem wykresu startowego, kt\u00f3ry nale\u017cy wykona\u0107. Wykonanie akcji na jednej z\u00a0kontrolek wykresu powoduje za\u0142adowanie danych i\u00a0otwarcie okna z\u00a0wynikami (wykresem w\u00a0postaci graficznej i\/albo tabelarycznej).<\/p>\n<p>Okno z\u00a0wynikami posiada w\u0142asne przyciski wydruk\u00f3w; pozwala to na definiowanie wydruk\u00f3w analiz. Poniewa\u017c jest jedno wsp\u00f3lne okno wynikowe, na kt\u00f3rym pojawiaj\u0105 si\u0119 wszystkie wykresy \u2013 definicje wydruk\u00f3w dla wszystkich wykres\u00f3w w\u00a0systemie s\u0105 wsp\u00f3lne; mo\u017ce tak by\u0107 bo zawsze b\u0119dziemy robi\u0107 wydruk na podstawie kolejki o\u00a0ustalonej strukturze, w\u00a0kt\u00f3rej zgromadzone s\u0105 dane wykresu.<\/p>\n<h3><strong>Wykresy startowe, domy\u015blny<\/strong> i\u00a0<strong>bie\u017c\u0105cy wykres startowy<\/strong><\/h3>\n<p>Do ka\u017cdego wywo\u0142ania mo\u017cna pod\u0142\u0105czy\u0107 dowoln\u0105 ilo\u015b\u0107 wykres\u00f3w \u2013 s\u0105 to tzw. wykresy startowe danego wywo\u0142ania. Wykresy te s\u0105 odpowiednio posortowane (wg lp) a\u00a0jeden z\u00a0nich jest domy\u015blnym wykresem startowym danego wywo\u0142ania. Domy\u015blno\u015b\u0107 wykresu startowego oznacza dla U\u017cytkownika najprostsz\u0105 mo\u017cliwo\u015b\u0107 wykonania wykresu \u2013 poprzez jeden klik lewym przyciskiem myszy w\u00a0g\u0142\u00f3wny przycisk analiz. Ka\u017cdy inny wykres startowy w\u00a0tym punkcie mo\u017ce by\u0107 wykonany tylko poprzez jego wyb\u00f3r z\u00a0menu kontekstowego.<\/p>\n<p>Okre\u015blanie domy\u015blnego wykresu startowego danego punktu wywo\u0142ania przebiega wg nast\u0119puj\u0105cego algorytmu:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Sprawdzamy czy do wywo\u0142ania (np. kontekstu) jest pod\u0142\u0105czony wykres u\u017cytkownika z\u00a0zaznaczon\u0105 flag\u0105 Domy\u015blny. Je\u015bli tak \u2013 wykres ten jest domy\u015blnym wykresem startowym \u2013 ko\u0144czymy poszukiwanie.<br \/>\nJe\u015bli nie:<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Sprawdzamy czy do kolejnych ga\u0142\u0119zi nadrz\u0119dnych wywo\u0142ania (np. procedury, potem roota) jest pod\u0142\u0105czony wykres u\u017cytkownika z\u00a0zaznaczon\u0105 flag\u0105 Domy\u015blny. Je\u015bli tak \u2013 wykres ten jest domy\u015blnym wykresem startowym \u2013 ko\u0144czymy poszukiwanie.<br \/>\nJe\u015bli nie:<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Sprawdzamy czy do wywo\u0142ania (np. kontekstu) jest pod\u0142\u0105czony wykres standardowy z\u00a0zaznaczon\u0105 flag\u0105 Domy\u015blny. Je\u015bli tak \u2013 wykres ten jest domy\u015blnym wykresem startowym \u2013 ko\u0144czymy poszukiwanie.<br \/>\nJe\u015bli nie:<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Sprawdzamy czy do kolejnych ga\u0142\u0119zi nadrz\u0119dnych wywo\u0142ania (np. procedury, potem roota) jest pod\u0142\u0105czony wykres standardowy z\u00a0zaznaczon\u0105 flag\u0105 Domy\u015blny. Je\u015bli tak \u2013 wykres ten jest domy\u015blnym wykresem startowym \u2013 ko\u0144czymy poszukiwanie.<br \/>\nJe\u015bli nie:<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Pobieramy pierwszy w\u00a0kolejno\u015bci lp wykres startowy u\u017cytkownika pod\u0142\u0105czony do wywo\u0142ania a\u00a0w\u00a0przypadku jego braku do kolejnych ga\u0142\u0119zi nadrz\u0119dnych wywo\u0142ania. Je\u015bli taki wykres znajdziemy \u2013 wykres ten jest domy\u015blnym wykresem startowym \u2013 ko\u0144czymy poszukiwanie.<br \/>\nJe\u015bli nie:<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Pobieramy pierwszy w\u00a0kolejno\u015bci lp wykres startowy standardowy pod\u0142\u0105czony do wywo\u0142ania a\u00a0w\u00a0przypadku jego braku do kolejnych ga\u0142\u0119zi nadrz\u0119dnych wywo\u0142ania. Je\u015bli taki wykres znajdziemy \u2013 wykres ten jest domy\u015blnym wykresem startowym \u2013 ko\u0144czymy poszukiwanie.<\/li>\n<\/ul>\n<p>Obs\u0142uga przycisk\u00f3w wykresu jest analogiczna jak w\u00a0przypadku wydruk\u00f3w; mamy tu trzy akcje:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Wykonaj domy\u015blny wykres startowy (przycisk g\u0142\u00f3wny wykres\u00f3w lub klawisz F12),<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Wybierz wykres startowy z\u00a0menu kontekstowego i\u00a0wykonaj go (dodatkowy przycisk wykres\u00f3w z\u00a0ikon\u0105 strza\u0142ki lub klawisz Alt-F12) oraz<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Edycja w\u0119z\u0142a wykres\u00f3w\u00ac (Ctrl + lewy klawisz myszy na przycisku g\u0142\u00f3wnym lub klawisz Ctrl-F12).<\/li>\n<\/ul>\n<p>Po wykonaniu domy\u015blnego lub wybranego wykresu startowego jest otwierane okno wynikowe analiz. Obiekt wykresu po aktywacji (otwarcie okna z\u00a0wykresem) widzi tylko w\u0119ze\u0142 narysowanego wykresu a\u00a0wi\u0119c mimo, \u017ce do danego wywo\u0142ania mo\u017cemy mie\u0107 pod\u0142\u0105czon\u0105 dowoln\u0105 ilo\u015b\u0107 wykres\u00f3w startowych \u2013 tylko jeden z\u00a0nich jest \u2018bie\u017c\u0105cym wykresem startowym\u2019.<\/p>\n<p>Wykresy startowe mog\u0105 by\u0107 filtrowane przez zastosowanie dynamicznych warunk\u00f3w, kt\u00f3re decyduj\u0105 czy w\u00a0danej sytuacji (przy bie\u017c\u0105cych ustawieniach przez aplikacj\u0119 zmiennych wyst\u0119puj\u0105cych w\u00a0warunku pod\u0142\u0105czenia wykresu) dany wykres startowy ma by\u0107 widoczny w\u00a0danym kontek\u015bcie czy te\u017c nie.<\/p>\n<h3><strong>Zagnie\u017cd\u017canie wykres\u00f3w (podwykresy)<\/strong><\/h3>\n<p>Ka\u017cdy wykres (w szczeg\u00f3lno\u015bci tak\u017ce wykresy startowe dla danego wywo\u0142ania) mo\u017ce mie\u0107 dowoln\u0105 ilo\u015b\u0107 wykres\u00f3w podrz\u0119dnych (podwykres\u00f3w) pod\u0142\u0105czonych do niego w\u00a0uporz\u0105dkowany spos\u00f3b; jeden z\u00a0tych podwykres\u00f3w jest traktowany jako domy\u015blny (decyduje ustawienie flagi Domy\u015blny pod\u0142\u0105czenia a w\u00a0przypadku jej nie ustawienia dla \u017cadnego podwykresu &#8211; kolejno\u015b\u0107 podwykres\u00f3w wg lp; kolejno\u015b\u0107 t\u0105 mo\u017cna zmienia\u0107 na drzewie hierarchii wykres\u00f3w u\u017cywaj\u0105c mechanizmu b\u0105belkowania).<\/p>\n<p>Z drugiej strony ka\u017cdy wykres mo\u017ce by\u0107 pod\u0142\u0105czony do dowolnej ilo\u015bci wykres\u00f3w nadrz\u0119dnych w\u00a0stosunku do niego.<\/p>\n<p>Nie ma tu ograniczenia aby wykresy \u2018nie zap\u0119tla\u0142y\u2019 si\u0119 tzn. aby dla \u017cadnego \u0142a\u0144cucha wykres\u00f3w nie zachodzi\u0142a sytuacja, \u017ce jaki\u015b wykres wyst\u0119puje w\u00a0tym \u0142a\u0144cuchu wi\u0119cej ni\u017c jeden raz. Takie podej\u015bcie, poza prostot\u0105 implementacji ma t\u0105 dodatkow\u0105 zalet\u0119, \u017ce pozwala wykona\u0107 ten sam wykres jako sw\u00f3j podwykres, ale z\u00a0innymi parametrami.<\/p>\n<p>Nie przewidujemy na razie implementacji warunkowego zagnie\u017cd\u017cania wykres\u00f3w.<\/p>\n<h3><strong>Graf wykres\u00f3w \u2013 nawigacja<\/strong> <strong>w\u00a0czasie wykonywania<\/strong><\/h3>\n<p>Poniewa\u017c ka\u017cdy wykres mo\u017ce posiada\u0107 dowoln\u0105 liczb\u0119 wykres\u00f3w podrz\u0119dnych &#8211; mamy do czynienia z\u00a0ukierunkowanym grafem i\u00a0podczas wykonywania wykres\u00f3w zachodzi konieczno\u015b\u0107 umo\u017cliwienia nawigacji poprzez ten graf.<\/p>\n<p>Przede wszystkim w\u00a0ka\u017cdym w\u0119\u017ale-wykresie (poza \u2018li\u015b\u0107mi\u2019 nie zawieraj\u0105cymi ju\u017c podwykres\u00f3w) musimy umo\u017cliwi\u0107 tzw. drill-down czyli eksploracj\u0119 do w\u0119z\u0142\u00f3w (wykres\u00f3w) podrz\u0119dnych \u2013 jest to realizowane jako akcja wykonywana przy klikni\u0119ciu w\u00a0punkt wykresu. Je\u015bli klikamy prawym klawiszem \u2013 pojawia si\u0119 menu kontekstowe zawieraj\u0105ce pozycje odpowiadaj\u0105ce wykresom podrz\u0119dnym. Natomiast lewy klik na punkcie wykresu powoduje wykonanie domy\u015blnego podwykresu.<\/p>\n<p>Poniewa\u017c zbi\u00f3r wykres\u00f3w pod\u0142\u0105czonych do wywo\u0142ania stanowi graf, po kt\u00f3rym mo\u017cemy si\u0119 porusza\u0107 \u2013 istnieje potrzeba zapami\u0119tywania przebytych \u015bcie\u017cek i\u00a0ponownego poruszania si\u0119 po nich (w ramach jednej \u2018sesji\u2019 z\u00a0danym wywo\u0142aniem). Ci\u0105g wykona\u0144 wykres\u00f3w danego punktu wywo\u0142ania, pocz\u0105wszy od bie\u017c\u0105cego wykresu startowego nazywamy histori\u0105 wykona\u0144 wykres\u00f3w. Zapis wykonania wykresu do historii nast\u0119puje przy wczytywaniu bie\u017c\u0105cego wykresu startowego, a\u00a0nast\u0119pnie przy wykonywaniu akcji Eksploruj. W\u00a0odpowiednich zmiennych zapami\u0119tywane s\u0105 dane pozwalaj\u0105ce odtworzy\u0107 wy\u015bwietlony uprzednio wykres w\u00a0niezmienionej postaci (z dok\u0142adno\u015bci\u0105 do zmian wynikaj\u0105cych z\u00a0od\u015bwie\u017cenia wynik\u00f3w); dane te to oczywi\u015bcie zapytanie i\u00a0warto\u015bci parametr\u00f3w ostatnio u\u017cyte w\u00a0tych zapytaniach oraz ostatnie warto\u015bci parametr\u00f3w graficznych. Na ka\u017cdym wykresie (poza bie\u017c\u0105cym startowym dla opcji Na pocz\u0105tek), na specjalnych przyciskach, s\u0105 dost\u0119pne dodatkowo cztery opcje: Na pocz\u0105tek (powr\u00f3t do bie\u017c\u0105cego wykresu startowego), Wstecz (powr\u00f3t do poprzednio wykonanego wykresu), Wprz\u00f3d (przej\u015bcie do nast\u0119pnego \u2018historycznie\u2019 wykresu) i\u00a0Na koniec (przej\u015bcie do ostatniego \u2018historycznie\u2019 wykresu).<\/p>\n<p>Opcja Wstecz (tak\u017ce Na pocz\u0105tek ) nie pojawia si\u0119 w\u00a0przypadku gdy jeste\u015bmy na bie\u017c\u0105cym wykresie startowym. Wszystkie parametry wykresu (z zapytania i\u00a0graficzne), do kt\u00f3rego si\u0119 cofamy s\u0105 odtwarzane na podstawie odpowiednich zmiennych ale dane wykresu s\u0105 prze\u0142adowywane (jest to robione ze wzgl\u0119d\u00f3w technicznych \u2013 nie przewidujemy cache-owania danych wynikowych wykresu).<\/p>\n<p>Analogiczne uwagi dotycz\u0105 opcji Wprz\u00f3d, kt\u00f3r\u0105 dodatkowo trzeba odr\u00f3\u017cnia\u0107 od Eksploruj tak\u017ce w\u00a0tym sensie, \u017ce nawet je\u015bli Wprz\u00f3d powoduje przej\u015bcie do podrz\u0119dnego wykresu (tak jak Eksploruj) to po pierwsze nie koniecznie jest to ten sam wykres podrz\u0119dny (je\u015bli jest ich wi\u0119cej), a\u00a0po drugie opcja Eksploruj dotyczy klikni\u0119tego w\u00a0momencie jej wybrania punktu a\u00a0opcja Wprz\u00f3d bierze pod uwag\u0119 punkt poprzednio klikni\u0119ty, tj. klikni\u0119ty w\u00a0trakcie wykonywania opcji Eksploruj, kt\u00f3re wprowadzi\u0142o dany wykres do historii.<\/p>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Zapisujemy do kolejki historii tylko bie\u017c\u0105cy wykres startowy i\u00a0eksploracje (ka\u017cd\u0105). Cofanie ani posuwanie si\u0119 wprz\u00f3d nie dopisuje do kolejki rekord\u00f3w a\u00a0tylko przesuwa pointer wskazuj\u0105cy bie\u017c\u0105c\u0105 pozycj\u0119. Eksploracja usuwa wszystkie rekordy z\u00a0kolejki historii b\u0119d\u0105ce \u2018po\u2019 rekordzie odpowiadaj\u0105cym eksplorowanemu wykresowi, dopisuje rekord docelowego podwykresu i\u00a0ustawia na nim pointer. Powoduje to \u2018zapominanie\u2019 cz\u0119\u015bci historii po wykonaniu eksploracji ale jest to standardowe zachowanie (por. MSIE).<\/div><\/div><\/section>\n<h3><strong>Edycja wykres\u00f3w<\/strong><\/h3>\n<p>Do wygodnego pod\u0142\u0105czania wykres\u00f3w startowych do wywo\u0142a\u0144 oraz wykres\u00f3w do wykres\u00f3w (zagnie\u017cd\u017canie) zosta\u0142o utworzone specjalne wielopoziomowe drzewo (korze\u0144, procedura, kontekst, wykresy startowe, wykresy podrz\u0119dne). Poza podstawowymi operacjami takimi jak dodawanie, pod\u0142\u0105czanie i\u00a0od\u0142\u0105czanie wykres\u00f3w, ich edycja (w tym testowanie) i\u00a0usuwanie dost\u0119pne b\u0119d\u0105 tak\u017ce r\u00f3\u017cne funkcje pomocnicze, np. w\u0142\u0105czanie\/wy\u0142\u0105czanie flagi domy\u015blno\u015bci, b\u0105belkowanie, szukanie wykresu zawieraj\u0105cego w\u00a0definicji podany ci\u0105g znak\u00f3w i\u00a0inne.<\/p>\n<h2><strong>\u0179r\u00f3d\u0142a danych do wykres\u00f3w<\/strong><\/h2>\n<p>Ka\u017cdy wykres mo\u017ce by\u0107 tworzony w\u00a0oparciu o\u00a0jedno z\u00a0ni\u017cej wymienionych \u017ar\u00f3de\u0142:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <b><strong>Zapytanie SQL i\u00a0dane w\u00a0bazie<\/strong><\/b><\/li>\n<\/ul>\n<p>Jest to podstawowy rodzaj \u017ar\u00f3d\u0142a danych dla wykres\u00f3w.<\/p>\n<p>Przez zapytanie rozumiemy tu ci\u0105g dowolnych instrukcji T-SQL, w\u00a0kt\u00f3rym ostatni\u0105 jest instrukcja SELECT o\u00a0strukturze zgodnej ze struktur\u0105 specjalnej kolejki. Struktura ta, w\u00a0przypadku gdy mamy do czynienia z\u00a0prawdziwym wykresem, a\u00a0nie tylko z\u00a0tabel\u0105 wynikow\u0105, nak\u0142ada pewne ograniczenia na typy i\u00a0zawarto\u015b\u0107 pierwszych trzech kolumn zapytania. Pierwsza kolumna numeruje wiersze wyniku zatem musi by\u0107 ca\u0142kowita a\u00a0jej warto\u015bci unikalne, druga kolumna okre\u015bla warto\u015bci na osi X &#8211; musi wi\u0119c by\u0107 rzeczywista lub ca\u0142kowita a\u00a0jej warto\u015bci unikalne, wreszcie trzecia kolumna okre\u015bla opisy osi X \u2013 powinna by\u0107 znakowa a\u00a0jej warto\u015bci unikalne cho\u0107 akurat te wymagania s\u0105 tylko zaleceniami a\u00a0nie formalnymi wymogami. W\u00a0przypadku wykres\u00f3w typu \u2018tylko tabela\u2019 powy\u017csze ograniczenia nie obowi\u0105zuj\u0105.<\/p>\n<p><strong>Wszystkie kolumny zwracane przez SELECT musz\u0105 by\u0107 nazwane<\/strong>. Je\u015bli wi\u0119c w\u00a0li\u015bcie tej wyst\u0119puj\u0105 agregaty lub sta\u0142e \u2013 nale\u017cy koniecznie u\u017cy\u0107 alias\u00f3w (np. <em>SELECT <strong>PunktID=1<\/strong>, TrN_TrNID, TrN_NumerPelny, <strong>RazemNetto=SUM(TrE_WartoscNetto)<\/strong> FROM &#8230; <\/em>).<\/p>\n<p>W tek\u015bcie zapytania w\u00a0definicji wykresu mog\u0105 wyst\u0119powa\u0107 tzw. parametry dynamiczne, kt\u00f3rych warto\u015bci s\u0105 wyliczane i\u00a0wstawiane w\u00a0miejsce definicji (odwo\u0142a\u0144 do) tych parametr\u00f3w przed przes\u0142aniem wynikowego zapytania na serwer. Poza parametrami dynamicznymi w\u00a0zapytaniu mo\u017cna umieszcza\u0107 wyra\u017cenia, zmienne tekstowe, wstawki tekstowe i\u00a0wiele innych konstrukcji, kt\u00f3re przed podaniem zapytania do serwera SQL s\u0105 rozwijane (wyliczane i\u00a0podstawiane warto\u015bciami).<\/p>\n<p>J\u0119zyk u\u017cyty w\u00a0zapytaniu wykresu jest wi\u0119c po\u0142\u0105czeniem T-SQL i\u00a0specjalnego j\u0119zyka obs\u0142ugi parametr\u00f3w dynamicznych, tzw. DPL, opisanego w\u00a0osobnym dokumencie.<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <b><strong>Kolejka globalna wype\u0142niona przez aplikacj\u0119<\/strong><\/b><\/li>\n<\/ul>\n<p>Dane serii wykresu mog\u0105 tak\u017ce pochodzi\u0107 ze specjalnych kolejek. Ma to miejsce w\u00a0przypadkach, gdy aplikacja dysponuje ju\u017c danymi (cz\u0119sto uzyskanymi w\u00a0inny spos\u00f3b ni\u017c tylko wykonanie SELECT-\u00f3w).<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> <b><strong>Wywo\u0142anie procedury<\/strong><\/b><\/li>\n<\/ul>\n<p>Wykonanie \u2018wykresu\u2019 mo\u017ce polega\u0107 nie tylko na uzyskaniu wynik\u00f3w i\u00a0ich graficznej i\/albo tabelarycznej prezentacji (wykresy normalne \/ wykresy typu \u2018tylko tabela\u2019), ale tak\u017ce na wywo\u0142aniu procedury (tzw. drill-trough).<\/p>\n<p>W tym przypadku sk\u0142adnia \u2018zapytania\u2019 nie ma nic wsp\u00f3lnego z\u00a0SQL-em \u2013 wywo\u0142anie procedury nast\u0119puje zgodnie ze sk\u0142adni\u0105 j\u0119zyka DPL.<\/p>\n<h2><strong>Parametry dynamiczne wykres\u00f3w<\/strong><\/h2>\n<p>Parametrem dynamicznym wykresu (w skr\u00f3cie: parametrem) nazywamy zmienn\u0105 wyst\u0119puj\u0105c\u0105 w\u00a0zapytaniu lub parametrach graficznych (mo\u017cna np. sparametryzowa\u0107 tytu\u0142 wykresu), kt\u00f3rej warto\u015b\u0107 jest ustalana i\u00a0wstawiana w\u00a0miejsce definicji parametru w\u00a0czasie wykonywania wykresu (tzw. runtime).<\/p>\n<p>Og\u00f3lna sk\u0142adnia definicji parametru dynamicznego jest nast\u0119puj\u0105ca:<\/p>\n<p><strong>?@[H]Picture[(_Q|_NQ)]|[Nazwa|]Prompt:Default[@?]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (PD)<\/strong><\/p>\n<p>W przypadku, gdy chcemy u\u017cy\u0107 w\u00a0parametrze bardziej wyrafinowanych opcji lub zadeklarowa\u0107 wszystkie parametry w\u00a0jednym miejscu \u2013 u\u017cywamy deklaracji parametru dynamicznego maj\u0105cej posta\u0107:<\/p>\n<p><strong>@PAR Definicja Opcje PAR@\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (PD-DEKL)<\/strong><\/p>\n<p>gdzie <em>Definicja<\/em> jest okre\u015blona przez (PD).<\/p>\n<p>Deklaracja r\u00f3\u017cni si\u0119 od definicji pod jeszcze jednym, istotnym wzgl\u0119dem. Mianowicie deklaracja przy rozwini\u0119ciu jest usuwana z\u00a0tekstu. Definicja parametru jest natomiast zamieniana jego warto\u015bci\u0105.<\/p>\n<p>Niezale\u017cnie od tego czy zadeklarujemy czy te\u017c zdefiniujemy parametr dynamiczny \u2013 najcz\u0119\u015bciej wyst\u0119puje potrzeba wielokrotnego odwo\u0142ywania si\u0119 jego warto\u015bci w\u00a0innych cz\u0119\u015bciach tekstu \u2013 korzystamy w\u00f3wczas z\u00a0odwo\u0142ania do parametru dynamicznego (nazywanego tak\u017ce definicj\u0105 powt\u00f3rzonego parametru):<\/p>\n<p><strong>??[(_Q|_NQ)]Nazwa\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (PD2)<\/strong><\/p>\n<p>Szczeg\u00f3\u0142owy opis parametr\u00f3w dynamicznych zosta\u0142 umieszczony w\u00a0osobnym dokumencie.<\/p>\n<p>Pocz\u0105tkowe warto\u015bci parametr\u00f3w (tzn. te, kt\u00f3re s\u0105 u\u017cyte przy pierwszym wykonaniu wykresu w\u00a0danej sesji wywo\u0142ania) mog\u0105 by\u0107 przekazywane do wykresu z\u00a0poni\u017cszych \u017ar\u00f3de\u0142 i\u00a0wg poni\u017cszej kolejno\u015bci okre\u015blaj\u0105cej priorytet \u017ar\u00f3d\u0142a:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Z danych pobranych z\u00a0eksplorowanego punktu wykresu nadrz\u0119dnego \u2013 nie dotyczy to oczywi\u015bcie bie\u017c\u0105cego wykresu startowego.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Z kolejki parametr\u00f3w dynamicznych wykresu nadrz\u0119dnego (wi\u0105zanie po nazwie) \u2013 nie dotyczy to oczywi\u015bcie bie\u017c\u0105cego wykresu startowego<\/li>\n<\/ul>\n<p>Je\u015bli np. W\u00a0zapytaniu nadrz\u0119dnym i\u00a0podrz\u0119dnym mamy parametr o\u00a0nazwie RaportyZamkniete to eksploruj\u0105c wykres z\u00a0ustawion\u0105 warto\u015bci\u0105 parametru dziedziczymy t\u0105 warto\u015b\u0107 na podwykresie.<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Parametry dynamiczne zdefiniowane w\u00a0parametrach graficznych dziedzicz\u0105 warto\u015bci z\u00a0parametr\u00f3w dynamicznych zdefiniowanych w\u00a0zapytaniu bie\u017c\u0105cego wykresu.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Z kolejki zmiennych dynamicznych przekazanych do wykresu z\u00a0aplikacji (dok\u0142adniej: z\u00a0okna, z\u00a0kt\u00f3rego uruchamiamy analiz\u0119) \u2013 dotyczy to tylko bie\u017c\u0105cego wykresu startowego.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Z warto\u015bci domy\u015blnych okre\u015blonych w\u00a0definicji parametru (tak\u017ce w\u0142\u0105czaj\u0105c opcjonalny odczyt ostatnio u\u017cytych warto\u015bci z\u00a0rejestru).<\/li>\n<\/ul>\n<p>Z takimi pocz\u0105tkowymi warto\u015bciami parametr\u00f3w tworzony jest wykres po raz pierwszy (w sesji danego wywo\u0142ania). Przed tym jednak na oknie wykresu s\u0105 tworzone kontrolki wszystkich parametr\u00f3w a\u00a0ich warto\u015bci ustalane s\u0105 na warto\u015bci pocz\u0105tkowe. Po narysowaniu wykresu mo\u017cliwa jest edycja parametr\u00f3w za pomoc\u0105 wykreowanych kontrolek i\u00a0od\u015bwie\u017cenie wykresu z\u00a0nowymi warto\u015bciami parametr\u00f3w.<\/p>\n<p>Na oknie wynikowym analiz znajduje si\u0119 znacznik okre\u015blaj\u0105cy, czy pobrane dane s\u0105 zgodne z\u00a0bie\u017c\u0105cymi ustawieniami kontrolek parametr\u00f3w czy te\u017c nie (podobnie jak przycisk lejka w\u00a0konstruktorze filtra).<\/p>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Je\u015bli w\u00a0parametrach graficznych definicji wykresu umie\u015bcimy parametr \/@AutoRefresh to od\u015bwie\u017canie b\u0119dzie nast\u0119powa\u0142o automatycznie (tj. bez wciskania przycisku od\u015bwie\u017cenia) przy ka\u017cdej zmianie kt\u00f3regokolwiek z\u00a0parametr\u00f3w dynamicznych (zapytania lub graficznych).<\/div><\/div><\/section>\n<p>Oto szczeg\u00f3\u0142y mechanizmu, kt\u00f3rego u\u017cywa obiekt przy ustalaniu warto\u015bci parametr\u00f3w wykresu.<\/p>\n<p>Przed wykonaniem bie\u017c\u0105cego wykresu startowego lub potomnego po raz pierwszy w\u00a0danej sesji wywo\u0142ania obiekt przeszukuje zapytanie i\u00a0parametry graficzne wykresu w\u00a0poszukiwaniu parametr\u00f3w dynamicznych. Po znalezieniu wszystkich parametr\u00f3w, przed wykonaniem wykresu obiekt stara si\u0119 ustali\u0107 ich warto\u015bci:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Je\u015bli mamy do czynienia z\u00a0bie\u017c\u0105cym wykresem startowym \u2013 s\u0105 przeszukiwane parametry przekazane z\u00a0aplikacji. Wi\u0105zanie odbywa si\u0119 po Nazwie parametru. Dotyczy to tylko parametr\u00f3w dynamicznych zdefiniowanych w\u00a0zapytaniu.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Je\u015bli wykonujemy opcj\u0119 Eksploruj &#8211; najpierw sprawdzane jest zapytanie wykresu nadrz\u0119dnego (dok\u0142adniej kolekcja Fields jego wynikowego recordsetu) w\u00a0poszukiwaniu kolumn o\u00a0nazwie zgodnej z\u00a0Nazw\u0105 parametru. Je\u015bli taka kolumna zostanie znaleziona \u2013 jest pobierany klikni\u0119ty rekord z\u00a0kolejki z\u00a0danymi nadrz\u0119dnego wykresu a\u00a0nast\u0119pnie w\u00a0miejsce parametru wstawiana jest warto\u015b\u0107 z\u00a0odpowiedniej kolumny tego rekordu. Dotyczy to zar\u00f3wno parametr\u00f3w zapytania jak i\u00a0graficznych. Je\u015bli szukana kolumna nie zostanie znaleziona &#8211; jest przeszukiwana kolejka parametr\u00f3w dynamicznych nadwykresu (czyli eksplorowanego wykresu). Je\u015bli w\u00a0kolejce tej zostanie znaleziony parametr o\u00a0nazwie Nazwa \u2013 nast\u0119puje odziedziczenie warto\u015bci. Oczywi\u015bcie dla parametr\u00f3w zdefiniowanych w\u00a0zapytaniu przeszukiwana jest kolejka parametr\u00f3w dynamicznych \u2018nadzapytania\u2019 a\u00a0dla parametr\u00f3w zdefiniowanych w\u00a0parametrach graficznych \u2013 kolejka parametr\u00f3w dynamicznych \u2018nadparametr\u00f3w\u2019 graficznych.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Je\u015bli mamy do czynienia z\u00a0parametrem dynamicznym zdefiniowanym w\u00a0parametrach graficznych, niezale\u017cnie od wynik\u00f3w poprzednich poszukiwa\u0144, nast\u0119puje pr\u00f3ba odziedziczenia warto\u015bci tego parametru z\u00a0parametru dynamicznego o\u00a0takiej samej nazwie, zdefiniowanego w\u00a0zapytaniu bie\u017c\u0105cego wykresu. Mamy tu zatem do czynienia z\u00a0bezwarunkowym dziedziczeniem warto\u015bci graficznych parametr\u00f3w dynamicznych z\u00a0warto\u015bci zapytaniowych parametr\u00f3w dynamicznych bie\u017c\u0105cego wykresu.<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> W obu przypadkach je\u015bli poszukiwania nie dadz\u0105 rezultatu \u2013 warto\u015b\u0107 parametru jest ustalana na podstawie jego <em>Defaultu<\/em> (warto\u015bci odczytanej z\u00a0definicji parametru)<\/li>\n<\/ul>\n<p>Wszystkie parametry danego wykresu, \u0142\u0105cznie z\u00a0ustalonymi warto\u015bciami zapisywane s\u0105 w\u00a0odpowiedniej kolejce. Na podstawie tej kolejki kreowane s\u0105 dynamicznie kontrolki parametr\u00f3w i\u00a0od razu rysowany wykres.<\/p>\n<p>Przed wykonaniem wykresu, kt\u00f3ry ju\u017c wcze\u015bniej zosta\u0142 wczytany (<em>Na pocz\u0105tek, Wstecz, Wprz\u00f3d Na koniec, Od\u015bwie\u017c<\/em>) nast\u0119puje wykreowanie kontrolek parametr\u00f3w tego wykresu z\u00a0warto\u015bciami ostatnio u\u017cytymi i\u00a0narysowanie wykresu w\u00a0oparciu o\u00a0te warto\u015bci. Teraz U\u017cytkownik mo\u017ce manipulowa\u0107 warto\u015bciami parametr\u00f3w poprzez kontrolki \u2013 warto\u015bci te s\u0105 zapisywane do kolejki w\u00a0momencie wykonania akcji <em>Od\u015bwie\u017c<\/em>.<\/p>\n<h2><strong>Zmienne dynamiczne przekazywane<\/strong> <strong>z\u00a0aplikacji do bie\u017c\u0105cego wykresu startowego<\/strong><\/h2>\n<p>Zmienne dynamiczne maj\u0105 za zadanie zainicjalizowa\u0107 wybrane parametry dynamiczne wykresu warto\u015bciami przekazanymi z\u00a0aplikacji. Warto\u015bci tych zmiennych s\u0105 ustalane w\u00a0czasie wykonywania programu i\u00a0przesy\u0142ane do bie\u017c\u0105cego wykresu startowego. Mo\u017cna np. przekaza\u0107 z\u00a0procedury-listy zmienn\u0105 zawieraj\u0105c\u0105 aktualnie zastosowany filtr na li\u015bcie.<\/p>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Zmienne dynamiczne s\u0105 podstawiane pod parametry dynamiczne tylko dla bie\u017c\u0105cego wykresu startowego (nie dotycz\u0105 podwykres\u00f3w \u2013 tam wyst\u0119puje dziedziczenie warto\u015bci parametr\u00f3w o\u00a0zgodnej nazwie).<\/div><\/div><\/section>\n<h2><strong>Wyra\u017cenia<\/strong><\/h2>\n<p>Wyra\u017cenia to ci\u0105gi znak\u00f3w wyst\u0119puj\u0105ce w\u00a0zapytaniach oraz w\u00a0parametrach graficznych wykresu takie, kt\u00f3rych warto\u015bci s\u0105 obliczane przed wykonaniem wykresu. W\u00a0wyra\u017ceniach mog\u0105 wyst\u0119powa\u0107 m.in. odwo\u0142ania do parametr\u00f3w dynamicznych a\u00a0tak\u017ce zmienne i\u00a0funkcje systemowe. Wyra\u017ce\u0144 u\u017cywa bardzo cz\u0119sto do okre\u015blania warto\u015bci pocz\u0105tkowych parametr\u00f3w dynamicznych (np. bie\u017c\u0105ca data).<\/p>\n<p>Sk\u0142adnia wyra\u017cenia jest nast\u0119puj\u0105ca:<\/p>\n<p><strong>{ci\u0105g_znak\u00f3w}\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (W)<\/strong><\/p>\n<p>Szczeg\u00f3\u0142owy opis wyra\u017ce\u0144 zosta\u0142 umieszczony w\u00a0osobnym dokumencie.<\/p>\n<h2><strong>Predefiniowane wstawki tekstowe<\/strong><\/h2>\n<h3><strong>Wstawki tekstowe<\/strong><\/h3>\n<p>Potrzeba wprowadzenia wstawek tekstowych wynik\u0142a z\u00a0trudno\u015bci, jakie wyst\u0119powa\u0142y przy utrzymywaniu standaryzacji du\u017cej liczby wykres\u00f3w oraz potrzeby wyodr\u0119bnienia cz\u0119\u015bci wsp\u00f3lnych wielu analiz (likwidacja redundancji).<\/p>\n<p>Co do standaryzacji chodzi o\u00a0to aby np. powtarzaj\u0105ce si\u0119 na wielu wykresach analogiczne kontrolki (lub grupy kontrolek, np. zakres dat) wygl\u0105da\u0142y na ka\u017cdym wykresie tak samo (\u2018dymek\u2019, opcje graficzne, warunek poprawno\u015bci, komunikat itp.). Do tej pory zmiana jakiejkolwiek w\u0142asno\u015bci takiej kontrolki wi\u0105za\u0142a si\u0119 z\u00a0konieczno\u015bci\u0105 wykonania tej zmiany we wszystkich odpowiednich wykresach. Stosuj\u0105c predefiniowane wstawki tekstowe \u2013 robimy zmian\u0119 w\u00a0jednym miejscu. Podobnie ma si\u0119 rzecz, je\u015bli chodzi o\u00a0parametry graficzne, kt\u00f3re, poza tytu\u0142em, typem wykresu i\u00a0wyborem serii powinny by\u0107 w\u00a0zasadzie identyczne dla wszystkich wykres\u00f3w.<\/p>\n<p>Wyodr\u0119bnienie wsp\u00f3lnych cz\u0119\u015bci wykres\u00f3w polega na tym, \u017ce je\u017celi mamy kilka wykres\u00f3w o\u00a0bardzo podobnej konstrukcji (r\u00f3\u017cni\u0105cych si\u0119 tylko detalami) to za pomoc\u0105 predefiniowanych wstawek tekstowych mo\u017cna jak gdyby stworzy\u0107 jedn\u0105, sparametryzowan\u0105 definicj\u0119 wykresu. Oczywi\u015bcie, formalnie rzecz bior\u0105c, definicji b\u0119dzie kilka, tyle tylko, \u017ce b\u0119d\u0105 one posiada\u0142y jedynie wywo\u0142anie odpowiedniej, wsp\u00f3lnej wstawki z\u00a0r\u00f3\u017cnymi parametrami. Tyle og\u00f3lnych impresji. Przejd\u017amy do konkret\u00f3w.<\/p>\n<p>Pierwsz\u0105 czynno\u015bci\u0105, jak\u0105 wykonuje modu\u0142 wykres\u00f3w po wczytaniu definicji wykresu z\u00a0bazy, jeszcze przed podaniem tekst\u00f3w (zapytanie i\u00a0grafika) do preparsingu, jest poszukiwanie w\u00a0tych tekstach deklaracji predefiniowanych wstawek tekstowych (PWT) i\u00a0ich rozwijanie.<\/p>\n<p>Deklaracja PWT w\u00a0tek\u015bcie zapytania b\u0105d\u017a grafiki ma nast\u0119puj\u0105c\u0105 sk\u0142adni\u0119:<\/p>\n<p><strong>@INS Nazwa||[<em>Parametry<\/em>] [ParametryX] INS@\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (PWT0)<\/strong><\/p>\n<p>gdzie Nazwa jest unikaln\u0105 (w ramach bazy wykresu) nazw\u0105 wstawki (NO CASE) a\u00a0opcjonalne cz\u0142ony Parametry i\u00a0ParametryX posiadaj\u0105 nast\u0119puj\u0105c\u0105 sk\u0142adni\u0119:<\/p>\n<p><strong><em>Parametr<\/em>[, <em>Parametr<\/em>&#8230;]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (PWTP)<\/strong><\/p>\n<p><strong><em>^NazwaParametruX=WartoscParametruX<\/em><\/strong><\/p>\n<p><strong><em>[^NazwaParametruX=WartoscParametruX,&#8230;]<\/em> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (PWTPX)<\/strong><\/p>\n<p>gdzie Parametr jest dowolnym ci\u0105giem znak\u00f3w (NO CASE) , nie zawieraj\u0105cym przecinka (seperator parametr\u00f3w), znaku ^ (definicja parametru typu X) ani ci\u0105gu znak\u00f3w \u2018 INS@\u2019 (spacja, INS@ &#8211; terminator PWT). Parametry typu X musz\u0105 wyst\u0119powa\u0107 po parametrach zwyk\u0142ych i\u00a0nie mog\u0105 by\u0107 z\u00a0nimi wymieszane. Zostan\u0105 one om\u00f3wione w\u00a0dalszej cz\u0119\u015bci tego rozdzia\u0142u.<\/p>\n<p>Parametry s\u0105 przekazywane do definicji wstawki i\u00a0decyduj\u0105 o\u00a0wstawianiu do niej tekst\u00f3w warunkowych (patrz nast\u0119pny rozdzia\u0142) i\u00a0wstawek podrz\u0119dnych (tzw. podwstawek).<\/p>\n<p>Definicja wstawki jest traktowana jak normalny tekst \u2013 wynika st\u0105d, \u017ce wstawki mog\u0105 by\u0107 zagnie\u017cd\u017cone. Deklaracja (pod)wstawki we wstawce ma posta\u0107:<\/p>\n<p><strong>@INS <em>Nazwa<\/em>|[<em>Warunek<\/em>]|[<em>Parametry<\/em>] INS@\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (PPWT)<\/strong><\/p>\n<p>gdzie Nazwa jest unikaln\u0105 (w ramach bazy wykresu) nazw\u0105 wstawki podrz\u0119dnej (NO CASE) a\u00a0opcjonalny cz\u0142on Warunek posiada nast\u0119puj\u0105c\u0105 sk\u0142adni\u0119:<\/p>\n<p><strong><em>Segment[,Segment&#8230;]<\/em> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (PWTW)<\/strong><\/p>\n<p>gdzie Segment jest dowolnym ci\u0105giem znak\u00f3w (NO CASE), nie zawieraj\u0105cym przecinka (seperator segment\u00f3w) ani ci\u0105gu znak\u00f3w<\/p>\n<p>\u2018 INS@\u2019 (spacja, INS@ &#8211; terminator PWT). Poniewa\u017c podwstawka mo\u017ce zosta\u0107 wywo\u0142ana z\u00a0parametrami (deklaracja w\u00a0tek\u015bcie nadrz\u0119dnym) \u2013 sprawdzamy czy parametry te spe\u0142niaj\u0105 Warunek wstawienia podwstawki. Je\u015bli Warunek jest spe\u0142niony &#8211; nast\u0119puje zamiana deklaracji podwstawki na jej rozwini\u0119cie, je\u015bli nie \u2013 usuni\u0119cie deklaracji podwstawki. Walidacja warunku odbywa si\u0119 w\u00a0nast\u0119puj\u0105cy spos\u00f3b:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Je\u015bli Warunek jest pusty \u2013 uznaje si\u0119, \u017ce jest spe\u0142niony<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Je\u015bli Warunek nie jest pusty \u2013 uznaje si\u0119, \u017ce jest spe\u0142niony, je\u015bli dla co najmniej jednego z\u00a0jego cz\u0142on\u00f3w (Segment) istnieje odpowiednik (r\u00f3wno\u015b\u0107 NO CASE) w\u015br\u00f3d przekazanych do podwstawki parametr\u00f3w zwyk\u0142ych (nie typu X).<\/li>\n<\/ul>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Walidacja dotyczy parametr\u00f3w przekazanych z\u00a0nadrz\u0119dnego tekstu. Parametry okre\u015blone w\u00a0deklaracji podwstawki s\u0105 jedynie przekazywane do jej rozwini\u0119cia w\u00a0przypadku, gdy to rozwini\u0119cie jest wstawiane.<\/div><\/div><\/section>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Warto zwr\u00f3ci\u0107 uwag\u0119 na fakt, \u017ce przed sekwencj\u0105 ko\u0144cz\u0105c\u0105 INS@ musi wyst\u0119powa\u0107 co najmniej jedna spacja, zatem deklaracja:<\/p>\n<p>@INS Ala<\/p>\n<p>INS@<\/p>\n<p>nie jest poprawna gdy\u017c bezpo\u015brednio przed ko\u0144cowym INS@ wyst\u0119puje ENTER zamiast spacji.<\/div><\/div><\/section>\n<p>Przy rozwijaniu wstawki jej rozwini\u0119cie pobierane jest z\u00a0tej bazy (wykres\u00f3w standardowych lub u\u017cytkownika), z\u00a0kt\u00f3rej pobrano definicj\u0119 wykresu. W\u00a0przypadku nie znalezienia wstawki o\u00a0podanej nazwie, je\u015bli mamy do czynienia z\u00a0wykresem u\u017cytkownika, wstawka jest nast\u0119pnie poszukiwana w\u00a0bazie wykres\u00f3w standardowych.<\/p>\n<h3><strong>Teksty warunkowe<\/strong><\/h3>\n<p>Omawiaj\u0105c parametry przekazywane w\u00a0deklaracji wstawki wspomnieli\u015bmy o\u00a0tzw. tekstach warunkowych. Tekst warunkowy jest dowolnym ci\u0105giem znak\u00f3w, kt\u00f3ry mo\u017ce zosta\u0107 wstawiony do definicji wstawki przy spe\u0142nieniu okre\u015blonych warunk\u00f3w.<\/p>\n<p>Tekst warunkowy mo\u017ce wyst\u0119powa\u0107 jedynie w\u00a0definicji predefiniowanej wstawki tekstowej, a\u00a0jego sk\u0142adnia jest nast\u0119puj\u0105ca:<\/p>\n<p><strong>@IF(<em>Warunek<\/em>) <em>Tekst<\/em> IF@\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (TW)<\/strong><\/p>\n<p>gdzie <em>Warunek<\/em> jest analogiczny jak w\u00a0definicji (PPWT) a\u00a0Tekst jest dowolnym ci\u0105giem znak\u00f3w nie zawieraj\u0105cym sekwencji zako\u0144czenia \u2018 IF@\u2019 (spacja, IF@). Poniewa\u017c TW mo\u017ce wyst\u0119powa\u0107 jedynie w\u00a0definicji PWT \u2013 s\u0105 okre\u015blone parametry przekazane do definicji PWT z\u00a0jej deklaracji w\u00a0tek\u015bcie nadrz\u0119dnym. Parametry te pozwalaj\u0105 na walidacj\u0119 warunku Warunek (mechanizm dok\u0142adnie taki sam jak w\u00a0przypadku PPWT).<\/p>\n<p>Uzupe\u0142niaj\u0105cym elementem sk\u0142adni tekstu warunkowego jest zaprzeczony tekst warunkowy:<\/p>\n<p><strong>@IFNOT(Warunek) Tekst IFNOT@\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (TWNOT)<\/strong><\/p>\n<p>r\u00f3\u017cni si\u0119 on od TW tylko tym, \u017ce tekst jest wstawiany je\u015bli warunek jest pusty albo \u017caden jego cz\u0142on nie ma odpowiednika w\u015br\u00f3d przekazanych parametr\u00f3w.<\/p>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Warto zwr\u00f3ci\u0107 uwag\u0119 na fakt, \u017ce przed sekwencj\u0105 ko\u0144cz\u0105c\u0105 IF@ (IFNOT@) musi wyst\u0119powa\u0107 co najmniej jedna spacja, zatem deklaracja:<\/p>\n<p>@IF(FAPA)<\/p>\n<p>xxx<\/p>\n<p>IF@<\/p>\n<p>nie jest poprawna gdy\u017c bezpo\u015brednio przed ko\u0144cowym IF@ wyst\u0119puje ENTER zamiast spacji.<\/div><\/div><\/section>\n<p>Analogicznie do powy\u017cszych zosta\u0142y wprowadzone teksty warunkowe:<\/p>\n<p><strong>@IFAND(<em>Warunek<\/em>) Tekst IFAND@\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (TWAND)<\/strong><\/p>\n<p>oraz<\/p>\n<p><strong>@IFANDNOT(<em>Warunek<\/em>) Tekst IFANDNOT@\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (TWANDNOT)<\/strong><\/p>\n<p>r\u00f3\u017cni\u0105ce si\u0119 od opisanych jedynie sposobem sprawdzania Warunku, kt\u00f3ry w\u00a0tym przypadku uwa\u017ca si\u0119 za spe\u0142niony tylko wtedy gdy jest pusty lub dla wszystkich jego cz\u0142on\u00f3w (Segment) istnieje odpowiednik (r\u00f3wno\u015b\u0107 NO CASE) w\u015br\u00f3d przekazanych do podwstawki parametr\u00f3w zwyk\u0142ych (nie typu X).<\/p>\n<h3><strong>Rozszerzone parametry tekstowe (parametry typu X)<\/strong><\/h3>\n<p>Opisany wy\u017cej mechanizm nie pozwala na parametryzowanie wstawek tekstowych. Przypu\u015b\u0107my, \u017ce chcemy zdefiniowa\u0107 wstawk\u0119 wstawiaj\u0105c\u0105 zakres dat. Wstawki tej chcemy u\u017cy\u0107 zar\u00f3wno w\u00a0analizie a1 gdzie warto\u015bci domy\u015blne dat maj\u0105 by\u0107 odpowiednio Today() i\u00a0Today()+1 i w\u00a0analizie a2 z\u00a0warto\u015bciami domy\u015blnymi Date(Month(Today()), 1, Year(Today())) i\u00a0Today(). Aby wstawka mog\u0142a zrealizowa\u0107 oba te zadania \u2013 musi obs\u0142ugiwa\u0107 parametry rozszerzone.<\/p>\n<p>Sk\u0142adnia rozszerzonego parametru tekstowego wstawianego do wstawki jest nast\u0119puj\u0105ca:<\/p>\n<p><strong>@INSP(<em>Nazwa<\/em>)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 (INSP)<\/strong><\/p>\n<p>gdzie <em>Nazwa<\/em> jest nazw\u0105 parametru przekazanego z\u00a0tekstu nadrz\u0119dnego (zapytania, grafiki b\u0105d\u017a podwstawki).<\/p>\n<p>Sk\u0142adnia przekazania w\/w parametru tekstowego jest okre\u015blona przez (PWTPX). We wzorze tym <em>NazwaParametruX<\/em> odpowiada <em>Nazwie<\/em> w\u00a0(INSP) (r\u00f3wno\u015b\u0107 jest typu NO CASE). Warto\u015b\u0107 parametru mo\u017ce by\u0107 ustalona ale mo\u017ce te\u017c zawiera\u0107 element @INSP().<\/p>\n<h2><strong>Parametry graficzne wykresu<\/strong><\/h2>\n<p>Aby nie zmienia\u0107 struktury tabeli z\u00a0wykresami przy dodawaniu w\u00a0przysz\u0142o\u015bci obs\u0142ugi kolejnych parametr\u00f3w graficznych wprowadzamy jedn\u0105, parsowan\u0105 kolumn\u0119 stringow\u0105 ParametryGraficzne. Kolumna ta powinna zawiera\u0107 ustawienia wszystkich potrzebnych parametr\u00f3w graficznych danego wykresu w\u00a0postaci:<\/p>\n<p><strong><em>\/@SymbolGr[=WartoscGr(BezApostrof\u00f3w)]\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/em>(PG)<\/strong><\/p>\n<p>gdzie <em>SymbolGr<\/em> jest nazw\u0105 parametru graficznego a\u00a0WartoscGr jego warto\u015bci\u0105 pocz\u0105tkow\u0105. Kolumna <em>ParametryGraficzne<\/em> jest parsowana przy wczytywaniu definicji wykresu i\u00a0sk\u0142adana przy zapisie.<\/p>\n<p>Opcjonalna warto\u015b\u0107 WartoscGr jest warto\u015bci\u0105 parametru, z\u00a0kt\u00f3r\u0105 wykres jest rysowany pierwszy raz; warto\u015b\u0107 ta mo\u017ce zosta\u0107 zmieniona w\u00a0trakcie ogl\u0105dania wykresu przez edycj\u0119 odpowiedniej kontrolki dynamicznej, wykreowanej na podstawie parametru dynamicznego wykresu dotycz\u0105cego warto\u015bci danego parametru graficznego. Warto\u015b\u0107 <em>WartoscGr<\/em> mo\u017ce bowiem zawiera\u0107 parametry dynamiczne.<\/p>\n<p>W warto\u015bciach parametr\u00f3w graficznych obu typ\u00f3w mog\u0105 wyst\u0119powa\u0107 wyra\u017cenia.<\/p>\n<p>Oto najwa\u017cniejsze symbole dost\u0119pnych parametr\u00f3w graficznych:<\/p>\n\n<table id=\"tablepress-114\" class=\"tablepress tablepress-id-114\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">SymbolGr<\/th><th class=\"column-2\">Znaczenie<\/th><th class=\"column-3\">Warto\u015bci<\/th><th class=\"column-4\">D<\/th><th class=\"column-5\">PD<\/th><th class=\"column-6\">D(*)<\/th><th class=\"column-7\">PD(*)<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">HeaderName<\/td><td class=\"column-2\">Tytu\u0142 wykresu<\/td><td class=\"column-3\"><\/td><td class=\"column-4\"><\/td><td class=\"column-5\">1<\/td><td class=\"column-6\"><\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-3\">\n\t<td class=\"column-1\">XAxisName<\/td><td class=\"column-2\">Tytu\u0142 osi X<\/td><td class=\"column-3\"><\/td><td class=\"column-4\"><\/td><td class=\"column-5\">1<\/td><td class=\"column-6\"><\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-4\">\n\t<td class=\"column-1\">YAxisName<\/td><td class=\"column-2\">Tytu\u0142 osi Y<\/td><td class=\"column-3\"><\/td><td class=\"column-4\"><\/td><td class=\"column-5\">1<\/td><td class=\"column-6\"><\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-5\">\n\t<td class=\"column-1\">Type<\/td><td class=\"column-2\">Typ wykresu<\/td><td class=\"column-3\">1 \u2013 kolumnowy, 2 \u2013 liniowy, 4 \u2013 ko\u0142owy,...<\/td><td class=\"column-4\">1<\/td><td class=\"column-5\">1<\/td><td class=\"column-6\">1<\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-6\">\n\t<td class=\"column-1\">Depth<\/td><td class=\"column-2\">G\u0142\u0119boko\u015b\u0107 3D<\/td><td class=\"column-3\">0 \u2013 wykres 2D, >0 \u2013 wykres 3D<\/td><td class=\"column-4\">0<\/td><td class=\"column-5\">1<\/td><td class=\"column-6\">100<\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-7\">\n\t<td class=\"column-1\">LineWidth<\/td><td class=\"column-2\">Grubo\u015b\u0107 linii<\/td><td class=\"column-3\">1-10 (dotyczy typu 2)<\/td><td class=\"column-4\">2<\/td><td class=\"column-5\">1<\/td><td class=\"column-6\"><\/td><td class=\"column-7\">0<\/td>\n<\/tr>\n<tr class=\"row-8\">\n\t<td class=\"column-1\">PointWidth<\/td><td class=\"column-2\">Grubo\u015b\u0107 s\u0142upka<\/td><td class=\"column-3\">1-10 (dotyczy typu 1)<\/td><td class=\"column-4\"><\/td><td class=\"column-5\">0<\/td><td class=\"column-6\"><\/td><td class=\"column-7\">0<\/td>\n<\/tr>\n<tr class=\"row-9\">\n\t<td class=\"column-1\">ShowDataLabels<\/td><td class=\"column-2\">Wy\u015bwietla warto\u015bci punkt\u00f3w<\/td><td class=\"column-3\">0 \u2013 nie pokazuje, 1 \u2013 pokazuje<\/td><td class=\"column-4\">1<\/td><td class=\"column-5\">1<\/td><td class=\"column-6\">1<\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-10\">\n\t<td class=\"column-1\">Series<\/td><td class=\"column-2\">Definicje serii<\/td><td class=\"column-3\">Kol,...,Kol  gdzie  Kol,...,Kol   - numery kolumn zapytania (4<=Kol<=24).<\/td><td class=\"column-4\">4<\/td><td class=\"column-5\">1<\/td><td class=\"column-6\">4<\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-11\">\n\t<td class=\"column-1\">NoHeadOnCols<\/td><td class=\"column-2\">Wykaz kolumn, kt\u00f3re maj\u0105 nie mie\u0107 headera<\/td><td class=\"column-3\">Kol,...,Kol  gdzie  Kol,...,Kol   - numery kolumn zapytania (1<= Kol <=24).<\/td><td class=\"column-4\"><\/td><td class=\"column-5\">0<\/td><td class=\"column-6\"><\/td><td class=\"column-7\">0<\/td>\n<\/tr>\n<tr class=\"row-12\">\n\t<td class=\"column-1\">HideCols<\/td><td class=\"column-2\">Wykaz kolumn, kt\u00f3re maj\u0105 by\u0107 ukryte (zerowej szeroko\u015bci)<\/td><td class=\"column-3\">Kol,...,Kol gdzie Kol,...,Kol  - numery kolumn zapytania (1<=Kol<=24).<\/td><td class=\"column-4\"><\/td><td class=\"column-5\">0<\/td><td class=\"column-6\"><\/td><td class=\"column-7\">0<\/td>\n<\/tr>\n<tr class=\"row-13\">\n\t<td class=\"column-1\">AutoRefresh<\/td><td class=\"column-2\">Automatyczne od\u015bwie\u017canie po zmianie kt\u00f3regokolwiek parametru<\/td><td class=\"column-3\">0 \u2013 nie, 1 \u2013 tak<\/td><td class=\"column-4\">0<\/td><td class=\"column-5\">1<\/td><td class=\"column-6\">1<\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-14\">\n\t<td class=\"column-1\">SkipFirstExec<\/td><td class=\"column-2\">Nie wykonywanie akcji (zapytania, procedury) za pierwszym razem, dopiero po od\u015bwie\u017ceniu.  Dotyczy tylko wykresu startowego .<\/td><td class=\"column-3\">0 \u2013 wykonuj akcj\u0119 tak\u017ce przy pierwszym wykonaniu wykresu, 1 \u2013 nie wykonuj akcji przy pierwszym wykonaniu wykresu (np. nie chcemy wykonywa\u0107 zapytania z\u00a0domy\u015blnymi warto\u015bciami parametr\u00f3w)<\/td><td class=\"column-4\">0<\/td><td class=\"column-5\">1<\/td><td class=\"column-6\">1<\/td><td class=\"column-7\">1<\/td>\n<\/tr>\n<tr class=\"row-15\">\n\t<td class=\"column-1\">NoPunktIDCol<\/td><td class=\"column-2\">Zapytanie nie zawiera kolumny z\u00a0licznikiem wierszy<\/td><td class=\"column-3\">0 \u2013 zawiera kolumn\u0119 z\u00a0ID wiersza, 1- nie zawiera kolumny z\u00a0ID wiersza, tworzona jest techniczna kolumna z\u00a0ID wiersza niewidoczna dla u\u017cytkownika.<\/td><td class=\"column-4\">0<\/td><td class=\"column-5\"><\/td><td class=\"column-6\">1<\/td><td class=\"column-7\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-114 from cache -->\n<p>Default jest warto\u015bci\u0105, kt\u00f3ra jest podstawiana, gdy w\u00a0parametrach graficznych dany parametr w\u00a0og\u00f3le nie wyst\u0119puje i\u00a0<em>PodstawDefault=1<\/em>. Gdy w\u00a0parametrach graficznych dany parametr w\u00a0og\u00f3le nie wyst\u0119puje i\u00a0<em>PodstawDefault=0<\/em> \u2013 to warto\u015b\u0107 parametru nie jest w\u00a0og\u00f3le podstawiana.<\/p>\n<p><em>Default(*)<\/em> jest warto\u015bci\u0105, kt\u00f3ra jest podstawiana, gdy w\u00a0parametrach graficznych dany parametr wyst\u0119puje ale nie ma podstawionej warto\u015bci (np. \/@3D, \/@PokazujEtykietyDanych) i\u00a0<em>PodstawDefault(*)=1<\/em> . Gdy w\u00a0parametrach graficznych dany parametr wyst\u0119puje ale nie ma podstawionej warto\u015bci i\u00a0<em>PodstawDefault(*)=0<\/em> \u2013 to warto\u015b\u0107 parametru nie jest w\u00a0og\u00f3le podstawiana.<\/p>\n<p>Uwaga. Parametr <em>NoHeadOnCols<\/em> mimo, \u017ce formalnie przynale\u017cy do parametr\u00f3w graficznych dotyczy tabeli z\u00a0wynikami a\u00a0nie wykresu. St\u0105d nie nale\u017cy si\u0119 dziwi\u0107, \u017ce wykres typu \u2018tylko tabela\u2019 ma aktywne pole z\u00a0parametrami graficznymi.<\/p>\n<p>Kompletny wykaz obs\u0142ugiwanych parametr\u00f3w i\u00a0spos\u00f3b ich ustawiania opisuje osobny dokument.<\/p>\n<p><strong>Graficzne zmienne symboliczne.<\/strong><\/p>\n<p>Graficzne zmienne symboliczne to zmienne postaci @<em>NAZWAZMIENNEJ<\/em>, wyst\u0119puj\u0105ce w\u00a0parametrach graficznych wykresu, kt\u00f3rych warto\u015bci podstawiane s\u0105 do parametr\u00f3w graficznych przed narysowaniem wykresu ale ju\u017c po za\u0142adowaniu wynik\u00f3w. Poni\u017csza tabela zawiera wszystkie obs\u0142ugiwane w\u00a0tej chwili zmienne graficzne:<\/p>\n\n<table id=\"tablepress-116\" class=\"tablepress tablepress-id-116\">\n<thead>\n<tr class=\"row-1\">\n\t<th class=\"column-1\">Nazwa zmiennej<\/th><th class=\"column-2\">Opis (warto\u015b\u0107)<\/th>\n<\/tr>\n<\/thead>\n<tbody class=\"row-striping row-hover\">\n<tr class=\"row-2\">\n\t<td class=\"column-1\">RECORDS<\/td><td class=\"column-2\">Zwraca ilo\u015b\u0107 rekord\u00f3w wyniku zapytania.<br \/>\nPrzyk\u0142ad u\u017cycia: \/@ShowXLabelsEvery={@Records\/3}<br \/>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<!-- #tablepress-116 from cache -->\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Nazwy zmiennych graficznych s\u0105 CASE SENSITIVE.<\/div><\/div><\/section>\n<h2><strong>Wywo\u0142ywanie funkcji<\/strong><\/h2>\n<p>Akcja wykonywana podczas eksploracji wykresu (lub wykonywania wykresu startowego) nie zawsze musi polega\u0107 na narysowaniu wykresu czy pobraniu danych w\u00a0postaci tabelarycznej \u2013 zamiast tego mo\u017ce tak\u017ce by\u0107 wywo\u0142ana funkcja (procedura). Najcz\u0119stsze zastosowanie polega na wywo\u0142aniu procedury okna z\u00a0odfiltrowan\u0105 list\u0105 zapis\u00f3w sk\u0142adaj\u0105cych si\u0119 na warto\u015b\u0107 klikni\u0119tego punktu wykresu &#8211; mamy w\u00f3wczas do czynienia z\u00a0tzw. drill-through. Sk\u0142adnia wywo\u0142ywania funkcji jest zgodna z\u00a0j\u0119zykiem DPL i\u00a0zosta\u0142a opisana w\u00a0oddzielnym dokumencie.<\/p>\n<h2><strong>Wykresy bez wykres\u00f3w &#8211; tabele<\/strong> z\u00a0<strong>wynikami<\/strong><\/h2>\n<p>Modu\u0142 analiz posiada mo\u017cliwo\u015b\u0107 pobierania danych bez rysowania wykresu. W\u00a0takim przypadku wyniki nie s\u0105 prezentowane graficznie a\u00a0tylko w\u00a0postaci tabelarycznej. Oczywi\u015bcie tabela danych wynikowych, podobnie jak wykres, jest aktywna. Oznacza to, \u017ce mo\u017cna eksplorowa\u0107 jej rekordy wykonuj\u0105c analizy podrz\u0119dne.<\/p>\n<p>Wykres typu \u2018tylko tabela\u2019 nie posiada rzecz jasna \u017cadnych parametr\u00f3w graficznych.<\/p>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Wykres typu \u2018tylko tabela\u2019 nie zawiera ogranicze\u0144 jakie narzucamy dla zapyta\u0144 normalnych wykres\u00f3w \u2013 zapytania mog\u0105 tu zwraca\u0107 1-20 kolumn zupe\u0142nie dowolnych typ\u00f3w i o\u00a0dowolnym znaczeniu.<\/div><\/div><\/section>\n<h2><strong>Przekazywanie do wykres\u00f3w zaznaczonych pozycji<\/strong><\/h2>\n<p>Wykres mo\u017ce odwo\u0142ywa\u0107 si\u0119 do pozycji zaznaczonych na li\u015bcie. Oczywi\u015bcie aby takie odwo\u0142anie by\u0142o mo\u017cliwe \u2013 okno aplikacji musi nie tylko posiada\u0107, ale tak\u017ce eksportowa\u0107 zaznaczenia do modu\u0142u wykres\u00f3w (innymi s\u0142owy programista danego okna musia\u0142 przewidzie\u0107, \u017ce U\u017cytkownik b\u0119dzie chcia\u0142 w\u00a0tym miejscu odwo\u0142a\u0107 si\u0119 w\u00a0definicji wykresu do zaznacze\u0144 na li\u015bcie). Je\u015bli w\/w jest spe\u0142niony, zbudowanie wykresu opartego o\u00a0zaznaczenia mo\u017ce by\u0107 obs\u0142u\u017cony na dwa sposoby<\/p>\n<p><strong>Obs\u0142uga zaznacze\u0144: Tabela tymczasowa<\/strong><\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> We w\u0142a\u015bciwo\u015bciach og\u00f3lnych wykresu:<\/li>\n<\/ul>\n<p>Ustawieniu na wykresie flagi Obs\u0142uga zaznacze\u0144: Tabela tymczasowa<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> W zapytaniu wykresu:<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Zadeklarowaniu ukrytego parametru dynamicznego <strong>@PAR ?@Hs50|ZazGUID|ZazGUID:\u2019\u2019 PAR@<\/strong><\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Wykonaniu <strong>JOIN-a do tabeli WkrZaznaczenia2<\/strong> (np. &#8230; JOIN WkrZaznaczenia2 ON BNa_BNaID = WkZ2_GIDNumer &#8230;).<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Umieszczeniu w\u00a0filtrze zapytania warunku <strong>WkZ2_GUID=??_QZazGUID<\/strong> na odziedziczony ze zmiennej dynamicznej GUID<\/li>\n<\/ul>\n<p><strong>Obs\u0142uga zaznacze\u0144: Klauzula IN<\/strong><\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> We w\u0142a\u015bciwo\u015bciach og\u00f3lnych wykresu:<\/li>\n<\/ul>\n<p>Ustawieniu na wykresie flagi Obs\u0142uga zaznacze\u0144: Klauzula IN<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> W zapytaniu wykresu:<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Zadeklarowaniu ukrytego parametru \u2018wirtualnego\u2019 @PAR ?@X|Zaznaczenia|Zaznaczenia:1@? PAR@<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Zastosowanie w\u00a0zapytaniu sk\u0142adni kt\u00f3r\u0105 silnik wykres\u00f3w rozwinie do postaci klauzuli IN, sk\u0142adnia powinna wygl\u0105da\u0107 w\u00a0ten spos\u00f3b: \u201eWHERE {Zaznaczenia(ID rekordu, 1)}\u201d ( przyk\u0142adowe zapytanie: <em>SELECT Knt_KntID, Knt_Kod, Knt_LimitKredytu FROM cdn.Kontrahenci WHERE {Zaznaczenia(Knt_KntID, 1)}<\/em> )<\/li>\n<\/ul>\n<h2><strong>Eksport wynik\u00f3w wykresu<\/strong><\/h2>\n<p>Wyniki wykonania analizy (wykres w\u00a0postaci graficznej oraz tabela z\u00a0wynikami) mog\u0105 by\u0107 zapisywane do pliku, s\u0142u\u017c\u0105 do tego ikony Eksport wykresu\/Eksport tabeli dost\u0119pne na wst\u0105\u017cce. Plik ten (tzw. plik wynikowy) mo\u017ce mie\u0107 jeden z\u00a0nast\u0119puj\u0105cych format\u00f3w:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Z zak\u0142adki wykres: bmp, emf, gif, jpeg, png, tiff, wmf, pdf, xls, mht (wykres graficzny)<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> Z zak\u0142adki dane serii wykresu: xlix, xls, xml, txt, html (dane tabelaryczne)<\/li>\n<\/ul>\n<p><a name=\"interface\"><\/a><\/p>\n<h1><strong>Interface U\u017cytkownika<\/strong><\/h1>\n<h2><strong>Edycja wykres\u00f3w<\/strong><\/h2>\n<h3><strong>Drzewo hierarchii wykres\u00f3w<\/strong><\/h3>\n<p>Podstawow\u0105 procedur\u0105 edycji wykres\u00f3w jest drzewo hierarchii wykres\u00f3w. Procedura ta umo\u017cliwia wykonywanie wszystkich operacji edycyjnych dla wykres\u00f3w standardowych i\u00a0u\u017cytkownika:<\/p>\n<ul>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> ogl\u0105danie struktury po\u0142\u0105cze\u0144 wykres\u00f3w (do wywo\u0142a\u0144 oraz wykres\u00f3w do siebie nawzajem),<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> pod\u0142\u0105czanie i\u00a0od\u0142\u0105czanie wykres\u00f3w (w tym edycja warunk\u00f3w pod\u0142\u0105czenia wykres\u00f3w startowych),<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> okre\u015blanie domy\u015blno\u015bci i\u00a0przestawianie kolejno\u015bci wykres\u00f3w (b\u0105belkowanie)<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> dodawanie, edycj\u0119, testowanie i\u00a0usuwanie wykres\u00f3w (mo\u017cna usuwa\u0107 tylko wykresy nie posiadaj\u0105ce podwykres\u00f3w),<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> szukanie podanego ci\u0105gu znak\u00f3w w\u00a0nazwie wykresu, kontekstu lub procedury,<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> proste filtrowanie drzewa,<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> aktualizacj\u0119 bazy,<\/li>\n<li><i class=\"sui sui-check\" style=\"color:#009de0\"><\/i> ogl\u0105danie zmiennych dynamicznych wysy\u0142anych z\u00a0aplikacji do wykresu w\u00a0danym momencie.<\/li>\n<li style=\"list-style-type: none;\"><\/li>\n<\/ul>\n<p>Nale\u017cy zwr\u00f3ci\u0107 uwag\u0119, \u017ce edycja wykres\u00f3w standardowych przez zwyk\u0142ego (tj. nie pracuj\u0105cego w\u00a0specjalnym trybie super-user) U\u017cytkownika ma bardzo ograniczony charakter. U\u017cytkownik nie mo\u017ce zmieni\u0107 ani logicznej struktury wykres\u00f3w standardowych (pod\u0142\u0105czanie\/od\u0142\u0105czanie) ani \u017cadnych parametr\u00f3w identyfikuj\u0105cych te wykresy (np. nazwa), wp\u0142ywaj\u0105cych na wyniki (np. zapytanie) czy te\u017c wygl\u0105d (parametry graficzne) wykres\u00f3w standardowych. Wykresy standardowe nie mog\u0105 by\u0107 tak\u017ce dodawane ani usuwane przez U\u017cytkownika. Jedyne mo\u017cliwe w\u00a0tym przypadku modyfikacje dotycz\u0105 opcji wysy\u0142ania wyniku, ustalania domy\u015blno\u015bci wykres\u00f3w i\u00a0warunk\u00f3w ich pod\u0142\u0105czenia. Zmiany te jednak nie s\u0105 zapisywane do pliku z\u00a0wykresami standardowymi (kt\u00f3ry mo\u017cna traktowa\u0107 jako READ\/ONLY), a\u00a0do specjalnych tabel SQL-owych, b\u0119d\u0105cych podzbiorami funkcjonalnymi odpowiednich pe\u0142nych tabel (patrz rozdzia\u0142 po\u015bwi\u0119cony bazie danych). W\u00a0tabelach tych s\u0105 zapisywane modyfikacje ustawie\u0144 wykres\u00f3w standardowych dla poszczeg\u00f3lnych U\u017cytkownik\u00f3w.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27190 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/KonfiguracjaAnaliz.png\" alt=\"\" width=\"510\" height=\"698\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/KonfiguracjaAnaliz.png 510w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/KonfiguracjaAnaliz-219x300.png 219w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/KonfiguracjaAnaliz-37x50.png 37w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/KonfiguracjaAnaliz-320x438.png 320w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Drzewo hierarchii wykres\u00f3w &#8211; zak\u0142adka Og\u00f3lne<\/em><\/p>\n<p>Na drzewie hierarchii wykres\u00f3w analizy standardowe s\u0105 widoczne w\u00a0kolorze szarym, a\u00a0ich nazwa jest pisana kursyw\u0105, analizy u\u017cytkownika s\u0105 przedstawione czcionk\u0105 czarn\u0105 regularn\u0105.<\/p>\n<p>Wszystkie akcje dost\u0119pne dla pod\u015bwietlonego obiektu (ga\u0142\u0105\u017a na drzewie) s\u0105 mo\u017cliwe do wykonania z\u00a0poziomu menu podr\u0119cznego otwieranego przez klikni\u0119cie prawym klawiszem myszy na obiekcie. W\u00a0menu s\u0105 r\u00f3wnie\u017c podane skr\u00f3ty klawiszowe do poszczeg\u00f3lnych akcji. Dla podstawowych i\u00a0najcz\u0119\u015bciej wykonywanych akcji pod listami umieszczono dodatkowo przyciski.<\/p>\n<p>Poni\u017cej kr\u00f3tki opis znaczenia poszczeg\u00f3lnych przycisk\u00f3w.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-26973\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/08\/plus-4.png\" alt=\"\" width=\"37\" height=\"39\" \/> &#8211; dodanie nowego wykresu i pod\u0142\u0105czenie go do pod\u015bwietlonej ga\u0142\u0119zi. Klikni\u0119cie przycisku z Ctrl lub z Shift powoduje zainicjalizowanie dodawanego wykresu danymi pod\u015bwietlonego wykresu (wzorca), z tym, \u017ce u\u017cycie Shift wymusza pod\u0142\u0105czenie nowego wykresu na tym samym poziomie co wzorzec czyli do ojca wzorca (a nie do wzorca).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27208\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/Lupa.png\" alt=\"\" width=\"38\" height=\"39\" \/> &#8211; edycja wykresu (otwarcie formularza definicji wykresu).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27195\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/Kosz.png\" alt=\"\" width=\"38\" height=\"38\" \/> &#8211; usuni\u0119cie wykresu. Usuwany wykres nie mo\u017ce mie\u0107 pod\u0142\u0105czonych podwykres\u00f3w.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27353\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/Podlacz.png\" alt=\"\" width=\"46\" height=\"49\" \/> &#8211; wyb\u00f3r wykresu z listy i pod\u0142\u0105czenie go do pod\u015bwietlonej ga\u0142\u0119zi.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27351\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/Odlacz.png\" alt=\"\" width=\"46\" height=\"50\" \/> &#8211; od\u0142\u0105czenie pod\u015bwietlonego wykresu.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27189\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/Konfiguracja.png\" alt=\"\" width=\"38\" height=\"39\" \/> &#8211; otwiera p\u0142ask\u0105 list\u0119 wykres\u00f3w, opisan\u0105 w rozdziale 3.1.3. Na li\u015bcie tej mo\u017cna m.in. znale\u017a\u0107 wykresy nie pod\u0142\u0105czone do \u017cadnego wywo\u0142ania a wi\u0119c niewidoczne na drzewie hierarchii (i nie mo\u017cliwe do wykonania z poziomu programu).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27385\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/kartki.png\" alt=\"\" width=\"39\" height=\"38\" \/> &#8211; otwiera list\u0119 wstawek tekstowych, opisan\u0105 w rozdziale 3.1.4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27350\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/Lornetka.png\" alt=\"\" width=\"46\" height=\"50\" \/> &#8211; wyszukiwanie podanego ci\u0105gu znak\u00f3w w nazwach procedur, kontekst\u00f3w i wykres\u00f3w.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-26965\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/08\/piorun-1.png\" alt=\"\" width=\"39\" height=\"40\" \/> &#8211; testuj analiz\u0119<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27230\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/PokazujTylkoWypelnione.png\" alt=\"\" width=\"152\" height=\"25\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PokazujTylkoWypelnione.png 152w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PokazujTylkoWypelnione-150x25.png 150w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PokazujTylkoWypelnione-50x8.png 50w\" sizes=\"auto, (max-width: 152px) 100vw, 152px\" \/> &#8211; odfiltrowuje (lub nie) ga\u0142\u0119zie procedur i kontekst\u00f3w nie wype\u0142nione, tj. takie, do kt\u00f3rych nie s\u0105 pod\u0142\u0105czone \u017cadne wykresy.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27213\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/Ogranicz.png\" alt=\"\" width=\"188\" height=\"24\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/Ogranicz.png 188w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/Ogranicz-50x6.png 50w\" sizes=\"auto, (max-width: 188px) 100vw, 188px\" \/> &#8211; odfiltrowuje (lub nie) ga\u0142\u0119zie procedur innych ni\u017c aktualna (tj. ta, z kt\u00f3rej zosta\u0142o wywo\u0142ane drzewo konfiguracji wykres\u00f3w).<\/p>\n<p>Wybrane pozycje menu:<\/p>\n<p><strong>Edytuj warunek pod\u0142\u0105czenia<\/strong> \u2013 akcja dost\u0119pna tylko dla wykres\u00f3w startowych. Pozwala ustali\u0107 warunek jaki musi by\u0107 spe\u0142niony aby dany wykres by\u0142 mo\u017cliwy do wykonania (wyboru) w\u00a0danym punkcie. Warunek musi mie\u0107 posta\u0107 wyra\u017cenia, w\u00a0kt\u00f3rym mog\u0105 wyst\u0119powa\u0107 funkcje systemowe i\u00a0funkcje a\u00a0tak\u017ce zmienne zabindowane przez aplikacj\u0119.<\/p>\n<p><strong>Prze\u0142\u0105cz domy\u015blny<\/strong> \u2013 ustawia dany wykres jako domy\u015blny w\u00a0danym punkcie (z dok\u0142adno\u015bci\u0105 do bazy wykresu) lub usuwa takie ustawienie.<\/p>\n<p><strong>Kopiuj\/Wklej wykres<\/strong> \u2013 kopiuje\/wkleja definicj\u0119 wykresu (akcja pomocna w\u00a0kopiowaniu definicji pomi\u0119dzy panelami, g\u0142\u00f3wnie przy kopiowaniu wykres\u00f3w standardowych na drzewo wykres\u00f3w u\u017cytkownika).<\/p>\n<p><strong>Poziom procedur\/kontekst\u00f3w<\/strong> \u2013 (roz)zwija ga\u0142\u0119zie drzewa do wybranego poziomu.<\/p>\n<p><strong>Druga zak\u0142adka<\/strong> dotyczy przekazanych z\u00a0aplikacji zmiennych dynamicznych.<\/p>\n<p>Na li\u015bcie mamy nazwy i\u00a0aktualne warto\u015bci zmiennych, kt\u00f3re by\u0142yby w\u00a0tym momencie przekazane do wykresu.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27256 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/ZmienneDynamiczne.png\" alt=\"\" width=\"510\" height=\"526\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ZmienneDynamiczne.png 510w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ZmienneDynamiczne-291x300.png 291w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ZmienneDynamiczne-48x50.png 48w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ZmienneDynamiczne-320x330.png 320w\" sizes=\"auto, (max-width: 510px) 100vw, 510px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Drzewo hierarchii wykres\u00f3w &#8211; zak\u0142adka Zmienne dynamiczne<\/em><\/p>\n<h3><strong>Formularz wykresu<\/strong><\/h3>\n<p>Do edycji wykresu s\u0142u\u017cy <strong>formularz definicji wykresu<\/strong>. Sk\u0142ada si\u0119 on z\u00a0trzech zak\u0142adek, kt\u00f3re kolejno om\u00f3wimy.<\/p>\n<p>Zak\u0142adka <strong>Og\u00f3lne<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27175 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/EdycjaAnalizy.png\" alt=\"\" width=\"672\" height=\"500\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaAnalizy.png 672w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaAnalizy-300x223.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaAnalizy-50x37.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaAnalizy-600x446.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaAnalizy-320x238.png 320w\" sizes=\"auto, (max-width: 672px) 100vw, 672px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Formularz definicji wykresu &#8211; zak\u0142adka Og\u00f3lne<\/em><\/p>\n<p>Przycisk <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27207\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/LudzikZKluczem.png\" alt=\"\" width=\"38\" height=\"39\" \/>\u00a0s\u0142u\u017cy do za\u0142o\u017cenia has\u0142a blokuj\u0105cego zmiany w\u00a0definicji wykresu dla U\u017cytkownik\u00f3w nie znaj\u0105cych has\u0142a. Przy wej\u015bciu na formularz tak zabezpieczonego wykresu nie mamy mo\u017cliwo\u015bci dokonania jakichkolwiek zmian chyba, \u017ce wci\u015bniemy przycisk z\u00a0kluczykiem i\u00a0wpiszemy poprawne has\u0142o. W\u00a0takim przypadku definicja zostanie odblokowana i\u00a0b\u0119dzie r\u00f3wnie\u017c mo\u017cliwa zmiana has\u0142a (w tym jego wyczyszczenie czyli odbezpieczenie definicji).<\/p>\n<p>Warto zwr\u00f3ci\u0107 uwag\u0119 na przycisk <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-26965\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/08\/piorun-1.png\" alt=\"\" width=\"39\" height=\"40\" \/>, s\u0142u\u017c\u0105cy do testowania edytowanego wykresu. Dok\u0142adniej przycisk ten s\u0142u\u017cy do wykonania testu edytowanego wykresu z\u00a0zastosowaniem bie\u017c\u0105cych ustawie\u0144 na formularzu. Po jego naci\u015bni\u0119ciu jest wykonywany w\u00a0trybie testowym edytowany wykres. Tryb testowy polega na tym, \u017ce bezpo\u015brednio przed przes\u0142aniem zapytania na serwer zapytanie to (ze wstawionymi bie\u017c\u0105cymi warto\u015bciami parametr\u00f3w dynamicznych) jest podawane do edycji U\u017cytkownika. Po wykonaniu wykresu jest mo\u017cliwa normalna nawigacja pocz\u0105wszy od w\u0119z\u0142a odpowiadaj\u0105cego edytowanemu wykresowi. Wykonaniu ka\u017cdego wykresu w\u00a0trybie testowym towarzyszy okno pozwalaj\u0105ce na edycj\u0119 zapytania przed przes\u0142aniem go do serwera.<\/p>\n<p>Pozosta\u0142e kontrolki s\u0105 albo standardowe albo ich opis w\u00a0pe\u0142ni wyja\u015bnia zastosowanie. Dlatego tutaj ograniczymy si\u0119 tylko do nadmienienia o\u00a0jednej istotnej sprawie. Mianowicie w\u00a0celu u\u0142atwienia pos\u0142ugiwania si\u0119 j\u0119zykiem stosowanym w\u00a0definicji wykresu (po\u0142\u0105czenie SQL i\u00a0j\u0119zyka parametr\u00f3w dynamicznych) opracowano system zagnie\u017cd\u017conych wizard\u00f3w. Wizardy te pozwalaj\u0105 tworzy\u0107 i\u00a0edytowa\u0107 deklaracje i\u00a0odwo\u0142ania do parametr\u00f3w dynamicznych, wyra\u017cenia, zmienne tekstowe, szablon zapytania SQL itp.. S\u0105 one dost\u0119pne po klikni\u0119ciu prawym klawiszem myszy tekstu zapytania lub parametr\u00f3w graficznych wykresu.<\/p>\n<h3><strong>Lista wykres\u00f3w<\/strong><\/h3>\n<p>Do wyboru wykresu, kt\u00f3ry chcemy pod\u0142\u0105czy\u0107 jak r\u00f3wnie\u017c do edycji wykres\u00f3w zaimplementowano listy wykres\u00f3w (rys.\u00a06 przedstawia list\u0119 wykres\u00f3w standardowych; wykresy u\u017cytkownika posiadaj\u0105 analogiczn\u0105 list\u0119). Lista ta mo\u017ce s\u0142u\u017cy\u0107 r\u00f3wnie\u017c do edycji wykres\u00f3w nie pod\u0142\u0105czonych do \u017cadnego wywo\u0142ania.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27202 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/ListaAnaliz.png\" alt=\"\" width=\"529\" height=\"512\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ListaAnaliz.png 529w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ListaAnaliz-300x290.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ListaAnaliz-50x48.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ListaAnaliz-320x310.png 320w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Lista wykres\u00f3w<\/em><\/p>\n<p>Po wykonaniu akcji dodania lub edycji wykresu jest otwierany opisany w\u00a0poprzednim rozdziale formularz definicji wykresu.<\/p>\n<p>Nale\u017cy zwr\u00f3ci\u0107 uwag\u0119 na to, \u017ce dodanie definicji wykresu z\u00a0tego poziomu nie spowoduje jego pod\u0142\u0105czenia na drzewie hierarchii. Wykres taki nie b\u0119dzie nigdzie pod\u0142\u0105czony do chwili wykonania na nim akcji \u2018Pod\u0142\u0105cz wykres\u2019 dost\u0119pnej na drzewie hierarchii wykres\u00f3w.<\/p>\n<h3><strong>Lista wstawek tekstowych do wykres\u00f3w<\/strong><\/h3>\n<p>Do edycji wstawek tekstowych s\u0142u\u017c\u0105 <strong>listy wstawek tekstowych do wykres\u00f3w<\/strong> (rys. 7 przedstawia list\u0119 wstawek do wykres\u00f3w standardowych; wstawki u\u017cytkownika posiadaj\u0105 analogiczn\u0105 list\u0119).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27205 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/ListaWstawek.png\" alt=\"\" width=\"529\" height=\"434\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ListaWstawek.png 529w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ListaWstawek-300x246.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ListaWstawek-50x41.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/ListaWstawek-320x263.png 320w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Lista wstawek tekstowych<\/em><\/p>\n<section class=\"msp-alert-box msp-alert-warning\"><div class=\"msp-alert-icon\"><svg width=\"16\" height=\"16\" class=\"kb-icon kb-icon--warn\" aria-hidden=\"true\" focusable=\"false\" viewBox=\"0 0 32 32\" version=\"1.1\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" xmlns:xlink=\"http:\/\/www.w3.org\/1999\/xlink\">\r\n    <g id=\"[AP]-Iconography\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n        <g id=\"Iconography_sortowanie-po-kategorii\" transform=\"translate(-552.000000, -10695.000000)\" fill=\"currentColor\">\r\n            <g id=\"Group-8\" transform=\"translate(286.000000, 548.000000)\">\r\n                <g id=\"Iconography-Card-\" transform=\"translate(218.000000, 10107.000000)\">\r\n                    <g id=\"0-Icons\/-24-\/-Status-\/-Alert-\/-Outline\" transform=\"translate(48.000000, 40.000000)\">\r\n                        <path d=\"M16.0008333,3.91866667 C16.3568333,3.91866667 16.6875,4.10933333 16.8661667,4.41866667 L29.6608333,26.5813333 C29.8408333,26.8906667 29.8408333,27.272 29.6608333,27.5813333 C29.4821667,27.8906667 29.1528333,28.0813333 28.7955,28.0813333 L3.2035,28.0813333 C2.8475,28.0813333 2.51683333,27.8906667 2.33816667,27.5813333 C2.1595,27.272 2.1595,26.8906667 2.33816667,26.5813333 L15.1328333,4.41866667 C15.3128333,4.10933333 15.6421667,3.91866667 16.0008333,3.91866667 Z M16.0008333,6.91866667 L4.93683333,26.0813333 L27.0635,26.0813333 L16.0008333,6.91866667 Z M15.9993667,21.9445333 C16.7353667,21.9445333 17.3327,22.5418667 17.3327,23.2778667 C17.3327,24.0138667 16.7353667,24.6112 15.9993667,24.6112 C15.2647,24.6112 14.6660333,24.0138667 14.6660333,23.2778667 C14.6660333,22.5418667 15.2647,21.9445333 15.9993667,21.9445333 Z M15.9997667,11.762 C16.7344333,11.762 17.3171,12.3833333 17.2704333,13.118 L16.9464333,19.0366667 C16.9161303,19.4984848 16.566268,19.8666391 16.1212392,19.9297596 L15.9851,19.9393333 C15.4744333,19.9393333 15.0544333,19.542 15.0224333,19.0326667 L14.7291,13.1113333 C14.6851,12.3793333 15.2664333,11.762 15.9997667,11.762 Z\" id=\"Color\"><\/path>\r\n                    <\/g>\r\n                <\/g>\r\n            <\/g>\r\n        <\/g>\r\n    <\/g>\r\n<\/svg><\/div><div class=\"msp-alert-body\"><div class=\"msp-alert-title\">Uwaga<\/div><div class=\"msp-alert-content\">Z\u00a0powodu braku relacji program nie sprawdza czy wstawka zosta\u0142a gdziekolwiek u\u017cyta. Wynika st\u0105d mo\u017cliwo\u015b\u0107 skasowania wstawki, do kt\u00f3rej istnieje odwo\u0142anie. Nale\u017cy uwa\u017ca\u0107 na to aby nie dochodzi\u0142o do takich sytuacji.<\/div><\/div><\/section>\n<h3><strong>Formularz wstawki tekstowej do wykresu<\/strong><\/h3>\n<p>Formularz wstawki tekstowej do wykresu wygl\u0105da nast\u0119puj\u0105co (rys. 8 przedstawia formularz wstawki standardowej; wstawki u\u017cytkownika posiadaj\u0105 analogiczny formularz).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27176 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/EdycjaWstawki.png\" alt=\"\" width=\"663\" height=\"325\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaWstawki.png 663w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaWstawki-300x147.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaWstawki-50x25.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaWstawki-600x294.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/EdycjaWstawki-320x157.png 320w\" sizes=\"auto, (max-width: 663px) 100vw, 663px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Formularz wstawki tekstowej (standardowej)<\/em><\/p>\n<h2><strong>Okno operacyjne wykres\u00f3w<\/strong><\/h2>\n<p>G\u0142\u00f3wnym elementem modu\u0142u wykres\u00f3w z\u00a0punktu widzenia U\u017cytkownika jest tzw. okno operacyjne wykres\u00f3w. Okno to zaraz po otwarciu wy\u015bwietla wykres startowy a\u00a0nast\u0119pnie pozwala na nawigacj\u0119 po grafie wykres\u00f3w i\u00a0zmian\u0119 parametr\u00f3w dynamicznych wykonywanych wykres\u00f3w.<\/p>\n<p>G\u0142\u00f3wnym elementem okna jest kontrolka REGION zawieraj\u0105ca wykres.<\/p>\n<p>Pod wykresem dost\u0119pne s\u0105 przyciski nawigacyjne, przycisk od\u015bwie\u017cania wykresu oraz panel z\u00a0kontrolkami parametr\u00f3w dynamicznych.<\/p>\n<p>Na drugiej zak\u0142adce umieszczone zosta\u0142y kontrolki dynamicznych parametr\u00f3w graficznych wykresu (je\u015bli ich brak \u2013 zak\u0142adka ta nie pokazuje si\u0119) a\u00a0na trzeciej \u2013 lista z\u00a0danymi serii wykresu przedstawionymi w\u00a0formie tabelarycznej.<\/p>\n<p>Na toolbarze okna s\u0105 dost\u0119pne przyciski obs\u0142uguj\u0105ce wydruki wykresu i\u00a0eksport danych do Excela. Wydruk z\u00a0poziomu pierwszych dw\u00f3ch zak\u0142adek produkuje plik .wmf (kt\u00f3rego link jest wstawiany do definicji wydruku) a\u00a0z\u00a0trzeciej i\u00a0czwartej zak\u0142adki \u2013 kolejk\u0119 z\u00a0danymi serii wykresu (wydruk tu pod\u0142\u0105czony powinien wi\u0119c operowa\u0107 na kolejce). Eksport danych do Excela obejmuje dane serii wykresu a\u00a0wi\u0119c dane z\u00a0listy na trzeciej zak\u0142adce.<\/p>\n<p>Jedn\u0105 z\u00a0podstawowych akcji wykonywanych na wykresie jest eksploracja do wykresu podrz\u0119dnego. Nast\u0119puje to przez klikni\u0119cie lewym klawiszem myszy w\u00a0wybrany punkt wykresu (wykonanie podwykresu domy\u015blnego) lub klikni\u0119cie prawym klawiszem myszy w\u00a0wybrany punkt wykresu i\u00a0wyb\u00f3r z\u00a0menu podwykresu, kt\u00f3ry chcemy wykona\u0107.<\/p>\n<p>Umieszczone pod wykresem przyciski nawigacyjne s\u0142u\u017c\u0105 do poruszania si\u0119 po historii wykonanych wykres\u00f3w od startowego pocz\u0105wszy. Odpowiada to analogicznym przyciskom w\u00a0internetowych browserach. Nale\u017cy jednak zwr\u00f3ci\u0107 uwag\u0119, \u017ce wykonanie ka\u017cdej akcji nawigacji (Wstecz, Wprz\u00f3d itp.) wi\u0105\u017ce si\u0119 z\u00a0od\u015bwie\u017ceniem danych (powt\u00f3rne za\u0142adowanie \u2013 brak cache\u2019owania wyniku).<\/p>\n<p>Jak powiedziano wcze\u015bniej, bie\u017c\u0105cy wykres startowy zostaje po raz pierwszy wykonany z warto\u015bciami pocz\u0105tkowymi parametr\u00f3w dynamicznych (nadpisanymi ewentualnie warto\u015bciami zmiennych dynamicznych przekazanych z aplikacji). Po zmianie kt\u00f3regokolwiek z parametr\u00f3w przycisk od\u015bwie\u017cenia zmienia ikon\u0119 na <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-27352\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/PiorunWykrzyknik-1.png\" alt=\"\" width=\"45\" height=\"46\" \/>\u00a0co ma sygnalizowa\u0107, \u017ce dane na wykresie nie odpowiadaj\u0105 bie\u017c\u0105cym nastawom parametr\u00f3w. Aby uzgodni\u0107 dane z\u00a0parametrami nale\u017cy wykona\u0107 od\u015bwie\u017cenie. Sytuacja taka nie wyst\u0119puje je\u015bli w\u00a0parametrach graficznych wykresu u\u017cyto parametru \/@AutoRefresh \u2013 w\u00f3wczas dane od\u015bwie\u017caj\u0105 si\u0119 automatycznie po ka\u017cdej zmianie dowolnego parametru.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27234 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/PrezentacjaWykres.png\" alt=\"\" width=\"846\" height=\"644\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PrezentacjaWykres.png 846w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PrezentacjaWykres-300x228.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PrezentacjaWykres-768x585.png 768w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PrezentacjaWykres-50x38.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PrezentacjaWykres-600x457.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/PrezentacjaWykres-320x244.png 320w\" sizes=\"auto, (max-width: 846px) 100vw, 846px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Okno operacyjne wykres\u00f3w &#8211; zak\u0142adka Wykres<\/em><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27171 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/DaneSeriiWykresu.png\" alt=\"\" width=\"847\" height=\"575\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/DaneSeriiWykresu.png 847w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/DaneSeriiWykresu-300x204.png 300w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/DaneSeriiWykresu-768x521.png 768w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/DaneSeriiWykresu-50x34.png 50w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/DaneSeriiWykresu-600x407.png 600w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/DaneSeriiWykresu-320x217.png 320w\" sizes=\"auto, (max-width: 847px) 100vw, 847px\" \/><\/p>\n<p style=\"text-align: center;\"><em>Okno operacyjne wykres\u00f3w &#8211; zak\u0142adka Dane serii wykresu<\/em><\/p>\n<p><a name=\"implementacja\"><\/a><\/p>\n<h1><strong>Implementacja techniczna<\/strong><\/h1>\n<h2><strong>Silnik wykres\u00f3w<\/strong><\/h2>\n<p>Jak powiedziano wcze\u015bniej, za za\u0142adowanie danych, a\u00a0wi\u0119c najcz\u0119\u015bciej wykonanie zapytania SQL, odpowiada silnik zapyta\u0144 wykres\u00f3w (SWQUERY).<\/p>\n<p>Aby jednak wyprodukowa\u0107 ostateczn\u0105 posta\u0107 zapytania, kt\u00f3re jest podawane do SWQUERY, nale\u017cy najpierw wczyta\u0107 z\u00a0bazy definicj\u0119 wykresu (robi to silnik wczytuj\u0105cy\/zapisuj\u0105cy wykresy SWDB) a\u00a0nast\u0119pnie podda\u0107 zapytanie z\u00a0definicji odpowiednim przekszta\u0142ceniom (rozwini\u0119cie zmiennych tekstowych, wstawienie warto\u015bci parametr\u00f3w dynamicznych, obliczenie wyra\u017ce\u0144 itp.). Wszystkie te czynno\u015bci s\u0105 wykonywane przez silnik parametr\u00f3w dynamicznych SWPDL.<\/p>\n<p>Za\u0142adowane przez SWQUERY dane mo\u017cna wy\u015bwietli\u0107 w\u00a0postaci tabelarycznej albo graficznej. W\u00a0tym drugim przypadku wykorzystywany jest kolejny silnik \u2013 silnik graficzny wykres\u00f3w.<\/p>\n<p>Uzyskane wyniki mo\u017cna na koniec wys\u0142a\u0107 do urz\u0105dzenia zewn\u0119trznego (np. zapisa\u0107 do pliku, poda\u0107 innemu programowi itp.) \u2013 tymi czynno\u015bciami zajmuje si\u0119 silnik wysy\u0142ania wynik\u00f3w SWOUT.<\/p>\n<p>Poni\u017cej przedstawiono schemat blokowy silnika analiz.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-5059 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2017\/08\/SW-2.png\" alt=\"\" width=\"581\" height=\"643\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2017\/08\/SW-2.png 581w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2017\/08\/SW-2-271x300.png 271w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2017\/08\/SW-2-45x50.png 45w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2017\/08\/SW-2-320x354.png 320w\" sizes=\"auto, (max-width: 581px) 100vw, 581px\" \/><\/p>\n<h2><strong>Baza danych<\/strong><\/h2>\n<h3><strong>Lokalizacja danych<\/strong><\/h3>\n<p>Dane dotycz\u0105ce wykres\u00f3w standardowych i\u00a0u\u017cytkownika s\u0105 przechowywane w\u00a0bazie konfiguracyjnej systemu <strong>Comarch ERP Optima<\/strong>.<\/p>\n<p>Dane dotycz\u0105ce mo\u017cliwych do zmiany (i zmienionych) przez U\u017cytkownika ustawie\u0144 wykres\u00f3w standardowych s\u0105 pami\u0119tane w\u00a0specjalnych tabelach (z do\u0142\u0105czon\u0105 liter\u0105 \u2018U\u2019 na ko\u0144cu nazwy) w\u00a0bazie SQL.<\/p>\n<h2><strong>Wydruki wykres\u00f3w<\/strong><\/h2>\n<p>Wydruki wynik\u00f3w analiz mog\u0105 by\u0107 realizowane przez wydruk bie\u017c\u0105cego widoku.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-27386 aligncenter\" src=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2023_5\/wp-content\/uploads\/2020\/09\/wydruk.png\" alt=\"\" width=\"287\" height=\"165\" srcset=\"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/wydruk.png 287w, https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-content\/uploads\/2020\/09\/wydruk-50x29.png 50w\" sizes=\"auto, (max-width: 287px) 100vw, 287px\" \/><\/p>\n<p>Dla niekt\u00f3rych wykres\u00f3w przygotowane s\u0105 specjalne wydruki umieszczone w\u00a0standardowym mechanizmie wydruk\u00f3w.<br \/>\n<a name=\"przykl\"><\/a><\/p>\n<h1><strong>Przyk\u0142ad<\/strong><\/h1>\n<p>Rozwa\u017cmy nast\u0119puj\u0105cy przyk\u0142ad.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce bie\u017c\u0105cy wykres startowy jest podpi\u0119ty do okna z\u00a0rachunkami bankowymi i\u00a0ma wy\u015bwietli\u0107 obroty na poszczeg\u00f3lnych rachunkach odfiltrowanych tak jak na li\u015bcie a\u00a0dodatkowo takich, \u017ce obroty na nich przekraczaj\u0105 ustalon\u0105 na specjalnym spinie warto\u015b\u0107. Za\u0142\u00f3\u017cmy tak\u017ce, \u017ce chcemy osobno uwzgl\u0119dnia\u0107 b\u0105d\u017a nie raporty zamkni\u0119te i\u00a0otwarte. Eksploracja punktu (odpowiadaj\u0105cego wybranemu rachunkowi) powinna m\u00f3c spowodowa\u0107 albo otwarcie wykresu rozbicia w\/w obrot\u00f3w na obroty na poszczeg\u00f3lnych raportach (<em>drill down<\/em>) rachunku albo wywo\u0142anie listy raport\u00f3w rachunku (<em>drill through<\/em>).<\/p>\n<p>Dane bie\u017c\u0105cego wykresu startowego mog\u0105 by\u0107 nast\u0119puj\u0105ce:<\/p>\n<p><strong>Nazwa<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 =\u2018Obroty na poszczeg\u00f3lnych rachunkach\u2019<\/p>\n<p><strong>TypAkcji<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = e_op_WykresyTypAkcjiSQL<\/p>\n<p><strong>Zapytanie<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 =\u2018SELECT PunktID=1, RachunekID=Bra_BraID, RachunekSymbol=Bra_Symbol, BRa_SaldoBO, ObrotyNaRachunku=SUM(BRp_Przychody- BRp_Rozchody)<\/p>\n<p>FROM cdn.BnkRachunki JOIN cdn.BnkRaporty ON Bra_BraID=BRp_BraID<\/p>\n<p>WHERE ((BRp_Zamkniety=1 AND ?@X|RaportyZamkniete|Raporty &amp;zamkni\u0119te:1@?=1) OR (BRp_Zamkniety=0 AND ?@X|RaportyOtwarte|Raporty &amp;otwarte:1@?=1)) AND<\/p>\n<p>BRa_Typ=?@O(Kasa:1|Konto:2|Karta:3)|RachunekTyp|&amp;Typ rachunku:2@? AND<\/p>\n<p>?@s255_NQ|FiltrApp|Filtr z\u00a0aplikacji:@?<\/p>\n<p>GROUP BY Bra_BraID,Bra_BraID,Bra_Symbol,Bra_SaldoBO HAVING SUM(BRp_Przychody- BRp_Rozchody) &gt;= ?@n14.2|MinObroty|Obroty minimum:100.00@?\u2019<\/p>\n<p><strong>ParametryGraficzne<\/strong>= \u2018\/@Type=1 \/@Depth=100 \/@HeaderName=Obroty na rachunkach \/@XAxisName=Rachunek \/@YAxisName=Obroty \/@Series=5,4\u2019<\/p>\n<p>Dane pierwszego \u2018podwykresu\u2019:<\/p>\n<p><strong>Nazwa<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = \u2018Obroty raport\u00f3w w\u00a0ramach rachunku\u2019<\/p>\n<p><strong>TypAkcji<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = e_op_WykresyTypAkcjiSQL<\/p>\n<p><strong>Zapytanie<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = \u2018SELECT Brp_BrpID, RaportID=Brp_BrpID, NumerRaportu=Brp_NumerPelny, ObrotyRaportu=BRp_Przychody-BRp_Rozchody FROM cdn.BnkRaporty<\/p>\n<p>WHERE<\/p>\n<p>BRp_BraID=?@n3|RachunekID|Id raportu:1@? AND<\/p>\n<p>((BRp_Zamkniety=1 AND ?@X|RaportyZamkniete|Raporty &amp;zamkni\u0119te:1@?=1) OR (BRp_Zamkniety=0 AND ?@X|RaportyOtwarte|Raporty &amp;otwarte:1@?=1))<\/p>\n<p>ORDER BY Brp_BrpID\u2019<\/p>\n<p><strong>ParametryGraficzne<\/strong> = \u2018\/@Type=1 \/@Depth=100 \/@HeaderName={&#8217;Obroty na raportach rachunku &#8217; &amp; ?@Hs20_Q|RachunekID|-:1@?} \/@XAxisName=Raport \/@YAxisName=Obroty \/@Series=5,4\u2019<\/p>\n<p>Dane drugiego \u2018podwykresu\u2019:<\/p>\n<p><strong>Nazwa<\/strong> \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = \u2018Lista raport\u00f3w rachunku\u2019<\/p>\n<p><strong>TypAkcji<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = e_op_WykresyTypAkcjiProc<\/p>\n<p><strong>Zapytanie<\/strong>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 = OP_KASAI.DLL|CALLBRPLISTA(&#8217;BRA&#8217;,?@s6|RachunekID|Rachunek:0@?)<\/p>\n<p><strong>ParametryGraficzne<\/strong> = \u2018\u2019<\/p>\n<p>Programista w\u00a0danym wywo\u0142aniu przekazuje do obiektu wykresu zwi\u0105zanego z\u00a0tym wywo\u0142aniem pewne parametry wynikaj\u0105ce z\u00a0bie\u017c\u0105cych ustawie\u0144 zmiennych w\u00a0aplikacji, np. filtr zastosowany na li\u015bcie rachunk\u00f3w bankowych (zmienna dynamiczna <em>FiltrApp<\/em>). Przed wykonaniem bie\u017c\u0105cego wykresu startowego obiekt wykresu poszukuje w\u00a0zapytaniu parametr\u00f3w. Znajduje, \u017ce nale\u017cy poda\u0107 warto\u015bci parametr\u00f3w <em>RaportyZamkniete<\/em>, <em>RaportyOtwarte<\/em>, <em>RachunekTyp<\/em>, <em>FiltrApp<\/em> i\u00a0<em>ObrotyMin<\/em>. Poszukuje parametr\u00f3w o\u00a0takich nazwach w\u00a0kolejce zmiennych dynamicznych przekazanych z\u00a0aplikacji i\u00a0znajduje tylko jeden z\u00a0nich: <em>FiltrApp<\/em>. Wpisuje jego warto\u015b\u0107 do kolejki a\u00a0warto\u015b\u0107 innych, nie znalezionych parametr\u00f3w pobiera z\u00a0ich default\u00f3w. Po podstawieniu warto\u015bci parametr\u00f3w do zapytania jest wykonywany wykres i\u00a0tworzone s\u0105 kontrolki ze wszystkimi parametrami dynamicznymi. Teraz mo\u017cna zmieni\u0107 warto\u015bci w\u00a0tych kontrolkach i\u00a0ponownie wykona\u0107 wykres (przycisk Od\u015bwie\u017c).<\/p>\n<p>Eksploracja punktu bie\u017c\u0105cego wykresu startowego do pierwszego podwykresu:<\/p>\n<p>Mamy unikalne Id klikni\u0119tego punktu; odczytujemy rekord z\u00a0danymi tego punktu. Z\u00a0zapytania w\u00a0pierwszym podwykresie odczytujemy, \u017ce potrzebna jest warto\u015b\u0107 parametr\u00f3w <em>RachunekID<\/em>, <em>RaportyZamkniete<\/em> i\u00a0<em>RaportyOtwarte<\/em>. Przeszukujemy nazwy kolumn zapytania wykresu nadrz\u0119dnego aby sprawdzi\u0107, w\u00a0kt\u00f3rych kolumnach znajduj\u0105 si\u0119 szukane warto\u015bci parametr\u00f3w: poszukujemy kolumn o\u00a0nazwach <em>RachunekID<\/em>, <em>RaportyZamkniete<\/em> i\u00a0<em>RaportyOtwarte<\/em>. Znajdujemy tylko pierwsz\u0105 z\u00a0nich (kolumna 5.). Warto\u015bci dw\u00f3ch pozosta\u0142ych parametr\u00f3w \u2018dziedziczymy\u2019 z\u00a0ustawionych parametr\u00f3w wykresu nadrz\u0119dnego (zgodno\u015b\u0107 nazw parametr\u00f3w w\u00a0obu zapytaniach). Podstawiamy odczytane warto\u015bci wszystkich parametr\u00f3w i\u00a0wykonujemy zapytanie podwykresu.<\/p>\n<p>Eksploracja punktu bie\u017c\u0105cego wykresu startowego do drugiego podwykresu:<\/p>\n<p>Mamy unikalne Id klikni\u0119tego punktu; odczytujemy rekord z\u00a0danymi tego punktu. Z\u00a0zapytania w\u00a0drugim podwykresie odczytujemy, \u017ce potrzebna jest warto\u015b\u0107 parametru <em>RachunekID<\/em>. Przeszukujemy nazwy kolumn zapytania wykresu nadrz\u0119dnego aby sprawdzi\u0107,w kt\u00f3rej kolumnie znajduje si\u0119 szukana warto\u015b\u0107 parametru: poszukujemy kolumny o\u00a0nazwie <em>RachunekID<\/em>. Znajdujemy \u2013 jest to 5. kolumna. Podstawiamy odczytan\u0105 warto\u015b\u0107 parametru i\u00a0wykonujemy zapytanie podwykresu (wo\u0142amy funkcj\u0119). <\/div>\n","protected":false},"excerpt":{"rendered":"<p>Og\u00f3lna idea wykres\u00f3w Idea wykres\u00f3w polega na stworzeniu jednolitego, sp\u00f3jnego mechanizmu pozwalaj\u0105cego m.in. na wygodne definiowanie wykres\u00f3w (inaczej: analiz) prezentuj\u0105cych graficznie i\/albo tabelarycznie wybrane dane z\u00a0bazy, pod\u0142\u0105czanie wykres\u00f3w w\u00a0przewidzianych (przez programist\u0119) punktach programu i\u00a0wykonywanie. Jest to wi\u0119c mechanizm analogiczny jak w\u00a0przypadku wydruk\u00f3w. Z\u00a0jedn\u0105 zasadnicz\u0105 r\u00f3\u017cnic\u0105. Mianowicie wydruki s\u0105 z\u00a0samej swej natury pasywne \u2013 wykresy natomiast [&hellip;]<\/p>\n","protected":false},"author":8,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"_ht_kb_usefulness":0,"_ht_kb_post_views_count":2921,"_ht_kb_article_order":0,"_ht_kb_reading_time":1,"footnotes":""},"ht_kb_category":[274],"ht_kb_tag":[],"class_list":["post-4927","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-instrukcje"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb\/4927","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/users\/8"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/comments?post=4927"}],"version-history":[{"count":14,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb\/4927\/revisions"}],"predecessor-version":[{"id":27387,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb\/4927\/revisions\/27387"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/media?parent=4927"}],"wp:term":[{"taxonomy":"ht_kb_category","embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb_category?post=4927"},{"taxonomy":"ht_kb_tag","embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/optima\/pl\/2027\/wp-json\/wp\/v2\/ht_kb_tag?post=4927"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}