Konfiguracja funkcjonalności

Rozszerzalność aplikacji

Istnieje możliwość modyfikacji standardowego wyglądu oraz działania aplikacji poprzez integracje z zewnętrzną aplikacją. Możliwości, jakie daje funkcjonalność to:
  • rozszerzanie górnego paska aplikacji (ActionBara) w głównym oknie listy kontrahentów o nowe elementy, rozszerzanie ActionBara w oknie dokumentu, pozycji dokumentu, raportu, terminarza, zlecenia serwisowego, czynności serwisowych o nowe elementy,
  • rozszerzanie dużej kalkulacji pozycji na dokumentach (ukrywanie kontrolek, dodawanie nowych,
  • modyfikacja istniejących np. poprzez zmianę tekstu lub koloru),
  • rozszerzanie karty kontrahenta (ukrywanie kontrolek, dodawanie nowych oraz modyfikacja istniejących).
Oprócz zmiana interfejsowych możliwe jest także rozszerzanie procesu synchronizacji o nowe elementy, w celu prze synchronizowania dodatkowych tabel/obiektów z systemu ERP. Więcej informacji i rozszerzalności aplikacji znajduje się TUTAJ.

Ukrywanie i zmiana kolejności elementów w aplikacji

Istnieje możliwość ukrywania oraz zmiany kolejności elementów aplikacji. Poszczególne elementy można ukrywać dokonując zmian w pliku ListPositions, znajdującym się w katalogu: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\ViewsConfiguration. Poszczególne sekcje w pliku odpowiadają za ukrywanie:
  • elementów menu głównego aplikacji:
<activity name=”comarch.mobile.vendor.core.activities.MainActivity”>
  • danych na karcie kontrahenta:
<activity name=”com.comarch.mobile.vendor.core.adapters.ContractorAdapter”>
  • danych na karcie dodawania nowego kontrahenta:
<activity name=”com.comarch.mobile.vendor.core.fragments.AddContractorFragment”>
  • danych na dokumencie:
<activity name=”com.comarch.mobile.vendor.documents.adapters.DocumentHeaderAdapter”>
  • danych na pozycji dokumentu:
<activity name=”com.comarch.mobile.vendor.documents.controls.DocumentPositionHeaderLinearLayout”>
  • danych na pozycji dokumentu RLS:
<activity name=”com.comarch.mobile.vendor.documents.controls.ComplaintDocumentPositionHeaderLinearLayout”>
Przyklad
Aby ukryć element menu głównego Dzień należy zmienić wpis “VISIBLE” na “INVISIBLE”, np: <position name="DAY" visibility="INVISIBLE" />
Jeżeli natomiast chodzi o zmianę kolejności elementów w aplikacji, to należy zmienić kolejność wierszy w pliku ListPositions. Po wykonaniu synchronizacji elementy w aplikacji powinny wyświetlić się w nowej kolejności. Istnieje także możliwość przypisania konkretnego widoku aplikacji dla konkretnego użytkownika. W tym celu należy w katalogu ViewsConfiguration utworzyć nowy folder o nazwie danego użytkownika i wkleić zmodyfikowany plik ListPositions.xml.

Przyklad

Uproszczenie menu głównego do takiego jakie było w pierwszej wersji aplikacji Comarch Mobile Sprzedaż (widoczne elementy: Kontrahenci i Terminarz)

Ukrywanie elementów w menu głównym (z prawej strony: okno menu głównego przed zmianami, z lewej: okno menu głównego po zmianach)
Fragment pliku ListPosition po zmianach: <activity name="com.comarch.mobile.vendor.core.activities.MainActivity"> <position name="DAY" visibility="INVISIBLE" /> <position name="CALENDAR" visibility="VISIBLE" /> <position name="CONTRACTORS" visibility="VISIBLE" /> <position name="MESSAGES" visibility="INVISIBLE" /> <position name="SERVICE" visibility="INVISIBLE" /> <position name="DOCUMENTS" visibility="INVISIBLE" /> <position name="ITEMS" visibility="INVISIBLE" /> <position name="CASH" visibility="INVISIBLE" /> <position name="REPORTS" visibility="INVISIBLE" /> <position name="SYNC" visibility="VISIBLE" /> <position name="SYNCSTATE" visibility="VISIBLE" />

Dodawanie niestandardowego filtra do listy

Dodawanie filtra

W celu dodania niestandardowego filtra do listy towarów lub kontrahentów należy przygotować odpowiedni plik xml i umieścić go na serwerze synchronizacji.
Wskazówka
Definicje filtrów znajdują się domyślnie w katalogu: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\CustomFilters.
 

Usuwanie filtra

Aby usunąć dodany filtr należy zmienić jego ID na ujemne, następnie zmienić datę modyfikacji (np. poprzez ponowne zapisanie pliku z filtrem) i wykonać synchronizację.
Nazwa usuwanej definicji filtra
 

Elementy składowe filtra

Każda definicja filtra składa się z klauzuli wstępnej języka xml: <?xml version="1.0" encoding="UTF-8"?>, po której w sekcji customFilter z parametrem objectType o odpowiedniej wartości: contractorsList (filtr pojawi się na liście kontrahentów) lub itemsList (filtr pojawi się na liście towarów) następują wymienione poniżej sekcje:
  • joinClause (np. JOIN Visits ON Contractors.Id = Visits.ContractorId)
  • whereClause (np. Visits.PlannedStartDate &lt; @@CUSTOM_FILTER_VALUE@@)
  • groupByClause (np. Visits.ContractorId)
  • havingClause
  • inputType (możliwe wartości: text, date)
Sekcje te (oprócz inputType) są częścią zapytania wykonywanego przez aplikację mobilną w celu wyświetlenia elementów listy towarów bądź listy kontrahentów (np. SELECT * FROM Contractors [joinClause] [whereClause] [groupByClause] [havingClause]). Wartość parametru inputType podawana przez użytkownika aplikacji po wyborze filtra pobierana jest do zapytania SQL za pomocą parametru @@CUSTOM_FILTER_VALUE@@.
Uwaga
Podczas synchronizacji definicji filtrów na urządzenie brana jest pod uwagę data modyfikacji pliku. W celu wymuszenia synchronizacji filtra należy wykonać dowolną modyfikację i zapisać ponownie plik z definicją.
 

Przykład

Poniższa definicja filtra pozwala na wyświetlanie na liście kontrahentów tylko tych, na których zostały wystawione dokumenty z datą realizacji późniejszą niż wskazana w parametrze filtra.
<?xml version="1.0" encoding="UTF-8"?>

<customFilter objectType="contractorsList">
<joinClause>LEFT JOIN Documents ON Contractors.Id = Documents.MainContractorId</joinClause>
<whereClause>Documents.ExecutionDate &gt; '@@CUSTOM_FILTER_VALUE@@'</whereClause>
<inputType>date</inputType>
</customFilter>    
Tak zdefiniowany filtr zapisany w katalogu CustomFilters pod nazwą 2#Data realizacji po.xml, po synchronizacji w aplikacji mobilnej prezentuje się w następujący sposób:
Widok utworzonego filtra w aplikacji

Kontrahenci

Ustawienie domyślnej waluty na karcie kontrahenta

W aplikacji Comarch Mobile Zakupy istnieje możliwość ustawienia domyślnej waluty, która będzie wyświetlana na karcie kontrahenta. Walutę ustawia się w zakładce [Handlowe], w sekcji [Domyślne warunki handlowe].
Informacja o domyślnej walucie na karcie kontrahenta w systemie Comarch ERP Altum
Operator, który ma uprawnienia do edycji karty kontrahenta może również zmieniać rodzaj waluty na tej karcie. Uprawnienie to nadaje się w systemie Comarch ERP Altum na grupie operatorów, w zakładce [Obiekty- Kontrahent: Modyfikacja].

Załączniki

Do Comarch Mobile Zakupy są pobierane te załączniki, które:
  • Jako Właściciela załącznika mają ustawioną opcję [Wszyscy] lub [Firmę], do której przypięte jest centrum mobilne,
  • Mają ustawioną dostępność w Mobile.
Ustawienie dostępności załącznika
Uwaga
Aby zdjęcia mogły się poprawnie wyświetlać na urządzeniu i nie powodowały przepełnienia pamięci, w czasie synchronizacji są automatycznie zmniejszane do rozmiarów x na 1024 pikseli. Niektóre urządzenia umożliwiają jednak bezproblemową obsługę większych zdjęć. Aby zmienić wielkość synchronizowanych zdjęć należy w katalogu [Methods] w folderze serwera Comarch Mobile Zakupy odnaleźć plik [articlesphotos] i wyedytować go w notatniku, podając długość dłuższej krawędzi zdjęcia.
W aplikacji Comarch Mobile została jest możliwość dodawania załączników z poziomu aplikacji. Opcja ta dotyczy następujących obiektów:
  • Karty kontrahenta,
  • Karty towaru,
  • Nagłówka następujących dokumentów: ZZ, OZ
  • Pozycji następujących dokumentów: ZZ, OZ
W celu usprawnienia synchronizacji zostały dodane ustawienia umożliwiające ręczne sterowanie takimi parametrami synchronizacji załączników jak automatyczna zmiana rozmiaru zdjęć czy ich kompresja. W pliku articlesphotos.configuration znajdującym się w folderze (…)\Comarch Mobile\Serwer synchronizacji\Methods\articlesphotos dostępne są następujące parametry:
  • Size – maksymalny rozmiar boku zdjęcia (w pikselach) w przypadku włączonej opcji automatycznej zmiany rozmiaru załącznika
  • DoResize – czy ma być wykonana automatyczna zmiana wielkości załączników. Wartość domyślna – True. Wyłączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Jeżeli jednak na bazie systemu ERP znajduje się duża liczba załączników w wysokiej rozdzielczości, zmiana parametru może skutkować znacznym zwiększeniem rozmiaru paczki do pobrania w synchronizacji.
  • DoCompression – czy ma być wykonana automatyczna kompresja załączników. Wartość domyślna – True. Wyłączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Jeżeli jednak na bazie systemu ERP znajduje się duża liczba nieskompresowanych załączników, zmiana parametru może skutkować znacznym zwiększeniem rozmiaru paczki do pobrania w synchronizacji.
  • MultiThreading – wielowątkowe tworzenie pliku wymiany z załącznikami. Wartość domyślna – False. Włączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Użycie trybu może skutkować wzrostem obciążenia CPU, szczególnie w momencie wykonywania pierwszej synchronizacji załączników jednocześnie przez kilku operatorów.
Uwaga
Przed zmianą parametrów synchronizacji na środowisku produkcyjnym zaleca się zbadanie ich wpływu na środowisku testowym, w celu dobrania optymalnych wartości dla danej bazy danych

Ukrywanie kwoty przyznanego i wykorzystanego limitu kredytowego kontrahenta

W aplikacji Comarch Mobile Zakupy istnieje możliwość ukrywania niektórych informacji dotyczących limitu kredytowego, takich jak:
  • Wartość bieżącego limitu kredytowego,
  • Wykorzystana kwota limitu kredytowego,
  • Dozwolona ilość po przekroczeniu terminu,
  • Kwota następnego limitu kredytowego,
  • Dozwolona wielkość po przekroczeniu terminu dla następnego limitu kredytowego.
Umożliwiono również pobieranie limitów kredytowych w walutach obcych. Jeżeli limit kredytowy dla danego kontrahenta został zdefiniowany w systemie w innej walucie i na karcie Kontrahenta waluta obca ustawiona jest jako domyślna wówczas limit kredytowy na karcie Kontrahenta w aplikacji wyświetla się w walucie obcej.
Ustawienie limitu kredytowego na kontrahencie
Ustawienie domyślnej waluty na karcie kontrahenta
W plikach konfiguracyjnych znajdujących się w katalogu Comarch Mobile\Serwer synchronizacji\Methods znajduje się parametr  [IsContractorsCreditLimitsValueVisible], odpowiedzialny za ukrywanie/odkrywanie informacji o przyznanej oraz wykorzystanej kwocie limitu. Dzięki tej funkcjonalności przedstawiciel handlowy będzie miał dostęp tylko do kwoty limitu pozostającej do wykorzystania przez kontrahenta oraz kwot dozwolonych po terminie i przeterminowanych. Domyślna wartość tego parametru jest wartość „1”. Więcej informacji nt. tego parametru znajduje się TUTAJ.

Obsługa programów lojalnościowych

W aplikacji Comarch Mobile Zakupy jest możliwość obsługi programów lojalnościowych. Umożliwiono pobieranie z systemu ERP punktów lojalnościowych zgromadzonych na kontach określonych kontrahentów za zakup poszczególnych towarów. Zebrane punkty mogą zostać wykorzystane w aplikacji mobilnej do nadania rabatów. Aby umożliwić rozliczanie punktów lojalnościowych z poziomu aplikacji Comarch Mobile Zakupy, należy:
  • stworzyć definicję programu lojalnościowego zgodnego ze swoimi założeniami oraz wymaganiami opisanymi w dalszej części dokumentu,
  • obsłużyć synchronizację punktów lojalnościowych kontrahentów,
  • włączyć obsługę programu lojalnościowego w pliku configuration.*.statement, poprzez zmianę wartości klucza [IsLoyaltyEnabled] na 1.

Struktura definicji programu lojalnościowego

Przygotowane definicje programów lojalnościowych należy umieścić w pliku z rozszerzeniem XML w katalogu [LoyaltyProgramsDefinitions] katalogu głównego serwera synchronizacji Mobile. Nazwa pliku musi składać się z <IdProgramuLojalnosciowego>#<NazwaProgramuLojalnosciowego>.xml
Przyklad
12#NaszaLojalnosc.xml
Synchronizacja definicji do urządzeń mobilnych odbywa się po każdej modyfikacji w plikach definicji. Aby usunąć już zsynchronizowaną definicję z urządzeń mobilnych należy zmienić id programu na wartość ujemną. Taka definicja zostanie usunięta przy następnej synchronizacji.
Przyklad
-12#NaszaLojalnosc.xml
<?xml version=”1.0″ encoding=”UTF-8″?> <LoyaltyProgram>

<Name>…</Name>

<SettleDocumentsValue>…</SettleDocumentsValue>

<CheckContractorStatusQuery>

</CheckContractorStatusQuery>

<CheckArticleStatusQuery>

</CheckArticleStatusQuery>

<InitialMessageQuery>

</InitialMessageQuery>

<AfterRemovePositionLoyaltyProgramQuery>

</AfterRemovePositionLoyaltyProgramQuery>

<AfterAddPositionLoyaltyProgramQuery>

</AfterAddPositionLoyaltyProgramQuery>

<AfterRemoveDocumentLoyaltyProgramQuery>

</AfterRemoveDocumentLoyaltyProgramQuery>

