Usługi przesyłane z POS zawsze są oznaczone jako usługa Gastronomiczna nazwa usługi. Jeśli sprzedajemy usługę SPA z POS będzie ona nazwana np. Usługa gastronomiczna Masaż klasyczny. Aby usługa nazywała się dokładnie jak w DM Plaza musi zostać przypisany wyjątek w konfiguracji interfejsu.
Jeśli film się nie pojawia, proszę kliknąć w link: http://www.dmplaza.eu/img/wyjatkiPOS.mp4
Konfiguracja wyjątków transmisji z POS
Moderator: jacqueline
Re: Konfiguracja wyjątków transmisji z POS
DM Plaza 2019 umożliwia poszerzenie konfiguracji wyjątków.
Proszę pamiętać, że wymiana danych opiera sie na procedura SQL zainstalowanych na serwerze. Bez poprawnej procedury wyjątki nie będą działać.
Przykład pełnej procedury na końcu tekstu.
Ważne, aby Państwa procedura zawierała fragment:
Oczywiście - jeśli nei korzystają Państwo z rozszerzonej funkcjonalności warto ten fragment, jako spowalniający, usunąć.
Jak Państwo widzą - kluczowym jest zastosowanie w formularzu znaku %, jako znaku zastępującego dowolny ciąg.
Użyta w definicji wyjątku nazwa POS %danie% będzie zastępnikiem zarówno dla asortymentów Śniadanie, danie dnia, danie z wołowiny etc.
Odpowiadać to będzie asortymentowi Usługa gastronomiczna
Tak możemy wyróżnić np asortymenty konferencyjne. W S4H będzie to np Przerwa kawowa konferencja, obsługa konferencji a w definicji DM Plaza %konfer%.*
Wyjątek można ograniczyć tylko do jednego stanowiska. Numer stanowiska jest numerem stanowiska POS, zdefiniowanym w S4H.
Pełna treść procedury:
-------
*nie "konf", bo to oznacza też konfiturę - przykład z życia wzięty
Proszę pamiętać, że wymiana danych opiera sie na procedura SQL zainstalowanych na serwerze. Bez poprawnej procedury wyjątki nie będą działać.
Przykład pełnej procedury na końcu tekstu.
Ważne, aby Państwa procedura zawierała fragment:
Kod: Zaznacz cały
/*sprawdzenie wyjątków zawierających znak %*/
select PA.ASORT_ID, PA.ASORT_KOD
from POSASSOCIATION PA
where position('%' in PA.POSTRANS_NAZWA) > 0 and
(:APOSTRANS_NAZWA like PA.POSTRANS_NAZWA) and
((PA.POSTRANS_POS_ID = :APOSTRANS_POS_ID) or (PA.POSTRANS_POS_ID is null))
into :AASORT_ID, :AASORT_KOD;
/*sprawdzenie wyjątków nie zawierajacych %*/
if ((:AASORT_ID <= 0) or (:AASORT_ID is null)) then
select PA.ASORT_ID, PA.ASORT_KOD
from POSASSOCIATION PA
where position('%' in PA.POSTRANS_NAZWA) = 0 and
(PA.POSTRANS_NAZWA = :APOSTRANS_NAZWA) and
((PA.POSTRANS_POS_ID = :APOSTRANS_POS_ID) or (PA.POSTRANS_POS_ID is null))
into :AASORT_ID, :AASORT_KOD;
Jak Państwo widzą - kluczowym jest zastosowanie w formularzu znaku %, jako znaku zastępującego dowolny ciąg.
Użyta w definicji wyjątku nazwa POS %danie% będzie zastępnikiem zarówno dla asortymentów Śniadanie, danie dnia, danie z wołowiny etc.
Odpowiadać to będzie asortymentowi Usługa gastronomiczna
Tak możemy wyróżnić np asortymenty konferencyjne. W S4H będzie to np Przerwa kawowa konferencja, obsługa konferencji a w definicji DM Plaza %konfer%.*
Wyjątek można ograniczyć tylko do jednego stanowiska. Numer stanowiska jest numerem stanowiska POS, zdefiniowanym w S4H.
Pełna treść procedury:
Kod: Zaznacz cały
SET TERM ^ ;
create or alter procedure pos_dodaj_obciazenie (
transakcja_id integer)
as
declare variable apostrans_id integer;
declare variable apostrans_transakcja_id integer;
declare variable apokoj_id integer;
declare variable aosoba_id integer;
declare variable agrupa_id integer;
declare variable apostrans_l_id integer;
declare variable apostrans_pos_id integer;
declare variable apostrans_nazwa varchar(50);
declare variable apostrans_ilosc decimal(9,2);
declare variable apostrans_cena decimal(9,2);
declare variable apostrans_cena_eur decimal(9,2);
declare variable apostrans_wal_symbol char(3);
declare variable apostrans_stawka_vat char(3);
declare variable apostrans_status_fiskalny integer;
declare variable ameldunek_id integer;
declare variable akonferencja_id integer;
declare variable apostrans_dataczas date;
declare variable afirma_id integer;
declare variable aasort_kod varchar(20);
declare variable aasort_id integer;
declare variable astawka decimal(3,1);
declare variable awartosc decimal(9,2);
declare variable awartosc_eur decimal(9,2);
declare variable awartoscnetto decimal(9,2);
declare variable awartoscpodatku decimal(9,2);
declare variable awaluta_id integer;
declare variable awartoscnetto_eur decimal(9,2);
declare variable awartoscpodatku_eur decimal(9,2);
declare variable apostrans_cenanetto decimal(9,2);
declare variable apostrans_cenanetto_eur decimal(9,2);
declare variable apostrans_nr_karty varchar(50);
declare variable osobakartaid integer;
declare variable statusrachunku integer;
begin
for select P.POSTRANS_ID, P.POSTRANS_TRANSAKCJA_ID, P.OSOBA_ID, P.POKOJ_ID, P.GRUPA_ID, P.MELDUNEK_ID,
P.KONFERENCJA_ID, P.POSTRANS_L_ID, P.POSTRANS_POS_ID, P.POSTRANS_NAZWA, P.POSTRANS_ILOSC, P.POSTRANS_CENA,
P.POSTRANS_CENA_EUR, P.POSTRANS_WAL_SYMBOL, P.POSTRANS_STAWKA_VAT, P.POSTRANS_STATUS_FISKALNY,
P.POSTRANS_DATACZAS, M.FIRMA_ID, P.POSTRANS_NR_KARTY
from POSTRANS P
left outer join MELDUNEK M on P.MELDUNEK_ID = M.MELDUNEK_ID
where P.POSTRANS_TRANSAKCJA_ID = :TRANSAKCJA_ID and
P.POSTRANS_STATUS = 0
order by P.POSTRANS_L_ID
into :APOSTRANS_ID, :APOSTRANS_TRANSAKCJA_ID, :AOSOBA_ID, :APOKOJ_ID, :AGRUPA_ID, :AMELDUNEK_ID, :AKONFERENCJA_ID,
:APOSTRANS_L_ID, :APOSTRANS_POS_ID, :APOSTRANS_NAZWA, :APOSTRANS_ILOSC, :APOSTRANS_CENA, :APOSTRANS_CENA_EUR,
:APOSTRANS_WAL_SYMBOL, :APOSTRANS_STAWKA_VAT, :APOSTRANS_STATUS_FISKALNY, :APOSTRANS_DATACZAS, :AFIRMA_ID,
:APOSTRANS_NR_KARTY
do
begin
/*parametry powiazane gastronomii*/
if (:APOSTRANS_STAWKA_VAT is not null) then
begin
if ((:APOSTRANS_POS_ID > 1) and
(:APOSTRANS_POS_ID is not null)) then
begin
/*sprawdzenie wyj�tk�w zawierajacych asterisk*/
select PA.ASORT_ID, PA.ASORT_KOD
from POSASSOCIATION PA
where position('%' in PA.POSTRANS_NAZWA) > 0 and
(:APOSTRANS_NAZWA like PA.POSTRANS_NAZWA) and
((PA.POSTRANS_POS_ID = :APOSTRANS_POS_ID) or (PA.POSTRANS_POS_ID is null))
into :AASORT_ID, :AASORT_KOD;
/*sprawdzenie wyj�tk�w nie zawierajacych asterisk*/
if ((:AASORT_ID <= 0) or (:AASORT_ID is null)) then
select PA.ASORT_ID, PA.ASORT_KOD
from POSASSOCIATION PA
where position('%' in PA.POSTRANS_NAZWA) = 0 and
(PA.POSTRANS_NAZWA = :APOSTRANS_NAZWA) and
((PA.POSTRANS_POS_ID = :APOSTRANS_POS_ID) or (PA.POSTRANS_POS_ID is null))
into :AASORT_ID, :AASORT_KOD;
/*standardowe przyporzadkowania*/
if ((:AASORT_ID <= 0) or (:AASORT_ID is null)) then
begin
select ASORT_ID, PARAM_WARTOSC
from PARAM
where PARAM_NAZWA = 'DomyslnyKodAsortymentuGastroPOSDlaStawki' || cast(:APOSTRANS_STAWKA_VAT as char(2)) || 'NRPOS' || cast(:APOSTRANS_POS_ID as varchar(2))
into :AASORT_ID, :AASORT_KOD;
if ((:AASORT_ID is null) and
(:AASORT_KOD is null)) then
select ASORT_ID, PARAM_WARTOSC
from PARAM
where PARAM_NAZWA = 'DomyslnyKodAsortymentuGastroPOSDlaStawki' || cast(:APOSTRANS_STAWKA_VAT as char(2))
into :AASORT_ID, :AASORT_KOD;
end
/*else
select ASORT_ID, PARAM_WARTOSC
from PARAM
where PARAM_NAZWA = 'DomyslnyKodAsortymentuGastroPOSDlaStawki' || cast(:APOSTRANS_STAWKA_VAT as char(2))
into :AASORT_ID, :AASORT_KOD;*/
end
else
select ASORT_ID, PARAM_WARTOSC
from PARAM
where PARAM_NAZWA = 'DomyslnyKodAsortymentuGastroPOSDlaStawki23'
into :AASORT_ID, :AASORT_KOD;
if ((:AASORT_ID <= 0) or (:AASORT_ID is null)) then
select ASORT_ID
from ASORT
where ASORT_KOD = :AASORT_KOD
into :AASORT_ID;
if (:AASORT_ID is null) then
exception DO_BRAK_ASORT;
end
/*stawka VAT*/
if ((APOSTRANS_STAWKA_VAT = 'ZW') or (APOSTRANS_STAWKA_VAT = '**')) then
ASTAWKA = 0;
else
ASTAWKA = cast(APOSTRANS_STAWKA_VAT as decimal(2,0));
/*waluta*/
if (:APOSTRANS_WAL_SYMBOL is not null) then
select W.WALUTA_ID
from WALUTA W
where W.WALUTA_SYMBOL = :APOSTRANS_WAL_SYMBOL
into :AWALUTA_ID;
else
AWALUTA_ID = 1;
/*konferencja*/
if (AKONFERENCJA_ID is null) then
AKONFERENCJA_ID = -1;
/*zaokr�glenia*/
AWARTOSC_EUR = 0;
execute procedure DM_ROUNDCURR APOSTRANS_CENA_EUR * APOSTRANS_ILOSC
returning_values :AWARTOSC_EUR;
execute procedure DM_ROUNDCURR(AWARTOSC_EUR * ASTAWKA) / (100 + ASTAWKA)
returning_values :AWARTOSCPODATKU_EUR;
execute procedure DM_ROUNDCURR AWARTOSC_EUR - AWARTOSCPODATKU_EUR
returning_values :AWARTOSCNETTO_EUR;
execute procedure DM_ROUNDCURR APOSTRANS_CENA_EUR - ((APOSTRANS_CENA_EUR * ASTAWKA) / (100 + ASTAWKA))
returning_values :APOSTRANS_CENANETTO_EUR;
AWARTOSC = 0;
execute procedure DM_ROUNDCURR APOSTRANS_CENA * APOSTRANS_ILOSC
returning_values :AWARTOSC;
execute procedure DM_ROUNDCURR(AWARTOSC * ASTAWKA) / (100 + ASTAWKA)
returning_values :AWARTOSCPODATKU;
execute procedure DM_ROUNDCURR AWARTOSC - AWARTOSCPODATKU
returning_values :AWARTOSCNETTO;
execute procedure DM_ROUNDCURR APOSTRANS_CENA_EUR - ((APOSTRANS_CENA * ASTAWKA) / (100 + ASTAWKA))
returning_values :APOSTRANS_CENANETTO;
/*znalezienie id karty*/
if (:APOSTRANS_NR_KARTY is not null) then
begin
select max(OSK.OSOBAKARTA_ID)
from OSOBAKARTA OSK
where OSK.OSOBAKARTA_NUMER = :APOSTRANS_NR_KARTY and
OSK.OSOBAKARTA_AKTYWNA = 1
into :OSOBAKARTAID;
end
/*status rachunki - dodane*/
if (APOSTRANS_STATUS_FISKALNY = 1) then
STATUSRACHUNKU = 6;/* rach. zewn. aktywny */
else
STATUSRACHUNKU = 6;
/*dodanie rachunku*/
insert into RACHOTW (RACHOTW_ID, RACHOTW_KOD_SYSTEMU, OSOBA_ID, USLUGA_ID, POKOJ_ID, GRUPA_ID, MELDUNEK_ID,
MELDUNEKOSOBA_ID, REZERWACJA_ID, CENNIK_ID, FIRMA_ID, PARKING_ID, RACHOTW_INDYWIDUALNY,
ASORT_ID, WALUTA_ID, ROZMOWA_ID, RACHOTW_ILOSC, RACHOTW_VAT_SYMBOL, RACHOTW_STATUS,
RACHOTW_CENA_JEDN_BRUTTO, RACHOTW_CENA_JEDN_NETTO, RACHOTW_VAT_STAWKA, RACHOTW_KWOTA_BRUTTO,
RACHOTW_KWOTA_NETTO, RACHOTW_CENA_BRUTTO_EUR, RACHOTW_CENA_NETTO_EUR, RACHOTW_KWOTA_BRUTTO_EUR,
RACHOTW_KWOTA_NETTO_EUR, RACHOTW_DATA_OTWARCIA, RACHOTW_UWAGI, RACHOTW_PROC_RABATU,
RACHOTW_ILOSC_DOB, OSOBAZAJECIE_ID, RACHOTW_STATUS_FISKALNY, RACHOTW_STATUS_RABATU,
KONFERENCJA_ID, KONFPOKOJ_ID, RACHOTW_NRTRANS, RACHOTW_USED, SESSION_ID,
RACHOTW_STATUS_UZNANIE, RACHOTW_STATUS_STANU, RACHOTW_STATUS_DOB, EMPLOYEE_ID, ZMIANA_ID,
ZMIANAG_ID, RACHPOS_ID, DEPOZYT_ID, STOLREZHOUR_ID, RACHOTW_DOROSLY, SPAAPPT_ID,
OSOBAKARTA_NUMER, OSOBAKARTA_ID)
values (gen_id(SEQ_RACHOTW, 1), 4, :AOSOBA_ID, -1, :APOKOJ_ID, :AGRUPA_ID, :AMELDUNEK_ID, -1, -1, -1, :AFIRMA_ID,
-1, 1, /*RACHOTW_INDYWIDUALNY*/
:AASORT_ID, :AWALUTA_ID, -1, :APOSTRANS_ILOSC, :APOSTRANS_STAWKA_VAT, :STATUSRACHUNKU, /*status zewn*/
:APOSTRANS_CENA, :APOSTRANS_CENANETTO, :ASTAWKA, :AWARTOSC, :AWARTOSCNETTO, :APOSTRANS_CENA_EUR,
:APOSTRANS_CENANETTO_EUR, :AWARTOSC_EUR, :AWARTOSCNETTO_EUR, :APOSTRANS_DATACZAS, :APOSTRANS_NAZWA, 0, /*procent rabatu*/
1, /*RACHOTW_ILOSC_DOB*/
-1, :APOSTRANS_STATUS_FISKALNY, 0, /*:RACHOTW_STATUS_RABATU*/
:AKONFERENCJA_ID, -1, :APOSTRANS_TRANSAKCJA_ID, 0, :APOSTRANS_TRANSAKCJA_ID, 0, 0, 0, 0, 0, /*:EMPLOYEE_ID,:ZMIANA_ID,*/
:APOSTRANS_ID, -1, -1, 0, 0, 0, :APOSTRANS_NR_KARTY, :OSOBAKARTAID);
if (:APOSTRANS_NR_KARTY is not null) then
begin
update OSOBAKARTA OK
set OK.OSOBAKARTA_LIMIT = OK.OSOBAKARTA_LIMIT - :AWARTOSC
where OK.OSOBAKARTA_NUMER = :APOSTRANS_NR_KARTY and
OK.OSOBAKARTA_AKTYWNA = 1;
end
end
/*aktualizacja statusu*/
update POSTRANS
set POSTRANS_STATUS = -1 * POSTRANS_STATUS
where POSTRANS_TRANSAKCJA_ID = :APOSTRANS_TRANSAKCJA_ID;
end^
SET TERM ; ^
/* Nastêpuj¹ce instrukcje GRANT zosta³y wygenerowane automatycznie */
GRANT SELECT,UPDATE ON POSTRANS TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON MELDUNEK TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON POSASSOCIATION TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON PARAM TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON ASORT TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT ON WALUTA TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT EXECUTE ON PROCEDURE DM_ROUNDCURR TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT SELECT,UPDATE ON OSOBAKARTA TO PROCEDURE POS_DODAJ_OBCIAZENIE;
GRANT INSERT ON RACHOTW TO PROCEDURE POS_DODAJ_OBCIAZENIE;
/* Przywileje wystêpuj¹ce dla tej procedury */
GRANT EXECUTE ON PROCEDURE POS_DODAJ_OBCIAZENIE TO SYSDBA;
*nie "konf", bo to oznacza też konfiturę - przykład z życia wzięty