{"id":8301,"date":"2025-05-21T12:24:10","date_gmt":"2025-05-21T10:24:10","guid":{"rendered":"https:\/\/pomoc.comarch.pl\/cee\/640\/?post_type=ht_kb&#038;p=8301"},"modified":"2025-05-26T10:00:19","modified_gmt":"2025-05-26T08:00:19","slug":"interfejs-odbc-i-jdbc","status":"publish","type":"ht_kb","link":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/","title":{"rendered":"Interfejs ODBC i JDBC"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_82_2 ez-toc-wrap-left counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Spis tre\u015bci<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Prze\u0142\u0105cznik Spisu Tre\u015bci\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Wprowadzenie\" >Wprowadzenie<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Grupa_docelowa\" >Grupa docelowa<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Definicje\" >Definicje<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Wymagania_wstepne\" >Wymagania wst\u0119pne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Obslugiwane_systemy_innych_firm_do_tworzenia_raportow\" >Obs\u0142ugiwane systemy innych firm do tworzenia raport\u00f3w<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Model_danych_interfejsu_bazy_danych_lokalizacja\" >Model danych interfejsu bazy danych lokalizacja<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Nazwy_tabel\" >Nazwy tabel<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Nazwy_kolumn\" >Nazwy kolumn<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Etykietowanie_atrybutow_GUID\" >Etykietowanie atrybut\u00f3w GUID<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Rozdzielczosc_atrybutow_tablicy\" >Rozdzielczo\u015b\u0107 atrybut\u00f3w tablicy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Specjalna_kolumna_BusinessKey_text\" >Specjalna kolumna BusinessKey_text<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Rozwiazanie_relacji\" >Rozwi\u0105zanie relacji<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Ograniczenia_dla_wielu_relacji_na_atrybut\" >Ograniczenia dla wielu relacji na atrybut<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Kolumna_lancuchowa_instancji_z_sufiksem_text\" >Kolumna \u0142a\u0144cuchowa instancji z sufiksem _text<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Kolumna_klucza_biznesowego_z_przyrostkiem_BK_kolumna_BK\" >Kolumna klucza biznesowego z przyrostkiem _BK (kolumna BK)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Optymalizacja_instrukcji_bazy_danych\" >Optymalizacja instrukcji bazy danych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Wirtualna_kolumna_relacji\" >Wirtualna kolumna relacji<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Rozdzielczosc_zestawu_wartosci_atrybutow\" >Rozdzielczo\u015b\u0107 zestawu warto\u015bci atrybut\u00f3w<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Wartosc_niezdefiniowana\" >Warto\u015b\u0107 niezdefiniowana<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Nieprawidlowa_wartosc\" >Nieprawid\u0142owa warto\u015b\u0107<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Reprezentacja_specjalnych_typow_danych_biznesowych_czesci_specjalne\" >Reprezentacja specjalnych typ\u00f3w danych biznesowych (cz\u0119\u015bci specjalne)<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Rozdzielczosc_atrybutow_typu_Foreign_Amount\" >Rozdzielczo\u015b\u0107 atrybut\u00f3w typu Foreign Amount<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Rozdzielczosc_atrybutow_typu_DomesticAmount\" >Rozdzielczo\u015b\u0107 atrybut\u00f3w typu DomesticAmount<\/a><ul class='ez-toc-list-level-6' ><li class='ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Uzycie_kolumn_z_przyrostkami_amountCorporate_i_amountOrganisation\" >U\u017cycie kolumn z przyrostkami _amountCorporate i _ amountOrganisation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-6'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Kolumny_globalne_tabeli\" >Kolumny globalne tabeli<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Rozdzielczosc_atrybutow_typu_Quantity\" >Rozdzielczo\u015b\u0107 atrybut\u00f3w typu Quantity<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Specjalna_kolumna_link_text\" >Specjalna kolumna link_text<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Obsluga_atrybutow_obiektow_blob\" >Obs\u0142uga atrybut\u00f3w obiekt\u00f3w blob<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Wyjatki\" >Wyj\u0105tki<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Rozdzielczosc_atrybutow_daty_i_znacznika_czasu\" >Rozdzielczo\u015b\u0107 atrybut\u00f3w daty i znacznika czasu<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-31\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Znacznik_czasu_bez_informacji_o_strefie_czasowej\" >Znacznik czasu bez informacji o strefie czasowej<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-32\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Znacznik_czasu_lub_data_z_informacja_o_strefie_czasowej\" >Znacznik czasu lub data z informacj\u0105 o strefie czasowej<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-33\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Zakres_wartosci_znacznikow_czasu\" >Zakres warto\u015bci znacznik\u00f3w czasu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-34\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Informacje_o_czasie\" >Informacje o czasie<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-35\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Przetwarzanie_informacji_o_zmianie_obiektu_biznesowego\" >Przetwarzanie informacji o zmianie obiektu biznesowego<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-36\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Obsluga_pol_zdefiniowanych_przez_uzytkownika\" >Obs\u0142uga p\u00f3l zdefiniowanych przez u\u017cytkownika<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-37\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Obiekty_biznesowe_zalezne_od_czasu\" >Obiekty biznesowe zale\u017cne od czasu<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-38\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Tabele_wirtualne\" >Tabele wirtualne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-39\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Sortowanie_wynikow\" >Sortowanie wynik\u00f3w<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-40\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Przypisywanie_parametrow_wejsciowych\" >Przypisywanie parametr\u00f3w wej\u015bciowych<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-41\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Funkcje_wirtualne\" >Funkcje wirtualne<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-42\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Automatyczna_optymalizacja_instrukcji_bazy_danych\" >Automatyczna optymalizacja instrukcji bazy danych<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-43\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Konfiguracja_serwera_aplikacji\" >Konfiguracja serwera aplikacji<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-44\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Dostep_ODBC\" >Dost\u0119p ODBC<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-45\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Konfiguracja_hiperlaczy_dla_jednostek_biznesowych\" >Konfiguracja hiper\u0142\u0105czy dla jednostek biznesowych<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-46\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Uprawnienia\" >Uprawnienia<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-47\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Uprawnieninia_na_poziomie_uzytkownika\" >Uprawnieninia na poziomie u\u017cytkownika<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-48\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Autoryzacja_na_poziomie_jednostki_biznesowej\" >Autoryzacja na poziomie jednostki biznesowej<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-49\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Uwagi_dotyczace_modelowania\" >Uwagi dotycz\u0105ce modelowania<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-50\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Konwencje_nazewnictwa_zrodel_danych\" >Konwencje nazewnictwa \u017ar\u00f3de\u0142 danych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-51\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Ograniczenia_podczas_odpytywania_wielu_baz_danych_OLTP\" >Ograniczenia podczas odpytywania wielu baz danych OLTP<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-52\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Wizualizacja_modelu_danych\" >Wizualizacja modelu danych<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-53\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Model_danych_raportu\" >Model danych raportu<\/a><ul class='ez-toc-list-level-5' ><li class='ez-toc-heading-level-5'><a class=\"ez-toc-link ez-toc-heading-54\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Korzystanie_ze_specjalnych_kolumn\" >Korzystanie ze specjalnych kolumn<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-55\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Zdenormalizowany_obiekt_biznesowy\" >Zdenormalizowany obiekt biznesowy<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-56\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Komunikaty_o_bledach\" >Komunikaty o b\u0142\u0119dach<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-57\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Najczestsze_przyczyny_bledow\" >Najcz\u0119stsze przyczyny b\u0142\u0119d\u00f3w<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-58\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Sterownik_JDBC\" >Sterownik JDBC<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-59\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Instalacja_sterownika_JDBC\" >Instalacja sterownika JDBC<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-60\" href=\"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/documentation\/interfejs-odbc-i-jdbc\/#Konfiguracja_polaczenia_JDBC\" >Konfiguracja po\u0142\u0105czenia JDBC<\/a><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h3 id=\"wprowadzenie\" ><span class=\"ez-toc-section\" id=\"Wprowadzenie\"><\/span>Wprowadzenie<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>ODBC i JDBC to standardy dost\u0119pu do \u017ar\u00f3de\u0142 danych, zwykle baz danych, za po\u015brednictwem znormalizowanego interfejsu w systemie Windows.<\/p>\n<p>Niniejsza dokumentacja opisuje dost\u0119p do baz danych Comarch ERP Enterprise poprzez interfejsy bazodanowe ODBC i JDBC.<\/p>\n<h3 id=\"grupa-docelowa\" ><span class=\"ez-toc-section\" id=\"Grupa_docelowa\"><\/span>Grupa docelowa<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Dokument jest skierowany do programist\u00f3w i konsultant\u00f3w, kt\u00f3rzy chc\u0105 tworzy\u0107 raporty lub pobiera\u0107 dane z Comarch ERP Enterprise za pomoc\u0105 produkt\u00f3w innych firm. Koncentruje si\u0119 na modelu danych interfejsu bazy danych Comarch ERP Enterprise i jego specjalnych funkcjach. Tre\u015b\u0107 dokumentu jest r\u00f3wnie\u017c podstaw\u0105 do tworzenia raport\u00f3w w \u015brodowisku systemu Comarch ERP Enterprise.<\/p>\n<h3 id=\"definicje\" ><span class=\"ez-toc-section\" id=\"Definicje\"><\/span>Definicje<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p><strong>Sterownik ODBC systemu ERP<\/strong> umo\u017cliwia dost\u0119p do odczytu danych w r\u00f3\u017cnych bazach danych systemu. Na przyk\u0142ad narz\u0119dzia raportuj\u0105ce lub aplikacje pakietu Office mog\u0105 z niego korzysta\u0107 w celu uzyskania dost\u0119pu do tych danych. Uprawnienia zdefiniowane w systemie Comarch ERP Enterprise s\u0105 r\u00f3wnie\u017c brane pod uwag\u0119 przy zapytaniach.<\/p>\n<p><strong>Sterownik JDBC systemu ERP<\/strong> umo\u017cliwia dost\u0119p do odczytu danych w r\u00f3\u017cnych bazach danych systemu. Narz\u0119dzia do raportowania lub aplikacje Office, na przyk\u0142ad, mog\u0105 z niego korzysta\u0107 w celu uzyskania dost\u0119pu do tych danych. Uprawnienia zdefiniowane w systemie Comarch ERP Enterprise s\u0105 r\u00f3wnie\u017c brane pod uwag\u0119 przy zapytaniach.<\/p>\n<h3 id=\"wymagania-wstepne\" ><span class=\"ez-toc-section\" id=\"Wymagania_wstepne\"><\/span>Wymagania wst\u0119pne<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Aby korzysta\u0107 z interfejsu ODBC, na komputerze klienta nale\u017cy zainstalowa\u0107 sterownik ODBC systemu ERP i skonfigurowa\u0107 \u017ar\u00f3d\u0142o danych ODBC. Korzystanie z interfejsu JDBC wymaga instalacji sterownika JDBC.<\/p>\n<p>Zak\u0142ada si\u0119 r\u00f3wnie\u017c, \u017ce u\u017cytkownik:<\/p>\n<ul>\n<li>Comarch ERP Enterprise zna system z perspektywy u\u017cytkownika<\/li>\n<li>zna podstawy modelowania danych w Comarch ERP Enterprise<\/li>\n<li>jest zaznajomiony z przygotowywaniem raport\u00f3w<\/li>\n<li>posiada wiedz\u0119 z zakresu modelowania danych w relacyjnych bazach danych<\/li>\n<\/ul>\n<h3 id=\"obslugiwane-systemy-innych-firm-do-tworzenia-raportow\" ><span class=\"ez-toc-section\" id=\"Obslugiwane_systemy_innych_firm_do_tworzenia_raportow\"><\/span>Obs\u0142ugiwane systemy innych firm do tworzenia raport\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Interfejs ODBC 32-bitowy zosta\u0142 pomy\u015blnie przetestowany z nast\u0119puj\u0105cymi systemami zewn\u0119trznymi:<\/p>\n<ul>\n<li>Crystal Reports 2013<\/li>\n<li>Microsoft Query z pakietu Microsoft Office 2013<\/li>\n<\/ul>\n<p>Nast\u0119puj\u0105ce systemy zewn\u0119trzne powinny by\u0107 zgodne z interfejsem ODBC 32-bitowym, ale nie s\u0105 ju\u017c testowane ani obs\u0142ugiwane przez Comarch:<\/p>\n<ul>\n<li>Crystal Reports 9, 10, 11, 2008 i 2011<\/li>\n<li>Cognos Impromptu 7 i Powerplay<\/li>\n<li>Mened\u017cer danych Cognos 8<\/li>\n<li>Microsoft Query z pakietu Microsoft Office 2007 lub nowszego<\/li>\n<\/ul>\n<p data-start=\"613\" data-end=\"711\">Sterownik ODBC 64-bitowy zosta\u0142 pomy\u015blnie przetestowany z nast\u0119puj\u0105cym systemem zewn\u0119trznym:<\/p>\n<ul data-start=\"712\" data-end=\"734\">\n<li class=\"\" data-start=\"712\" data-end=\"734\">\n<p class=\"\" data-start=\"714\" data-end=\"734\">Crystal Reports 2020<\/p>\n<\/li>\n<\/ul>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Podczas korzystania z system\u00f3w innych firm mog\u0105 wyst\u0105pi\u0107 niezgodno\u015bci.<\/div><\/section>\n<h3 id=\"model-danych-interfejsu-bazy-danych-lokalizacja\" ><span class=\"ez-toc-section\" id=\"Model_danych_interfejsu_bazy_danych_lokalizacja\"><\/span>Model danych interfejsu bazy danych lokalizacja<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Interfejs bazy danych oferuje przygotowany model danych oparty na modelu Comarch ERP Enterprise. Schemat relacyjny bazy danych jest cz\u0119\u015bciowo ukryty. U\u0142atwia to tworzenie raport\u00f3w, poniewa\u017c wy\u015bwietlane s\u0105 znane standardowe obiekt\u00f3w biznesowych i ich atrybut\u00f3w, a niekt\u00f3re modelowane relacje mi\u0119dzy obiektami biznesowymi s\u0105 oceniane automatycznie. Znacz\u0105co zmniejsza to liczb\u0119 po\u0142\u0105cze\u0144, kt\u00f3re nale\u017cy zamodelowa\u0107 w raporcie.<\/p>\n<p>W celu przygotowania schematu relacyjnego opisanego poni\u017cej, u\u017cytkownik powinien by\u0107 zaznajomiony z Comarch ERP Enterprise, jego funkcjonalnym modelem danych i najwa\u017cniejszymi terminami modelowania, takimi jak:<\/p>\n<ul>\n<li>Business Object, Business Entity, Dependent<\/li>\n<li>Relacje<\/li>\n<li>Typy danych, cz\u0119\u015bci specjalne<\/li>\n<li>Klucz podstawowy i klucz biznesowy<\/li>\n<\/ul>\n<p>Dost\u0119p do interfejsu bazy danych zawsze odbywa si\u0119 w kontek\u015bcie tzw. aktywnej organizacji.<\/p>\n<h4 id=\"nazwy-tabel\" ><span class=\"ez-toc-section\" id=\"Nazwy_tabel\"><\/span>Nazwy tabel<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Interfejs bazy danych udost\u0119pnia tabele zorganizowane w katalogi dla obiekt\u00f3w biznesowych oraz widok\u00f3w przechowywanych w bazie danych. G\u0142\u00f3wny katalog <em>CISAG<\/em> zawiera wszystkie tabele zorganizowane w podkatalogi.<\/p>\n<p>Tabela obiektu biznesowego jest klasyfikowana zgodnie z jej typem w jednym z podkatalog\u00f3w <em>DEPENDENT<\/em> lub <em>ENTITY<\/em>. Tabele widok\u00f3w i widoki OQL zdefiniowane w bazie danych mo\u017cna znale\u017a\u0107 w podkatalogach <em>VIEW<\/em> i <em>VIEWOQL<\/em>. Podkatalog <em>VIRTUAL<\/em> zawiera tabele wirtualne, natomiast podkatalog <em>FUNCTION<\/em> zawiera funkcje wirtualne.<\/p>\n<p>Je\u015bli zosta\u0142y opracowane przez partnera, nowe tabele s\u0105 w\u0142\u0105czane do podkatalog\u00f3w zgodnie z ich przynale\u017cno\u015bci\u0105.<\/p>\n<p>Poni\u017csza tabela ilustruje struktur\u0119:<\/p>\n<table style=\"width: 100%; height: 184px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"132\"><strong>Katalog g\u0142\u00f3wny<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"132\"><strong>Podkatalogi<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"275\"><strong>Zawarto\u015b\u0107<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 161px; border-style: outset;\" rowspan=\"6\" width=\"132\">CISAG<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"132\">ENTITY<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"275\">Tabele obiekt\u00f3w biznesowych typu <em>Business Entity.<\/em><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"132\"><em>DEPENDENT<\/em><\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"275\">Tabele obiekt\u00f3w biznesowych typu <em>Dependent<\/em>.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"132\">VIRTUAL<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"275\">tabele wirtualne<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"132\">FUNCTION<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"275\">Funkcje wirtualne<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"132\">VIEWOQL<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"275\">Tabele widok\u00f3w OQL<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"132\">WIDOK<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"275\">Tabele widok\u00f3w<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Nazwa tabeli pochodzi od nazwy odpowiadaj\u0105cego jej obiektu biznesowego lub widoku. Nazwa przestrzeni nazw jest skracana o sta\u0142e komponenty, tj. <em>.obj<\/em> i<em> com.<\/em>, w przypadku obiekt\u00f3w Comarch ERP Enterprise <em>com.cisag.<\/em>, s\u0105 pomijane. Kropki zast\u0119powane s\u0105 podkre\u015blnikami.<\/p>\n<p>Tabela mo\u017ce mie\u0107 etykiet\u0119, kt\u00f3ra pochodzi z obiektu biznesowego lub widoku jest wy\u015bwietlane jako tekst etykiety. Kolumny tabeli s\u0105 atrybutami obiektu biznesowego, nazwa kolumny jest u\u017cywana z odpowiedniej nazwy atrybutu. Kolumna mo\u017ce mie\u0107 etykiet\u0119, kt\u00f3ra jest zdefiniowana w opisie danych logicznego typu danych nale\u017c\u0105cego do atrybutu. Ustawiony j\u0119zyk wy\u015bwietlania \u017ar\u00f3d\u0142a danych okre\u015bla j\u0119zyk etykiet. Aplikacja raportuj\u0105ca formu\u0142uje instrukcje SQL na tych tabelach w celu wygenerowania \u017c\u0105danego raportu.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Obiekt biznesowy <em>com.cisag.app.general.obj.Country<\/em> jest u\u017cywany do pokazania jego reprezentacji w interfejsie bazy danych.<br \/>\nObiekt biznesowy jest typu <em>Business Entity<\/em>. Powi\u0105zana tabela znajduje si\u0119 zatem w podkatalogu <em>ENTITY<\/em>. Nazwa tabeli to: <em>app_general_Country<\/em><br \/>\nze specyfikacj\u0105 nazw katalog\u00f3w, gdzie &#8222;@&#8221; jest u\u017cywane jako separator:<br \/>\nCISAG@ENTITY.app_general_Country<\/div><\/section>\n<h4 id=\"nazwy-kolumn\" ><span class=\"ez-toc-section\" id=\"Nazwy_kolumn\"><\/span>Nazwy kolumn<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Nazwa atrybutu jest u\u017cywana jako nazwa kolumny. Istniej\u0105 specjalne nazwy kolumn i <span style=\"color: #000000;\">sufiksy,<\/span> kt\u00f3re wskazuj\u0105 na specjalne znaczenie kolumny. Poni\u017csze rozdzia\u0142y zawieraj\u0105 list\u0119 specjalnych nazw kolumn, kt\u00f3re programista raportu mo\u017ce wykorzysta\u0107 do uzyskania informacji o typie lub zawarto\u015bci bez znajomo\u015bci konkretnego typu lub zawarto\u015bci kolumny.<\/p>\n<h5 id=\"etykietowanie-atrybutow-guid\" ><span class=\"ez-toc-section\" id=\"Etykietowanie_atrybutow_GUID\"><\/span>Etykietowanie atrybut\u00f3w GUID<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Identyfikatory GUID (Global Unique IDentifier) s\u0105 u\u017cywane do tworzenia unikalnych kluczy dla obiekt\u00f3w biznesowych i odwo\u0142ywania si\u0119 do nich. Kolumny oparte na typie danych GUID s\u0105 zatem najwa\u017cniejszymi kandydatami do \u0142\u0105czenia tabel podczas modelowania danych. Aby podkre\u015bli\u0107 te kolumny, nazwy kolumn s\u0105 oznaczone podkre\u015bleniem.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Atrybuty <em>guid<\/em> i <em>currency<\/em> obiektu biznesowego <em>com.cisag.app.general.obj.Country<\/em> s\u0105 oparte na typie danych <em>GUID<\/em>. Odpowiednie kolumny tabeli maj\u0105 w ODBC nazwy <em>guid_<\/em> i <em>currency_<\/em>.<\/div><\/section>\n<h5 id=\"rozdzielczosc-atrybutow-tablicy\" ><span class=\"ez-toc-section\" id=\"Rozdzielczosc_atrybutow_tablicy\"><\/span>Rozdzielczo\u015b\u0107 atrybut\u00f3w tablicy<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W przypadku atrybutu tablicowego obiektu biznesowego odpowiednia tabela zawiera wiele kolumn zgodnie z modelem atrybutu. Indeks jest dodawany do nazwy atrybutu jako <span style=\"color: #000000;\">sufiks<\/span>.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Atrybut tablicowy <em>eans<\/em> obiektu biznesowego <em>com.cisag.app.general.obj.Item<\/em> o rozmiarze 4 jest reprezentowany przez nast\u0119puj\u0105ce 4 kolumny w powi\u0105zanej tabeli:<\/p>\n<ul>\n<li>eans_0<\/li>\n<li>eans_1<\/li>\n<li>eans_2<\/li>\n<li>eans_3<\/li>\n<\/ul>\n<p>Wszystkie kolumny maj\u0105 etykiet\u0119 zapisan\u0105 dla atrybutu w opisie danych jako etykiet\u0119.<\/div><\/section>\n<h5 id=\"specjalna-kolumna-businesskey_text\" ><span class=\"ez-toc-section\" id=\"Specjalna_kolumna_BusinessKey_text\"><\/span>Specjalna kolumna BusinessKey_text<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli dla obiektu biznesowego spe\u0142nione s\u0105 okre\u015blone warunki, do jego tabeli dodawana jest kolumna <em>BusinessKey_text.<\/em> Kolumna ta zawiera ci\u0105g instancji obiektu biznesowego. Podczas oceny \u017c\u0105dania serwer aplikacji \u0142aduje powi\u0105zan\u0105 instancj\u0119 obiektu biznesowego za po\u015brednictwem us\u0142ugi trwa\u0142o\u015bci. Mo\u017ce to prowadzi\u0107 do d\u0142u\u017cszych czas\u00f3w odpowiedzi w przypadku \u017c\u0105da\u0144 z du\u017cym zestawem wynik\u00f3w.<\/p>\n<p>Aby kolumna zosta\u0142a dodana, musz\u0105 by\u0107 spe\u0142nione nast\u0119puj\u0105ce warunki:<\/p>\n<ul>\n<li>obiekt biznesowy ma klucz biznesowy<\/li>\n<li>klucz podstawowy obiektu biznesowego sk\u0142ada si\u0119 z atrybutu<\/li>\n<\/ul>\n<p>Ta kolumna mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w informacyjnych.<\/p>\n<h4 id=\"rozwiazanie-relacji\" ><span class=\"ez-toc-section\" id=\"Rozwiazanie_relacji\"><\/span>Rozwi\u0105zanie relacji<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W przypadku niekt\u00f3rych relacji obiektu biznesowego klucz biznesowy i opis obiektu docelowego s\u0105 automatycznie dodawane do tabeli jako kolumny. Aby kolumny zosta\u0142y dodane do tabeli, relacja musi spe\u0142nia\u0107 okre\u015blone warunki:<\/p>\n<ul>\n<li>model relacji musi wynosi\u0107 1:1<\/li>\n<li>docelowy obiekt biznesowy ma dok\u0142adnie jeden atrybut typu danych GUID jako klucz podstawowy<\/li>\n<li>relacja jest zdefiniowana przez dok\u0142adnie jeden atrybut, atrybut docelowy jest atrybutem klucza g\u0142\u00f3wnego<\/li>\n<li>obiekty \u017ar\u00f3d\u0142owe i docelowe s\u0105 zdefiniowane w tej samej bazie danych.<\/li>\n<li>docelowy obiekt biznesowy ma zdefiniowany klucz biznesowy<\/li>\n<\/ul>\n<h4 id=\"ograniczenia-dla-wielu-relacji-na-atrybut\" ><span class=\"ez-toc-section\" id=\"Ograniczenia_dla_wielu_relacji_na_atrybut\"><\/span>Ograniczenia dla wielu relacji na atrybut<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli kilka z tych relacji jest zdefiniowanych dla obiektu biznesowego z tym samym atrybutem \u017ar\u00f3d\u0142owym, ale r\u00f3\u017cnymi atrybutami docelowymi, specjalne kolumny<em> _BK<\/em> i <em>_text<\/em> wygenerowane dla kolumny atrybutu \u017ar\u00f3d\u0142owego mog\u0105 nie zosta\u0107 u\u017cyte w raporcie. W takim przypadku generowanie metadanych tabeli nie jest deterministyczne. Jedna z relacji jest u\u017cywana do generowania kolumn specjalnych, pozosta\u0142e s\u0105 ignorowane. W rezultacie mo\u017cliwe jest, \u017ce te specjalne kolumny odnosz\u0105 si\u0119 do innego docelowego obiektu biznesowego ni\u017c na przyk\u0142ad podczas tworzenia raportu.<\/p>\n<p>W takim przypadku wymagana relacja musi zosta\u0107 dodana do raportu r\u0119cznie w celu uzyskania wymaganego klucza biznesowego i ci\u0105gu instancji. W tym celu nale\u017cy otworzy\u0107 definicj\u0119 obiektu biznesowego \u017ar\u00f3d\u0142owego obiektu biznesowego w aplikacji <em>Obiekty deweloperskie<\/em>. Na zak\u0142adce <em>Edytor<\/em> podzak\u0142adka <em>Relacje <\/em>prezentowane s\u0105 zdefiniowane relacje z innymi obiektami biznesowymi. Nale\u017cy zdefiniowa\u0107 wymagan\u0105 relacj\u0119, kt\u00f3r\u0105 nast\u0119pnie nale\u017cy doda\u0107 r\u0119cznie w raporcie, aby uzyska\u0107 wymagany klucz biznesowy i ci\u0105g instancji. Dzi\u0119ki czemu mo\u017cna po\u0142\u0105czy\u0107 wymagan\u0105 tabel\u0119 docelowego obiektu biznesowego poprzez kolumn\u0119 atrybutu \u017ar\u00f3d\u0142owego i kolumn\u0119 atrybutu docelowego z tabel\u0105 \u017ar\u00f3d\u0142owego obiektu biznesowego. Aby to zrobi\u0107, nale\u017cy u\u017cy\u0107: LEFT OUTER JOIN.<\/p>\n<p>Dodane po\u0142\u0105czenie musi mie\u0107 nast\u0119puj\u0105c\u0105 struktur\u0119:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\">tabela_\u017ar\u00f3d\u0142owa\n\nLEFT OUTER JOIN tabela_docelowa\n\nON tabela_\u017ar\u00f3d\u0142owa = tabela_docelowa<\/pre>\n<p>Zamiast kolumny <em>_BK<\/em> w raporcie nale\u017cy u\u017cy\u0107 odpowiedniej kolumny w tabeli docelowego obiektu biznesowego, kt\u00f3ra zawiera klucz biznesowy.<\/p>\n<p>W raporcie nale\u017cy u\u017cy\u0107 kolumny <em>Business_Key_text<\/em> tabeli docelowego obiektu biznesowego zamiast kolumny <em>_text<\/em>.<\/p>\n<h5 id=\"kolumna-lancuchowa-instancji-z-sufiksem-_text\" ><span class=\"ez-toc-section\" id=\"Kolumna_lancuchowa_instancji_z_sufiksem_text\"><\/span>Kolumna \u0142a\u0144cuchowa instancji z sufiksem _text<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli powy\u017csze warunki s\u0105 spe\u0142nione, kolumna ta jest dodawana. Jej nazwa jest tworzona z nazwy atrybutu \u017ar\u00f3d\u0142owego i przyrostka <em>_text<\/em>. Jest ona oznaczona etykiet\u0105 z opisu danych atrybutu \u017ar\u00f3d\u0142owego. Zawarto\u015bci\u0105 kolumny jest \u0142a\u0144cuch instancji obiektu biznesowego.\u00a0Podczas oceny \u017c\u0105dania serwer aplikacji \u0142aduje powi\u0105zan\u0105 instancj\u0119 obiektu biznesowego za po\u015brednictwem us\u0142ugi trwa\u0142o\u015bci. Mo\u017ce to prowadzi\u0107 do d\u0142u\u017cszych czas\u00f3w odpowiedzi w przypadku \u017c\u0105da\u0144 z du\u017cym zestawem wynik\u00f3w.<\/p>\n<p>Kolumna ta mo\u017ce by\u0107 u\u017cywana w raporcie tylko do wy\u015bwietlania, ale nie do selekcji po stronie bazy danych (klauzula JOIN\/WHERE), grupowania (GROUP BY) i sortowania (klauzula ORDER BY).<\/p>\n<h5 id=\"kolumna-klucza-biznesowego-z-przyrostkiem-_bk-kolumna-bk\" ><span class=\"ez-toc-section\" id=\"Kolumna_klucza_biznesowego_z_przyrostkiem_BK_kolumna_BK\"><\/span>Kolumna klucza biznesowego z przyrostkiem _BK (kolumna BK)<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Je\u015bli klucz biznesowy obiektu docelowego ma zosta\u0107 uwzgl\u0119dniony, spe\u0142niony musi by\u0107 r\u00f3wnie\u017c nast\u0119puj\u0105cy warunek: Klucz biznesowy obiektu docelowego sk\u0142ada si\u0119 z dok\u0142adnie jednego atrybutu typu String.<\/p>\n<p>Nazwa kolumny jest tworzona z nazwy atrybutu \u017ar\u00f3d\u0142owego i przyrostka <em>_BK<\/em>. Etykieta jest okre\u015blana na podstawie opisu danych logicznego typu danych nale\u017c\u0105cego do atrybutu klucza biznesowego.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Obiekt biznesowy <em>com.cisag.app.general.obj.Country<\/em> ma zdefniowan\u0105 relacj\u0119 1:1 <em>Language<\/em> do obiektu biznesowego <em>com.cisag.app.general. obj.Language<\/em> poprzez atrybuty <em>defaultLanguage -&gt; guid<\/em>. Relacja i obiekt docelowy spe\u0142niaj\u0105 okre\u015blone warunki. W zwi\u0105zku z tym do tabeli dodawane s\u0105 kolumny <em>defaultLanguage_BK<\/em> z etykiet\u0105 <em>Language<\/em> oraz <em>defaultLanguage_text<\/em> z etykiet\u0105 <em>defaultLanguage<\/em>.<\/p>\n<p>Kolumna ta nie mo\u017ce by\u0107 u\u017cywana do formu\u0142owania warunk\u00f3w \u0142\u0105czenia. Je\u015bli kolumna BK nie jest u\u017cywana tylko do wy\u015bwietlania, \u017cadna z opisanych poni\u017cej optymalizacji instrukcji nie ma miejsca.<\/div><\/section>\n<h5 id=\"optymalizacja-instrukcji-bazy-danych\" ><span class=\"ez-toc-section\" id=\"Optymalizacja_instrukcji_bazy_danych\"><\/span>Optymalizacja instrukcji bazy danych<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce kolumny <em>_BK<\/em> s\u0105 rozwi\u0105zywane w r\u00f3\u017cny spos\u00f3b w zale\u017cno\u015bci od ustawienia opcji <em>Dost\u0119p ODBC<\/em> (w aplikacji <em>Panel system<\/em> -&gt; <em>Typ: Serwer aplikacji<\/em>). Je\u015bli kolumny <em>_BK<\/em> s\u0105 dost\u0119pne przez dane g\u0142\u00f3wne, zawarto\u015b\u0107 jest okre\u015blana albo przez us\u0142ug\u0119 trwa\u0142o\u015bci, albo przez baz\u0119 danych. Je\u015bli pami\u0119\u0107 podr\u0119czna serwera aplikacji jest wystarczaj\u0105co du\u017ca, obliczenie zawarto\u015bci przez us\u0142ug\u0119 trwa\u0142o\u015bci jest korzystniejsze ni\u017c rozwi\u0105zanie przez baz\u0119 danych.<\/p>\n<p>Przy ograniczonym dost\u0119pie ODBC tylko dane podstawowe o rozmiarach danych <em>S<\/em> i <em>M<\/em> s\u0105 rozwi\u0105zywane przez us\u0142ug\u0119 trwa\u0142o\u015bci. Dane podstawowe o rozmiarach danych <em>L<\/em>, <em>XL<\/em> i <em>XXL<\/em> s\u0105 okre\u015blane przez baz\u0119 danych. Zapobiega to usuwaniu innych obiekt\u00f3w biznesowych z pami\u0119ci podr\u0119cznej serwera aplikacji podczas ograniczonego dost\u0119pu przez ODBC.<\/p>\n<p>Przy nieograniczonym dost\u0119pie ODBC wszystkie dane podstawowe s\u0105 rozwi\u0105zywane za po\u015brednictwem us\u0142ugi trwa\u0142o\u015bci. Mo\u017ce to utrudnia\u0107 dzia\u0142anie innych proces\u00f3w uruchomionych na serwerze aplikacji, poniewa\u017c dane wymagane przez te procesy s\u0105 usuwane z pami\u0119ci podr\u0119cznej. To ustawienie jest zalecane dla serwera aplikacji, kt\u00f3ry przetwarza g\u0142\u00f3wnie dost\u0119py ODBC.<\/p>\n<p>Opcj\u0119 <em>Dost\u0119p ODBC<\/em> mo\u017cna ustawi\u0107 w aplikacji <em>Panel system<\/em> dla serwera aplikacji.<\/p>\n<h5 id=\"wirtualna-kolumna-relacji\" ><span class=\"ez-toc-section\" id=\"Wirtualna_kolumna_relacji\"><\/span>Wirtualna kolumna relacji<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Istnieje mo\u017cliwo\u015b\u0107 dodania wirtualnej kolumny do tabeli obiektu biznesowego, kt\u00f3rej zawarto\u015b\u0107 jest obliczana w czasie wykonywania zapytania. Ta wirtualna kolumna jest oparta na relacji mi\u0119dzy obiektem biznesowym a okre\u015blonym obiektem biznesowym.<\/p>\n<p>Musz\u0105 zosta\u0107 spe\u0142nione nast\u0119puj\u0105ce warunki:<\/p>\n<ul>\n<li>model relacji musi 1:1<\/li>\n<li>docelowy obiekt biznesowy ma dok\u0142adnie jeden atrybut typu danych <em>GUID<\/em> jako klucz podstawowy<\/li>\n<li>relacja jest zdefiniowana przez dok\u0142adnie jeden atrybut, atrybut docelowy jest atrybutem klucza g\u0142\u00f3wnego<\/li>\n<li>obiekty \u017ar\u00f3d\u0142owe i docelowe s\u0105 zdefiniowane w tej samej bazie danych.<\/li>\n<\/ul>\n<p>Docelowy obiekt biznesowy nie musi mie\u0107 klucza biznesowego lub klucz biznesowy mo\u017ce by\u0107 wielocz\u0119\u015bciowy lub mie\u0107 typ inny ni\u017c ci\u0105g znak\u00f3w.<\/p>\n<p>Je\u015bli taka relacja istnieje dla obiektu biznesowego, a definicja kolumny wirtualnej zosta\u0142a zapisana dla docelowego obiektu biznesowego, kolumna wirtualna jest dodawana do tabeli obiektu biznesowego.<\/p>\n<p>Klasa musi by\u0107 zaimplementowana dla wirtualnej kolumny, kt\u00f3ra oblicza zawarto\u015b\u0107 kolumny dla ka\u017cdego wiersza tabeli. Klucz podstawowy odpowiedniej instancji docelowego obiektu biznesowego jest przekazywany jako parametr wej\u015bciowy do oblicze\u0144.<\/p>\n<p>Nazwa kolumny wirtualnej jest tworzona z nazwy atrybutu \u017ar\u00f3d\u0142owego z dowolnie wybranym przyrostkiem. Nazwa musi by\u0107 unikalna w obr\u0119bie tabeli rozszerzonej.<\/p>\n<p>Wirtualna kolumna mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w wy\u015bwietlania.<\/p>\n<p>To specjalne rozwi\u0105zanie mo\u017ce by\u0107 wykorzystane do replikacji kolumny <em>_BK<\/em>, je\u015bli docelowy obiekt biznesowy nie spe\u0142nia warunk\u00f3w dla klucza biznesowego dla automatycznie dodanej kolumny <em>_BK.<\/em><\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Obiekt biznesowy: UnitOfMeasure<\/p>\n<p>Je\u015bli istnieje relacja z obiektem biznesowym com.cisag.app.general.obj.Unit OfMeasure, kolumna <em>_BK<\/em> jest nadal dodawana, mimo \u017ce ten obiekt biznesowy ma wielocz\u0119\u015bciowy klucz biznesowy. Jest to specjalny przypadek, kt\u00f3ry zosta\u0142 zaimplementowany przy u\u017cyciu wirtualnej kolumny relacji. Kolumna <em>_BK<\/em> mo\u017ce by\u0107 u\u017cywana tylko do cel\u00f3w informacyjnych. <\/div><\/section>\n<h4 id=\"rozdzielczosc-zestawu-wartosci-atrybutow\" ><span class=\"ez-toc-section\" id=\"Rozdzielczosc_zestawu_wartosci_atrybutow\"><\/span>Rozdzielczo\u015b\u0107 zestawu warto\u015bci atrybut\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Atrybut obiektu biznesowego, kt\u00f3rego logiczny typ danych jest oparty na zestawie warto\u015bci (ValueSet), jest reprezentowany przez dwie kolumny w \u017ar\u00f3dle danych. Jedna z kolumn jest oznaczona nazw\u0105 atrybutu i zawiera warto\u015b\u0107 zestawu warto\u015bci, kt\u00f3ra odpowiada nazwie sta\u0142ej. Nazwa drugiej kolumny sk\u0142ada si\u0119 z nazwy atrybutu i przyrostka <em>_text<\/em>. Kolumna ta zawiera opis powi\u0105zany z warto\u015bci\u0105 ValueSet w j\u0119zyku wy\u015bwietlania ustawionym dla \u017ar\u00f3d\u0142a danych. Obie kolumny maj\u0105 przypisan\u0105 etykiet\u0119 przechowywan\u0105 w opisie danych nale\u017c\u0105cym do logicznego typu danych atrybutu jako etykiet\u0119 kolumny.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Atrybut <em>Status<\/em> obiektu biznesowego <em>com.cisag.app.sales.obj.<\/em><br \/>\n<em>SalesOrder<\/em>, kt\u00f3ry jest oparty na zestawie warto\u015bci <em>com.cisag.app.general.<\/em><br \/>\n<em>OrderStatus<\/em>, jest rozwi\u0105zywany na dwie kolumny <em>Status<\/em> i <em>Status_text<\/em> w odpowiedniej tabeli <em>CISAG@ENTITY.app_sales_SalesOrder<\/em>. Kolumna <em>Status<\/em> zawiera sta\u0142e nazwy jako warto\u015bci (np. <em>ORDER_COMPLETED<\/em>). Kolumna <em>Status_text<\/em> zawiera powi\u0105zane opisy jako warto\u015bci (np. <em>Zako\u0144czone<\/em>).<\/div><\/section>\n<p>Je\u015bli w raporcie zaprogramowano atrybut ValueSet lub okre\u015blono dla niego selekcje lub warunki, nale\u017cy zawsze u\u017cywa\u0107 sta\u0142ej nazwy. W ten spos\u00f3b raport pozostaje niezale\u017cny od zmian w nazwie wpis\u00f3w zestawu warto\u015bci i niezale\u017cnie od wybranego j\u0119zyka wy\u015bwietlania. Parametry raportu, kt\u00f3re pochodz\u0105 z zestaw\u00f3w warto\u015bci, s\u0105 przesy\u0142ane z Comarch ERP Enterprise do aplikacji raportu w tej reprezentacji.<\/p>\n<p>Kolumna <em>_text<\/em> mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w wy\u015bwietlania.<\/p>\n<p>Wyboru mo\u017cna dokona\u0107 tylko w kolumnie sta\u0142ych z wa\u017cnymi sta\u0142ymi zestawu warto\u015bci.<\/p>\n<h5 id=\"wartosc-niezdefiniowana\" ><span class=\"ez-toc-section\" id=\"Wartosc_niezdefiniowana\"><\/span>Warto\u015b\u0107 niezdefiniowana<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Kolumny oparte na zestawach warto\u015bci mog\u0105 by\u0107 r\u00f3wnie\u017c niezdefiniowane. Aby okre\u015bli\u0107 to w raporcie, nale\u017cy sprawdzi\u0107 pusty ci\u0105g znak\u00f3w dla nazwy sta\u0142ej. W takim przypadku odpowiednie oznaczenie zestawu warto\u015bci jest r\u00f3wnie\u017c pustym ci\u0105giem znak\u00f3w.<\/p>\n<h5 id=\"nieprawidlowa-wartosc\" ><span class=\"ez-toc-section\" id=\"Nieprawidlowa_wartosc\"><\/span>Nieprawid\u0142owa warto\u015b\u0107<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Warto\u015b\u0107 &lt;invalid&gt; dla oznaczenia zestawu warto\u015bci jest przypadkiem specjalnym. Warto\u015b\u0107 ta jest zawsze zwracana przez \u017ar\u00f3d\u0142o danych, je\u015bli w rekordach danych zostanie znaleziona warto\u015b\u0107 niezawarta w zestawie warto\u015bci. Zazwyczaj wskazuje to na mo\u017cliwy problem z bazowymi transferami starszych danych. Nie mo\u017cna wybra\u0107 nieprawid\u0142owych warto\u015bci.<\/p>\n<h4 id=\"reprezentacja-specjalnych-typow-danych-biznesowych-czesci-specjalne\" ><span class=\"ez-toc-section\" id=\"Reprezentacja_specjalnych_typow_danych_biznesowych_czesci_specjalne\"><\/span>Reprezentacja specjalnych typ\u00f3w danych biznesowych (cz\u0119\u015bci specjalne)<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Comarch ERP Enterprise oferuje specjalne typy danych, kt\u00f3re maj\u0105 z\u0142o\u017cone struktury. Najwa\u017cniejszymi z nich s\u0105 kwoty i ilo\u015bci. S\u0105 one specjalnie obs\u0142ugiwane w interfejsie bazy danych.<\/p>\n<h5 id=\"rozdzielczosc-atrybutow-typu-foreign-amount\" ><span class=\"ez-toc-section\" id=\"Rozdzielczosc_atrybutow_typu_Foreign_Amount\"><\/span>Rozdzielczo\u015b\u0107 atrybut\u00f3w typu<span style=\"color: #000000;\"> <em>Foreign Amount<\/em><\/span><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Atrybut oparty na cz\u0119\u015bci specjalnej <em>com.cisag.general.obj.<\/em><em>ForeignAmount<\/em> jest reprezentowany przez kilka kolumn w tabeli odpowiadaj\u0105cej obiektowi biznesowemu. Odpowiadaj\u0105 one atrybutom cz\u0119\u015bci i innym atrybutom dodanym przez interfejs bazy danych. Nazwy kolumn s\u0105 tworzone z nazwy atrybutu i odpowiedniego sufiksu. Poni\u017csza tabela zawiera przegl\u0105d.<\/p>\n<table style=\"width: 98.5961%; height: 161px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"width: 281px; height: 23px;\" width=\"180\"><strong>Sufiks nazwy kolumny<\/strong><\/td>\n<td style=\"width: 554px; height: 23px;\" width=\"359\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"width: 281px; height: 23px; border-style: outset;\" width=\"180\">_amount<\/td>\n<td style=\"width: 554px; height: 23px; border-style: outset;\" width=\"359\">Kwota wej\u015bciowa<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"width: 281px; height: 23px; border-style: outset;\" width=\"180\">_currency_<\/td>\n<td style=\"width: 554px; height: 23px; border-style: outset;\" width=\"359\">Identyfikator GUID waluty wej\u015bciowej<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"width: 281px; height: 46px; border-style: outset;\" width=\"180\">_currency_BK<\/td>\n<td style=\"width: 554px; height: 46px; border-style: outset;\" width=\"359\">Klucz biznesowy waluty wej\u015bciowej (np. EUR). Obowi\u0105zuj\u0105 ograniczenia dla kolumn BK.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"width: 281px; height: 46px; border-style: outset;\" width=\"180\">_currency_text<\/td>\n<td style=\"width: 554px; height: 46px; border-style: outset;\" width=\"359\">Opis waluty wej\u015bciowej. Mo\u017ce by\u0107 u\u017cywany tylko do cel\u00f3w wy\u015bwietlania.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Nast\u0119puj\u0105ce kolumny s\u0105 tworzone w tabeli dla atrybutu <em>totalValues.discountValue<\/em> obiektu biznesowego <em>com.cisag.sales.obj.SalesOrder:<\/em><\/p>\n<ul>\n<li>totalValues_discountValue_amount<\/li>\n<li>totalValues_discountValue_currency_<\/li>\n<li>totalValues_discountValue_currency_BK<\/li>\n<li>totalValues_discountValue_currency_text<\/li>\n<\/ul>\n<p><\/div><\/section>\n<h5 id=\"rozdzielczosc-atrybutow-typu-domesticamount\" ><span class=\"ez-toc-section\" id=\"Rozdzielczosc_atrybutow_typu_DomesticAmount\"><\/span>Rozdzielczo\u015b\u0107 atrybut\u00f3w typu <em>DomesticAmount<\/em><span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Atrybut oparty na cz\u0119\u015bci specjalnej <em>com.cisag.general.obj.DomesticAmount<\/em> jest reprezentowany przez kilka kolumn w tabeli odpowiadaj\u0105cej obiektowi biznesowemu. Nazwy kolumn s\u0105 tworzone z nazwy atrybutu i odpowiedniego sufiksu.<\/p>\n<table style=\"width: 100%; height: 433px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; width: 33.4524%; border-style: outset;\" width=\"180\"><strong>Sufiks nazwy kolumny<\/strong><\/td>\n<td style=\"height: 23px; width: 65.9524%; border-style: outset;\" width=\"359\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; width: 33.4524%; border-style: outset;\" width=\"180\">_amount1<\/td>\n<td style=\"height: 23px; width: 65.9524%; border-style: outset;\" width=\"359\">Kwota w walucie 1 kwoty krajowej.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; width: 33.4524%; border-style: outset;\" width=\"180\">_amount2<\/td>\n<td style=\"height: 23px; width: 65.9524%; border-style: outset;\" width=\"359\">Kwota w walucie 2 kwoty krajowej.<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; width: 33.4524%; border-style: outset;\" width=\"180\">_amount3<\/td>\n<td style=\"height: 23px; width: 65.9524%; border-style: outset;\" width=\"359\">Kwota w walucie 3 kwoty krajowej.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; width: 33.4524%; border-style: outset;\" width=\"180\">_amountCorporate<\/td>\n<td style=\"height: 46px; width: 65.9524%; border-style: outset;\" width=\"359\">Kwota w walucie g\u0142\u00f3wnej aktywnej organizacji lub niezdefiniowanej zawarto\u015bci.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; width: 33.4524%; border-style: outset;\" width=\"180\">_amountOrganisation<\/td>\n<td style=\"height: 46px; width: 65.9524%; border-style: outset;\" width=\"359\">Kwota w walucie g\u0142\u00f3wnej aktywnej organizacji, warto\u015b\u0107 z kwoty krajowej lub obliczona na podstawie waluty 1.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; width: 33.4524%; border-style: outset;\" width=\"180\">_amount2_text<\/td>\n<td style=\"height: 46px; width: 65.9524%; border-style: outset;\" width=\"359\">Oznaczenie waluty dla waluty 2 kwoty krajowej. Mo\u017ce by\u0107 u\u017cywane wy\u0142\u0105cznie do cel\u00f3w wy\u015bwietlania.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; width: 33.4524%; border-style: outset;\" width=\"180\">_amount3_text<\/td>\n<td style=\"height: 46px; width: 65.9524%; border-style: outset;\" width=\"359\">Oznaczenie waluty dla waluty 3 kwoty krajowej. Mo\u017ce by\u0107 u\u017cywane wy\u0142\u0105cznie do cel\u00f3w wy\u015bwietlania.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 33.4524%; border-style: outset;\" width=\"180\">_exact<\/td>\n<td style=\"height: 157px; width: 65.9524%; border-style: outset;\" width=\"359\">Indeks waluty wprowadzonej dok\u0142adnie przez u\u017cytkownika. Wszystkie inne waluty zosta\u0142y przeliczone z dok\u0142adnej kwoty wprowadzonej zgodnie z kursami wymiany obowi\u0105zuj\u0105cymi w momencie rejestracji. Warto\u015b\u0107 1 oznacza, \u017ce warto\u015b\u0107 _amount1 jest dok\u0142adna, 2 oznacza, \u017ce warto\u015b\u0107 _amount2 jest dok\u0142adna, a 3 oznacza, \u017ce warto\u015b\u0107 _amount3 jest dok\u0142adna. Warto\u015b\u0107 0 oznacza, \u017ce \u017cadna z trzech kwot walutowych nie jest warto\u015bci\u0105 dok\u0142adn\u0105.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Kolumny z przyrostkami _amount1, _amountCorporate i _amountOrganisation nie mog\u0105 by\u0107 u\u017cywane razem w klauzuli ORDER BY do sortowania.<\/div><\/section>\n<p><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Nast\u0119puj\u0105ce kolumny s\u0105 tworzone w tabeli dla atrybutu <em>totalValues.discountValueDomestic<\/em> obiektu biznesowego <em>com.cisag.sales.obj.SalesOrder<\/em>:<\/p>\n<ul>\n<li>totalValues_discountValueDomestic_amount1<\/li>\n<li>totalValues_discountValueDomestic_amount2<\/li>\n<li>totalValues_discountValueDomestic_amount3<\/li>\n<li>totalValues_discountValueDomestic_amountCorporate<\/li>\n<li>totalValues_discountValueDomestic_amountOrganisation<\/li>\n<li>totalValues_discountValueDomestic_amount2_text<\/li>\n<li>totalValues_discountValueDomestic_amount3_text<\/li>\n<li>totalValues_discountValueDomestic_exact<\/div><\/section><\/li>\n<\/ul>\n<h6 id=\"uzycie-kolumn-z-przyrostkami-_amountcorporate-i-_-amountorganisation\" ><span class=\"ez-toc-section\" id=\"Uzycie_kolumn_z_przyrostkami_amountCorporate_i_amountOrganisation\"><\/span>U\u017cycie kolumn z przyrostkami _amountCorporate i _ amountOrganisation<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Podczas korzystania z atrybutu typu <em>Kwota krajowa<\/em> w raporcie nale\u017cy wzi\u0105\u0107 pod uwag\u0119 nast\u0119puj\u0105ce kwestie w zwi\u0105zku z wielofirmow\u015bci\u0105 i wyprowadzaniem kwoty w walucie g\u0142\u00f3wnej organizacji:<\/p>\n<p><strong>Pojedyncza witryna: Tworzenie raportu<\/strong><\/p>\n<p>Kolumna<em> _amountCorporate<\/em> zawiera kwot\u0119 waluty 1, 2 lub 3 kwoty krajowej zgodnie z wiod\u0105cym indeksem walutowym klienta. Kolumna <em>_amountOrganisation<\/em> zawiera te same informacje, co kolumna _amountCorporate.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli raport ma by\u0107 r\u00f3wnie\u017c poprawny w \u015brodowiskach wielozak\u0142adowych, pole <em>_amountOrganisation<\/em> musi by\u0107 u\u017cywane do wy\u015bwietlania kwoty w walucie wiod\u0105cej.<\/div><\/section>\n<p><strong>Wiele lokalizacji: Tworzenie raportu<\/strong><\/p>\n<p>Kolumna <em>_amountCorporate<\/em> zawiera kwot\u0119 w walucie 1, 2 lub 3 kwoty krajowej zgodnie z indeksem waluty wiod\u0105cej aktywnej organizacji. Mo\u017ce to by\u0107 warto\u015b\u0107 kwoty odnosz\u0105ca si\u0119 do innej waluty, je\u015bli kwota krajowa, kt\u00f3ra ma zosta\u0107 wydana, nie pochodzi od aktywnej organizacji.<\/p>\n<p>Kolumna <em>_amountOrganisation<\/em> zawiera kwot\u0119 w walucie g\u0142\u00f3wnej aktywnej organizacji. Zosta\u0142a ona obliczona na podstawie waluty 1 (waluta grupy) kwoty krajowej ze wsp\u00f3\u0142czynnikiem konwersji. Ta warto\u015b\u0107 jest obliczana i nie mo\u017ce mie\u0107 jako\u015bci dok\u0142adnej warto\u015bci.<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Kolumna <em>_amountOrganization<\/em> musi by\u0107 u\u017cywana w raporcie mi\u0119dzyorganizacyjnym, poniewa\u017c tylko ta kolumna gwarantuje, \u017ce zawiera kwot\u0119 w walucie wiod\u0105cej aktywnej organizacji (obliczon\u0105 na podstawie waluty 1).<\/div><\/section>\n<p>Podczas tworzenia raportu wewn\u0119trznego organizacji, w kt\u00f3rym u\u017cywane s\u0105 tylko kwoty krajowe z tymi samymi przypisaniami walut, pole <em>amountCorporate<\/em> jest zawsze preferowane w stosunku do pola <em>_amountOrganisation<\/em>, poniewa\u017c zawiera ono warto\u015b\u0107 z kwoty krajowej i nie jest obliczane na podstawie waluty grupy.<\/p>\n<h6 id=\"kolumny-globalne-tabeli\" ><span class=\"ez-toc-section\" id=\"Kolumny_globalne_tabeli\"><\/span>Kolumny globalne tabeli<span class=\"ez-toc-section-end\"><\/span><\/h6>\n<p>Je\u015bli obiekt biznesowy zawiera co najmniej jeden atrybut typu <em>Kwota krajowa<\/em>, do odpowiedniej tabeli dodawane s\u0105 nast\u0119puj\u0105ce kolumny:<\/p>\n<table style=\"width: 100%; height: 463px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"182\"><strong>Nazwa kolumny<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"359\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 70px;\">\n<td style=\"height: 70px; border-style: outset;\" width=\"182\">currencyCorporate1_<\/td>\n<td style=\"height: 70px; border-style: outset;\" width=\"359\">Identyfikator GUID waluty 1 aktywnej organizacji. Ta kolumna mo\u017ce by\u0107 u\u017cywana tylko w klauzuli SELECT, FROM lub WHERE instrukcji SQL.<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"height: 70px; border-style: outset;\" width=\"182\">currencyCorporate2_<\/td>\n<td style=\"height: 70px; border-style: outset;\" width=\"359\">Identyfikator GUID waluty 2 aktywnej organizacji. Ta kolumna mo\u017ce by\u0107 u\u017cywana tylko w klauzuli SELECT, FROM lub WHERE instrukcji SQL.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset;\" width=\"182\">currencyCorporate3_<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"359\">GUID waluty 3 aktywnej organizacji. Ta kolumna mo\u017ce by\u0107 u\u017cywana tylko w klauzuli SELECT, FROM lub WHERE instrukcji SQL.<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"height: 70px; border-style: outset;\" width=\"182\">currencyCorporate_<\/td>\n<td style=\"height: 70px; border-style: outset;\" width=\"359\">Identyfikator GUID waluty wiod\u0105cej aktywnej organizacji. Ta kolumna mo\u017ce by\u0107 u\u017cywana tylko w klauzuli SELECT, FROM lub WHERE instrukcji SQL.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset;\" width=\"182\">currencyCorporate1_text<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"359\">Oznaczenie waluty dla waluty 1 aktywnej organizacji. Ta kolumna mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w informacyjnych.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset;\" width=\"182\">currencyCorporate2_text<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"359\">Oznaczenie waluty dla waluty 2 aktywnej organizacji. Ta kolumna mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w informacyjnych.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset;\" width=\"182\">currencyCorporate3_text<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"359\">Oznaczenie waluty dla waluty 3 aktywnej organizacji. Ta kolumna mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w informacyjnych.<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset;\" width=\"182\">currencyCorporate_text<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"359\">Oznaczenie waluty dla waluty g\u0142\u00f3wnej aktywnej organizacji. Ta kolumna mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w informacyjnych.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5 id=\"rozdzielczosc-atrybutow-typu-quantity\" ><span class=\"ez-toc-section\" id=\"Rozdzielczosc_atrybutow_typu_Quantity\"><\/span>Rozdzielczo\u015b\u0107 atrybut\u00f3w typu Quantity<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Atrybut oparty na cz\u0119\u015bci specjalnej <em>com.cisag.general.obj.Quantity<\/em> jest reprezentowany przez kilka kolumn w tabeli odpowiadaj\u0105cej obiektowi biznesowemu. Odpowiadaj\u0105 one atrybutom cz\u0119\u015bci i innym atrybutom dodanym przez \u017ar\u00f3d\u0142o danych. Nazwy kolumn s\u0105 tworzone z nazwy atrybutu i odpowiedniego przyrostka.<\/p>\n<table style=\"width: 835px;\">\n<tbody>\n<tr>\n<td style=\"width: 281px; border-style: outset;\" width=\"180\"><strong>Sufiks nazwy kolumny<\/strong><\/td>\n<td style=\"width: 554px; border-style: outset;\" width=\"359\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 281px; border-style: outset;\" width=\"180\">_amount<\/td>\n<td style=\"width: 554px; border-style: outset;\" width=\"359\">Kwota<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 281px; border-style: outset;\" width=\"180\">_uom_<\/td>\n<td style=\"width: 554px; border-style: outset;\" width=\"359\">Identyfikator GUID urz\u0105dzenia<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 281px; border-style: outset;\" width=\"180\">_uom_BK<\/td>\n<td style=\"width: 554px; border-style: outset;\" width=\"359\">Klucz biznesowy jednostki (np. kg). W przeciwie\u0144stwie do innych kolumn <em>_BK<\/em>, ta kolumna mo\u017ce by\u0107 u\u017cywana tylko do cel\u00f3w informacyjnych.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 281px; border-style: outset;\" width=\"180\">_uom_text<\/td>\n<td style=\"width: 554px; border-style: outset;\" width=\"359\">Opis urz\u0105dzenia. Ta kolumna mo\u017ce by\u0107 u\u017cywana tylko do cel\u00f3w informacyjnych.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Nast\u0119puj\u0105ce kolumny s\u0105 tworzone w tabeli dla atrybutu <em>totalValues.grossWeight<\/em> obiektu biznesowego <em>com.cisag.sales.obj.SalesOrder<\/em>:<\/p>\n<ul>\n<li>totalValues_grossWeight_amount<\/li>\n<li>totalValues_grossWeight_uom_<\/li>\n<li>totalValues_grossWeight_uom_BK<\/li>\n<li>totalValues_grossWeight_uom_text<\/div><\/section><\/li>\n<\/ul>\n<h4 id=\"specjalna-kolumna-link_text\" ><span class=\"ez-toc-section\" id=\"Specjalna_kolumna_link_text\"><\/span>Specjalna kolumna link_text<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli tabela jest tabel\u0105 jednostki biznesowej, kt\u00f3ra ma dok\u0142adnie jeden identyfikator GUID jako klucz podstawowy, do tabeli dodawana jest dodatkowa kolumna o nazwie <em>link_text<\/em>. Kolumna ta zawiera adres URL, za pomoc\u0105 kt\u00f3rego mo\u017cna otworzy\u0107 powi\u0105zan\u0105 instancj\u0119 obiektu biznesowego w celu przegl\u0105dania\/edycji przy u\u017cyciu domy\u015blnej aplikacji.<\/p>\n<p>W raporcie warto\u015b\u0107 pola lub kolumny mo\u017ce by\u0107 zdefiniowana jako hiper\u0142\u0105cze. Oznacza to, \u017ce jednostka biznesowa, do kt\u00f3rej odnosi si\u0119 hiper\u0142\u0105cze, mo\u017cna otworzy\u0107 z raportu za pomoc\u0105 przegl\u0105darki w Comarch ERP Enterprise.<\/p>\n<p>Ta kolumna mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w wy\u015bwietlania.<\/p>\n<h4 id=\"obsluga-atrybutow-obiektow-blob\" ><span class=\"ez-toc-section\" id=\"Obsluga_atrybutow_obiektow_blob\"><\/span>Obs\u0142uga atrybut\u00f3w obiekt\u00f3w blob<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Interfejs bazy danych nie obs\u0142uguje atrybut\u00f3w obiekt\u00f3w biznesowych opartych na typach danych <em>Blob<\/em>, <em>SBlob<\/em>\u00a0i <em>Text<\/em>. Takie atrybuty nie maj\u0105 odpowiedniej kolumny w tabeli obiekt\u00f3w biznesowych.<\/p>\n<h5 id=\"wyjatki\" ><span class=\"ez-toc-section\" id=\"Wyjatki\"><\/span>Wyj\u0105tki<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Domy\u015blnie obs\u0142ugiwane s\u0105 jednak atrybuty blob obiekt\u00f3w biznesowych <em>com.cisag.app.general.obj.Text<\/em> i <em>com.cisag.app.general.obj.LongText<\/em>. S\u0105 one przeznaczone do do\u0142\u0105czania tekst\u00f3w, kt\u00f3re s\u0105 przechowywane w skompresowanej formie w bazie danych. W ten spos\u00f3b modu\u0142 tekstowy mo\u017ce zosta\u0107 przypisany do obiektu biznesowego poprzez relacj\u0119.<\/p>\n<p>Atrybuty blob tabel wirtualnych <em>com.cisag.app.general.ItemImage<\/em> i <em>com.cisag.app.general.PartnerImage<\/em> s\u0105 obs\u0142ugiwane. Zawieraj\u0105 one dane binarne odpowiednich obraz\u00f3w.<\/p>\n<p>Aby doda\u0107 obs\u0142ug\u0119 atrybutu blob dla obiektu biznesowego lub tabeli wirtualnej, nale\u017cy go zarejestrowa\u0107. Do tego celu s\u0142u\u017cy hook<em> com.cisag.pgm.appserver.hook.ODBCRegistryHook<\/em>, kt\u00f3ry jest zdefiniowany w Hook Contract <em>com.cisag.pgm.appserver.Server<\/em>. Atrybuty blob mog\u0105 by\u0107 rejestrowane bez konfliktu poprzez oddzieln\u0105 implementacj\u0119 tego hooka.<\/p>\n<p>Atrybut blob mo\u017ce by\u0107 u\u017cywany tylko do wy\u015bwietlania. Maksymalny rozmiar obiektu blob wynosi 16 MB.<\/p>\n<h4 id=\"rozdzielczosc-atrybutow-daty-i-znacznika-czasu\" ><span class=\"ez-toc-section\" id=\"Rozdzielczosc_atrybutow_daty_i_znacznika_czasu\"><\/span>Rozdzielczo\u015b\u0107 atrybut\u00f3w daty i znacznika czasu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Comarch ERP Enterprise udost\u0119pnia r\u00f3\u017cne typy znacznik\u00f3w czasu i dat. Wszystkie warto\u015bci daty i znacznika czasu s\u0105 zawsze przechowywane w bazie danych jako znacznik czasu odnosz\u0105cy si\u0119 do strefy czasowej GMT. Je\u015bli typ danych zawiera r\u00f3wnie\u017c informacje o strefie czasowej, GUID strefy czasowej jest r\u00f3wnie\u017c przechowywany w bazie danych. Szczeg\u00f3\u0142owe informacje na temat typ\u00f3w znacznik\u00f3w czasu i dat mo\u017cna znale\u017a\u0107 w artykule <em><a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/typy-danych-w-comarch-erp-enterprise\/\">Typy danych w Comarch ERP Enterprise<\/a><\/em>.<\/p>\n<p>Warto\u015b\u0107 znacznika czasu lub daty jest wyprowadzana z uwzgl\u0119dnieniem informacji o strefie czasowej. Je\u015bli wyprowadzana warto\u015b\u0107 nie ma w\u0142asnych informacji o strefie czasowej, u\u017cywana jest strefa czasowa z kontekstu logowania. W interaktywnym trybie ODBC strefa czasowa organizacji okre\u015blona podczas wprowadzania \u017ar\u00f3d\u0142a danych okre\u015bla, kt\u00f3ra strefa czasowa jest u\u017cywana jako kontekst. W \u015brodowisku jednostanowiskowym automatycznie u\u017cywana jest strefa czasowa klienta. Gdy raporty s\u0105 wysy\u0142ane za po\u015brednictwem SOM, u\u017cywana jest strefa czasowa organizacji zalogowanego u\u017cytkownika. Je\u015bli nie mo\u017cna okre\u015bli\u0107 strefy czasowej organizacji, strefa czasowa systemu Comarch ERP Enterprise jest u\u017cywana jako rezerwowa.<\/p>\n<p>Interfejs bazy danych zapewnia wszystkie warto\u015bci znacznika czasu i daty w strefie czasowej GMT oraz w strefie czasowej kontekstu logowania. Dlatego atrybut oparty na typie znacznika czasu lub daty jest rozwi\u0105zywany na kilka kolumn.<\/p>\n<h5 id=\"znacznik-czasu-bez-informacji-o-strefie-czasowej\" ><span class=\"ez-toc-section\" id=\"Znacznik_czasu_bez_informacji_o_strefie_czasowej\"><\/span>Znacznik czasu bez informacji o strefie czasowej<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W przypadku atrybutu opartego na podstawowym typie danych <em>TimeStamp<\/em> do tabeli obiektu biznesowego dodawane s\u0105 nast\u0119puj\u0105ce dwie kolumny:<\/p>\n<table style=\"width: 835px;\" width=\"539\">\n<thead>\n<tr>\n<td style=\"width: 281px; border-style: outset;\" width=\"180\"><strong>Nazwa kolumny<\/strong><\/td>\n<td style=\"width: 554px; border-style: outset;\" width=\"359\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"width: 281px; border-style: outset;\" width=\"180\">Attributname<\/td>\n<td style=\"width: 554px; border-style: outset;\" width=\"359\">Warto\u015b\u0107 znacznika czasu odnosz\u0105ca si\u0119 do strefy czasowej organizacji kontekstu ODBC. Kolumna ta mo\u017ce by\u0107 u\u017cywana wy\u0142\u0105cznie do cel\u00f3w informacyjnych.<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 281px; border-style: outset;\" width=\"180\">Attributname + <em>_gmt<\/em><\/td>\n<td style=\"width: 554px; border-style: outset;\" width=\"359\">Warto\u015b\u0107 znacznika czasu odnosz\u0105ca si\u0119 do strefy czasowej GMT. Kolumna ta musi by\u0107 u\u017cywana do wyboru, sortowania, przesy\u0142ania parametr\u00f3w itp.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Je\u015bli atrybut <em>updateTime<\/em> ma informacje o zmianie <em>10.01.2024 13:45:33<\/em>, a strefa czasowa kontekstu logowania to CET (czas \u015brodkowoeuropejski), w\u00f3wczas interfejs bazy danych przekazuje nast\u0119puj\u0105ce warto\u015bci dla kolumn nale\u017c\u0105cych do atrybutu:<\/p>\n<table style=\"width: 100%; height: 69px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"175\"><strong>Kolumna<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"365\"><strong>Warto\u015b\u0107<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"175\">updateTime<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"365\">10.01.2024 13:45:33<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"175\">updateTime_gmt<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"365\">10.01.2024 12:45:33<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><\/div><\/section><a style=\"font-size: revert; font-weight: revert;\" name=\"_Toc421777710\"><\/a><\/p>\n<h5 id=\"znacznik-czasu-lub-data-z-informacja-o-strefie-czasowej\" ><span class=\"ez-toc-section\" id=\"Znacznik_czasu_lub_data_z_informacja_o_strefie_czasowej\"><\/span>Znacznik czasu lub data z informacj\u0105 o strefie czasowej<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W przypadku atrybutu opartego na specjalnym logicznym typie danych dla znacznika czasu lub daty, do tabeli obiekt\u00f3w biznesowych dodawane s\u0105 nast\u0119puj\u0105ce trzy kolumny:<\/p>\n<table width=\"539\">\n<thead>\n<tr>\n<td style=\"border-style: outset;\" width=\"180\"><strong>Kolumna<\/strong><\/td>\n<td style=\"border-style: outset;\" width=\"359\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border-style: outset;\" width=\"180\">Nazwa atrybutu<\/td>\n<td style=\"border-style: outset;\" width=\"359\">Znacznik czasu lub warto\u015b\u0107 daty odnosz\u0105ca si\u0119 do zapisanej strefy czasowej. S\u0142u\u017cy wy\u0142\u0105cznie do cel\u00f3w prezentacyjnych.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"180\">Nazwa atrybutu + <em>_gmt<\/em><\/td>\n<td style=\"border-style: outset;\" width=\"359\">Znacznik czasu lub warto\u015b\u0107 daty odnosz\u0105ca si\u0119 do strefy czasowej GMT. Kolumna ta musi by\u0107 u\u017cywana do wyboru, sortowania, przesy\u0142ania parametr\u00f3w itp.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"180\">Nazwa atrybutu + <em>_timeZone<\/em><\/td>\n<td style=\"border-style: outset;\" width=\"359\">Skr\u00f3t strefy czasowej. Je\u015bli zapisana strefa czasowa r\u00f3\u017cni si\u0119 od strefy czasowej kontekstu ODBC, skr\u00f3t zapisanej strefy czasowej jest r\u00f3wnie\u017c przesy\u0142any, w przeciwnym razie kolumna jest pusta. S\u0142u\u017cy wy\u0142\u0105cznie do cel\u00f3w prezentacyjnych.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Je\u015bli atrybut <em>data<\/em> na fakturze sprzeda\u017cy ma warto\u015b\u0107 21.05.2025 00:00:00 MSK (czas moskiewski standardowy), a strefa czasowa kontekstu logowania jest inna, np. CET (czas \u015brodkowoeuropejski), w\u00f3wczas interfejs bazy danych przekazuje nast\u0119puj\u0105ce warto\u015bci dla kolumn nale\u017c\u0105cych do atrybutu:<\/p>\n<table>\n<thead>\n<tr>\n<td style=\"border-style: outset;\" width=\"175\"><strong>Kolumna<\/strong><\/td>\n<td style=\"border-style: outset;\" width=\"365\"><strong>Warto\u015b\u0107<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border-style: outset;\" width=\"175\">data<\/td>\n<td style=\"border-style: outset;\" width=\"365\">21.05.2025 00:00:00<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"175\">date_gmt<\/td>\n<td style=\"border-style: outset;\" width=\"365\">20.05.2025 21:00:00<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"175\">date_timeZone<\/td>\n<td style=\"border-style: outset;\" width=\"365\">MSK<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Natomiast, je\u015bli faktura sprzeda\u017cy zostanie wystawiona w odniesieniu do strefy czasowej MSK (Moscow Standard Time), interfejs bazy danych przeka\u017ce nast\u0119puj\u0105ce atrybuty:<\/p>\n<table style=\"width: 100%; height: 92px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; height: 23px;\" width=\"175\"><strong>Kolumna<\/strong><\/td>\n<td style=\"border-style: outset; height: 23px;\" width=\"365\"><strong>Warto\u015b\u0107<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; height: 23px;\" width=\"175\">data<\/td>\n<td style=\"border-style: outset; height: 23px;\" width=\"365\">21.05.2025 00:00:00<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; height: 23px;\" width=\"175\">date_gmt<\/td>\n<td style=\"border-style: outset; height: 23px;\" width=\"365\">20.05.2025 21:00:00<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"border-style: outset; height: 23px;\" width=\"175\">date_timeZone<\/td>\n<td style=\"border-style: outset; height: 23px;\" width=\"365\">(pusty ci\u0105g)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<section class=\"document-alert-box indicator\"><div class=\"document-alert-title\">Wskaz\u00f3wka<\/div><div class=\"document-alert-content\">Przyk\u0142ady zak\u0142adaj\u0105, \u017ce r\u00f3\u017cnica czasu mi\u0119dzy stref\u0105 czasow\u0105 GMT a strefami MEZ i MSK wynosi odpowiednio 1 i 3 godziny.<br data-start=\"168\" data-end=\"171\" \/>R\u00f3\u017cnice wynikaj\u0105ce z czasu letniego nie zosta\u0142y uwzgl\u0119dnione<\/div><\/section>\n<h5 data-start=\"180\" data-end=\"216\" id=\"zakres-wartosci-znacznikow-czasu\" ><span class=\"ez-toc-section\" id=\"Zakres_wartosci_znacznikow_czasu\"><\/span>Zakres warto\u015bci znacznik\u00f3w czasu<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p class=\"\" data-start=\"218\" data-end=\"321\">W interfejsie bazy danych stosowane s\u0105 nast\u0119puj\u0105ce warto\u015bci dla znacznik\u00f3w czasu i dat:<\/p>\n<ul>\n<li data-start=\"218\" data-end=\"321\"><strong data-start=\"328\" data-end=\"356\">Warto\u015b\u0107 niezdefiniowana <\/strong>&#8211; warto\u015b\u0107 <em>01.01.1000 00:00.000\u00a0<\/em>(w odniesieniu do strefy czasowej GMT) reprezentuje niezdefiniowany znacznik czasu. Przyk\u0142adowo: kolumna <code class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">updateInfo_deleteTime_gmt<\/code> zwraca t\u0119 warto\u015b\u0107, je\u015bli wska\u017anik usuni\u0119cia dla obiektu biznesowego nie zosta\u0142 ustawiony.<\/li>\n<li data-start=\"218\" data-end=\"321\"><strong style=\"font-size: revert; color: initial;\" data-start=\"629\" data-end=\"651\">Warto\u015b\u0107 minimalna <\/strong>&#8211; warto\u015b\u0107<em> 31.12.1000 00:00.000<\/em><span style=\"font-size: revert; color: initial;\"><em>\u00a0(<\/em>GMT) reprezentuje <\/span>najmniejszy znacznik czasu<span style=\"font-size: revert; color: initial;\">, kt\u00f3ry mo\u017ce by\u0107 przetwarzany przez interfejs bazy danych. <\/span>Wszystkie znaczniki czasu mniejsze ni\u017c ta warto\u015b\u0107 s\u0105 mapowane na ten znacznik. Warto\u015b\u0107 niezdefiniowana nie jest uwzgl\u0119dniana w tym zakresie.<\/li>\n<li data-start=\"218\" data-end=\"321\"><strong style=\"font-size: revert; color: initial;\" data-start=\"960\" data-end=\"983\">Warto\u015b\u0107 maksymalna <\/strong>&#8211; warto\u015b\u0107<em> 31.12.4712 00:00:00.000<\/em><span style=\"font-size: revert; color: initial;\"><em>\u00a0(<\/em>GMT) reprezentuje <\/span>najwi\u0119kszy znacznik czasu<span style=\"font-size: revert; color: initial;\">, kt\u00f3ry mo\u017ce zosta\u0107 przetworzony przez interfejs bazy danych.<\/span><\/li>\n<\/ul>\n<p class=\"\" data-start=\"960\" data-end=\"1349\">Znaczniki czasu wi\u0119ksze ni\u017c ta warto\u015b\u0107 s\u0105 mapowane na ni\u0105 podczas przesy\u0142ania do serwera aplikacji.<br data-start=\"1235\" data-end=\"1238\" \/>Je\u015bli serwer ma zwr\u00f3ci\u0107 znacznik czasu wi\u0119kszy ni\u017c ten, zwracana jest warto\u015b\u0107 <em>31.12.9999 00:00.000<\/em>\u00a0(GMT).<\/p>\n<p class=\"\" data-start=\"1356\" data-end=\"1486\"><section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">W aplikacji Crystal Reports prawid\u0142owa data musi zawiera\u0107 si\u0119 w zakresie od 01.01.0100 do 31.12.9999.<\/div><\/section><\/p>\n<h5 id=\"informacje-o-czasie\" ><span class=\"ez-toc-section\" id=\"Informacje_o_czasie\"><\/span>Informacje o czasie<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p class=\"\" data-start=\"138\" data-end=\"369\">Aby mo\u017cliwe by\u0142o przetwarzanie czystych warto\u015bci czasowych (np. \u201e02:15\u201d), niezale\u017cnie od strefy czasowej, w systemie s\u0105 one zapisywane z dat\u0105 01.01.1970\u00a0w odniesieniu do strefy czasowej GMT.<\/p>\n<p class=\"\" data-start=\"371\" data-end=\"538\">Interfejs bazy danych przekazuje takie warto\u015bci czasowe wraz z t\u0105 dat\u0105 do Crystal Reports.<br data-start=\"465\" data-end=\"468\" \/>Aby poprawnie wykorzysta\u0107 warto\u015b\u0107 czasow\u0105 w szablonie raportu, nale\u017cy:<\/p>\n<ul data-start=\"540\" data-end=\"647\">\n<li class=\"\" data-start=\"540\" data-end=\"607\">\n<p class=\"\" data-start=\"542\" data-end=\"607\">odj\u0105\u0107 warto\u015b\u0107 daty 01.01.1970 od przekazanej warto\u015bci lub<\/p>\n<\/li>\n<li class=\"\" data-start=\"608\" data-end=\"647\">\n<p class=\"\" data-start=\"610\" data-end=\"647\">ukry\u0107 dat\u0119 w polu wyj\u015bciowym raportu<\/p>\n<\/li>\n<\/ul>\n<h4 id=\"przetwarzanie-informacji-o-zmianie-obiektu-biznesowego\" ><span class=\"ez-toc-section\" id=\"Przetwarzanie_informacji_o_zmianie_obiektu_biznesowego\"><\/span>Przetwarzanie informacji o zmianie obiektu biznesowego<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli dla obiektu biznesowego okre\u015blono, \u017ce system przechowuje informacje o zmianach (opcja <em>Zaloguj u\u017cytkownika i czas<\/em> w aplikacji <em>Obiekty deweloperskie<\/em>), w tym celu w tabeli obiekt\u00f3w biznesowych znajduj\u0105 si\u0119 dedykowane kolumny.<\/p>\n<p>Poni\u017csza tabela zawiera list\u0119 kolumn i ich znaczenie:<\/p>\n<table>\n<thead>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\"><strong>Nazwa kolumny<\/strong><\/td>\n<td style=\"border-style: outset;\" width=\"330\"><strong>Zawarto\u015b\u0107 kolumny<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_createTime<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Czas utworzenia instancji obiektu biznesowego w strefie czasowej aktywnej organizacji. S\u0142u\u017cy wy\u0142\u0105cznie do cel\u00f3w prezentacyjnych.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_createTime_gmt<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Czas utworzenia instancji obiektu biznesowego w strefie czasowej GMT.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_createUser_<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Klucz podstawowy (identyfikator GUID) u\u017cytkownika, kt\u00f3ry utworzy\u0142 instancj\u0119 obiektu biznesowego.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_createUser_text<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Nazwa u\u017cytkownika, kt\u00f3ry utworzy\u0142 wyst\u0105pienie obiektu biznesowego. S\u0142u\u017cy wy\u0142\u0105cznie do cel\u00f3w prezentacyjnych.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_deleteTime<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Czas usuni\u0119cia instancji obiektu biznesowego w strefie czasowej aktywnej organizacji. S\u0142u\u017cy wy\u0142\u0105cznie do cel\u00f3w prezentacyjnych.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_deleteTime_gmt<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Czas usuni\u0119cia instancji obiektu biznesowego w strefie czasowej GMT.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_deleteUser_<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Klucz podstawowy (typ GUID) u\u017cytkownika, kt\u00f3ry usun\u0105\u0142 instancj\u0119 obiektu biznesowego.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_deleteUser_text<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Nazwa u\u017cytkownika, kt\u00f3ry usun\u0105\u0142 wyst\u0105pienie obiektu biznesowego. S\u0142u\u017cy wy\u0142\u0105cznie do cel\u00f3w prezentacyjnych.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_updateTime<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Zmiana czasu instancji obiektu biznesowego w strefie czasowej aktywnej organizacji. S\u0142u\u017cy wy\u0142\u0105cznie do cel\u00f3w prezentacyjnych.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_updateTime_gmt<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Czas usuni\u0119cia instancji obiektu biznesowego w strefie czasowej GMT.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_updateUser_<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Klucz podstawowy (typ GUID) u\u017cytkownika, kt\u00f3ry zmieni\u0142 instancj\u0119 obiektu biznesowego.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"210\">updateInfo_updateUser_text<\/td>\n<td style=\"border-style: outset;\" width=\"330\">Nazwa u\u017cytkownika, kt\u00f3ry zmieni\u0142 wyst\u0105pienie obiektu biznesowego. S\u0142u\u017cy wy\u0142\u0105cznie do cel\u00f3w prezentacyjnych.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"obsluga-pol-zdefiniowanych-przez-uzytkownika\" ><span class=\"ez-toc-section\" id=\"Obsluga_pol_zdefiniowanych_przez_uzytkownika\"><\/span>Obs\u0142uga p\u00f3l zdefiniowanych przez u\u017cytkownika<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Je\u015bli pola zdefiniowane przez u\u017cytkownika s\u0105 oparte na rozszerzeniu obiektu, tj. s\u0105 przechowywane w oddzielnej tabeli bazy danych, a nie w strukturze danych typu blob, mo\u017cna je przeszukiwa\u0107 za po\u015brednictwem interfejsu bazy danych. Tabela bazy danych powi\u0105zanego obiektu biznesowego jest automatycznie rozszerzana o kolumny dla p\u00f3l zdefiniowanych przez u\u017cytkownika.<\/p>\n<p>Pola zdefiniowane przez u\u017cytkownika dla obiekt\u00f3w biznesowych mog\u0105 by\u0107 wyszukiwane i u\u017cywane w taki sam spos\u00f3b, jak inne atrybuty za po\u015brednictwem interfejsu bazy danych. Nazwa kolumny w tabeli odpowiadaj\u0105cej atrybutowi sk\u0142ada si\u0119 z nazwy atrybutu i przyrostka <em>_ext<\/em>. Pole zdefiniowane przez u\u017cytkownika jest przypisywane do kilku kolumn w tabeli w zale\u017cno\u015bci od typu danych. Rozdzielczo\u015b\u0107 jest analogiczna do zwyk\u0142ego atrybutu obiektu biznesowego. Etykieta zdefiniowana podczas tworzenia pola zdefiniowanego przez u\u017cytkownika jest wy\u015bwietlana jako etykieta kolumny.<\/p>\n<p><strong>Typ danych <em>Pole wyboru<\/em><\/strong><\/p>\n<p>Typ danych <em>Pole wyboru<\/em> dla pola zdefiniowanego przez u\u017cytkownika jest rozwi\u0105zywany podobnie do typu danych: <em>Valueset<\/em>.<\/p>\n<table>\n<thead>\n<tr>\n<td style=\"border-style: outset;\" width=\"216\"><strong>Kolumna<\/strong><\/td>\n<td style=\"border-style: outset;\" width=\"312\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"border-style: outset;\" width=\"216\">attributeName_ext<\/td>\n<td style=\"border-style: outset;\" width=\"312\">Kolumna jest oznaczona jako przestarza\u0142a, zawiera ID odpowiedniego wpisu jako ci\u0105g znak\u00f3w. Zamiast niej nale\u017cy u\u017cy\u0107 kolumny <em>attributeName_ext_name<\/em>.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"216\">attributeName_ext_name<\/td>\n<td style=\"border-style: outset;\" width=\"312\">Kolumna zawiera sta\u0142\u0105 nazw\u0119 odpowiedniego wpisu.<\/td>\n<\/tr>\n<tr>\n<td style=\"border-style: outset;\" width=\"216\">attributeName_ext_text<\/td>\n<td style=\"border-style: outset;\" width=\"312\">Ta kolumna zawiera nazw\u0119 odpowiedniego wpisu. Mo\u017ce by\u0107 u\u017cywany wy\u0142\u0105cznie do cel\u00f3w informacyjnych.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"obiekty-biznesowe-zalezne-od-czasu\" ><span class=\"ez-toc-section\" id=\"Obiekty_biznesowe_zalezne_od_czasu\"><\/span>Obiekty biznesowe zale\u017cne od czasu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Niekt\u00f3re obiekty biznesowe mog\u0105 by\u0107 zale\u017cne od czasu (np. obiekt biznesowy <em>com.cisag.app.general.obj.Partner<\/em>). Podczas odpytywania danych z obiekt\u00f3w biznesowych zale\u017cnych od czasu, brane s\u0105 pod uwag\u0119 tylko wersje obowi\u0105zuj\u0105ce w bie\u017c\u0105cym czasie, jak zwykle w Comarch ERP Enterprise.<\/p>\n<p>Obiekty biznesowe zale\u017cne od czasu maj\u0105 atrybuty <em>validFrom<\/em> i <em>validUntil<\/em>. Je\u015bli atrybuty te s\u0105 wyra\u017anie uwzgl\u0119dnione w zapytaniu, tj. u\u017cywane jako kolumna zwrotna, kryterium wyboru lub sortowania lub do cel\u00f3w grupowania, uwzgl\u0119dniane s\u0105 wszystkie wersje instancji obiekt\u00f3w biznesowych.<\/p>\n<h4 id=\"tabele-wirtualne\" ><span class=\"ez-toc-section\" id=\"Tabele_wirtualne\"><\/span>Tabele wirtualne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Tabela wirtualna nie istnieje w bazie danych, ale jest emulowana przez SAS. Zasadniczo dost\u0119p do takiej tabeli mo\u017cna uzyska\u0107 w taki sam spos\u00f3b, jak do tabeli bazy danych. Zawarto\u015b\u0107 tabeli wirtualnej jest obliczana w czasie wykonywania zapytania w odniesieniu do parametr\u00f3w wej\u015bciowych. Wynik mo\u017ce zawiera\u0107 od 0 do n wierszy. Dodatkowe kolumny mo\u017cna doda\u0107 do tego wyniku poprzez sprz\u0119\u017cenia z tabelami z innych obiekt\u00f3w biznesowych. Liczba wierszy wyniku jest jednak okre\u015blana wy\u0142\u0105cznie przez tabel\u0119 wirtualn\u0105. Wyniki dla kolumn z po\u0142\u0105czonych tabel s\u0105 okre\u015blane za po\u015brednictwem us\u0142ugi trwa\u0142o\u015bci SAS, a nie bezpo\u015brednio za pomoc\u0105 instrukcji bazy danych.<\/p>\n<p>Z\u0142o\u017cono\u015b\u0107 zapytania podlega znacznym ograniczeniom:<\/p>\n<ul>\n<li>Dozwolone s\u0105 tylko typy z\u0142\u0105cze\u0144 LEFT OUTER i RIGHT OUTER. Tabela wirtualna musi zawsze stanowi\u0107 g\u0142\u00f3wn\u0105 stron\u0119 z\u0142\u0105czenia, tj. lew\u0105 stron\u0119 w przypadku z\u0142\u0105czenia LEFT lub praw\u0105 stron\u0119 w przypadku z\u0142\u0105czenia RIGHT. Warunek sprz\u0119\u017cenia musi by\u0107 sformu\u0142owany przy u\u017cyciu klucza podstawowego lub klucza biznesowego obiektu biznesowego nale\u017c\u0105cego do po\u0142\u0105czonej tabeli. Tylko &#8222;=&#8221; jest dozwolone jako operator, a wszystkie podwarunki musz\u0105 by\u0107 po\u0142\u0105czone za pomoc\u0105 &#8222;AND&#8221;. Ograniczenia te maj\u0105 r\u00f3wnie\u017c zastosowanie do z\u0142\u0105cze\u0144, kt\u00f3re pochodz\u0105 z tabeli, kt\u00f3ra jest po\u0142\u0105czona z tabel\u0105 wirtualn\u0105. Kolumny z po\u0142\u0105czonych tabel mog\u0105 by\u0107 u\u017cywane tylko do cel\u00f3w wy\u015bwietlania, co oznacza r\u00f3wnie\u017c, \u017ce tabela wirtualna nie mo\u017ce by\u0107 po\u0142\u0105czona z inn\u0105 tabel\u0105 wirtualn\u0105.<\/li>\n<li>Tabela widoku lub widoku OQL nie mo\u017ce by\u0107 po\u0142\u0105czona z tabel\u0105 wirtualn\u0105 lub by\u0107 od niej zale\u017cna, poniewa\u017c jej zawarto\u015b\u0107 musi by\u0107 okre\u015blona w bazie danych.<\/li>\n<li>Kolumny tabeli wirtualnej mog\u0105 by\u0107 u\u017cywane wy\u0142\u0105cznie do wy\u015bwietlania, sortowania i formu\u0142owania warunk\u00f3w \u0142\u0105czenia. Ponadto kolumny, kt\u00f3re s\u0105 parametrami wej\u015bciowymi tabeli wirtualnej, mog\u0105 by\u0107 r\u00f3wnie\u017c u\u017cywane w klauzuli WHERE do przesy\u0142ania parametr\u00f3w.<\/li>\n<li>U\u017cywanie agregat\u00f3w i innych funkcji SQL, klauzul GROUP BY i HAVING jest niedozwolone.<\/li>\n<\/ul>\n<h4 id=\"sortowanie-wynikow\" ><span class=\"ez-toc-section\" id=\"Sortowanie_wynikow\"><\/span>Sortowanie wynik\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Obs\u0142uga sortowania okre\u015blonego w klauzuli ORDER BY zale\u017cy od programisty konkretnej tabeli wirtualnej. Z regu\u0142y sortowanie jest definiowane przez programist\u0119, a okre\u015blona kolejno\u015b\u0107 sortowania jest ignorowana. Szczeg\u00f3\u0142y dotycz\u0105ce obs\u0142ugi sortowania mo\u017cna znale\u017a\u0107 w artykule dotycz\u0105cej konkretnej tabeli wirtualnej.<\/p>\n<h5 id=\"przypisywanie-parametrow-wejsciowych\" ><span class=\"ez-toc-section\" id=\"Przypisywanie_parametrow_wejsciowych\"><\/span>Przypisywanie parametr\u00f3w wej\u015bciowych<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>Klauzula WHERE mo\u017ce by\u0107 u\u017cywana do ustawiania warto\u015bci dla mo\u017cliwych parametr\u00f3w wej\u015bciowych tabeli wirtualnej. Nazwa kolumny, kt\u00f3ra mo\u017ce by\u0107 u\u017cyta jako parametr wej\u015bciowy, zaczyna si\u0119 od przedrostka <em>in_<\/em>. Nazwy kolumn musz\u0105 by\u0107 odpowiednio wybrane podczas programowania tabeli wirtualnej. Kilka parametr\u00f3w wej\u015bciowych do ustawienia musi by\u0107 po\u0142\u0105czonych za pomoc\u0105 AND. Tylko <em>=<\/em> jest dozwolone jako operacja ustawiania warto\u015bci parametru.<\/p>\n<p>Klauzula WHERE nie mo\u017ce zawiera\u0107 \u017cadnych innych warunk\u00f3w.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">Parametrowi wej\u015bciowemu <em>in_number<\/em> typu string przypisywana jest warto\u015b\u0107 A0010.<\/p>\n<p>&#8230; WHERE in_number = 'A0010&#8242;<\/div><\/section>\n<p>W celu obs\u0142ugi Crystal Reports i jego specjalnej funkcji podczas wybierania kolumn <em>TimeStamp<\/em> (brak obs\u0142ugi milisekund), istnieje wyj\u0105tek dla parametr\u00f3w wej\u015bciowych opartych na typie danych <em>TimeStamp<\/em>. W takim przypadku interwa\u0142 jest r\u00f3wnie\u017c dozwolony jako warunek w nast\u0119puj\u0105cej formie:<\/p>\n<p>in_timeStampAttr &gt;= dateValue1 AND timeStampAttr &lt; dateValue2<\/p>\n<p>Warto\u015b\u0107 dateValue1 jest przekazywana do tabeli wirtualnej dla parametru wej\u015bciowego in_timeStampAttr, inny warunek cz\u0119\u015bciowy jest ignorowany.<\/p>\n<h4 id=\"funkcje-wirtualne\" ><span class=\"ez-toc-section\" id=\"Funkcje_wirtualne\"><\/span>Funkcje wirtualne<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Funkcja wirtualna to specjalna tabela, kt\u00f3ra zwraca wiersz wynik\u00f3w dla zestawu warto\u015bci wej\u015bciowych, kt\u00f3ry jest obliczany w czasie wykonywania zapytania. Nie istnieje ona w bazie danych, ale jest emulowana przez SAS. Zazwyczaj jest u\u017cywana do dodawania dodatkowych kolumn do wyniku zapytania.<\/p>\n<p>Funkcja wirtualna jest zwykle \u0142\u0105czona z inn\u0105 tabel\u0105 bazy danych za pomoc\u0105 z\u0142\u0105czenia LEFT OUTER. Warunek z\u0142\u0105czenia s\u0142u\u017cy do okre\u015blenia przypisania warto\u015bci dla parametr\u00f3w wej\u015bciowych funkcji wirtualnej. Je\u015bli zapytanie zawiera JOIN, wynik zapytania jest najpierw okre\u015blany bez uwzgl\u0119dnienia funkcji wirtualnej w bazie danych. Warto\u015bci kolumn funkcji wirtualnej s\u0105 nast\u0119pnie obliczane dla ka\u017cdego wiersza wyniku. SAS oblicza warto\u015bci kolumn wyj\u015bciowych funkcji wirtualnej dla przypisania warto\u015bci parametr\u00f3w wej\u015bciowych okre\u015blonych przez warunek sprz\u0119\u017cenia. Kolumna, kt\u00f3ra mo\u017ce by\u0107 u\u017cyta jako parametr wej\u015bciowy, zaczyna si\u0119 od przedrostka <em>in_<\/em>. Warunek \u0142\u0105czenia nie mo\u017ce zawiera\u0107 \u017cadnych innych podwarunk\u00f3w.<\/p>\n<p>Funkcja wirtualna mo\u017ce by\u0107 u\u017cywana tylko w po\u0142\u0105czeniach, jak pokazano poni\u017cej:<\/p>\n<p>Tabela bazy danych <em>A<\/em> LEFT OUTER JOIN funkcja wirtualna VF ON A:columnName1 = VF:columnName1 [AND A:columnName2 = VF:columnName2]*<\/p>\n<p>virtual function VF RIGHT OUTER JOIN database table A ON A:columnName1 = VF:columnName1 [AND A:columnName2 = VF:columnName2]*<\/p>\n<p>Dopuszczalne jest do\u0142\u0105czenie kilku funkcji wirtualnych do tabeli bazy danych. Funkcja wirtualna mo\u017ce by\u0107 r\u00f3wnie\u017c po\u0142\u0105czona z inn\u0105 funkcj\u0105 wirtualn\u0105.<\/p>\n<p>Funkcja wirtualna mo\u017ce r\u00f3wnie\u017c stanowi\u0107 g\u0142\u00f3wn\u0105 stron\u0119 JOIN. W takim przypadku obowi\u0105zuj\u0105 te same ograniczenia, co w przypadku z\u0142\u0105cze\u0144 z tabelami wirtualnymi.<\/p>\n<p>Mo\u017cliwe jest r\u00f3wnie\u017c okre\u015blenie warto\u015bci dla parametr\u00f3w wej\u015bciowych funkcji wirtualnej za pomoc\u0105 klauzuli WHERE (analogicznie do tabeli wirtualnej). Warto\u015b\u0107 ustawiona w ten spos\u00f3b zast\u0119puje przypisanie warto\u015bci z warunku \u0142\u0105czenia. Obowi\u0105zuj\u0105 te same zasady przypisywania parametr\u00f3w, co w przypadku tabeli wirtualnej.<\/p>\n<p>Tabela widoku lub widoku OQL mo\u017ce by\u0107 u\u017cywana tylko w sprz\u0119\u017ceniu z funkcj\u0105 wirtualn\u0105 na stronie g\u0142\u00f3wnej sprz\u0119\u017cenia, poniewa\u017c jej zawarto\u015b\u0107 musi by\u0107 okre\u015blona w bazie danych.<\/p>\n<p>Funkcja wirtualna mo\u017ce by\u0107 r\u00f3wnie\u017c u\u017cywana samodzielnie w taki sam spos\u00f3b jak tabela wirtualna. Zapewnia ona jednak maksymalnie jeden wiersz wynik\u00f3w.<\/p>\n<p>Kolumny funkcji wirtualnej mog\u0105 by\u0107 u\u017cywane wy\u0142\u0105cznie do wy\u015bwietlania i formu\u0142owania warunk\u00f3w \u0142\u0105czenia. Ponadto kolumny, kt\u00f3re s\u0105 parametrami wej\u015bciowymi funkcji wirtualnej, mog\u0105 by\u0107 r\u00f3wnie\u017c u\u017cywane w klauzuli WHERE do przekazywania parametr\u00f3w.<\/p>\n<h4 id=\"automatyczna-optymalizacja-instrukcji-bazy-danych\" ><span class=\"ez-toc-section\" id=\"Automatyczna_optymalizacja_instrukcji_bazy_danych\"><\/span>Automatyczna optymalizacja instrukcji bazy danych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Instrukcje bazy danych wysy\u0142ane za po\u015brednictwem interfejsu bazy danych serwera aplikacji s\u0105 optymalizowane (w miar\u0119 mo\u017cliwo\u015bci) przed ich wykonaniem w bazie danych. Celem optymalizacji nie jest odczyt danych, kt\u00f3re mo\u017cna za\u0142o\u017cy\u0107, \u017ce s\u0105 buforowane przez serwer aplikacji z bazy danych, ale za\u0142adowanie ich z pami\u0119ci podr\u0119cznej serwera aplikacji. Z tego powodu podejmowana jest pr\u00f3ba usuni\u0119cia tabel obiekt\u00f3w biznesowych danych podstawowych z instrukcji bazy danych, poniewa\u017c s\u0105 one przechowywane w pami\u0119ci podr\u0119cznej. Uproszczona instrukcja bazy danych jest nast\u0119pnie wykonywana w bazie danych. Wymagane dane podstawowe s\u0105 nast\u0119pnie \u0142adowane za po\u015brednictwem us\u0142ugi trwa\u0142o\u015bci, wykorzystuj\u0105c wsp\u00f3\u0142dzielon\u0105 pami\u0119\u0107 podr\u0119czn\u0105 i dodawane do wyniku. Przestrzegaj\u0105c pewnych zasad podczas definiowania po\u0142\u0105cze\u0144 mi\u0119dzy tabelami bazy danych, mo\u017cna zwi\u0119kszy\u0107 szybko\u015b\u0107 wykonywania raport\u00f3w i zmniejszy\u0107 obci\u0105\u017cenie bazy danych.<\/p>\n<p>Tabela obiektu biznesowego jest usuwana z instrukcji bazy danych, je\u015bli spe\u0142nione s\u0105 nast\u0119puj\u0105ce warunki:<\/p>\n<ul>\n<li>Typ danych obiektu biznesowego to:\n<ul>\n<li>dane podstawowe<\/li>\n<li>konfiguracyjne dane podstawowe<\/li>\n<li>konfiguracyjne dane podstawowe (tylko do wy\u015bwietlania)<\/li>\n<\/ul>\n<\/li>\n<li>Oczekiwany rozmiar danych obiektu biznesowego to <em>Ma\u0142y<\/em> lub <em>\u015aredni<\/em>. Je\u015bli serwer aplikacji dzia\u0142a w trybie <em>Nieograniczony dost\u0119p <\/em>(pole dost\u0119pne w aplikacji <em>Panel system -&gt; Typ: Serwer aplikacji<\/em>), rozmiar danych nie jest brany pod uwag\u0119.<\/li>\n<li>Warunek \u0142\u0105czenia zosta\u0142 sformu\u0142owany tylko przy u\u017cyciu wszystkich atrybut\u00f3w klucza podstawowego lub klucza biznesowego obiektu biznesowego.<\/li>\n<li>Kolumny w tabeli s\u0105 u\u017cywane tylko do cel\u00f3w informacyjnych.<\/li>\n<li>W przypadku obiektu biznesowego zale\u017cnego od czasu dost\u0119pna jest tylko bie\u017c\u0105ca wersja.<\/li>\n<li>W\u0142a\u015bciwo\u015b\u0107 <em>com.cisag.sys.odbc.DisableJoinOptimisation<\/em> nie jest aktywna. Ta w\u0142a\u015bciwo\u015b\u0107 s\u0142u\u017cy do wy\u0142\u0105czania optymalizacji i nie jest ustawiona domy\u015blnie.<\/li>\n<\/ul>\n<h3 id=\"konfiguracja-serwera-aplikacji\" ><span class=\"ez-toc-section\" id=\"Konfiguracja_serwera_aplikacji\"><\/span>Konfiguracja serwera aplikacji<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Odpowiednie ustawienia dost\u0119pu za po\u015brednictwem interfejsu bazy danych mo\u017cna wprowadzi\u0107 w konfiguracji serwera aplikacji w <em>Panel system.<\/em> Poniewa\u017c dost\u0119p do interfejsu bazy danych za po\u015brednictwem JDBC jest nowszy, opcje konfiguracji s\u0105 oznaczone jako <em>ODBC<\/em>. Maj\u0105 one jednak r\u00f3wnie\u017c zastosowanie do dost\u0119pu JDBC.<\/p>\n<h4 id=\"dostep-odbc\" ><span class=\"ez-toc-section\" id=\"Dostep_ODBC\"><\/span>Dost\u0119p ODBC<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Za pomoc\u0105 pola <em>Dost\u0119p ODBC<\/em>\u00a0mo\u017cna okre\u015bli\u0107, czy dany serwer aplikacyjny ma obs\u0142ugiwa\u0107 zapytania poprzez interfejs bazy danych, a je\u015bli tak \u2013 w jakim trybie dost\u0119pu ma pracowa\u0107.<br data-start=\"372\" data-end=\"375\" \/>Dost\u0119pne s\u0105 dwa tryby: <em>Nieograniczony\u00a0<\/em>oraz <em>Ograniczony<\/em>.<\/p>\n<p class=\"\" data-start=\"183\" data-end=\"524\">Tryby te wp\u0142ywaj\u0105 na zachowanie serwera aplikacyjnego w kontek\u015bcie:<\/p>\n<ul data-start=\"525\" data-end=\"699\">\n<li class=\"\" data-start=\"525\" data-end=\"569\">\n<p class=\"\" data-start=\"527\" data-end=\"569\">liczby zajmowanych po\u0142\u0105cze\u0144 z baz\u0105 danych<\/p>\n<\/li>\n<li class=\"\" data-start=\"570\" data-end=\"699\">\n<p class=\"\" data-start=\"572\" data-end=\"699\">oraz zu\u017cycia pami\u0119ci operacyjnej podczas automatycznej optymalizacji instrukcji bazodanowych przesy\u0142anych przez interfejs ODBC<\/p>\n<\/li>\n<\/ul>\n<p class=\"\" data-start=\"701\" data-end=\"843\">Serwer aplikacyjny, kt\u00f3rego g\u0142\u00f3wnym zadaniem jest obs\u0142uga zapyta\u0144 przez interfejs bazy danych, powinien pracowa\u0107 w trybie N<em>ieograniczonym<\/em>.<\/p>\n<p data-start=\"850\" data-end=\"911\"><strong data-start=\"854\" data-end=\"911\">Ograniczenie liczby u\u017cywanych po\u0142\u0105cze\u0144 do bazy danych<\/strong><\/p>\n<p>Liczba po\u0142\u0105cze\u0144 z baz\u0105 danych u\u017cywanych jednocze\u015bnie w celu uzyskania dost\u0119pu do interfejsu bazy danych mo\u017ce by\u0107 ograniczona.<\/p>\n<p>W trybie:<\/p>\n<ul>\n<li>O<em>graniczonym <\/em>maksymalnie 50% mo\u017cliwych po\u0142\u0105cze\u0144 z baz\u0105 danych dla dost\u0119pu do interfejsu bazy danych jest u\u017cywanych jednocze\u015bnie. Zapewnia to, \u017ce inni u\u017cytkownicy mog\u0105 pracowa\u0107 interaktywnie z serwerem aplikacji.<\/li>\n<li><em>Nieograniczonym<\/em> wszystkie dost\u0119pne po\u0142\u0105czenia z baz\u0105 danych s\u0105 w razie potrzeby wykorzystywane do dost\u0119pu do interfejsu bazy danych. W rezultacie u\u017cytkownicy mog\u0105 nie by\u0107 w stanie pracowa\u0107 interaktywnie.<\/li>\n<\/ul>\n<h4 id=\"konfiguracja-hiperlaczy-dla-jednostek-biznesowych\" ><span class=\"ez-toc-section\" id=\"Konfiguracja_hiperlaczy_dla_jednostek_biznesowych\"><\/span>Konfiguracja hiper\u0142\u0105czy dla jednostek biznesowych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>W przypadku jednostek biznesowych do odpowiedniej tabeli dodawana jest specjalna kolumna <em>link_text<\/em>. Zawiera ona adres URL do wy\u015bwietlenia jednostki biznesowej w Comarch ERP Enterprise. Aby wygenerowa\u0107 adres URL, serwer aplikacji przetwarzaj\u0105cy \u017c\u0105danie interfejsu bazy danych musi by\u0107 odpowiednio skonfigurowany.<\/p>\n<p>W\u00a0 aplikacji <em>Panel system <\/em>po wybraniu typu <em>Serwer aplikacji<\/em>, w polu <em>Docelowy serwer dla atrybut\u00f3w linka <\/em>nale\u017cy okre\u015bli\u0107 serwer aplikacji, na kt\u00f3rym domy\u015blna aplikacja ma zosta\u0107 otwarta z instancj\u0105 obiektu biznesowego jako parametrem. Mo\u017ce to by\u0107 inny serwer aplikacji ni\u017c ten, kt\u00f3ry przetwarza \u017c\u0105danie interfejsu bazy danych. Musi on jednak mie\u0107 dost\u0119p do tej samej bazy danych.<\/p>\n<h3 id=\"uprawnienia\" ><span class=\"ez-toc-section\" id=\"Uprawnienia\"><\/span>Uprawnienia<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Uprawnienia do dost\u0119pu za po\u015brednictwem interfejsu bazy danych mog\u0105 by\u0107 definiowane na poziomie u\u017cytkownika i jednostki biznesowej.<\/p>\n<h4 id=\"uprawnieninia-na-poziomie-uzytkownika\" ><span class=\"ez-toc-section\" id=\"Uprawnieninia_na_poziomie_uzytkownika\"><\/span>Uprawnieninia na poziomie u\u017cytkownika<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Dost\u0119pne s\u0105 nast\u0119puj\u0105ce opcje umo\u017cliwiaj\u0105ce lub uniemo\u017cliwiaj\u0105ce u\u017cytkownikowi korzystanie z interfejsu bazy danych:<\/p>\n<table style=\"width: 100%; height: 92px;\">\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"236\"><strong>Prawo dost\u0119pu<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"123\"><strong>Obszar<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"181\"><strong>Opis<\/strong><\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"236\">com.cisag.sys.odbc.UseODBC<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"123\">Zarz\u0105dzanie systemem<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"181\">Korzystanie z ODBC<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"height: 46px; border-style: outset;\" width=\"236\">com.cisag.sys.odbc.UseOqlViews<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"123\">Zarz\u0105dzanie systemem<\/td>\n<td style=\"height: 46px; border-style: outset;\" width=\"181\">Korzystanie z widok\u00f3w OQL w ODBC<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h4 id=\"autoryzacja-na-poziomie-jednostki-biznesowej\" ><span class=\"ez-toc-section\" id=\"Autoryzacja_na_poziomie_jednostki_biznesowej\"><\/span>Autoryzacja na poziomie jednostki biznesowej<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Opr\u00f3cz mo\u017cliwo\u015bci, uprawnienia na poziomie jednostki biznesowej s\u0105 r\u00f3wnie\u017c oceniane podczas uzyskiwania dost\u0119pu za po\u015brednictwem interfejsu bazy danych. Tabele jednostek biznesowych i ich zale\u017cno\u015bci, do kt\u00f3rych zalogowany u\u017cytkownik nie ma uprawnie\u0144 dost\u0119pu za po\u015brednictwem interfejsu bazy danych, nie s\u0105 dla niego widoczne. Tabele wirtualne i funkcje wirtualne s\u0105 zwykle przypisane do jednostki biznesowej i dlatego dziedzicz\u0105 jej uprawnienia.<\/p>\n<h3 id=\"uwagi-dotyczace-modelowania\" ><span class=\"ez-toc-section\" id=\"Uwagi_dotyczace_modelowania\"><\/span>Uwagi dotycz\u0105ce modelowania<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>W dalszej cz\u0119\u015bci przekazane s\u0105 wskaz\u00f3wki w jaki spos\u00f3b odtworzy\u0107 modele danych w Comarch ERP Enterprise i jak unikn\u0105\u0107 b\u0142\u0119d\u00f3w w modelowaniu.<\/p>\n<h4 id=\"konwencje-nazewnictwa-zrodel-danych\" ><span class=\"ez-toc-section\" id=\"Konwencje_nazewnictwa_zrodel_danych\"><\/span>Konwencje nazewnictwa \u017ar\u00f3de\u0142 danych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Raporty standardowe s\u0105 powi\u0105zane ze standardowymi \u017ar\u00f3d\u0142ami danych okre\u015blonymi w tabeli:<\/p>\n<table style=\"width: 100%; height: 115px;\">\n<thead>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"168\"><strong>\u0179r\u00f3d\u0142o danych<\/strong><\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"372\"><strong>Uwaga<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"168\">OLTP<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"372\">Dane podstawowe i transakcyjne<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"168\">OLAP<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"372\">Statystyki i analizy biznesowe<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"168\">Repozytorium<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"372\">Dane i opisy dotycz\u0105ce ca\u0142ego systemu<\/td>\n<\/tr>\n<tr style=\"height: 23px;\">\n<td style=\"height: 23px; border-style: outset;\" width=\"168\">Baza konfiguracyjna<\/td>\n<td style=\"height: 23px; border-style: outset;\" width=\"372\">Ustawienia konfiguracyjne<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>W zwi\u0105zku z tym powi\u0105zane \u017ar\u00f3d\u0142a danych musz\u0105 zosta\u0107 skonfigurowane na komputerze klienckim. Alternatywnie, \u017ar\u00f3d\u0142o danych, kt\u00f3re ma by\u0107 u\u017cywane w raporcie, mo\u017cna zmieni\u0107 w aplikacji raportu. Szczeg\u00f3\u0142owe informacje na temat aplikacji <em>Raporty<\/em> mo\u017cna znale\u017a\u0107 w artykule <em><a href=\"https:\/\/pomoc.comarch.pl\/cee\/index.php\/documentation\/raporty\/\">Raporty<\/a><\/em>.<\/p>\n<h4 id=\"ograniczenia-podczas-odpytywania-wielu-baz-danych-oltp\" ><span class=\"ez-toc-section\" id=\"Ograniczenia_podczas_odpytywania_wielu_baz_danych_OLTP\"><\/span>Ograniczenia podczas odpytywania wielu baz danych OLTP<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Ze wzgl\u0119d\u00f3w technicznych, w przypadku interaktywnego dost\u0119pu ODBC, tj. w aplikacji zewn\u0119trznej, takiej jak Crystal Reports, po wybraniu \u017ar\u00f3d\u0142a danych systemu ERP dla bazy danych OLTP nie mo\u017cna go zmieni\u0107. Oznacza to, \u017ce w przypadku zapytania do innej bazy danych OLTP, aplikacja raportuj\u0105ca musi zosta\u0107 zamkni\u0119ta i uruchomiona ponownie. Alternatywnie mo\u017cna otworzy\u0107 drug\u0105 instancj\u0119 aplikacji.<\/p>\n<p>Raport nie mo\u017ce zatem wysy\u0142a\u0107 zapyta\u0144 do wielu baz danych OLTP, gdy jest wykonywany za po\u015brednictwem interaktywnego sterownika ODBC systemu ERP. Raport mo\u017ce jednak jednocze\u015bnie odpytywa\u0107 baz\u0119 danych OLTP, repozytorium, konfiguracyjn\u0105 oraz baz\u0119 danych OLAP nale\u017c\u0105c\u0105 do bazy danych OLTP.<\/p>\n<p>Ograniczenie to dotyczy tylko dost\u0119pu interaktywnego, ale nie danych wyj\u015bciowych raportu przy u\u017cyciu Mened\u017cera danych wyj\u015bciowych systemu ERP (SOM).<\/p>\n<h4 id=\"wizualizacja-modelu-danych\" ><span class=\"ez-toc-section\" id=\"Wizualizacja_modelu_danych\"><\/span>Wizualizacja modelu danych<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p class=\"\" data-start=\"126\" data-end=\"348\">Aby uzyska\u0107 informacje o modelu danych dla danego obiektu biznesowego, pomocne jest sprawdzenie jego metadanych w aplikacji <em>Obiekty deweloperskie. <\/em>Alternatywnym sposobem wy\u015bwietlenia metadanych obiektu biznesowego jest u\u017cycie menu kontekstowego pola typu Entity \u2013 poprzez opcj\u0119 <em>Obiekt deweloperski<\/em>.<\/p>\n<p>Metadane zawieraj\u0105 informacje o atrybutach, typach danych, indeksach, relacjach i innych w\u0142a\u015bciwo\u015bciach obiektu biznesowego.<\/p>\n<p>Aplikacja <em>Diagramy modelu danych<\/em> mo\u017ce by\u0107 u\u017cywana do uzyskania graficznej reprezentacji modelu danych dla zestawu obiekt\u00f3w biznesowych. Szczeg\u00f3\u0142owe informacje mo\u017cna znale\u017a\u0107 w artykule <em>Diagramy modelu danych<\/em>.<\/p>\n<h4 id=\"model-danych-raportu\" ><span class=\"ez-toc-section\" id=\"Model_danych_raportu\"><\/span>Model danych raportu<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Model danych Comarch ERP Enterprise jest z\u0142o\u017cony i zgodny z zasadami projektowania obiektowo-relacyjnego. W zwi\u0105zku z tym, podczas tworzenia raport\u00f3w, programista szybko staje przed konieczno\u015bci\u0105 pracy z du\u017c\u0105 liczb\u0105 tabel, do kt\u00f3rych raport uzyskuje dost\u0119p.\u00a0Opr\u00f3cz braku przejrzysto\u015bci, mo\u017ce to r\u00f3wnie\u017c prowadzi\u0107 do problem\u00f3w z wydajno\u015bci\u0105, poniewa\u017c operacja \u0142\u0105czenia mi\u0119dzy tabelami jest kosztown\u0105 operacj\u0105 bazy danych. Z\u0142o\u017cono\u015b\u0107 raportu powinna by\u0107 zatem zminimalizowana. Ponadto nale\u017cy zadba\u0107 o to, aby z\u0142\u0105czenia mi\u0119dzy tabelami by\u0142y sformu\u0142owane w taki spos\u00f3b, aby automatyczna optymalizacja z\u0142\u0105cze\u0144 upraszcza\u0142a wynikow\u0105 instrukcj\u0119 SQL, a w rezultacie mo\u017cna by\u0142o wykorzysta\u0107 pami\u0119\u0107 podr\u0119czn\u0105 serwera aplikacji.<\/p>\n<h5 id=\"korzystanie-ze-specjalnych-kolumn\" ><span class=\"ez-toc-section\" id=\"Korzystanie_ze_specjalnych_kolumn\"><\/span>Korzystanie ze specjalnych kolumn<span class=\"ez-toc-section-end\"><\/span><\/h5>\n<p>W przypadku u\u017cycia wszystkich wymaganych tabel do sformu\u0142owania zapytania, mog\u0142oby to szybko doprowadzi\u0107 do z\u0142o\u017conego modelu 10-15 tabel. Na przyk\u0142ad baza zam\u00f3wie\u0144 sprzeda\u017cy (CISAG<sup>@<\/sup> ENTITY.app_sales_SalesOrder) zawiera oko\u0142o 90 odwo\u0142a\u0144 do innych tabel. Wi\u0119kszo\u015b\u0107 tych odniesie\u0144 wskazuje na powszechnie u\u017cywane obiekty biznesowe, takie jak waluty, typy zam\u00f3wie\u0144, jednostki itp. W tym miejscu nale\u017cy zawsze sprawdzi\u0107, czy kolumny dodane do tabeli przez interfejs bazy danych dla opis\u00f3w (sufiksy <em>_txt<\/em> lub <em>_BK<\/em>) mog\u0105 by\u0107 u\u017cywane w raporcie zamiast formu\u0142owania JOIN z odpowiedni\u0105 tabel\u0105.<\/p>\n<h3 id=\"zdenormalizowany-obiekt-biznesowy\" ><span class=\"ez-toc-section\" id=\"Zdenormalizowany_obiekt_biznesowy\"><\/span>Zdenormalizowany obiekt biznesowy<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Comarch ERP Enterprise w niekt\u00f3rych miejscach denormalizuje model danych, tj. zachowuje kopie. Powodem tego jest wydajno\u015b\u0107 w dost\u0119pie do danych oraz archiwizacja danych transakcyjnych (np. dane podstawowe klient\u00f3w w bazie zam\u00f3wie\u0144).<\/p>\n<section class=\"document-alert-box warning\"><div class=\"document-alert-title\">Uwaga<\/div><div class=\"document-alert-content\">Je\u015bli odpowiednie atrybuty istniej\u0105 w kopii, zaleca si\u0119 prac\u0119 z kopi\u0105 w celu zachowania jak najprostszego modelu danych.<\/div><\/section>\n<h3 id=\"komunikaty-o-bledach\" ><span class=\"ez-toc-section\" id=\"Komunikaty_o_bledach\"><\/span>Komunikaty o b\u0142\u0119dach<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>B\u0142\u0119dy wyst\u0119puj\u0105ce podczas dost\u0119pu za po\u015brednictwem interfejsu bazy danych s\u0105 rejestrowane za pomoc\u0105 komunikat\u00f3w o b\u0142\u0119dach. Mo\u017ce si\u0119 to zdarzy\u0107 w r\u00f3\u017cnych punktach i ma miejsce w trybie SOM oraz gdy interfejs bazy danych jest u\u017cywany interaktywnie.<\/p>\n<p>B\u0142\u0119dy, kt\u00f3re wyst\u0105pi\u0142y w serwerze aplikacji, s\u0105 zapisywane w dzienniku systemowym serwera aplikacji, kt\u00f3ry wykonuje dost\u0119p do interfejsu bazy danych i nale\u017c\u0105 do klasy komunikat\u00f3w ODS. Mo\u017cna je przegl\u0105da\u0107 za pomoc\u0105 aplikacji <em>Rejestr komunikat\u00f3w<\/em>.<\/p>\n<p>SAS wysy\u0142a r\u00f3wnie\u017c wszystkie komunikaty o b\u0142\u0119dach do interfejsu bazy danych. Sterownik ODBC systemu ERP wprowadza do dziennika zdarze\u0144 systemu Windows komunikaty otrzymane od SAS, a tak\u017ce komunikaty o b\u0142\u0119dach, kt\u00f3re wyst\u0105pi\u0142y w samym sterowniku. B\u0142\u0119dy wyst\u0119puj\u0105ce w sterowniku to zwykle komunikaty wskazuj\u0105ce na b\u0142\u0119dy komunikacji z serwerem ODBC. Sterownik JDBC generuje b\u0142\u0119dy w postaci wyj\u0105tk\u00f3w SQL.<\/p>\n<p>W trybie SOM komunikaty o b\u0142\u0119dach s\u0105 r\u00f3wnie\u017c wprowadzane do komunikat\u00f3w o stanie powi\u0105zanego \u017c\u0105dania wyj\u015bciowego, dzi\u0119ki czemu wskazanie przyczyny b\u0142\u0119du jest widoczne bezpo\u015brednio na \u017c\u0105daniu wyj\u015bciowym. Powinien to by\u0107 pierwszy punkt kontaktu w celu okre\u015blenia przyczyny b\u0142\u0119du.<\/p>\n<p>W trybie interaktywnym komunikaty o b\u0142\u0119dach s\u0105 udost\u0119pniane aplikacji ODBC (np. Crystal Reports) za po\u015brednictwem interfejsu API ODBC, dzi\u0119ki czemu mo\u017cna je wy\u015bwietla\u0107 bezpo\u015brednio w aplikacji za pomoc\u0105 okien dialogowych.<\/p>\n<h4 id=\"najczestsze-przyczyny-bledow\" ><span class=\"ez-toc-section\" id=\"Najczestsze_przyczyny_bledow\"><\/span>Najcz\u0119stsze przyczyny b\u0142\u0119d\u00f3w<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Wiele b\u0142\u0119d\u00f3w wyst\u0119puje z powodu nieudanej lub anulowanej komunikacji mi\u0119dzy zaanga\u017cowanymi serwerami. Przyczyny tego s\u0105 cz\u0119sto nast\u0119puj\u0105ce: system zosta\u0142 nieprawid\u0142owo skonfigurowany, serwer aplikacji nie dzia\u0142a lub zosta\u0142 ponownie uruchomiony podczas generowania raportu lub certyfikat jest nieprawid\u0142owy. W przypadku pracy interaktywnej mo\u017cliw\u0105 przyczyn\u0105 s\u0105 r\u00f3wnie\u017c nieaktualne \u017ar\u00f3d\u0142a danych ODBC. Komunikaty o b\u0142\u0119dach komunikacji nie s\u0105 rejestrowane w dziennikach komunikat\u00f3w ODBC-SAS, poniewa\u017c w momencie wyst\u0105pienia b\u0142\u0119du nie ma po\u0142\u0105czenia.<\/p>\n<p>Inne b\u0142\u0119dy s\u0105 spowodowane brakiem uprawnie\u0144 ODBC u\u017cytkownika u\u017cywanego do dost\u0119pu ODBC lub dost\u0119p ODBC nie jest dozwolony na serwerze aplikacji u\u017cywanym do dost\u0119pu ODBC.<\/p>\n<p>Wiele komunikat\u00f3w o b\u0142\u0119dach pojawiaj\u0105cych si\u0119 podczas tworzenia raport\u00f3w dotyczy ogranicze\u0144 opisanych w tym dokumencie dotycz\u0105cych korzystania ze specjalnych kolumn obiekt\u00f3w biznesowych i typ\u00f3w danych, a tak\u017ce tabel\/funkcji wirtualnych.<\/p>\n<h3 id=\"sterownik-jdbc\" ><span class=\"ez-toc-section\" id=\"Sterownik_JDBC\"><\/span>Sterownik JDBC<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Opr\u00f3cz sterownika ODBC, sterownik JDBC jest kolejnym interfejsem do baz danych systemu Comarch ERP Enterprise. Sterownik JDBC oferuje ten sam model danych co sterownik ODBC, kt\u00f3ry r\u00f3wnie\u017c jest przeznaczony tylko do odczytu. Wszystkie ustawienia skonfigurowane w aplikacji <em>Panel system<\/em>\u00a0dla dost\u0119pu ODBC dotycz\u0105 r\u00f3wnie\u017c dost\u0119pu JDBC.<\/p>\n<h4 id=\"instalacja-sterownika-jdbc\" ><span class=\"ez-toc-section\" id=\"Instalacja_sterownika_JDBC\"><\/span>Instalacja sterownika JDBC<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Sterownik JDBC jest dostarczany i aktualizowany jako plik <span style=\"color: #000000;\">instalacyjny\u00a0<\/span><em>com.cisag.sys.delivery.Install-JDBC-Driver<\/em> w postaci pliku <em>zip<\/em>. Plik <em>files\/install\/jdbc\/jdbc-driver.zip<\/em> nale\u017cy rozpakowa\u0107 odpowiednim programem archiwizuj\u0105cym z folderu serwera plik\u00f3w systemu Comarch ERP Enterprise. Wszystkie rozpakowane pliki <em>jar<\/em> musz\u0105 znajdowa\u0107 si\u0119 w \u015bcie\u017cce klas. Implementacja sterownika JDBC znajduje si\u0119 w pliku <em>semiramisjdbc.jar<\/em>.<\/p>\n<h4 id=\"konfiguracja-polaczenia-jdbc\" ><span class=\"ez-toc-section\" id=\"Konfiguracja_polaczenia_JDBC\"><\/span>Konfiguracja po\u0142\u0105czenia JDBC<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Sterownik JDBC komunikuje si\u0119 z serwerem aplikacji za po\u015brednictwem protoko\u0142u HTTPS. Aby sterownik JDBC m\u00f3g\u0142 nawi\u0105za\u0107 po\u0142\u0105czenie, nale\u017cy utworzy\u0107 plik magazynu kluczy zawieraj\u0105cy nast\u0119puj\u0105ce informacje:<\/p>\n<ul>\n<li>klucz publiczny Comarch ERP Enterprise (g\u0142\u00f3wny urz\u0105d certyfikacji)<\/li>\n<li>certyfikat u\u017cytkownika<\/li>\n<\/ul>\n<p>Plik magazynu kluczy mo\u017cna utworzy\u0107 za pomoc\u0105 narz\u0119dzia wiersza polece\u0144 Java <em>keytool<\/em> lub za pomoc\u0105 aplikacji kreatora, takiej jak KeyStore Explorer, i musi by\u0107 typu <em>JKS<\/em>.<\/p>\n<p>Interfejs Java do nawi\u0105zywania po\u0142\u0105czenia JDBC (java.sql.Connection) oczekuje dw\u00f3ch szczeg\u00f3\u0142\u00f3w: adresu URL po\u0142\u0105czenia i specyfikacji w\u0142a\u015bciwo\u015bci.<\/p>\n<p>Adres URL po\u0142\u0105czenia musi zaczyna\u0107 si\u0119 od prefiksu protoko\u0142u <em>jdbc:semiramis:<\/em>, po kt\u00f3rym nast\u0119puje adres URL do SAS. Adres URL jest taki sam, jak adres u\u017cywany do konfigurowania \u017ar\u00f3d\u0142a danych ODBC. Mo\u017cna go zatem skopiowa\u0107 z okna dialogowego tworzenia \u017ar\u00f3d\u0142a danych ODBC.<\/p>\n<section class=\"document-alert-box example\"><div class=\"document-alert-title\">Przyk\u0142ad<\/div><div class=\"document-alert-content\">jdbc:semiramis:https:\/\/sas.company.com?db=02E01C3889C4281092CAAC1BA84F0000&amp;ou=00001E493E981F109F59846496160000&amp;cl=de<\/div><\/section>\n<p>W\u0142a\u015bciwo\u015bci s\u0105 parami klucz-warto\u015b\u0107 dla wymaganych informacji konfiguracyjnych. Sterownik JDBC rozpoznaje nast\u0119puj\u0105ce w\u0142a\u015bciwo\u015bci:<\/p>\n<table style=\"width: 98.7144%; height: 720px;\" width=\"548\">\n<thead>\n<tr style=\"height: 22px;\">\n<td style=\"width: 278px; height: 22px; border-style: outset;\" width=\"183\"><strong>Klucz<\/strong><\/td>\n<td style=\"width: 278px; height: 22px; border-style: outset;\" width=\"183\"><strong>Opis<\/strong><\/td>\n<td style=\"width: 278px; height: 22px; border-style: outset;\" width=\"183\"><strong>Wymagan<\/strong>e<\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr style=\"height: 46px;\">\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">keystore.file<\/td>\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">Pe\u0142na \u015bcie\u017cka do pliku magazynu kluczy<\/td>\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">Tak<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">keystore.password<\/td>\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">Has\u0142o do otwarcia magazynu kluczy<\/td>\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">Tak<\/td>\n<\/tr>\n<tr style=\"height: 46px;\">\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">certificate.password<\/td>\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">Has\u0142o certyfikatu u\u017cytkownika w magazynie kluczy<\/td>\n<td style=\"width: 278px; height: 46px; border-style: outset;\" width=\"183\">Tak<\/td>\n<\/tr>\n<tr style=\"height: 140px;\">\n<td style=\"width: 278px; height: 140px; border-style: outset;\" width=\"183\">loglevel<\/td>\n<td style=\"width: 278px; height: 140px; border-style: outset;\" width=\"183\">Poziom logowania, je\u015bli logowanie ma by\u0107 aktywowane w sterowniku JDBC. Mo\u017cliwe warto\u015bci: INFO, WARNING, CONFIG, SEVERE, FINE, FINEST. Domy\u015bln\u0105 warto\u015bci\u0105 jest INFO.<\/td>\n<td style=\"width: 278px; height: 140px; border-style: outset;\" width=\"183\">Nie<\/td>\n<\/tr>\n<tr style=\"height: 210px;\">\n<td style=\"width: 278px; height: 210px; border-style: outset;\" width=\"183\">logname<\/td>\n<td style=\"width: 278px; height: 210px; border-style: outset;\" width=\"183\">Prefiks pliku dziennika. Jest zapisywany przed nazw\u0105 pliku, je\u015bli zosta\u0142a ona okre\u015blona. Plik dziennika jest zapisywany w katalogu domowym u\u017cytkownika. Je\u015bli kilka aplikacji nawi\u0105\u017ce po\u0142\u0105czenie JDBC, odpowiedni plik dziennika mo\u017cna przypisa\u0107 do aplikacji za pomoc\u0105 prefiksu.<\/td>\n<td style=\"width: 278px; height: 210px; border-style: outset;\" width=\"183\">Nie<\/td>\n<\/tr>\n<tr style=\"height: 140px;\">\n<td style=\"width: 278px; height: 140px; border-style: outset;\" width=\"183\">user<\/td>\n<td style=\"width: 278px; height: 140px; border-style: outset;\" width=\"183\">Nazwa u\u017cytkownika do logowania za pomoc\u0105 nazwy u\u017cytkownika\/has\u0142a zamiast certyfikatu. Jest to nazwa u\u017cytkownika Comarch ERP Enterprise.<\/td>\n<td style=\"width: 278px; height: 140px; border-style: outset;\" width=\"183\">Tylko je\u015bli certyfikat u\u017cytkownika nie jest przechowywany w magazynie kluczy, poniewa\u017c logowanie ma odbywa\u0107 si\u0119 za pomoc\u0105 nazwy u\u017cytkownika\/has\u0142a.<\/td>\n<\/tr>\n<tr style=\"height: 70px;\">\n<td style=\"width: 278px; height: 70px; border-style: outset;\" width=\"183\">password<\/td>\n<td style=\"width: 278px; height: 70px; border-style: outset;\" width=\"183\">Has\u0142o u\u017cytkownika.<\/td>\n<td style=\"width: 278px; height: 70px; border-style: outset;\" width=\"183\">Tylko je\u015bli logowanie odbywa si\u0119 przy u\u017cyciu nazwy u\u017cytkownika\/has\u0142a.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"author":29,"comment_status":"closed","ping_status":"closed","template":"","format":"standard","meta":{"footnotes":""},"class_list":["post-8301","ht_kb","type-ht_kb","status-publish","format-standard","hentry","ht_kb_category-zewnetrzne-interfejsy","ht_kb_category-interfejsy-programistyczne"],"_links":{"self":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/8301","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb"}],"about":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/types\/ht_kb"}],"author":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/users\/29"}],"replies":[{"embeddable":true,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/comments?post=8301"}],"version-history":[{"count":18,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/8301\/revisions"}],"predecessor-version":[{"id":31538,"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/ht_kb\/8301\/revisions\/31538"}],"wp:attachment":[{"href":"https:\/\/pomoc.comarch.pl\/cee\/640\/index.php\/wp-json\/wp\/v2\/media?parent=8301"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}