<AfterAddDocumentLoyaltyProgramQuery>

</AfterAddDocumentLoyaltyProgramQuery>

</LoyaltyProgram>

Elementy w definicji program lojalnościowego

  • Name – Nazwa program lojalnościowego
  • SettleDocumentsValue – flaga bitowa określająca, na jakich dokumentach bierze udział program lojalnościowy. Poszczególne typy dokumentów będą miały przyporządkowane wartości:

1 – OS

2 – ZS

4 – FS

8 – PA

16 – WZ

32 – WM

Wskazówka
Wartość pola 5 oznaczać będzie, że rozliczenie punktów dostępne będzie na dokumentach OS i FS (1+4).
  • CheckContractorStatusQuery – Zapytanie sprawdzające czy dany kontrahent bierze udział w programie lojalnościowym oraz zwraca liczbę punktów dostępnych dla kontrahenta. Zwrócenie wiersza oznacza, że kontrahent bierze udział w programie lojalnościowym.
    • Parametry wejściowe:
      • @DocumentType – typ dokumentu. Wartość zgodna z wartościami z punktu drugiego.
      • @ContractorId – identyfikator kontrahenta
      • @LoyaltyProgramId – identyfikator programu lojalnościowego
      • @EditedDocumentId – identyfikator dokumentu, który jest teraz aktualnie reedytowany (został tylko zapisany wcześniej, został cofnięty do bufora)
    • Kolumny wyjściowe:
      • Liczba punktów dostępnych do zużycia przez kontrahenta
  • CheckArticleStatusQuery – Zapytanie sprawdzające czy dany towar jest dostępny w danym programie lojalnościowym oraz zwraca liczbę punktów do rozliczenia na pozycji.
    • Parametry wejściowe
      • @ArticleId – identyfikator towaru na który wystawiana jest pozycja
      • @StartGrossPrice – początkowa cena brutto
      • @StartNetPrice – początkowa cena netto
      • @Quantity – ilość w jednostce bazowej
      • @AvailablePoints – liczba dostępnych punktów kontrahenta
      • @EditedDocumentId – identyfikator edytowanego dokumentu
      • @VatRate – stawka VAT (np. dla 23% – parametr ten będzie miał wartość 23)
      • @VatDirection – kierunek VAT (0 – Netto, 1 – Brutto)
    • Kolumny wyjściowe
      • MaxPointsToSettleValue – maksymalna liczba punktów możliwa do rozliczenia na pozycji
      • EndGrossPrice – końcowa cena brutto na pozycji po rozliczeniu punktów MaxPointsToSettleValue
  • InitialMessageQuery – Zapytanie tworzące komunikat powitalny.
    • Parametry wejściowe
      • @DocumentType – typ dokumentu. Wartość zgodna z wartościami z punktu drugiego.
      • @ContractorId – identyfikator kontrahenta
      • @LoyaltyProgramId – identyfikator programu lojalnościowego
      • @EditedDocumentId – identyfikator dokumentu, który jest teraz aktualnie reedytowany (został tylko zapisany wcześniej, został cofnięty do bufora)
    • Kolumny wyjściowe
      • InitialMessageText – komunikat powitalny. Może zawierać proste tagi html’owe w celu sformatowania tekstu. (np. Dodanie nowej linii <br />, Zmiana koloru fragmentu tekstu <font color=”#FF0000″></font>, itd.)
  • AfterRemovePositionLoyaltyProgramQuery – Zapytanie wykonywane po usunięciu rozliczenia programu lojalnościowego na pozycji. Służy do wycofania zmian wykonanych w AfterAddPositionLoyaltyProgramQuery.
    • Parametry wejściowe
      • @LoyaltyProgramId – identyfikator programu lojalnościowego
      • @ProgramName – nazwa programu lojalnościowego
      • @AttributeObjectType – typ atrybutów dla pozycji
      • @ObjectId – identyfikator dokumentu
      • @ObjectIsLocal – identyfikator dokumentu
      • @ObjectSubId – identyfikator pozycji
      • @ObjectSubIsLocal – identyfikator pozycji
    • Obsługiwane jest wiele zapytań w ramach tej samej definicji. Separator skryptów „;GO;
  • AfterAddPositionLoyaltyProgramQuery – Zapytanie wykonywane po zapisie dokumentu – dla każdej pozycji, która zostaje rozliczona za pomocą programu lojalnościowego.
    • Parametry wejściowe
      • @LoyaltyProgramId
      • @ProgramName
      • @SettledPoints
      • @AttributeObjectType
      • @ObjectId
      • @ObjectIsLocal
      • @ObjectSubId
      • @ObjectSubIsLocal
      • @StartGrossPrice – cena początkowa brutto
      • @StartNetPrice – cena początkowa netto
      • @StartGrossValue – wartość brutto
      • @StartNetValue – wartość netto
    • Obsługiwane jest wiele zapytań w ramach tej samej definicji. Separator skryptów „;GO;
  • AfterRemoveDocumentLoyaltyProgramQuery – Zapytanie wykonywane po usunięciu rozliczenia programu lojalnościowego z dokumentu. Służy do wycofywania zmian wykonanych w
    • Parametry wejściowe
      • @LoyaltyProgramId
      • @ProgramName
      • @SettledPoints
      • @AttributeObjectType
      • @ObjectId
      • @ObjectIsLocal
      • @ObjectSubId
      • @ObjectSubIsLocal
    • Obsługiwane jest wiele zapytań w ramach tej samej definicji. Separator skryptów „;GO;
  • AfterAddDocumentLoyaltyProgramQuery – Zapytanie wykonywane po zapisie dokumentu z rozliczeniem programu lojalnościowego.
    • Parametry wejściowe
      • LoyaltyProgramId
      • ProgramName
      • SettledPoints
      • AttributeObjectType
      • ObjectId
      • ObjectIsLocal
      • ObjectSubId
      • ObjectSubIsLocal
    • Obsługiwane jest wiele zapytań w ramach tej samej definicji. Separator skryptów „;GO;

Synchronizacja punktów lojalnościowych kontrahentów

Aby umożliwić synchronizację punktów lojalnościowych kontrahentów należy zaimplementować metody synchronizacji obiektu [contractorsloyaltypoints]:
  • *.statement – zapytanie pobierające aktualne stany punktów kontrahentów. Zwracane kolumny:
    • OperationType – typ operacji (dodawanie, usuwanie, edycja),
    • OperationTS – timestamp synchronizacji,
    • LoyaltyProgramId – identyfikator programu lojalnościowego,
    • ContractorId – identyfikator kontrahenta,
    • Points – liczba dostępnych punktów do rozliczenia przez kontrahenta,
    • LockedPoints – liczba punktów dostępnych lecz zablokowanych do rozliczenia. Obecnie parametr ten nie jest jeszcze obsługiwany, dlatego zawsze kolumna ta powinna zwracać wartość 0.
  • contractorsloyaltypoints*.xml – definicja metody synchronizacji, triggery aktualizujące timestampy wierszy

Rozliczanie punktów w systemie Comarch ERP Altum

Rozliczanie punktów należy obsłużyć po stronie systemu Comarch ERP Altum za pomocą triggera wdrożeniowego aktywowanego np. potwierdzeniem dokumentu. Dokładny sposób rozliczenia jest zależny od  mechanizmów zaimplementowanych w programie lojalnościowym po stronie systemu Comarch ERP Altum. Program lojalnościowy może zostać oparty poprzez atrybuty zdefiniowane w systemie Comarch ERP Altum. W takiej obsłudze będą brani pod uwagę Kontrahenci, którzy posiadają zdefiniowany atrybut ze wskazaniem programu lojalnościowego (np. Nasza Lojalność), a przedstawiciel będzie mógł nadać rabat tylko na pozycjach towarów oznaczonych też odpowiednim atrybutem.
Dodanie atrybuty na karcie towaru i karcie kontrahenta
Obecne implementacje do przesyłania informacji o liczbie rozliczonych punktów, korzystają z atrybutów (klasa atrybutu tylko do odczytu) ustawianych na pozycjach dokumentów (za pomocą AfterAddPositionLoyaltyProgramQuery) z wartością rozliczonych na pozycji punktów. Podczas synchronizacji do systemu ERP dokumentów, w momencie ich potwierdzenia, w triggerze sprawdzone powinno zostać istnienie atrybutu rozliczającego punkty na pozycjach. Wartość rozliczonych punktów powinna zostać odjęta z puli punktowej kontrahenta. Dodatkowo rozliczenie takie powinno spowodować podbicie odpowiednich timestampów w [contractorsloyaltypoints] w celu wymuszenia synchronizacji aktualnego stanu punktów kontrahenta.

Blokada realizacji działań handlowych dla nowo utworzonego kontrahenta

Aplikacja Comarch Mobile umożliwia blokowanie realizacji działań handlowych dla nowo utworzonego kontrahenta do czasu jego synchronizacji do systemu ERP. Kontrahent dodany w aplikacji Comarch Mobile jest oznaczony ikonką . Zablokowana zostanie możliwość wystawiania dokumentów handlowych, dokumentów ZSR oraz tworzenia działań CRM we wszystkich miejscach w aplikacji. Aby mieć możliwość wystawiania poszczególnych działań handlowych dla nowo utworzonego kontrahenta konieczne jest wykonanie synchronizacji z systemem ERP.
Uwaga
Za konfigurację tej funkcjonalności odpowiada parametr CanBlockActionsForNewContractorBeforeSynchronization. Wartość parametru należy zmienić w pliku contractors.xl.statement w lokalizacji C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Methods\configuration. Więcej informacji na temat konfiguracji znajduje się TUTAJ.
Po włączeniu parametru CanBlockActionsForNewContractorBeforeSynchronization i utworzeniu nowego kontrahenta w aplikacji Comarch Mobile:
  • po kliknięciu w sekcję Działania, Serwis oraz Handlowe na karcie kontrahenta zostanie wyświetlony komunikat: "Brak możliwości wykonywania działań handlowych. Dokonaj synchronizacji nowego kontrahenta."
Widok okna informującego o konieczności synchronizacji
  • po kliknięciu na liście kontrahentów w menu kontekstowym nowego kontrahenta nie jest widoczna opcja "Dodaj dokument"

  • podczas wystawiania dokumentów w kaflu Dokumenty, Serwis i Kasa lub działania CRM w kaflu Terminarz i Dzień w momencie wyboru kontrahenta, który nie został jeszcze zsynchronizowany z systemem ERP, pojawi się komunikat: "Należy dokonać synchronizacji nowego kontrahenta."

Widok okna informującego o konieczności synchronizacji
  • w przypadku kafla Dokumenty, Dzień, Serwis i Terminarz ukryta jest ikonka odpowiedzialna za dodanie nowego kontrahenta
 

Dokumenty

Pobieranie dokumentów historycznych

Aby określony dokument mógł być widoczny w innej firmie, w innym centrum, na definicji dokumentu na zakładce [Widoczność] należy dołączyć odpowiednie centra ze struktury firmy. Przy włączonej obsłudze transakcji historycznych, dokumenty wystawione w innych firmach będą pobierane do Comarch Mobile, o ile centrum mobile zostało dołączone na definicji dokumentu. Aby umożliwić w aplikacji mobilnej pobieranie dokumentów historycznych FS, PAR, WZ, RLS wystawionych w innych centrach niż centrum mobilne, należy na definicji dokumentu na zakładce [Widoczność] wskazać centrum mobilne. Należy wykonać to w kontekście tego centrum, z którego dokumenty chcemy widzieć w aplikacji. Informacje dot. tego, jak włączyć pobieranie dokumentów historycznych w aplikacji znajdują się TUTAJ.
Ustawianie widoczności w centrum mobilnym, dokumentów wystawionych w centrum IT Company PL

Także dokumenty wystawiane bezpośrednio w Comarch Mobile i synchronizowane do systemu mogą być widoczne w innych firmach, jeżeli na centrum mobilnym odpowiednio ustawiono udostępnianie innym firmom swoich dokumentów.

Podczas przypisywania magazynu odległego musi on być pusty, aby przy synchronizacji stany magazynu się zgadzały w aplikacji i ERP.

Uwaga
Na definicji dokumentu ZZ magazynem domyślnym powinien być magazyn lokalny (firmy). W przeciwnym razie nie będzie możliwości wystawienia dokumentu ZZ z poziomu aplikacji mobilnej.

Wystawianie dokumentów ZZ, OZ na kilka magazynów

Aby umożliwić Przedstawicielowi Handlowemu wystawianie dokumentów ZZ (Zamówienie Zakupu) oraz OZ (Oferta Zakupu) na kilka magazynów należy w Comarch ERP Altum zaznaczyć check [Preferuj magazyn domyślny]. Zaznaczenie checku spowoduje możliwość zmiany magazynu podczas wystawiania dokumentu zarówno na nagłówku jak i na samym elemencie.
Konfiguracja systemu Comarch ERP Altum w celu możliwości edycji magazynu podczas wystawiania dokumentów
Odznaczenie wszystkich checków będzie skutkowało tym, że w aplikacji mobilnej nie będzie podpowiadał się na nagłówku dokumentu magazyn domyślny zdefiniowany w systemie Comarch ERP Altum. Po zaznaczenie checku [Operacje na jednym magazynie] będzie skutkować tym, że zmiana magazynu będzie dostępna do momentu aż do koszyka zostanie dodany towar. Dokumenty  ZZ, OZ można wystawiać wyłącznie na magazyn lokalny, aplikacja nie kontroluje stanów magazynowych. Więcej informacji o funkcjonalności można znaleźć w dokumencie TUTAJ.

Zmiana kontrahenta podczas wystawiania dokumentu

Dostępna jest funkcja zmiany kontrahenta podczas wystawiania dokumentu. Za tę funkcjonalność odpowiada parametr [CanChangeContractorOnDocument], znajdujący się w pliku konfiguracyjnym w katalogu: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Methods. W zależności od wartości tego parametru, przedstawiciel handlowy będzie miał możliwość zmiany kontrahenta w trakcie wystawiania dokumentu, korzystając z ikony ołówka przy kontrahencie na nagłówku dokumentu. Po kliknięciu w ikonę ołówka, wyświetlona zostanie lista kontrahentów.

Wystawianie dokumentów zamówienia zakupu i oferty zakupu w innej walucie

W aplikacji Comarch Mobile Zakupy umożliwiono wystawianie zamówień i ofert sprzedaży w walucie obcej. Podczas wystawiania dokumentów OZ i ZZ na nagłówku dokumentu ustawiana jest waluta domyślna z karty kontrahenta. Aby zmienić walutę domyślną na karcie kontrahenta należy na zakładce [Główne] przejść do katalogu kontrahenci, zakładka [Handlowe] - [Domyślne warunki handlowe]. Dodatkowo operator ma możliwość zmiany waluty oraz jej kursy w zależności od nadanych mu uprawnień. W zależności od wartości parametru [CanChangeCurrency] operator ma możliwość lub blokadę zmiany:
  • Samej waluty
  • Samego kursu waluty
  • Zarówno waluty i kursu waluty
Parametr [CanChangeCurrency] może przyjmować trzy wartości:
  • 1 – zmiana waluty na nagłówku dokumentu możliwa, zmiana kursu waluty niemożliwa – wartość domyślna,
  • 2 – zmiana waluty na nagłówku dokumentu możliwa, zmiana kursu waluty możliwa,
  • 0 – zmiana waluty na nagłówku dokumentu niemożliwa, zmiana kursu waluty na nagłówku dokumentu niemożliwa, wystawienie dokumentu możliwe tylko w walucie zdefiniowanej na karcie kontrahenta.
Wartość parametru należy edytować w pliku configuration.altumx.statement znajdujący się w folderze C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Methods.
Uwaga
Edycję waluty lub kursu waluty można wykonać jedynie wtedy, gdy w koszyku nie ma jeszcze dodanych towarów.

Obsługa eksportowych stawek VAT

W aplikacji Comarch  Mobile umożliwiono dodatkowo oprócz transakcji krajowych z krajowymi stawkami VAT również obsługę eksportowych stawek VAT podczas wystawiania dokumentów ZZ i OZ. Dane dotyczące eksportowych stawek VAT pobierane są z systemu Comarch ERP Altum.
Konfiguracja stawek VAT w Altum
Dużym udogodnieniem jest także to, że typ transakcji na nagłówku dokumentu ustawiany jest zgodnie z typem kontrahenta, dla którego transakcja jest realizowana. Dla kontrahenta Krajowego domyślnie ustawi się zatem transakcja krajowa, dla kontrahenta Unijnego transakcja Wewnątrzwspólnotowa, a dla kontrahenta Pozaunijnego transakcja Inna zagraniczna.  Typ Kontrahenta ustawiany w Comarch ERP Altum na karcie kontrahenta w zakładce [Ogólne].
Ustawienie typu kontrahenta

Obsługa odwrotnego obciążenia

W aplikacji Comarch Mobile Zakupy wprowadzona została obsługa odwrotnego obciążenia, czyli procedury odwrotnego naliczania VAT przez nabywcę a nie odbiorcę. Do poprawnego działania odwrotnego obciążenia VAT w aplikacji Comarch Mobile Zakupy wymagane jest ustawienie w Comarch ERP Altum następujących elementów:
  • Parametru: [Obsługa odwrotnego obciążenia] (System /Konfiguracja/ zakładka: [Handel])
Konfiguracja odwrotnego obciążenia w Comarch ERP Altum
  • Stawka VAT wskazana w polu [Stawka VAT dla odwrotnego obciążenia] – menu [Konfiguracja], sekcja [Ogólne/ Stawki VAT]
Konfiguracja stawki VAT dla odwrotnego obciążenia
  • Wartość słownika [Klasyfikacja odwrotnego obciążenia] – menu [Konfiguracja], sekcja: [Ogólne/Słowniki uniwersalne/Ogólne]
Konfiguracja wartości klasyfikacji odwrotnego obciążenia
  • Parametr [Odwrotne obciążenie] – karta kontrahenta, zakładka [Ogólne]
Parametr Odwrotne obciążenie – do zaznaczenia na karcie kontrahenta
  • Przypisanie wartości klasyfikacji odwrotnego obciążenia – karta artykułu, zakładka [Ogólne]
Karta artykułu – parametr i wartość klasyfikacji odwrotnego obciążenia
Obsługa odwrotnego obciążenia w aplikacji jest opisana TUTAJ.

Obsługa edycji sposobu dostawy

W aplikacji Comarch Mobile Zakupy jest możliwość przypisania sposoby dostawy dla kontrahenta. W pierwszej kolejności należy dodać rodzaj dostawy w sposobie dostawy, na liście słowników, zgodnie z rysunkiem poniżej.
Dodanie sposobu dostawy na liście słowników
Następnie należy wejść w szczegóły grupy kontrahentów, jeżeli chcemy przypisać jednakowy sposób dostawy dla wszystkich kontrahentów z danej grupy lub wejść w szczegóły kontrahenta, gdy chcemy przypisać sposób dostawy dla konkretnego kontrahenta. Następnie w zakładce [Handlowe] należy wybrać odpowiednią dostawę.
Wybór dostawy

Edycja płatnika na nagłówku dokumentu

Możliwość zmiany płatnika na nagłówku dokumentu została wprowadzona dla dokumentów:
  • Zamówienie Zakupu (ZZ)
  • Oferta Zakupu (OZ)
Standardowo w aplikacji wyświetlane są informacje o płatniku ustawione dokumencie w zakładce [Płatności] w systemie Comarch ERP Altum.
Zmiana Płatnika na nagłówku dokumentu Comarch Mobile raz wyświetlanie informacji o płatniku na dokumencie zsynchronizowanym do systemu Comarch ERP Altum
Jeżeli w parametrze [ChangingContractorOnDocumentPermission] została dodana wartość 2, wówczas podczas wystawiania dokumentu, na nagłówku w polu [Kontrahent]  pojawia się ikona ołówka oznaczająca możliwość edycji wartości dla Kontrahenta głównego. Więcej informacji nt. tego parametru znajduje się TUTAJ.

Edycja kontrahenta docelowego i głównego na nagłówku dokumentu

Możliwość zmiany kontrahenta docelowego i głównego na nagłówku dokumentu została wprowadzona dla dokumentów:
  • Zamówienie Zakupu (ZZ)
  • Oferta Zakupu (OZ)
Za możliwość zmiany kontrahenta głównego i docelowego odpowiada parametr [ChangingContractorOnDocumentPermission] (domyślna lokalizacja: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Methods\configuration). Więcej informacji nt. tego parametru znajduje się TUTAJ.ekcji [Docelowy] wyświetlany jest Kontrahent Główny[/alert]

Agregacja VAT na definicji dokumentów oraz stan realizacji zamówień

Aplikacja Comarch Mobile Zakupy obsługuje agregacje VAT od sumy wartości, dlatego w typie dokumentów, w strukturze praw na centrum mobilnym należy zaznaczyć w sposobie naliczania VAT (zakładka [Ogólne]) [Agregacje VAT od sumy wartości].
Sposób naliczania VAT

Pobieranie informacji o stanie realizacji zamówień z Comarch ERP Altum

Po odpowiedniej konfiguracji istnieje możliwość pobierania informacji o stanie realizacji zamówień z systemu Comarch ERP Altum do Comarch Mobile Zakupy. Przesyłane są informacje: o stanie zamówienia z Comarch ERP Altum, procencie realizacji dokumentu i zmianach jakie zostały naniesione na dokument zamówienia. Konfiguracji należy dokonać na odpowiednim centrum mobilnym: Struktura firmy/Struktura praw/odpowiednie centrum mobilne/ Zakładka [Dokumenty]/ZZ/Zakładka [Ogólne]/Sekcja [Parametry]. W wybranej sekcji należy zaznaczyć opcję [Synchronizuj] informacje o stanie realizacji zamówień.
Parametr synchronizacji informacji o stanie realizacji zamówień

Dodatkowo w aplikacji Comarch Mobile Zakupy powinna zostać włączona opcja pobierania dokumentów z systemu.

Możliwość zatwierdzania dokumentu bez podpisu

W aplikacji istnieje możliwość pominięcia podpisu podczas wystawienia dokumentu. Funkcjonalność ta wymaga zmodyfikowanie pliku documentsnumerators.altum, (Serwer synchronizacji/Methods/documentsnumerators) . Należy dodać warunek dotyczący konkretnego dokumentu na którym chcemy pominąć krok "Podpis”. Poniżej przedstawiono przykład jak skonfigurować funkcjonalność pominięcia kroku z podpisem na dokumencie Zamówienie (ZZ). Przy wystawianiu pozostałych dokumentów podpis będzie wymagany.
WHEN NamespaceEntry = 'Comarch.B2.Sales.Documents.SalesOrderManager' THEN 0 /*ZZ*/       ELSE 1                 END AS IsSignatureRequired
Możliwość zatwierdzania dokumentu bez podpisu

Załączniki

Do Comarch Mobile Zakupy są pobierane te załączniki, które:
  • Jako Właściciela załącznika mają ustawioną opcję [Wszyscy] lub [Firmę], do której przypięte jest centrum mobilne,
  • Mają ustawioną dostępność w Mobile.
Ustawienie dostępności załącznika
Uwaga
Aby zdjęcia mogły się poprawnie wyświetlać na urządzeniu i nie powodowały przepełnienia pamięci, w czasie synchronizacji są automatycznie zmniejszane do rozmiarów x na 1024 pikseli. Niektóre urządzenia umożliwiają jednak bezproblemową obsługę większych zdjęć. Aby zmienić wielkość synchronizowanych zdjęć należy w katalogu [Methods] w folderze serwera Comarch Mobile Zakupy odnaleźć plik [articlesphotos] i wyedytować go w notatniku, podając długość dłuższej krawędzi zdjęcia.
W aplikacji Comarch Mobile została jest możliwość dodawania załączników z poziomu aplikacji. Opcja ta dotyczy następujących obiektów:
  • Karty kontrahenta,
  • Karty towaru,
  • Nagłówka następujących dokumentów: ZZ, OZ
  • Pozycji następujących dokumentów: ZZ, OZ
W celu usprawnienia synchronizacji zostały dodane ustawienia umożliwiające ręczne sterowanie takimi parametrami synchronizacji załączników jak automatyczna zmiana rozmiaru zdjęć czy ich kompresja. W pliku articlesphotos.configuration znajdującym się w folderze (…)\Comarch Mobile\Serwer synchronizacji\Methods\articlesphotos dostępne są następujące parametry:
  • Size – maksymalny rozmiar boku zdjęcia (w pikselach) w przypadku włączonej opcji automatycznej zmiany rozmiaru załącznika
  • DoResize – czy ma być wykonana automatyczna zmiana wielkości załączników. Wartość domyślna – True. Wyłączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Jeżeli jednak na bazie systemu ERP znajduje się duża liczba załączników w wysokiej rozdzielczości, zmiana parametru może skutkować znacznym zwiększeniem rozmiaru paczki do pobrania w synchronizacji.
  • DoCompression – czy ma być wykonana automatyczna kompresja załączników. Wartość domyślna – True. Wyłączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Jeżeli jednak na bazie systemu ERP znajduje się duża liczba nieskompresowanych załączników, zmiana parametru może skutkować znacznym zwiększeniem rozmiaru paczki do pobrania w synchronizacji.
  • MultiThreading – wielowątkowe tworzenie pliku wymiany z załącznikami. Wartość domyślna – False. Włączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Użycie trybu może skutkować wzrostem obciążenia CPU, szczególnie w momencie wykonywania pierwszej synchronizacji załączników jednocześnie przez kilku operatorów.
Uwaga
Przed zmianą parametrów synchronizacji na środowisku produkcyjnym zaleca się zbadanie ich wpływu na środowisku testowym, w celu dobrania optymalnych wartości dla danej bazy danych

Wyświetlanie ceny i ilości zarówno w jednostce podstawowej jak i domyślnej jednostce pomocniczej podczas wystawiania dokumentów

W aplikacji istnieje możliwość podejrzenia ilości i ceny w jednostce pomocniczej podczas wystawiania dokumentów już z poziomu listy towarów, bez konieczności podnoszenia kalkulacji dla tej pozycji. Funkcjonalność ta jest dostępna podczas wystawiania dokumentów:
  • Oferta zakupu (OZ)
  • Zamówienie zakupu (ZZ)
Za tę funkcjonalność odpowiada parametr [IsBaseUnitVisible], który może przyjmować dwie wartości: 1 – wartość domyślna; oznacza widoczność dodatkowej ceny (w jednostce podstawowej) tylko po dodaniu towarów do Koszyka – jeżeli użytkownik zmieni na pozycji z jednostki domyślnej np. szt. na karton. 0 – ilość wyświetlana jest tylko w jednostce domyślnej na liście pozycji wyświetlana jest ilość na magazynie oraz ilość dodaną na dokument tylko w tej jednej – domyślnej lub wybranej podczas dodawania do Koszyka jednostce. Więcej informacji nt. tego parametru znajduje się TUTAJ.

Towary

Załączniki

Do Comarch Mobile Zakupy są pobierane te załączniki, które:
  • Jako Właściciela załącznika mają ustawioną opcję [Wszyscy] lub [Firmę], do której przypięte jest centrum mobilne,
  • Mają ustawioną dostępność w Mobile.
Ustawienie dostępności załącznika
Uwaga
Aby zdjęcia mogły się poprawnie wyświetlać na urządzeniu i nie powodowały przepełnienia pamięci, w czasie synchronizacji są automatycznie zmniejszane do rozmiarów x na 1024 pikseli. Niektóre urządzenia umożliwiają jednak bezproblemową obsługę większych zdjęć. Aby zmienić wielkość synchronizowanych zdjęć należy w katalogu [Methods] w folderze serwera Comarch Mobile Zakupy odnaleźć plik [articlesphotos] i wyedytować go w notatniku, podając długość dłuższej krawędzi zdjęcia.
W aplikacji Comarch Mobile została jest możliwość dodawania załączników z poziomu aplikacji. Opcja ta dotyczy następujących obiektów:
  • Karty kontrahenta,
  • Karty towaru,
  • Nagłówka następujących dokumentów: ZZ, OZ
  • Pozycji następujących dokumentów: ZZ, OZ
W celu usprawnienia synchronizacji zostały dodane ustawienia umożliwiające ręczne sterowanie takimi parametrami synchronizacji załączników jak automatyczna zmiana rozmiaru zdjęć czy ich kompresja. W pliku articlesphotos.configuration znajdującym się w folderze (…)\Comarch Mobile\Serwer synchronizacji\Methods\articlesphotos dostępne są następujące parametry:
  • Size – maksymalny rozmiar boku zdjęcia (w pikselach) w przypadku włączonej opcji automatycznej zmiany rozmiaru załącznika
  • DoResize – czy ma być wykonana automatyczna zmiana wielkości załączników. Wartość domyślna – True. Wyłączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Jeżeli jednak na bazie systemu ERP znajduje się duża liczba załączników w wysokiej rozdzielczości, zmiana parametru może skutkować znacznym zwiększeniem rozmiaru paczki do pobrania w synchronizacji.
  • DoCompression – czy ma być wykonana automatyczna kompresja załączników. Wartość domyślna – True. Wyłączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Jeżeli jednak na bazie systemu ERP znajduje się duża liczba nieskompresowanych załączników, zmiana parametru może skutkować znacznym zwiększeniem rozmiaru paczki do pobrania w synchronizacji.
  • MultiThreading – wielowątkowe tworzenie pliku wymiany z załącznikami. Wartość domyślna – False. Włączenie opcji w znacznym stopniu przyśpiesza tworzenie pliku wymiany. Użycie trybu może skutkować wzrostem obciążenia CPU, szczególnie w momencie wykonywania pierwszej synchronizacji załączników jednocześnie przez kilku operatorów.
Uwaga
Przed zmianą parametrów synchronizacji na środowisku produkcyjnym zaleca się zbadanie ich wpływu na środowisku testowym, w celu dobrania optymalnych wartości dla danej bazy danych

Precyzja cen w aplikacji mobilnej

W aplikacji Comarch Mobile Zakupy istnieje możliwość wyboru precyzji ceny na typie ceny oraz na definicji dokumentu, tak aby można było wykorzystywać ceny towarów określane z czterema, trzema lub jednym miejscu po przecinku oraz sprzedawać je w dużych ilościach, np. (100szt. x 1,3333zł = 133,33zł, a 100szt. x 1,33zł= 133,00zł). Aby w aplikacji Comarch Mobile Zakupy we współpracy z Comarch ERP Altum istniała możliwość prezentacji towaru na karcie towaru z precyzją do jednej, dwóch, trzech lub do czterech miejsc po przecinku. W systemie Comarch ERP Altum należy zaznaczyć precyzję na typie ceny [Sprzedaż/Cenniki/Typy cen].
Przypisanie precyzji cen wyświetlanych w aplikacji Comarch Mobile Zakupy na kartotece towaru
Zaznaczenie liczby w polu [Pozycja] spowoduje z cen z dokładnością jednej, dwóch, trzech lub czterech miejsc po przecinku (zgodnie z tym jaka cyfra została wpisana).
Prezentacja ceny na karcie towary z precyzją a) do jednego miejsca po przecinku, b) do dwóch miejsc po przecinku, c) do trzech miejsc po przecinku, d) do czterech miejsc po przecinku
Dodatkowo istnieje możliwość ustawienia precyzji ceny na definicji dokumentu na centrum operatora [Konfiguracja/ Struktura firmy/Struktura praw/Centrum operatora]. Następnie w zakładce [Dokumenty] należy wybrać odpowiedni dokument do konfiguracji.
Przypisanie precyzji cen wyświetlanych w aplikacji Comarch Mobile Zakupy podczas wystawiania dokumentów

Zaznaczenie opcji 1, 2, 3 lub 4 spowoduje wyświetlanie cen z dokładnością do takiej liczby miejsc po przecinku.

Prezentacja ceny podczas wystawiania dokumentu z precyzją a) do jednego miejsca po przecinku, b) do dwóch miejsc po przecinku, c) do trzech miejsc po przecinku, d) do czterech miejsc po przecinku

Cena z wybraną precyzją widoczna jest na liście towaru podczas wystawiania dokumentu, na małej kalkulacji oraz w zakładce Koszyk.

Konfiguracja kompletu

W aplikacji Comarch Mobile Zakupy jest dostępny komplet czyli zestaw dwóch lub więcej artykułów sprzedawanych klientowi jako jeden produkt. Na karcie danego artykułu o typie [Komplet], w zakładce [Ogólne] dostępny jest parametr [Pobieraj składniki na dokument].
  • Odznaczenie parametru spowoduje, że podczas wystawiania dokumentu artykuł będący kompletem dodawany jest jako jedna pozycja. Istnieje wówczas także możliwość określenia marży minimalnej oraz wskazania, że komplet podlega odwrotnemu obciążeniu.
  • Jeżeli parametr zostanie zaznaczony, to na dokumencie będą pokazywały się poszczególne składniki kompletu, a nie jedna pozycja w postaci całego kompletu.
  • Przy zaznaczonym parametrze [Pobieraj składniki na dokument] pojawi się dodatkowe okno dotyczące kolejnego parametru [Modyfikacja pojedynczego elementu na dokumentach]. Jeżeli dla dokumentów rozchodowych wartość tego parametru ustawiona będzie na [Blokuj] wówczas podczas wystawiania dokumentów w aplikacji mobilnej możliwe będzie dodawanie tylko pełnych kompletów. Edycja ilości dla pojedynczego elementu (składnika kompletu) nie będzie możliwa. Dotyczy to wszystkich dokumentów możliwych do wystawiania w aplikacji mobilnej przy współpracy z Comarch ERP Altum.
Parametr [Pobieraj składniki na dokument] na karcie kompletu w zakładce [Ogólne]
Zaznaczenie parametru [Pobieraj składniki na dokument]

Wyświetlanie/ukrywanie informacji o stanach magazynowych

W Comarch Mobile Zakupy istnieje możliwość wyboru wyświetlenia\ukrycia informacji o stanach magazynowych. W folderze [Methods], w pliku konfiguracyjnym [configuration.optima.xml] znajduje się parametr odpowiedzialny za tę funkcjonalność: [IsHeadquarterStocksVisible]. Domyślna wartość parametru to „1”, pozwalająca na podgląd informacji o stanach magazynowych na urządzeniu mobilnym. Więcej informacji nt. tego parametru znajduje się TUTAJ. Oprócz magazynów przypisanych do centrum mobilnego w Comarch ERP Altum, do aplikacji mobilnej można  także synchronizować magazyny innej firmy (wraz z zasobami towarów dostępnych w Mobile). Aby takie magazyny były widoczne w Comarch Mobile Zakupy należy na karcie magazynu w zakładce widoczność stanów udostępnić centrum mobilne.
Konfiguracja magazynu w Comarch ERP Altum – udostępnienie widoczności stanów centrum mobilnemu.

Wyświetlanie stanów magazynowych z podziałem na partie (wielocechowość)

Istnieje możliwość sprawdzania w aplikacji mobilnej stanów towarów z podziałem na poszczególne partie (w zależności od cechy). Cechy te można również wskazać podczas generowania dokumentu w Comarch Mobile Zakupy. Określenie czy dana cecha ma mieć wpływ na partię jest z poziomu karty towaru w systemie ERP Altum (zakładka [Parametry]):
Określenie wpływu cechy na partie towaru
W systemie Comarch ERP Altum informacje o cechach dostępne są również z poziomu zakładki [Zasoby i partie], również na karcie towaru:
Informacje o zasobach towaru z podziałem na partie

Raporty

Edycja raportów

W aplikacji umożliwiono usuwanie, dodawanie oraz edycję raportów z poziomu serwera synchronizacji. Definicje raportów znajdują się w katalogu: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji/Reports. Aby dodać nowy raport należy utworzyć jego definicję, a następnie zapisać go w formacie xml.
Uwaga
W przypadku zapisu definicji raportu w Notatniku należy wybrać kodowanie UTF-8.
Aby usunąć istniejący raport należy zmienić jego ID na ujemne, następnie zmienić datę modyfikacji (np. wystarczy zapisać ponownie plik z raportem) i wykonać synchronizację.
Uwaga
Podczas synchronizacji definicji raportów na urządzenie brana jest pod uwagę data modyfikacji pliku. W celu wymuszenia synchronizacji raportu należy wykonać dowolną modyfikację.
Zmiana ID raportu na ujemne
Istnieje możliwość zmiany języka raportu.
Przyklad
W przypadku, gdy w wersji polskojęzycznej chcemy mieć raport w języku niemieckim, to należy zmodyfikować ostatni człon nazwy z deu na pol, następnie należy zmienić datę modyfikacji.

Przykład modyfikacji raportu

W celu opisania przykładowej modyfikacji raportu wykorzystany zostanie Raport dobowy przedstawiciela. Do tegoż raportu zostanie dodany argument za pomocą którego możliwe będzie wybranie dnia, z którego dany raport zostanie zaprezentowany. W tym celu należy wyedytować definicję raportu o nazwie 53#DailyReport#pol.xml znajdującą się w domyślnej lokalizacji C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Reports\ i katalogu odpowiednim dla systemu ERP. W pliku tym należy przed sekcją elements dodać sekcję zawierającą argumenty raportu oraz argument o typie daty (typeId = 0) według następującego przykładu:
Przyklad
<arguments> <argument> <id>1</id> <typeId>0</typeId> <name>data</name> <visibleName>Data</visibleName> <defaultSQL><![CDATA[]]></defaultSQL> <posibleSQL><![CDATA[select date('now','localtime')]]></posibleSQL> </argument> </arguments>
  Kolejnym krokiem dla lepszej czytelności raportu będzie usunięcie godziny z nagłówka raportu znajdującego się na zielonej belce. Dla pierwszego elementu raportu (id = 1) należy wyedytować sekcję sql w pozostawiając następujące polecenie:
<![CDATA[select '<b<![CDATA[>Raport dobowy<br/><b/> ', date(@data@/1000, 'unixepoch', 'localtime')]]>
Następnie w całym pliku należy wyszukać wszystkie fragmenty kodu odnoszące się do aktualnej daty i zamienić je na odnoszące się do wcześniej zdefiniowanego argumentu. Wobec tego należy fragmenty:
date('now','localtime')
Zamienić na następujące:
date(@data@/1000, 'unixepoch', 'localtime')
Po wykonaniu tych kroków zmodyfikowany raport będzie wymagał wyboru daty:
Widok okna z wyborem parametru
I będzie prezentował dane o stanach magazynów mobilnych oraz wystawionych dokumentach, zapisach kasowych i obrotu kaucjami z wybranego dnia.
Widok raportu z różnymi danymi

Elementy składowe

Definicja raportu składa się z danych sekcji xml. Główną sekcją raportu jest sekcja reportW niej zaś zawarte są następujące:
  • reportHeader
  • reportType
  • onListVisibillity
  • arguments
  • elements
W celu opisania elementów składowych raportów jako przykład wykorzystany zostanie standardowy raport dostępny w aplikacji Comarch Mobile - Podsumowanie dnia, którego definicja znajduje się w pliku 2#SummaryOfTheDay#pol.xml.

 

Nagłówek

Nagłówek raportu opisany jest sekcją reportHeader, w niej zaś znajdują się poniższe:
Nazwa name
Opis Nazwa raportu.
Parametry
  • wartość tekstowa
 
Nazwa description
Opis Opis raportu.
Parametry
  • wartość tekstowa
Przyklad
<reportHeader> <name>Podsumowanie dnia</name> <description>Podsumowanie wykonanych w dniu operacji. Sprzedaż wg grup. Udział grup w sprzedaży dnia.</description> </reportHeader>
 
Widok raportu w kaflu Raporty
 

Typ raportu

Sekcja oznaczająca typ raportu: reportType. Musi zawierać następującą sekcję:
Nazwa value
Opis Wartość typu raportu. Np. jeżeli użytkownik nie posiada praw do dokumentów zakupowych, to nie wykona raportu o typie 1 oraz 0.
Parametry
  • 0 - wszystkie typy
  • 1 - raport sprzedażowy
  • 2 - raport zakupowy
  • 3 - raport serwisowy
Przyklad
<reportType> <value>0</value> </reportType>
 

Widoczność raportu

Sekcja onListVisibillity określa miejsca w aplikacji mobilnej poza kaflem Raporty, z których dostępny jest raport. Musi zawierać następującą sekcję:
Nazwa value
Opis Wartość występowania raportu. Możliwe wartości łączone np. 129 = 128+1 - raport widoczny zarówno na liście kontrahentów jak i karcie kontrahenta.
Parametry
  • 0 - tylko lista raportów
  • - lista kontrahentów
  • - lista towarów
  • - element wizyty "Inny"
  • 8 - listy pozycji dokumentów
  • 16 - duża kalkulacja podczas dodawania pozycji na dokument
  • 32 - pasek po rozpoczęciu wizyty handlowej
  • 64 - karta towaru
  • 128 - karta kontrahenta
  • suma wybranych wartości
Przyklad
<onListVisibillity> <value>8</value> </onListVisibillity>
 
Dostępność raportu z poziomu dodawania pozycji na dokumencie
 

Argumenty

Raport może wykorzystywać podane przez użytkownika aplikacji po kliknięciu w ikonę ołówka argumenty (parametry). Argumenty znajdują się w sekcji arguments definicji raportu, zaś poszczególne argumenty opatrzone są sekcją argument według następującego przykładu:
Przyklad
<arguments> <argument> ... </argument> </arguments>
 
Parametry raportu Podsumowanie dnia
 
Wskazówka
Aby wstawiane polecenia SQL działały poprawnie należy umieścić je w znaczniku <![CDATA[ polecenieSQL ]>  w celu wyłączenia spod analizy deserializatora XML.
  Argument może zawierać następujące sekcje:
Nazwa id
Opis Identyfikator argumentu.
Parametry
  • wartość liczbowa
 
Nazwa typeId
Opis Typ argumentu.
Parametry
  • 0 - wybór daty
  • 1 - pole tekstowe
  • 2 - lista z parametrami zdefiniowanymi w sekcji posibleSQL
  • 3 - pole liczbowe
  • 4 - wybór kontrahenta
  • 5 - wybór towaru
  • - wybór typu check
Wskazówka
Jeżeli typ argumentu został wybrany jako 0 (wybór daty), to element defaultSQL należy ustawić jako: <![CDATA[select date('now','localtime')]]> zaś posibleSQL zostawić puste wstawiając: <![CDATA[]]>
Przyklad
Przykład argumentu wybranego jako typ (typ check) w raporcie Prezentacja partii towaru (45#ItemLots#pol.xml) dostępnym przy współpracy z systemem ERP Altum: <argument> <id>3</id> <typeId>6</typeId> <name>mag</name> <visibleName>Magazyn</visibleName> <defaultSQL><![CDATA[ SELECT '(' || group_concat(id, ',') || ')' AS Conc, 'Wszystkie' AS Value FROM Warehouses WHERE IsActive = 1 AND Id > 0 GROUP BY Value ]]> </defaultSQL> <posibleSQL><![CDATA[ SELECT id || ' [' || code || '] ' , name FROM Warehouses WHERE IsActive = 1 AND Id > 0 ]]> </posibleSQL> </argument>
 
Widok wyboru parametru o typie check
 
Nazwa name
Opis Nazwa argumentu używana w poleceniach SQL.
Parametry
  • wartość tekstowa
 
Nazwa visibleName
Opis Nazwa argumentu widoczna w aplikacji.
Parametry
  • wartość tekstowa
 
Nazwa defaultSQL
Opis Wartość parametru ustawiana domyślnie. Jeżeli wartość pozostanie pusta (ustawiona na <![CDATA[]]>) to wartość parametru w aplikacji ustawi się na 'Wybierz wartość' i konieczny będzie wybór tego parametru przed otwarciem raportu.
Parametry
  • polecenie SQL
 
Nazwa posibleSQL
Opis Wartości parametru możliwe do wyboru.
Parametry
  • polecenie SQL
 
Nazwa isErpSQL
Opis Znacznik decydujący czy polecenie SQL ma być wykonywane na bazie systemu ERP. Używany w raportach online.
Parametry
  • brak sekcji - polecenie wykonywane na bazie mobilnej
  • - polecenie wykonywane na bazie mobilnej
  • - polecenie wykonywane na bazie systemu ERP
 
Nazwa validationRule
Opis Znacznik definiujący sposób walidacji argumentu (tylko dla typu data).
Parametry
  • Trzy cyfry oddzielone kropkami np. 2.0.1:
    • Pierwsza cyfra: 0 - brak walidacji 1 - sprawdzenie, czy data jest przyszła 2 - sprawdzenie, która data jest późniejsza
    • Druga cyfra - określa pary argumentów (np. argument dataOd 2.1.1 a dataDo 2.1.2)
    • Trzecia cyfra - określa która data ma być wcześniejszą (wartość 1), a która późniejszą (wartość 2)
 
Przyklad
<argument> <id>2</id> <typeId>2</typeId> <name>grupowanie</name> <visibleName>Sposób grupowania</visibleName> <defaultSQL><![CDATA[select 0,'Brak']]></defaultSQL> <posibleSQL><![CDATA[select 0,'Brak' union all select 1,'Kategoria' union all select 2,'Marka' union all select 3,'Producent' union all select 4,'Grupa']]></posibleSQL> </argument>
  Zdefiniowany w powyższym przykładzie argument widoczny jest w aplikacji w następujący sposób:
Parametr Sposób grupowania
 

Elementy

Elementy raportu składają się na jego wygląd w aplikacji mobilnej. Poszczególne elementy raportu znajdują się w sekcji elements definicji raportu, zaś każda z poniżej opisanych sekcji może znajdować się w sekcji elementktóra jest definicją jednego elementu.
Przyklad
<elements> <element> ... </element> </elements>
 
Nazwa id
Opis Identyfikator elementu.
Parametry
  • wartość liczbowa
 
Nazwa typeId
Opis Typ elementu.
Parametry
  • 0 – nagłówek raportu, który w aplikacji widoczny jest w raporcie na zielonej belce.
  • 1 – tabela1
  • 2 – tabela2
  • 3 – wykres słupkowy
  • 4 – wykres kołowy
  • 5 – wykres liniowy
  • 6 – wartość tekstowa
 
Nazwa sql
Opis Polecenie SQL wykonywane na bazie SQL, które tworzy tabelę wynikową. Podanie argumentu odbywa się poprzez umieszczenie jego nazwy w znakach @ np. @grupowanie@.
Parametry
  • polecenie SQL/polecenie wywołujące procedurę
 
Nazwa header
Opis Nagłówek elementu.
Parametry
  • wartość tekstowa/polecenie SQL
 
Nazwa headerType
Opis Typ nagłówka raportu.
Parametry
  • 0 - tekst
  • 1 - polecenie SQL
 
Nazwa isSummary 
Opis Znacznik czy element zawiera podsumowanie zwartości tabeli. W przypadku jego użycia w sekcji sql należy umieścić polecenia sumujące wybrane kolumny tabeli.
Parametry
  • brak sekcji - brak podsumowania
  • 0 - brak podsumowania
  • 1 - podsumowanie
  • polecenie SQL zwracające jedną z powyższych wartości
 
Nazwa isSummaryType
Opis Typ znacznika podsumowania.
Parametry
  • brak sekcji - wartość liczbowa
  • 0 - wartość liczbowa
  • 1 - polecenie SQL
 
Nazwa isErpSQL
Opis Znacznik czy polecenie ma być wykonane na bazie systemu ERP. Używany w raportach online.
Parametry
  • brak sekcji - polecenie wykonywane na bazie mobilnej
  • 0 - polecenie wykonywane na bazie mobilnej
  • 1 - polecenie wykonywane na bazie systemu ERP
 
Nazwa reportTypeVisibility
Opis Widoczność elementu w zależności od rodzaju raportu.
Parametry
  • 0 - wszystkie typy
  • 1 - raport sprzedażowy
  • 2 - raport zakupowy
  • 3 - raport serwisowy
 
Nazwa showNumberOfRows
Opis Wyświetla liczbę zwróconych rekordów w tabeli jako ostatni wiersz tabeli. Używane tylko gdy sekcja isSummary przyjmuje wartość 1.
Parametry
  • brak sekcji - nie wyświetlaj
  • 0 - nie wyświetlaj
  • 1 - wyświetl
 
Nazwa isExecute
Opis Znacznik czy wykonać dany element.
Parametry
  • 0 - brak wykonania
  • 1 - wykonanie
  • polecenie SQL zwracające jedną z powyższych wartości
 
Nazwa isExecuteType
Opis Typ znacznika wykonania elementu.
Parametry
  • brak sekcji - wartość liczbowa
  • - wartość liczbowa
  • 1 - polecenie SQL
Przyklad
<element>
<id>8</id>
<typeId>3</typeId>
<sql>
<![CDATA[

select
coalesce(categories.name, 'Brak kategorii') as Kategoria,
sum(DocumentsPositions.GrossValueInSystemCurrency) as NetValue
from documents
join documentspositions
on documentspositions.documentid = documents.id
AND DocumentsPositions.DocumentIsLocal = Documents.DocumentIsLocal
and DocumentsPositions.IsItemsSetVirtualPosition = 0
and DocumentsPositions.RelatedItemsSetOrdinal is null
join items on items.id = documentspositions.itemid
left join categories on items.categoryid = categories.id
where Documents.DocumentIsLocal = 1 AND documents.NumeratorId IN (16,17) AND datetime(DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@data@/1000, 'unixepoch', 'localtime'),'start of day') and  datetime(DocumentDate/1000, 'unixepoch','localtime') <datetime(date(@data@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds')  and 1 = @grupowanie@ group by categories.name

union all

select
coalesce(brands.name, 'brak marki') as Marka,
sum(DocumentsPositions.GrossValueInSystemCurrency) as NetValue
from documents
join documentspositions
 on documentspositions.documentid = documents.id
 AND DocumentsPositions.DocumentIsLocal = Documents.DocumentIsLocal
 and DocumentsPositions.IsItemsSetVirtualPosition = 0
 and DocumentsPositions.RelatedItemsSetOrdinal is null
join items on items.id = documentspositions.itemid
left join brands on items.brandid = brands.id
where Documents.DocumentIsLocal = 1 AND documents.NumeratorId IN (16,17) AND datetime(DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@data@/1000, 'unixepoch', 'localtime'),'start of day') and  datetime(DocumentDate/1000, 'unixepoch','localtime') <datetime(date(@data@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds')  and 2 = @grupowanie@ group by brands.name

union all

select
coalesce(Producers.name, 'brak producenta') as Grouping,
sum(DocumentsPositions.GrossValueInSystemCurrency) as NetValue
from documents
join documentspositions
 on documentspositions.documentid = documents.id
AND DocumentsPositions.DocumentIsLocal = Documents.DocumentIsLocal
and DocumentsPositions.IsItemsSetVirtualPosition = 0
and DocumentsPositions.RelatedItemsSetOrdinal is null
join items on items.id = documentspositions.itemid
left join Producers on items.producerid = Producers.id
where Documents.DocumentIsLocal = 1 AND documents.NumeratorId IN (16,17) AND datetime(DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@data@/1000, 'unixepoch', 'localtime'),'start of day') and  datetime(DocumentDate/1000, 'unixepoch') <datetime(date(@data@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds') and 3 = @grupowanie@ group by Producers.name

union all

select
coalesce(ig.name  , 'brak grupy towaru') as Grupa ,
sum(DocumentsPositions.GrossValueInSystemCurrency) as GrossValue
from documents
join documentspositions
on documentspositions.documentid = documents.id
AND DocumentsPositions.DocumentIsLocal = Documents.DocumentIsLocal
and DocumentsPositions.IsItemsSetVirtualPosition = 0
and DocumentsPositions.RelatedItemsSetOrdinal is null
join items on items.id = documentspositions.itemid
join itemsgroupslinks igl on items.id = igl.itemid
join itemsgroups ig on groupid = ig.id
where Documents.DocumentIsLocal = 1 AND documents.NumeratorId IN (16,17) AND (select count(*) from itemsgroups join itemsgroupslinks on itemsgroupslinks.itemid = igl.itemid and itemsgroups.id = itemsgroupslinks.groupid where parentid = ig.id) = 0 and datetime(DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@data@/1000, 'unixepoch', 'localtime'),'start of day') and  datetime(DocumentDate/1000, 'unixepoch','localtime') <datetime(date(@data@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds') and @grupowanie@=4 group by ig.name]]>
</sql>
<header>Wykres zakupu wg grupowania</header>
<isSummary>0</isSummary>
<reportTypeVisibility>2</reportTypeVisibility>
</element>
 
Widok standardowego raportu Podsumowanie dnia

Przykłady modyfikacji raportów

Dodanie argumentu

W celu opisania przykładowej modyfikacji raportu wykorzystany zostanie Raport dobowy przedstawiciela. Do raportu zostanie dodany argument za pomocą którego możliwe będzie wybranie dnia, z którego dany raport zostanie zaprezentowany. W tym celu należy wyedytować definicję raportu o nazwie 53#DailyReport#pol.xml znajdującą się w domyślnej lokalizacji C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Reports\ i katalogu odpowiednim dla systemu ERP. W pliku tym należy przed sekcją elements dodać sekcję zawierającą argumenty raportu oraz argument o typie daty (typeId = 0) według następującego przykładu:
Przyklad
<arguments> <argument> <id>1</id> <typeId>0</typeId> <name>data</name> <visibleName>Data</visibleName> <defaultSQL><![CDATA[]]></defaultSQL> <posibleSQL><![CDATA[select date('now','localtime')]]></posibleSQL> </argument> </arguments>
  Kolejnym krokiem dla lepszej czytelności raportu będzie usunięcie godziny z nagłówka raportu znajdującego się na zielonej belce. Dla pierwszego elementu raportu (id = 1) należy wyedytować sekcję sql w pozostawiając następujące polecenie:
<![CDATA[select '<b<![CDATA[>Raport dobowy<br/><b/> ', date(@data@/1000, 'unixepoch', 'localtime')]]>
Następnie w całym pliku należy wyszukać wszystkie fragmenty kodu odnoszące się do aktualnej daty i zamienić je na odnoszące się do wcześniej zdefiniowanego argumentu. Wobec tego należy fragmenty:
date('now','localtime')
Zamienić na następujące:
date(@data@/1000, 'unixepoch', 'localtime')
Po wykonaniu tych kroków zmodyfikowany raport będzie wymagał wyboru daty:
Widok okna z wyborem parametru
I będzie prezentował dane o stanach magazynów mobilnych oraz wystawionych dokumentach, zapisach kasowych i obrotu kaucjami z wybranego dnia.
Widok raportu z różnymi danymi

Dodanie nowej kolumny w tabeli

W celu opisania modyfikacji wykorzystany zostanie raport Sprzedaż SKU. Modyfikacja dotyczyć będzie dodania nowej kolumny z kodem EAN w tabeli Towary.  
Standardowy raport Sprzedaż SKU
  W tym celu należy wyedytować definicję raportu o nazwie 1#SalesSKU#pol.xml znajdującą się w domyślnej lokalizacji C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Reports\.
Wskazówka
Poprawność modyfikowanych zapytań SQL można zweryfikować wykonując je na bazie mobilnej (plik data.db na urządzeniu mobilnym) np. za pomocą narzędzia SQLite Studio.
W pliku należy wyedytować zapytanie SQL dla elementu o id = 3 dodając do niego pole zwracające kod EAN dla danego towaru w poleceniu select wraz z funkcją IFNULL, która w przypadku braku kodu EAN dla towaru zwróci pustą wartość w wierszu tabeli. Następnie należy do zapytania dołączyć tabelę ItemsBarcodes używając polecenia LEFT JOIN oraz odpowiednich aliasów. Dodane linijki zostały oznaczone kolorem żółtym.
<id>3</id>
<typeId>1</typeId>
<sql>
<![CDATA[
	Select
		Items.Name as '[l]Nazwa', 
		IFNULL(bar.Barcode, '') AS EAN,
		(sum(DocumentsPositions.Quantity/DocumentsPositions.Denominator*DocumentsPositions.Nominator))  as '[d4]Ilość', 
		DocumentsPositions.UnitName as JM, 
		cast(ROUND(sum(DocumentsPositions.NetValueInSystemCurrency), 2) as Varchar) || ' ' || c.Symbol as 'Netto', 
		cast(ROUND(sum(DocumentsPositions.GrossValueInSystemCurrency), 2) as varchar) || ' ' || c.Symbol as 'Brutto', 
		sum(DocumentsPositions.Quantity) as '[d4]Ilość(podst.)',
		DocumentsPositions.BaseUnitName as 'JM(podst.)'  
	from Documents d
	join DocumentsPositions
	  on d.Id = DocumentsPositions.DocumentId
	 AND d.DocumentIsLocal = DocumentsPositions.DocumentIsLocal
	 and DocumentsPositions.IsItemsSetVirtualPosition = 0
	 and DocumentsPositions.RelatedItemsSetOrdinal is null
	join Items on Items.Id = DocumentsPositions.ItemId 
	left JOIN ItemsBarcodes bar ON bar.ItemId = DocumentsPositions.ItemId
	join Currencies c ON c.e = 1 AND c.IsSystem = 1
	where d.DocumentIsLocal = 1 AND NumeratorId IN (1,2,3,4,5) AND datetime(d.DocumentDate/1000, 'unixepoch','localtime') >datetime(date(@dataOd@/1000, 'unixepoch','localtime'),'start of day') 
	and  datetime(d.DocumentDate/1000, 'unixepoch','localtime') <datetime(date(@dataDo@/1000, 'unixepoch','localtime'),'start of day','+1 day', '-1 seconds')  
	group by DocumentsPositions.ItemId,unitname order by items.name
	]]>
</sql>
  Zmodyfikowany w ten sposób raport będzie prezentował się następująco:
Raport Sprzedaż SKU z dodatkową kolumną EAN

Usunięcie kolumny z tabeli

W celu opisania modyfikacji wykorzystany zostanie raport Ranking kontrahentów kupujących towar, w którym to usunięte zostaną dwie kolumny z tabeli: Marża (kwotowo) i Marża (procentowo).  
Standardowy raport: Ranking kontrahentów kupujących towar
  W tym celu należy wyedytować definicję raportu o nazwie 38#CustomersPurchasingItems#pol.xml znajdującą się w domyślnej lokalizacji C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Reports\.
Wskazówka
Poprawność modyfikowanych zapytań SQL można zweryfikować wykonując je na bazie mobilnej (plik data.db na urządzeniu mobilnym) np. za pomocą narzędzia SQLite Studio.
  Z pliku należy usunąć część zapytania SQL dla elementu o id = 2, która odpowiada za zwrócenie wartości danych kolumn Marża (kwotowo) i Marża (procentowo). Będzie to poniższy fragment, który dla tego elementu występuje dwa razy:
CASE
  WHEN SUBSTR(ROUND(SUM(Case when d.IsVatFromNetValue == 1 THEN dp.MarginValueInSystemCurrency ELSE dp.MarginValueInSystemCurrency*100/(100+dp.VatRateValue) END), 2), LENGTH(ROUND(SUM(Case when d.IsVatFromNetValue == 1 THEN dp.MarginValueInSystemCurrency ELSE dp.MarginValueInSystemCurrency*100/(100+dp.VatRateValue) END), 2))-1,1) = "."
  THEN ROUND(SUM(Case when d.IsVatFromNetValue == 1 THEN dp.MarginValueInSystemCurrency ELSE dp.MarginValueInSystemCurrency*100/(100+dp.VatRateValue) END), 2) || "0" || "<br/>" || (Select Value From Configuration Where Key == 'Currency')
  ELSE ROUND(SUM(Case when d.IsVatFromNetValue == 1 THEN dp.MarginValueInSystemCurrency ELSE dp.MarginValueInSystemCurrency*100/(100+dp.VatRateValue) END), 2) || "<br/>" || (Select Value From Configuration Where Key == 'Currency')
END AS '[c]Marża<br/>(kwotowo)',
					      					
CASE
  WHEN (Select Value From Configuration Where Key == 'MarginCountType') == 1            
  THEN IFNULL(ROUND(ROUND(SUM(Case when d.IsVatFromNetValue == 1 THEN dp.MarginValueInSystemCurrency ELSE dp.MarginValueInSystemCurrency*100/(100+dp.VatRateValue) END), 2)/SUM(dp.EndNetPriceInSystemCurrency * dp.Quantity)*100, 2), 0.00) || " %"               
  ELSE IFNULL(ROUND(ROUND(SUM(Case when d.IsVatFromNetValue == 1 THEN dp.MarginValueInSystemCurrency ELSE dp.MarginValueInSystemCurrency*100/(100+dp.VatRateValue) END), 2)/SUM(dp.BaseNetPriceInSystemCurrency * dp.Quantity)*100, 2), 0.00) || " %"               
END AS '[c]Marża<br/>(procentowo)'
  Dodatkowo należy usunąć możliwość wyboru sortowania danych po usuniętych kolumnach. W tym celu dla argumentu o id = 4 z sekcji posibleSQL należy usunąć następujące wartości:
UNION ALL
SELECT 3, 'Marża(kwotowo)'
UNION ALL
SELECT 4, 'Marża(procentowo)'
  Po wykonaniu powyższych kroków raport powinien wyglądać następująco:
Raport: Ranking kontrahentów kupujących towar po modyfikacji

Wydruki

Definicje wydruków

W aplikacji zostały przygotowane przykładowe wydruki, które można dowolnie modyfikować i dostosowywać do wymagań Klienta.
Wskazówka
Definicje wydruków dokumentów znajdują się domyślnie w katalogu: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Printouts.
Wskazówka
Definicje wydruków raportów znajdują się domyślnie w katalogu: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Printouts i podkatalogu odpowiednim dla systemu ERP, np. xl11.
Każdy wydruk składa się z trzech części:
  • Data – zapytania wyciągające dane wykorzystywane na wydruku,
  • Layout – układ wydruku,
  • Style – styl wydruku (czcionki, kolory itp.).
Uwaga
Podczas synchronizacji definicji wydruków na urządzenie brana jest pod uwagę data modyfikacji pliku. W celu wymuszenia synchronizacji wydruku należy wykonać dowolną modyfikację.
 

Dodanie nowej definicji wydruku dokumentu

Aby dodać nowy wydruk należy utworzyć jego definicję tworząc pliki Data, Layout i Style, następnie zapisać je w formacie xml. Istnieje możliwość dodania kilku definicji dla jednego dokumentu. Przykładowo dla dokumentu Zamówienie Sprzedaży istnieje standardowa definicja składająca się z plików:
  • 1#SalesOrder#data#Wydruk_domyślny.xml
  • 1#SalesOrder#layout#Wydruk_domyślny.xml
  • 1#SalesOrder#style#Wydruk_domyślny.xml
Należy dodać nową zmodyfikowaną definicję zmieniając w nazwie plików liczbę 1 na taką, która wśród definicji nie istnieje oraz frazę Wydruk_domyślny na wybraną przez siebie nazwę definicji, np:
  • 45#SalesOrder#data#Mój_wydruk.xml
  • 45#SalesOrder#layout#Mój_wydruk.xml
  • 45#SalesOrder#style#Mój_wydruk.xml
Po tych czynnościach podczas wydruku dokumentu mamy możliwość wyboru definicji wydruku:
Wybór definicji wydruku
Uwaga
W przypadku zapisu definicji wydruku w Notatniku należy wybrać kodowanie UTF-8.

Dodanie nowej definicji wydruku raportu

W celu dodania definicji wydruku raportu w katalogu Printouts i podkatalogu odpowiednim dla systemu ERP należy utworzyć pliki Data, Layout i Style zawierając w nazwie Id raportu z katalogu Reports serwera synchronizacji. Przykładowo, aby utworzyć definicję wydruku dla raportu Sprzedaż w okresach należy raport ten odszukać w katalogu Reports, nosi on nazwę 3#SalesInPeriods#pol.xml. Kolejno w katalogu Printouts i odpowienim podkatalogu utworzyć jego definicję tworząc pliki data, layout i style zawierając w nazwie jego Id:
  • 46#Report#data#3#Moj_wydruk.xml
  • 46#Report#layout#3#Moj_wydruk.xml
  • 46#Report#style#3#Moj_wydruk.xml
Po tych czynnościach w aplikacji pojawi się możliwość wydruku raportu Sprzedaż w okresach.

Usunięcie definicji wydruku

Aby usunąć istniejący wydruk, należy zmienić ID wszystkich jego elementów na ujemne, następnie zmienić datę modyfikacji i wykonać synchronizację.  
Zmiana ID wydruku na ujemne

Licznik wydruków

Funkcjonalność licznika wydruków PDF umożliwia ewidencjonowanie wydrukowanych dokumentów danego typu. Dzięki niej będzie można sprawdzić na bazie mobilnej, które dokumenty zostały wydrukowane i ewentualnie według potrzeby będzie można zablokować możliwość edycji już wydrukowanych dokumentów. Dla potrzeb funkcjonalności na bazie mobilnej została dodana tabela RealizedPrintout, w której można odszukać dokładną datę i godzinę wydruku, rodzaj obiektu, liczbę kopii itp. Informację o liczbie wydruków będzie można wykorzystać w raportach, np. ilość wydrukowanych dokumentów ZS danego dnia.

Dodatkowe informacje na wydrukach

Na wszystkich wydrukach dostępnych z poziomu aplikacji wprowadzone są dodatkowe informacje, które dotyczą:
  • numeru wydruku,
  • identyfikatora określającego, że wydruk został stworzony w aplikacji mobilnej,
  • liczby kopii wydruku,
  • identyfikatora operatora.
Dodatkowe dane pozwalają na dokładniejszą weryfikację wydruków wykonanych z poziomu aplikacji przez przedstawicieli.

Źródło danych

Wydruk do pdf

Źródło danych dla wydruku musi zostać umieszczone w pliku o nazwie Data.xml. Głównym elementem w pliku jest sekcja data wewnątrz której musi się znaleźć dokładnie jeden element setf. Wewnątrz elementu setf musi się znaleźć jeden lub więcej elementów set. Każdy element set reprezentuje jeden zbiór danych (wynik jednego zapytania SQL). Musi on zawierać dwa elementy podrzędne: name – który określa nazwę zbioru oraz query, które definiuje zapytanie SQL wykonywane na mobilnej bazie danych aplikacji Comarch Mobile.  
Uwaga
Prezentowane zapytania SQL mogą różnić się w zależności od wersji aplikacji Comarch Mobile.
  Przykład standardowego pliku data.xml występującego w definicji wydruku dokumentu Zamówienie Sprzedaży (1#SalesOrder#data#Wydruk_domyślny.xml):
Przyklad
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE data PUBLIC "//UNKNOWN/" "unknown.dtd"> <data> <setf> <set> <name>Header</name> <query> ... </query> </set> <set> <name>DocumentsPositions</name> <query> ... </query> </set> <set> <name>VatAggregation</name> <query> ... </query> </set> <set> <name>Logo</name> <query>SELECT Data FROM PrintoutsImages WHERE Name='logo.png'</query> </set> <set> <name>FooterAppVersionNumber</name> <query> SELECT MajorVersion AS MajorVersion, MinorVersion AS MinorVersion, BuildVersion AS BuildVersion FROM Packages </query> </set> <set> <name>FooterOperatorCode</name> <query> SELECT Name AS OperatorCode FROM Users </query> </set> <set> <name>FooterCopyNumber</name> <query> SELECT CASE WHEN COUNT(Number) = 0 THEN 1 ELSE COUNT(Number) + 1 END AS Numbers FROM Documents INNER JOIN RealizedPrintouts rp ON(Documents.Number = rp.DocumentNumber) WHERE Documents.Id=@Id@ </query> </set> </setf> </data>

 

Wydruk termiczny

Jedyną różnicą w definicji pliku data.xml dla wydruków termicznych względem definicji wydruku do pdf jest brak elementu setfPrzykład takiego wydruku (11#SalesOrder#data#Thermal#Vline112#Wydruk_domyślny.xml) wygląda nastepująco:
Przyklad
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE data PUBLIC "//UNKNOWN/" "unknown.dtd"> <data> <set> <name>Header</name> <query> ... </query> </set> <set> <name>DocumentsPositions</name> <query> ... </query> </set> <set> <name>VatAggregation</name> <query> ... </query> </set> <set> <name>FooterAppVersionNumber</name> <query> SELECT MajorVersion AS MajorVersion, MinorVersion AS MinorVersion, BuildVersion AS BuildVersion FROM Packages </query> </set> <set> <name>FooterOperatorCode</name> <query> SELECT Name AS OperatorCode FROM Users </query> </set> <set> <name>FooterCopyNumber</name> <query> SELECT CASE WHEN COUNT(Number) = 0 THEN 1 ELSE COUNT(Number) + 1 END AS Numbers FROM Documents INNER JOIN RealizedPrintouts rp ON(Documents.Number = rp.DocumentNumber) WHERE Documents.Id=@Id@ </query> </set> </data>

Układ wydruku

Zawartość oraz układ wydruku definiowany jest w pliku Layout.xml. Głównym elementem w pliku jest document. Musi zawierać on element body, który zawiera główną część wydruku. Zawartość elementów body czy też footer może zostać skomponowana z innych elementów opisanych poniżej. Elementy te mogą być zagnieżdżane. Parametr class odwołuje się do klasy stylu zdefiniowanej w pliku Styles.xml dla danego elementu stylującego. Wszystkie dostępne elementy, które mogą zostać zastosowane podczas tworzenia układu wydruku zostały opisane poniżej. Opis każdego elementu zawiera następujące sekcje:
  • Parametry – opisuje wszystkie dostępne atrybuty jakie można dodać do elementu i co oznaczają.
  • Elementy stylujące – zawiera listę selektorów, które dopasowują dany element w pliku Styles.xml
  • Elementy podrzędne – opcjonalna sekcja opisująca elementy, które mogą wystąpić tylko wewnątrz danego elementu. Dla każdego elementu podrzędnego zachowany jest układ opisu taki sam jak dla głównego elementu.
  • Przykład – zawiera fragment kodu z przykładowym wykorzystanie opisywanego elementu.
Wszystkie dostępne elementy, które mogą zostać zastosowane podczas tworzenia układu wydruku zostały opisane poniżej.  

Elementy - wydruk do pdf

 
Nazwa Document
Opis Otwarcie/zamknięcie dokumentu
Parametry Brak
Elementy stylujące Brak
 
Nazwa Body
Opis Główna część wydruku
Parametry Brak
Elementy stylujące
  • Body
 
Nazwa Footer
Opis Stopka wydruku
Parametry Brak
Elementy stylujące
  • Footer
 
Nazwa pageNumber
Opis Numeracja stron
Parametry Brak
Elementy stylujące Brak
Przyklad
<footer> Comarch Mobile, v <data set="FooterAppVersionNumber" var="MajorVersion" />.<data set="FooterAppVersionNumber" var="MinorVersion" />.<data set="FooterAppVersionNumber" var="BuildVersion" />, Operator: <data set="FooterOperatorCode" var="OperatorCode" />, nr kopii: <data set="FooterCopyNumber" var="Numbers" /> <br /> Strona <pageNumber/> </footer>
 
Nazwa Horizontal
Opis Podział na sekcje ułożone poziomo
Parametry Brak
Elementy stylujące
  • Horizontal
Elementy podrzędne
  • Section
 
Nazwa Horizontal: Section
Opis Sekcja
Parametry
  • weight – waga szerokości kolumny. Wartość domyślna 1.
Elementy stylujące
  • Section
Przyklad
<horizontal> <section class="header"> <p class="header">Nabywca</p> </section> <section weight="0.05"/> <section class="header"> <p class="header">Odbiorca</p> </section> </horizontal>
 
Nazwa Image
Opis Obraz z bazy lub z dysku
Parametry
  • path – ścieżka do pliku względnie do katalogu głównego definicji wydruku. Jeżeli ustawiamy parametr path pozostałe parametry będą ignorowane.
  • set – Nazwa źródła danych
  • var – Nazwa kolumny w źródle danych
  • index – Indeks wiersza w źródle danych
Elementy stylujące
  • Image
Przyklad
<image set="Logo" var="Data" />
 
Nazwa P
Opis Paragraf
Parametry Brak
Elementy stylujące
  • P
Przyklad
<p class="centered">Uprawniony do odbioru dokumentu</p>
 
Nazwa Data
Opis Element zwracający dane ze źródła danych w postaci tekstowej
Parametry
  • set – nazwa zestawu danych
  • var – nazwa kolumny
  • index – indeks wiersza ze źródła danych (wartość domyślna 0)
  • format – todo
Elementy stylujące Brak
Przyklad
<data set="Header" var="CompanyName" />
 
Nazwa Hr
Opis Linia pozioma
Parametry Brak
Elementy stylujące
  • Hr
Przyklad
<section> <hr/> <p class="centered">Uprawniony do wystawienia dokumentu</p> </section>
 
Nazwa Br
Opis Złamanie linii w tekście
Parametry Brak
Elementy stylujące Brak
Przyklad
<data set="Header" var="CompanyName" /><br/> <data set="Header" var="Street" /><br/>
 
Nazwa Spacer
Opis Separator
Parametry Brak
Elementy stylujące Brak
Przyklad
... </horizontal> <spacer/><spacer/> <if> ...
 
Nazwa If
Opis Element testowy pozwalający na układ wydruku zależny od dowolnych warunków
Parametry Brak
Elementy stylujące Brak
Elementy podrzędne
  • Test
  • True
  • False
 
Nazwa If: Test
Opis Element zawierający warunek decydujący o tym czy do wydruku zostaną dodane elementy z sekcji true czy false . Warunek może mieć postać: eq - równy, lt - mniej niż, gt - więcej niż.
Parametry Brak
Elementy stylujące Brak
 
Nazwa If: True
Opis Element zawierający elementy, które zostaną w przypadku kiedy warunek z sekcji test zostanie spełniony.
Parametry Brak
Elementy stylujące Brak
 
Nazwa If: False
Opis Element zawierający elementy, które zostaną w przypadku kiedy warunek z sekcji test nie zostanie spełniony.
Parametry Brak
Elementy stylujące Brak
Przyklad
<if> <test><data set="Header" var="ReverseCharge" /> eq 1</test> <true> <p class="right">*) - odwrotne obciążenie</p> </true> <false> <p class="right">Odwrotne obciążenie nie występuje</p> </false> </if>
 
Nazwa Table
Opis Tabela dynamiczna o ustalonej liczbie kolumn.
Zawartość Jeden lub więcej elementów column
Parametry
  • split - określa czy tabela może zostać podzielona na kilka stron. Parametr może przyjmować wartość true lub false.
  • set - nazwa zestawu danych.
Elementy stylujące
  • Table
Elementy podrzędne
  • Column
  • TableData
 
Nazwa Table: Column
Opis Element definiujący kolumnę tabeli.
Zawartość Dowolne elementy tekstowe
Parametry
  • description - nagłówek kolumny.
  • weight - waga szerokości kolumny. Wartość domyślna 1
Elementy stylujące
  • DataCell
  • HeadCell
 
Nazwa Table: TableData
Opis Element zwracający wartość tekstową ze zbioru danych bazującą na zbiorze danych tabeli, kolumnie podanej w parametrze var oraz aktualnym wierszu tabeli.
Zawartość Element nie może zawierać żadnych elementów.
Parametry
  • var - nazwa kolumny ze zbioru danych.
  • format - format danych
Elementy stylujące Brak
Przyklad
<table set="DocumentPositions"> <column weight="2" description="Lp." class="number"> <rowNumber /> </column> <column weight="12" description="[Kod] Nazwa towaru"> [<tableData var="Code" />] <tableData var="Name" /> </column> <column weight="4" description="Ilość" class="number"> <tableData var="RealizedQuantity" /> </column> <column weight="4" description="Jm. (podstawowa)"> <tableData var="BasicUnitSymbol" /> </column> <column weight="4" description="Ilość" class="number"> <tableData var="SecondaryQuantityRealized" /> </column> <column weight="4" description="Jm. (pomocnicza)"> <tableData var="SecondaryUnitSymbol" /> </column> </table>
   

Elementy - wydruk termiczny

 
Nazwa Document
Opis Otwarcie/zamknięcie dokumentu
Parametry Brak
 
Nazwa Command
Opis
Parametry
  • comment
  • format 
  • code
Przyklad
<command comment="next_line" format="hex" code="0A"/>
 
Nazwa Data
Opis Element zwracający dane ze źródła danych w postaci tekstowej
Parametry
  • query - nazwa zbioru danych z pliku data
  • columnName - nazwa kolumny
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
  • maxlines - maksymalna ilość linii, którą może zająć element
 
Nazwa Text
Opis Element testowy
Parametry
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
 
Nazwa Line
Opis Znacznik linii
Parametry Brak
Przyklad
<line> <text offset="30" length="35" align="left">Data dostawy/wykonania usługi: </text> <data query="Header" columnName="ExecutionDate" offset="65" length="15" align="left" /> </line>
 
Nazwa Table
Opis Tabela dynamiczna o ustalonej liczbie kolumn.
Parametry
  • query - nazwa zbioru danych z pliku data
  • length - szerokość elementu
Elementy podrzędne
  • Header
  • Row
 
Nazwa Table: Header
Opis Nagłówek tabeli (nazwy kolumn).
Parametry Brak
Elementy podrzędne
  • Column
 
Nazwa Table: Header: Column
Opis Element definiujący kolumnę tabeli.
Parametry
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
 
Nazwa Table: Row
Opis Element definiujący wiersz tabeli.
Parametry
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
Elementy podrzędne
  • Row_item
 
Nazwa Table: Row: Row_item
Opis Element definiujący zawartość wiersza tabeli.
Parametry
  • offset - miejsce (licząc od lewej strony), od której ma być drukowany element
  • length - szerokość elementu
  • align - pozycja elementu, możliwe wartości: left, right, center
Przyklad
<table query="DocumentsPositions" length="80"> <header> <column offset="0">L.p.</column> <column offset="7">[Kod]Nazwa</column> <column offset="22">Ilość</column> <column offset="32">J.M.</column> <column offset="39"><data query="Header" columnName="PriceType"/></column> <column offset="53">Rabat</column> <column offset="61">Wartość</column> <column offset="77">VAT</column> </header> <row> <line> <row_item name="Ordinal" offset="0" length="7" align="center" /> <row_item name="ItemName" offset="7" length="70" align="left" maxlines="2"/> </line> <line> <row_item name="Quantity" offset="17" length="10" align="right" /> <row_item name="UnitName" offset="28" length="9" align="left" /> <row_item name="Price" format="currency" decimal-places="PriceDecimalPlaces" offset="37" length="10" align="right" /> <row_item name="Discount" format="currency" offset="52" length="7" align="right" /> <row_item name="Value" format="currency" offset="60" length="10" align="right" /> <row_item name="VatRateValue" offset="70" length="10" align="right" /> </line> </row> </table>

Wygląd wydruku

Wydruk do pdf

Poniższy dokument składa się z opisu trzech części składających się na wygląd wydruku:
  • Atrybuty zawężające
  • Selektory
  • Reguły
Dostosowanie wygląd wydruku możliwe jest poprzez pliki #style#.xml, np. standardowym plikiem definiującym wygląd Faktury Sprzedaży jest plik 7#SalesInvoice#style#Wydruk_domyślny.xml. Głównym elementem tego pliku jest style, który zawiera elementy określające wygląd poszczególnych elementów wydruku zdefiniowanych w pliku layout. Jednym z elementów podrzędnych elementu style jest element fonts, który określa wszystkie czcionki, które zostaną wykorzystane w wydruku. Może on zawierać, jeden lub więcej elementów font, który definiuje krój, wielkość, wygląd oraz styl fontu.
Przyklad
<font name="title" face="Arial" size="20" color="#9fc54c"/>
Atrybuty elementu font to:
  • name - określa nazwę fontu, przez którą możemy się do niego odwołać
  • face - nazwa kroju fontu
  • size - rozmiar w punktach
  • color - kolor
  • style - style fontu. Może zawierać jedną (lub więcej wartości oddzielonych znakiem spacji) z wartości bold, italic, underline.
Wewnątrz elementu fonts powinien znaleźć się także jeden element font z pominiętym atrybutem name. Font ten będzie stosowany jako font domyślny dla wydruku.
Przyklad
<fonts> <font face="Trebuchet MS" size="10"/> <font name="title" face="Arial" size="20" color="#9fc54c"/> <font name="header" face="Tahoma" size="8" color="#999999"/> <font name="summary_value" face="Trebuchet MS" size="15" color="#9fc54c" style="bold"/> </fonts>
  Oprócz elementu fonts w pliku Styles.xml mogą znajdować się elementy w schemacie:
<selektor>
<reguła/>
<reguła/>
[...]
</selektor>
Gdzie selektor decyduje o tym, czy podległe mu reguły zostaną zastosowane dla danego elementu. Większość selektorów ma taką samą nazwę jak element, który stylują. Np. w celu ostylowania paragrafu (element p w pliku Layout.xml ) należy zastosować selektor p.  
Przyklad
<p> <margin top="5"/> </p>
Powyższy przykład wszystkim paragrafom wydruku ustawi margines górny na 5 punktów. Selektor może wybrać do ostylowania tylko wybrane elementy danego typu. W tym celu do elementu w pliku Layout.xml oraz selektora w pliku Styles.xml należy dodać atrybut class. Selektor wybierze wtedy tylko te elementy, które mają identyczną wartość atrybutu class.  
Przyklad
<p> <text font="normal"/> </p> <p class="title"> <text font="title"/> </p>
Powyższy przykład ustawi font wszystkich paragrafów na normal ale te, których atrybut class to title zostanie ustawiony font title. Dokładny opis innych atrybutów selektorów oraz spis reguł stylujących znajduje się w sekcji Wygląd. Lista selektorów oraz reguł, które można zastosować dla danego elementu znajduje się w opisie poszczególnych elementów w sekcji Układ. Reguły z pliku style stosowane są od góry do dołu tzn. jeżeli dwa selektory dopasują ten sam element i zawierają one takie same reguły z innymi wartościami to zostanie zastosowana wartość występująca później.

 

Atrybuty zawężające

Opis każdego selektora zawiera listę elementów, które styluje oraz listę reguł, jakie można w nim umieścić. Opis każdej reguły zawiera listę atrybutów jakie można w niej zastosować. Każdy selektor może zostać zawężony poprzez atrybut class. Dodatkowo selektory elementów związane z tabelami mogą zostać zawężone poprzez atrybut index, który może zawierać liczbę całkowitą lub wyrażenie postaci An+B, gdzie A oraz B to liczby całkowite. Selektor taki dopasuje element, jeżeli zgadza się on z indeksem wiersza tabeli (wiersze tabeli numerowane są od 0 z góry na dół). Przykłady:
  • index="0" - dopasuje pierwszy wiersz w tabeli
  • index="first" - dopasuje pierwszy wiersz w tabeli
  • index="last" - dopasuje ostatni wiersz w tabeli
  • index="5" - dopasuje szósty wiersz w tabeli
  • index="2n" - dopasuje parzyste wiersze tabeli tzn. z indeksem równym 0,2,4... czyli wiersze pierwszy, trzeci, piąty...
  • index="3n+1" - dopasuje wiersze z indeksem 1, 4, 7...
  • index="3n+2" - dopasuje wiersze z indeksem 2, 5, 8...
 

Selektory

Nazwa Body
Opis Selektor dla głównego elementu wydruku
Elementy stylowane
  • Body
Parametry zawężające
  • class
Reguły
  • page
  • margin
Przyklad
<body> <page size="a4" orientation="portrait"/> <margin left="20" right="20" top="27" bottom="27"/> </body>
 
Nazwa Footer
Opis Selektor dla stopki dokumentu
Elementy stylowane
  • Footer
Parametry zawężające
  • class
Reguły
  • margin
  • text
Przyklad
<footer> <text align="right"/> </footer>
 
Nazwa DataCell
Opis Selektor dla komórki w tabeli dynamicznej
Elementy stylowane
  • Column
Parametry zawężające
  • class
  • index
Reguły
  • border
  • background
  • text
Przyklad
<dataCell class="index"> <background color="#26437E"/> <text font="header" align="right"/> </dataCell>
 
Nazwa HeadCell
Opis Selektor dla komórki nagłówka w tabeli dynamicznej
Elementy stylowane
  • Column
Parametry zawężające
  • class
Reguły
  • border
  • background
  • text
Przyklad
<headCell> <background color="#26437E"/> <border left="0.5" right="0.5" top="0.5" bottom="0.5" color="#E4F0F7"/> <text font="header" align="center"/> </headCell>
 
Nazwa Hr
Opis Selektor dla linii poziomej
Elementy stylowane
  • Hr
Parametry zawężające
  • class
Reguły
  • line
Przyklad
<hr> <line style="dotted"/> </hr>
 
Nazwa Image
Opis Selektor dla obrazka
Elementy stylowane
  • Image
Parametry zawężające
  • class
Reguły
  • fit
Przyklad
<image class="signature"> <fit width="80" height="80" /> </image>
 
Nazwa P
Opis Selektor dla paragrafu
Elementy stylowane
  • P
Parametry zawężające
  • class
Reguły
  • margin
  • text
  • border
  • background
Przyklad
<p class="title"> <text font="title"/> </p>
 
Nazwa Section
Opis Selektor dla sekcji
Elementy stylowane
  • Section
Parametry zawężające
  • class
Reguły
  • border
  • background
  • text
Przyklad
<section class="header"> <background color="#26437E"/> <border left="0.5" right="0.5" top="0.5" bottom="0.5" color="#E4F0F7"/> </section>
 
Nazwa Table
Opis Selektor dla tabeli dynamicznej
Elementy stylowane
  • Table
Parametry zawężające
  • class
Reguły
  • width
  • border
  • background
  • text
Przyklad
<table> <width percentage="100"/> </table>
 

Reguły

 
Nazwa Background
Opis Reguła określająca tło elementu
Atrybuty
  • color - kolor tła elementu. Może on być w formacie #RRGGBB lub 0xRRGGBB lub 0xAARRGGBB
 
Nazwa Border
Opis Reguła określająca obramowanie elementu
Atrybuty
  • left - szerokość lewego obramowania.
  • right - szerokość prawego obramowania.
  • top - szerokość górnego obramowania.
  • bottom - szerokość dolnego obramowania.
  • color - kolor obramowania elementu. Może on być w formacie #RRGGBB lub 0xRRGGBB lub 0xAARRGGBB
  • borderStyle - styl obramowania. Może przyjmować jedną z wartości: o dashdot o dashdotdot o dashlargegap o dashsmallgap o dot o none o single
Uwagi Szerokość obramowania może być podana w różnych jednostkach m.in.: cm, in, mm, pt. Domyślną jednostką są punkty.
 
Nazwa borderLeft, borderRight, borderTop, borderBottom
Opis Reguły określające poszczególne części obramowania elementu
Atrybuty
  • width - szerokość obramowania
  • color - kolor obramowania
  • borderStyle - styl obramowania
 
Nazwa Fit
Opis Reguła określająca rozmiar elementu
Atrybuty
  • width - szerokość elementu
  • height - wysokość elementu
Uwagi Szerokość i wysokość może być podana w różnych jednostkach m.in.: cm, in, mm, pt. Stylowany element zachowa swoje proporcje przyjmując mniejszy z podanych wymiarów.
 
Nazwa Margin
Opis Reguła określająca marginesy elementu
Atrybuty
  • left - lewy margines
  • right - prawy margines
  • top - górny margines
  • bottom - dolny margines
Uwagi Szerokość marginesu może być podana w różnych jednostkach m.in.: cm, in, mm, pt.
 
Nazwa Text
Opis Reguła określająca styl tekstu
Atrybuty
  • align - wyrównanie tekstu. Przyjmuje jedną z wartości: o right - wyrównanie do prawej o left - wyrównanie do lewej o justify - wyjustowanie tekstu o center - wyśrodkowanie tekstu
  • indent - wcięcie pierwszej linii tekstu.
  • leftIndent - wcięcie tekstu z lewej.
  • rightIndent - wcięcie tekstu z prawej.
  • font - nazwa fontu zdefiniowana wcześniej w sekcji fonts .
  • color - kolor tekstu. Może on być w formacie #RRGGBB lub 0xRRGGBB lub 0xAARRGGBB
 
Nazwa Width
Opis Reguła określająca szerokość elementu
Atrybuty
  • percentage - procentowa szerokość elementu bazująca na szerokości elementu-rodzica

Przykłady wydruków fiskalnych

W aplikacji Comarch Mobile Sprzedaż nie ma możliwości modyfikacji wydruków z drukarki fiskalnej. Poniżej prezentowane są przykładowe wydruki paragonu oraz faktury na drukarce fiskalnej. W przypadku faktury drukowana jest również kopia dokumentu.
Przykład wydruku faktury na drukarce fiskalnej
Przykład wydruku paragonu na drukarce fiskalnej

Przykłady wydruków termicznych

W aplikacji Comarch Mobile możliwy jest wydruk dokumentów na drukarce termicznej. Wygląd wydruków można dowolnie modyfikować zgodnie z instrukcją dostępną TUTAJ. Poniżej znajduje się przykład standardowego wydruku termicznego dokumentu Zamówienia Sprzedaży.
Przykład wydruku Zamówienia Sprzedaży na drukarce fiskalnej

Przykłady modyfikacji wydruków do pdf

Dodawanie kolumny

Do omówienia tej modyfikacji, wykorzystany zostanie przykład dodania kolumny zawierającej informację o rabacie. W celu dodania nowej kolumny należy wyedytować plik #data#. Należy odszukać zapytanie wydobywające dane związane z pozycjami dokumentu. Aby wykorzystać te dane w definicji dokumentu konieczne jest stworzenie aliasu tej kolumny np. Discount. Po dokonaniu zmian zapisujemy dokument.
Dodanie aliasu kolumny odpowiedzialnej za wyświetlanie rabatu
Aby dane te pokazywały się na dokumencie, konieczne jest odpowiednie zmodyfikowanie pliku #layout#, w którym w odpowiedniej sekcji należy dodać kolumnę o nazwie „Rabat”. W description należy wpisać nazwę kolumny, class - określenie klasy, w tym przypadku jest to numer, var - odniesienie do aliasu kolumny określonej w pliku data tj. Discount. Aby poza wartością rabatu wyświetlany był również symbol procentów, należy dodać na końcu linii znak „%”. Ponieważ rabat powinien być wyświetlany zarówno na dokumencie tworzonym od wartości brutto jak i netto, należy skopiować definicje kolumny do poniższej sekcji. Na koniec zapisujemy zmiany.
Dodanie kolumny Rabat w pliku layout
 

Zmiana kolorystyki

W celu zmiany kolorystyki wydruku należy wyedytować plik #style#, zmieniając kod koloru dla poszczególnych elementów definicji wydruku w sekcji <fonts>. Kolory podawane są w zapisie heksadecymalnym.
Wskazówka
Zalecanym programem do tej modyfikacji jest Notepad++. Definicje kolorów w zapisie heksadecymalnym dostępne są w Internecie.
Zmiana koloru w pliku style

Dodawanie/usuwanie/zmiana logo

Aby logo było dodane na wydruku, należy wybraną grafikę zapisać pod nazwą logo.png w folderze wydruków Printouts. Zmiana logo na inne możliwa jest poprzez zmianę nazwy poprzedniej grafiki oraz dodanie nowej, jako plik o nazwie logo.png o nowszej dacie modyfikacji od poprzedniego, tak jak zostało to zaprezentowane na poniższym rysunku:
Zmiana logo na wydruku
W celu usunięcia logo z wydruku dokumentu, należy usunąć zapytania zwracające logo tj.
  • W pliku Data: <set> <name>Logo</name> <query>SELECT Data FROM PrintoutsImages WHERE Name='logo.png'</query> </set>
  • W pliku Layout: <image set="Logo" var="Data" />

Dodanie nowych danych na wydruk

Jeżeli istnieje potrzeba pokazania na wydruku niestandardowych danych można to zrealizować w następujący sposób:
  • przesynchronizować potrzebne dane do tabeli Configuration bazy mobilnej
  • umieścić nowe dane na wydruku
Poniżej przedstawiony jest przykład dodania na wydruk dokumentu danych pracownika, który wystawił dokument: Zamówienie Sprzedaży przy współpracy z Comarch ERP XL 2018.2.1. W sposób opisany poniżej można synchronizować dowolne dane z systemu ERP i prezentować je na wydruku.
Uwaga
Zapytania SQL wykorzystywane w tym przykładzie mogą różnić się w zależności od systemu ERP oraz jego wersji.
W pierwszej kolejności należy w odpowiednim dla wersji systemu ERP pliku konfiguracyjnym znajdującym się w katalogu Methods serwera synchronizacji (ścieżka domyślna: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Methods\configuration) dodać następujące zapytanie:  
UNION ALL
select
1,
0,
'ImieNazwisko',
cast ((Prc_Imie1 +' '+ Prc_Nazwisko) as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
UNION ALL
select
1,
0,
'telefon',
cast (Prc_Telefon3 as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
UNION ALL
select
1,
0,
'email',
cast (Prc_EMail as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
  Powyższe zapytania pobierają z bazy systemu ERP dane dotyczące pracownika: imię i nazwisko, telefon, e-mail. Dodanie zapytań do pliku spowoduje, że konkretne dane zostaną przesynchronizowane do tabeli Configuration na bazie mobilnej. Kolejnym krokiem jest modyfikacja pliku wydruku 1#SalesOrder#data#Wydruk_domyślny.xml znajdującego się w katalogu Printouts serwera synchronizacji. Należy dodać zapytania pobierające zsynchronizowane wcześniej dane do tabeli Configuration. Nowo dodane fragmenty zostały oznaczone kolorem żółtym:  
...
<set>
<name>Logo</name>
<query>SELECT Data FROM PrintoutsImages WHERE Name='logo.png'</query>
</set>
<set>
<name>Wystawil</name>
<query>SELECT Value FROM Configuration WHERE key like 'ImieNazwisko'</query>
</set>
<set>
<name>Wystawiltel</name>
<query>SELECT Value FROM Configuration WHERE key like 'telefon'</query>
</set>
<set>
<name>Wystawilemail</name>
<query>SELECT Value FROM Configuration WHERE key like 'email'</query>
</set>
...
  Ostatnim krokiem jest modyfikacja pliku wydruku 1#SalesOrder#layout#Wydruk_domyślny.xml, która polega na dodaniu wpisów odpowiedzialnych za wyświetlanie danych, które zostały zwrócone w zapytaniach w pliku 1#Order#data#Wydruk_domyślny.xml:  
…
<horizontal split="no">
<section weight="2.4"/>
<section weight="0.8">
<image class="signature" set="Header" var="Signature" />
</section>
</horizontal>
<horizontal split="no">
<section weight="1.5">
<p class="left"><data set="Wystawil" var="Value" /></p>
<p class="left">Telefon: <data set="Wystawiltel" var="Value" /></p>
<p class="left">E-mail: <data set="Wystawilemail" var="Value" /> </p>
<hr/>
<p class="centered">Uprawniony do wystawienia dokumentu</p>
</section>
  Po wykonaniu powyższych modyfikacji należy wykonać synchronizację z urządzenia mobilnego. Po modyfikacji wydruk powinien wglądać następująco:
 
Zamówienie Sprzedaży z danymi osoby wystawiającej
 

Przykłady modyfikacji wydruków termicznych

Usunięcie tabeli i przesunięcie tekstu

Opis modyfikacji będzie dotyczył standardowej definicji wydruku termicznego dokumentu Faktura sprzedaży. Opisane zostanie usunięcie tabeli zawierającej informacje o VAT oraz przesunięcie informacji o zapłacie na prawą stronę wydruku.
Standardowy wydruk termiczny dokumentu Faktura Sprzedaży
  Należy zmodyfikować plik: 17#SalesInvoice#layout#Thermal#Vline112#Wydruk_domyślny.xml. W pliku tym należy usunąć lub zakomentować linijki dotyczące tabeli zawierającej informacje o VAT jak poniżej:
<table query="VatAggregation" length="64">
<header>
<column offset="0">Stawka VAT</column>
<column offset="18">Wartość netto</column>
<column offset="34">Wartość VAT</column>
<column offset="48">Wartość brutto</column>
</header>
<row>
<line>
<row_item name="VatRateName" offset="0" length="18" align="left" />
<row_item name="NetValue" format="currency" offset="18" length="13" align="right" />
<row_item name="VatValue" format="currency" offset="31" length="14" align="right" />
<row_item name="GrossValue" format="currency" offset="45" length="17" align="right" />
</line>
</row>
</table>
oraz dla części zawierającej informacje o zapłacie zmodyfikować wartości offset z 0 na 40 (cały wydruk ma szerokość 80) poszczególnych danych jak w przykładzie poniżej zaznaczono kolorem czerwonym:
...
<line>
<text offset="40" length="21" align="left">Razem do zapłaty:</text>
<data query="Summary" columnName="Value" format="currency" offset="22" length="10" align="right" />
</line>
<line>
<text offset="40" length="21" align="left">Zapłacono:</text>
<data query="Summary" columnName="Paid" format="currency" offset="22" length="10" align="right" />
</line>

<command comment="set_bold_font" format="hex" code="1B47"/> 
<line>
<text offset="40" length="21" align="left">Pozostaje do zapłaty:</text>
<data query="Summary" columnName="ToPay" format="currency" offset="22" length="10" align="right" />
<data query="Header" columnName="Currency" offset="33" length="5" align="left" />
</line>
...
  Po wprowadzeniu tej modyfikacji wydruk termiczny Faktury sprzedaży powinien wyglądać następująco:
Wydruk dokumentu Faktura Sprzedaży po modyfikacji
 

Dodanie nowych danych na wydruk

Jeżeli istnieje potrzeba pokazania na wydruku niestandardowych danych można to zrealizować w następujący sposób:
  • przesynchronizować potrzebne dane do tabeli Configuration bazy mobilnej
  • umieścić nowe dane na wydruku
 
Standardowy wydruk termiczny dokumentu Faktura Sprzedaży
  Poniżej przedstawiony jest przykład dodania na wydruk dokumentu danych pracownika, który wystawił dokument: Faktura Sprzedaży przy współpracy z Comarch ERP XL 2018.2.1. W sposób opisany poniżej można synchronizować dowolne dane z systemu ERP i prezentować je na wydruku.
Uwaga
Zapytania SQL wykorzystywane w tym przykładzie mogą różnić się w zależności od systemu ERP oraz jego wersji.
W pierwszej kolejności należy w odpowiednim dla wersji systemu ERP pliku konfiguracyjnym znajdującym się w katalogu Methods serwera synchronizacji (ścieżka domyślna: C:\Program Files (x86)\Comarch Mobile\Serwer synchronizacji\Methods\configuration) dodać następujące zapytanie:  
UNION ALL
select
1,
0,
'ImieNazwisko',
cast ((Prc_Imie1 +' '+ Prc_Nazwisko) as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
UNION ALL
select
1,
0,
'telefon',
cast (Prc_Telefon3 as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
UNION ALL
select
1,
0,
'email',
cast (Prc_EMail as varchar)
from cdn.opekarty opekar
join cdn.PRCKarty pckar on opekar.Ope_PrcNumer=pckar.Prc_GIDNumer
where Ope_GIDTyp =128 and Ope_GIDNumer=@UserId
  Powyższe zapytania pobierają z bazy systemu ERP dane dotyczące pracownika: imię i nazwisko, telefon, e-mail. Dodanie zapytań do pliku spowoduje, że konkretne dane zostaną przesynchronizowane do tabeli Configuration na bazie mobilnej. Kolejnym krokiem jest modyfikacja pliku wydruku 11#SalesOrder#data#Thermal#Vline112#Wydruk_domyślny.xml znajdującego się w katalogu Printouts serwera synchronizacji. Należy dodać zapytania pobierające zsynchronizowane wcześniej dane do tabeli Configuration. Nowo dodane fragmenty zostały oznaczone kolorem żółtym:
...
<set>
<name>Logo</name>
<query>SELECT Data FROM PrintoutsImages WHERE Name='logo.png'</query>
</set>
<set>
<name>Wystawil</name>
<query>SELECT Value FROM Configuration WHERE key like 'ImieNazwisko'</query>
</set>
<set>
<name>Wystawiltel</name>
<query>SELECT Value FROM Configuration WHERE key like 'telefon'</query>
</set>
<set>
<name>Wystawilemail</name>
<query>SELECT Value FROM Configuration WHERE key like 'email'</query>
</set>
...
  Ostatnim krokiem jest modyfikacja pliku wydruku 11#SalesOrder#layout#Thermal#Vline112#Wydruk_domyślny.xml, która polega na dodaniu wpisów odpowiedzialnych za wyświetlanie danych, które zostały zwrócone w zapytaniach w pliku 11#SalesOrder#data#Thermal#Vline112#Wydruk_domyślny.xml w miejsce nad linię z informacją o osobach uprawnionych i dacie odbioru:  
<line>
<data query="Wystawil" columnName="Value" format="currency" offset="0" length="30" align="center" />
</line>
<line>
<data query="Wystawiltel" columnName="Value" format="currency" offset="0" length="30" align="center" />
</line>
<line>
<data query="Wystawilemail" columnName="Value" format="currency" offset="0" length="30" align="center" />
</line>

<line>
<text offset="0" length="30" align="center">Uprawniony do wystawienia dok.</text>
<text offset="31" length="18" align="center">Data odbioru</text>
<text offset="50" length="30" align="center">Uprawniony do odbioru dok.</text>
</line>
…
  Po wykonaniu powyższych modyfikacji należy wykonać synchronizację z urządzenia mobilnego. Po modyfikacji wydruk termiczny powinien wglądać następująco:
 
Wydruk dokumentu Faktura Sprzedaży z dodatkowymi danymi