Подарочные карты 2го типа — различия между версиями
Материал из wiki.standart-n.ru
BeTePoK (обсуждение | вклад) |
Agk (обсуждение | вклад) |
||
(не показано 14 промежуточных версии 3 участников) | |||
Строка 1: | Строка 1: | ||
− | == | + | ==Установка-Настройка Подарочных карт 2го типа== |
− | + | ===выполняем скрипт=== | |
<PRE> | <PRE> | ||
Строка 90: | Строка 90: | ||
select VSHIFT, DEVICE_NUM, caption||' от '||cast(d.commitdate as dm_date) from docs d where id = :z_id into :VSHIFT, :DEVICE_NUM, :Z_CAPTION; | select VSHIFT, DEVICE_NUM, caption||' от '||cast(d.commitdate as dm_date) from docs d where id = :z_id into :VSHIFT, :DEVICE_NUM, :Z_CAPTION; | ||
− | for select SNAME, round(PRICE,2), | + | --add avo bcode_izg 13/11/19 |
+ | for select SNAME||', '||bcode_izg, round(PRICE,2), | ||
iif(dd.doc_type=3, 1, -1)*abs(dd.QUANT), | iif(dd.doc_type=3, 1, -1)*abs(dd.QUANT), | ||
iif(dd.doc_type=3, 1, -1)*round(iif(abs(d.summ1)<=abs(dd.summa),abs(d.summ1), abs(dd.summa)),2) as nal, | iif(dd.doc_type=3, 1, -1)*round(iif(abs(d.summ1)<=abs(dd.summa),abs(d.summ1), abs(dd.summa)),2) as nal, | ||
Строка 96: | Строка 97: | ||
from vw_doc_detail dd | from vw_doc_detail dd | ||
left join docs d on dd.doc_id = d.id | left join docs d on dd.doc_id = d.id | ||
− | where dd.doc_commitdate between current_date - 10 and current_date + 10 and dd.dep = 4 and d.status = 1 and d.doc_type in (3,9) and d.VSHIFT = :VSHIFT and d.DEVICE_NUM = :DEVICE_NUM | + | where dd.doc_commitdate between current_date - 10 and current_date + 10 |
+ | --add avo 13/11/19 | ||
+ | and SNAME like '%Подаро%карт%' --and dd.dep = 4 | ||
+ | and d.status = 1 and d.doc_type in (3,9) and d.VSHIFT = :VSHIFT and d.DEVICE_NUM = :DEVICE_NUM | ||
into :SNAME, :PRICE, :QUANT, :NAL, :BEZNAL do | into :SNAME, :PRICE, :QUANT, :NAL, :BEZNAL do | ||
Строка 104: | Строка 108: | ||
SET TERM ; ^ | SET TERM ; ^ | ||
+ | |||
+ | /* Следующие операторы GRANT сгенерированы автоматически */ | ||
GRANT SELECT ON DOCS TO PROCEDURE PR_GET_ZREPORT_GIFTCARD; | GRANT SELECT ON DOCS TO PROCEDURE PR_GET_ZREPORT_GIFTCARD; | ||
GRANT SELECT ON VW_DOC_DETAIL TO PROCEDURE PR_GET_ZREPORT_GIFTCARD; | GRANT SELECT ON VW_DOC_DETAIL TO PROCEDURE PR_GET_ZREPORT_GIFTCARD; | ||
+ | |||
+ | /* Существующие привилегии на эту процедуру */ | ||
GRANT EXECUTE ON PROCEDURE PR_GET_ZREPORT_GIFTCARD TO SYSDBA; | GRANT EXECUTE ON PROCEDURE PR_GET_ZREPORT_GIFTCARD TO SYSDBA; | ||
Строка 142: | Строка 150: | ||
GRANT EXECUTE ON PROCEDURE PR_GIFTCARD TO SYSDBA; | GRANT EXECUTE ON PROCEDURE PR_GIFTCARD TO SYSDBA; | ||
− | </ | + | </PRE> |
− | + | ||
+ | ===Добавить в триггер DOC_DETAIL_AI0=== | ||
<PRE> | <PRE> | ||
Строка 162: | Строка 171: | ||
</PRE> | </PRE> | ||
− | + | ===В кассире в событии После закрытия смены меняем на=== | |
+ | |||
+ | '''ТМС странная, можно не ставить''' | ||
+ | |||
<PRE> | <PRE> | ||
Строка 263: | Строка 275: | ||
</PRE> | </PRE> | ||
− | + | ||
+ | ===В Кассире устанавливаем галочку в пункте Подарочные карты 2=== | ||
[[Файл:ПодарКарты2.png]] | [[Файл:ПодарКарты2.png]] | ||
+ | |||
+ | ==В итоге== | ||
+ | Для того что бы карты появились в системе нужно их оприходовать через документ Приход поставщика<br> | ||
+ | или Оприходование товаров. Если ШК карт уникальные вводим каждую в отдельную строку заполняя <br> | ||
+ | Наименование, номинал карты, ШК, кол-во 1, цена оптовая по желанию 0,1 или 1 руб. <br> | ||
+ | Все заполнили - проводим. Теперь можно продавать карту через кассу, после оплаты она <br> | ||
+ | активируется (работает триггер DOC_DETAIL_AI0) и будет доступна для оплаты | ||
+ | |||
+ | Оплата подарочными картами идёт как отдельный тип оплаты - настраивается на ККМ<br> | ||
+ | Приходование подарочной карты после оплаты ею идёт в триггере GIFTCARD_DETAIL_BI, по <br> | ||
+ | тем настройкам как сейчас - документом оприходования(тип документа 20)<br> | ||
+ | [[Файл:ОплатаПодарКарта2.png]] | ||
+ | |||
+ | |||
+ | ==Ссылки по теме== | ||
+ | * [[Виды оплат|Виды оплат]] | ||
+ | |||
+ | ==Запрос для получения списка активных подарочных карт с их номиналом и датой активации== | ||
+ | <PRE> | ||
+ | select distinct gd.barcode, pr.summ, pr.s_date as sale_date | ||
+ | from GIFTCARD_DETAIL gd | ||
+ | left join PR_GIFTCARD(gd.barcode) pr on pr.oper_type=0 | ||
+ | where gd.s_date > dateadd(year,-1,current_timestamp) and pr.summ is not null | ||
+ | --and gd.barcode='1000000018585' -- | ||
+ | order by pr.s_date | ||
+ | </PRE> | ||
+ | |||
+ | |||
+ | ==Теги== | ||
+ | Подарочная карта 2, Подарочная карта, Подарочные карты 2 |
Текущая версия на 09:58, 6 июня 2024
Содержание
Установка-Настройка Подарочных карт 2го типа
выполняем скрипт
SET SQL DIALECT 3; CREATE GENERATOR GEN_GIFTCARD_DETAIL_ID; CREATE TABLE GIFTCARD_DETAIL ( S_ID DM_ID /* DM_ID = BIGINT */, S_DATE DM_DATETIME /* DM_DATETIME = TIMESTAMP */, BARCODE DM_TEXT NOT NULL /* DM_TEXT = VARCHAR(250) */, OPER_TYPE DM_STATUS NOT NULL /* DM_STATUS = INTEGER */, DOC_ID DM_ID /* DM_ID = BIGINT */, D$UUID DM_UUID /* DM_UUID = CHAR(36) NOT NULL */, D$SRVUPDDT DM_DATETIME /* DM_DATETIME = TIMESTAMP */ ); CREATE INDEX GIFTCARD_DETAIL_IDX1 ON GIFTCARD_DETAIL (BARCODE); SET TERM ^ ; CREATE OR ALTER TRIGGER GIFTCARD_DETAIL_BI FOR GIFTCARD_DETAIL ACTIVE BEFORE INSERT POSITION 0 as declare variable COMMITSESSION_ID type of dm_id; declare variable agent_id type of dm_id; declare variable DOC_ID type of dm_id; declare variable PART_ID type of dm_id; declare variable SNAME type of dm_text; declare variable PRICE type of dm_double; declare variable ID type of dm_ID; begin if (new.s_id is null) then new.s_id = gen_id(gen_giftcard_detail_id,1); if (new.s_date is null) then new.s_date = 'Now'; if (new.oper_type = 1) then begin select d.COMMITSESSION_ID,d.agent_id from docs d where d.id = new.doc_id into :COMMITSESSION_ID, :agent_id ; select DOC_ID from pr_newdoc(20,:agent_id,0,null,null,:COMMITSESSION_ID) into DOC_ID; PART_ID = (select first 1 p.id from parts p where p.barcode = new.barcode or (p.barcode1 = new.barcode) ); select first 1 wb.sname,wb.price from warebase wb where wb.part_id = PART_ID into :SNAME, :PRICE; select ID from PR_PRIHODPART(:DOC_ID,:PART_ID,1,:SNAME,:PRICE,0,null,0,0,null) into :id; execute procedure pr_doc_commit(DOC_ID,COMMITSESSION_ID); end end ^ CREATE OR ALTER TRIGGER GIFTCARD_DETAIL_BI_DISTR FOR GIFTCARD_DETAIL ACTIVE BEFORE INSERT POSITION 0 AS begin if (new.d$uuid is null) then begin new.d$uuid=UUID_TO_CHAR(GEN_UUID()); new.d$srvupddt='2000-01-01'; end end ^ SET TERM ; ^ COMMENT ON COLUMN GIFTCARD_DETAIL.OPER_TYPE IS '0 - продажа карты, активация 1 - оплата картой, карта неактивна'; SET TERM ^ ; create or alter procedure PR_GET_ZREPORT_GIFTCARD ( AUDIT_ID integer) returns ( Z_CAPTION DM_TEXT, SNAME DM_TEXT, PRICE DM_TEXT, QUANT DM_DOUBLE, NAL DM_DOUBLE, BEZNAL DM_DOUBLE) as declare variable VSHIFT DM_ID; declare variable DEVICE_NUM DM_TEXT; declare variable Z_ID DM_ID; begin select max(id) from docs d where status = 1 and doc_type in (13) and d.audit_id = :audit_id into z_id; select VSHIFT, DEVICE_NUM, caption||' от '||cast(d.commitdate as dm_date) from docs d where id = :z_id into :VSHIFT, :DEVICE_NUM, :Z_CAPTION; --add avo bcode_izg 13/11/19 for select SNAME||', '||bcode_izg, round(PRICE,2), iif(dd.doc_type=3, 1, -1)*abs(dd.QUANT), iif(dd.doc_type=3, 1, -1)*round(iif(abs(d.summ1)<=abs(dd.summa),abs(d.summ1), abs(dd.summa)),2) as nal, iif(dd.doc_type=3, 1, -1)*round(abs(dd.summa)-iif(abs(d.summ1)<=abs(dd.summa),abs(d.summ1), abs(dd.summa)),2) as beznal from vw_doc_detail dd left join docs d on dd.doc_id = d.id where dd.doc_commitdate between current_date - 10 and current_date + 10 --add avo 13/11/19 and SNAME like '%Подаро%карт%' --and dd.dep = 4 and d.status = 1 and d.doc_type in (3,9) and d.VSHIFT = :VSHIFT and d.DEVICE_NUM = :DEVICE_NUM into :SNAME, :PRICE, :QUANT, :NAL, :BEZNAL do suspend; end^ SET TERM ; ^ /* Следующие операторы GRANT сгенерированы автоматически */ GRANT SELECT ON DOCS TO PROCEDURE PR_GET_ZREPORT_GIFTCARD; GRANT SELECT ON VW_DOC_DETAIL TO PROCEDURE PR_GET_ZREPORT_GIFTCARD; /* Существующие привилегии на эту процедуру */ GRANT EXECUTE ON PROCEDURE PR_GET_ZREPORT_GIFTCARD TO SYSDBA; SET TERM ^ ; create or alter procedure PR_GIFTCARD ( BARCODE type of DM_TEXT not null) returns ( S_ID DM_ID, S_DATE DM_DATETIME, OPER_TYPE DM_STATUS, SUMM DM_DOUBLE) as begin select first 1 s_id, s_date, oper_type from giftcard_detail where s_id is not null and barcode = :barcode order by s_id desc into :s_id, :s_date, :oper_type; if (oper_type is not null) then begin -- select first 1 price from parts where barcode = :barcode or (bcode_izg=:barcode) order by id desc into :summ; select first 1 p.price from parts p join wares w on w.id = p.ware_id where p.barcode = :barcode or (w.barcode = :barcode) order by p.id desc into :summ; suspend; end end^ SET TERM ; ^ GRANT SELECT ON GIFTCARD_DETAIL TO PROCEDURE PR_GIFTCARD; GRANT SELECT ON PARTS TO PROCEDURE PR_GIFTCARD; GRANT EXECUTE ON PROCEDURE PR_GIFTCARD TO SYSDBA;
Добавить в триггер DOC_DETAIL_AI0
if ((select d.doc_type from docs d where d.id = new.doc_id) in (3)) then begin if ((select wb.sname from warebase wb where wb.part_id = new.part_id ) like '%Подаро%карт%') then begin insert into giftcard_detail (BARCODE,OPER_TYPE,DOC_ID) values ((select iif(wb.bcode_izg='' or (wb.bcode_izg is null),wb.barcode,wb.bcode_izg ) from warebase wb where wb.part_id = new.part_id), 0,new.doc_id); end end if ((select d.doc_type from docs d where d.id = new.doc_id) in (9)) then begin if ((select wb.sname from warebase wb where wb.part_id = new.part_id ) like '%Подаро%карт%') then begin insert into giftcard_detail (BARCODE,OPER_TYPE,DOC_ID) values ((select iif(wb.bcode_izg='' or (wb.bcode_izg is null),wb.barcode,wb.bcode_izg ) from warebase wb where wb.part_id = new.part_id), 1,new.doc_id); end end
В кассире в событии После закрытия смены меняем на
ТМС странная, можно не ставить
uses Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, ibquery, DB, ChequeList, FR, ScriptRes, Barcode, ZKassa, StrUtils, Windows, Classes, IBDatabase; var doc_id : integer; LengthCheak,i , fl: integer; iq: tibquery; str_temp : string; nal, beznal: float; begin Fr_activate(0); //Создаем соединение с базой iq := tibquery.create(nil); iq.database := CurrDB; iq.transaction := creatert(CurrDB); iq.transaction.starttransaction; iq.active := False; //msgbox(IntToStr(ChequeList.Items[0].ID), 'Ошибка!', mb_ok); //запросик к базе fl:=0; iq.sql.text := 'select z_caption, sname, price, sum(quant) as quant, sum(nal) as nal, sum(beznal) as beznal from PR_GET_ZREPORT_GIFTCARD ('+IntToStr(SessionID)+') group by z_caption, sname, price having sum(quant) <> 0'; iq.active := True; str_temp := ''; nal:= 0; beznal:= 0; //забираем данные if not(iq.Eof) then begin //Длина чековой ленты LengthCheak := FR_LINELENGTH; str_temp := str_temp + myFormatString('ДОПОЛНЕНИЕ ПО ПОДАРОЧНЫМ КАРТАМ',' ',' ',LengthCheak,0,true)+#13#10; str_temp := str_temp + myFormatString(iq.FieldByName('z_caption').AsString,' ',' ',LengthCheak,0,true)+#13#10; str_temp := str_temp + myFormatString('Подар. карта (Цена Х Кол-во) Нал/Безнал',' ',' ',LengthCheak,0,true)+#13#10; str_temp := str_temp + dupestring('-',LengthCheak)+#13#10; end else begin str_temp := ''; // msgbox('Ошибка. Отчет по подарочным картам не будет распечатан!', 'Ошибка!', mb_ok); exit; end; while not iq.Eof do begin str_temp := str_temp + myFormatString(iq.FieldByName('sname').AsString + '('+iq.FieldByName('price').AsString+' x '+iq.FieldByName('quant').AsString+')',' ',' ',LengthCheak,1,true)+#13#10; str_temp := str_temp + myFormatString(' = ' + iq.FieldByName('nal').AsString+'/'+iq.FieldByName('beznal').AsString,' ',' ',LengthCheak,1,true)+#13#10; nal:= nal + iq.FieldByName('nal').AsFloat; beznal:= beznal + iq.FieldByName('beznal').AsFloat; iq.Next; end; str_temp := str_temp + dupestring('-',LengthCheak)+#13#10; str_temp := str_temp + myFormatString('ИТОГО:',' НАЛ='+Format('%.2f',[nal])+' БЕЗНАЛ='+Format('%.2f',[beznal]),' ',LengthCheak,1,true)+#13#10; //закрываем соединение iq.active := False; iq.sql.text := 'select USERNAME from USERS where id = '+IntToStr(UserID); iq.active := True; str_temp := str_temp + dupestring('*',LengthCheak)+#13#10; str_temp := str_temp + myFormatString(DateToStr(Date)+' '+TimeToStr(Time),' ',' ',LengthCheak,1,true)+#13#10; str_temp := str_temp + myFormatString('Кассир:',iq.FieldByName('USERNAME').AsString,' ',LengthCheak,1,true)+#13#10; //закрываем соединение iq.active := False; // Для select можно не завершать транзакцию iq.Transaction.Commit; iq.Transaction.Free; iq.Free; //str_temp := str_temp + dupestring(' ',LengthCheak)+#13#10; //str_temp := str_temp + dupestring(' ',LengthCheak)+#13#10; //str_temp := str_temp + myFormatCheque('Подпись: _______________________',' ',' ',LengthCheak,1,true)+#13#10; //str_temp := str_temp + myFormatCheque(' М.П.',' ',' ',LengthCheak,1,true)+#13#10; str_temp := str_temp + dupestring(' ',LengthCheak)+#13#10; str_temp := str_temp + dupestring(' ',LengthCheak)+#13#10; //Устанавливаем сформированную строку FR_STRING_SET(str_temp); //Печатаем строку на фискальнике FR_PRINTSTRING; FR_GETADVTEXT; FR_PRINTSTRING; // FR_PRINTCLICHE; //протяжка FR_NUMBER_SET(2); FR_FEEDTAPE; //отрезка FR_BOOLEAN_SET(false); FR_CUTTAPE; ChequeList.CloseAll; //Отключаем оборудование FR_DEACTIVATE; end
В Кассире устанавливаем галочку в пункте Подарочные карты 2
В итоге
Для того что бы карты появились в системе нужно их оприходовать через документ Приход поставщика
или Оприходование товаров. Если ШК карт уникальные вводим каждую в отдельную строку заполняя
Наименование, номинал карты, ШК, кол-во 1, цена оптовая по желанию 0,1 или 1 руб.
Все заполнили - проводим. Теперь можно продавать карту через кассу, после оплаты она
активируется (работает триггер DOC_DETAIL_AI0) и будет доступна для оплаты
Оплата подарочными картами идёт как отдельный тип оплаты - настраивается на ККМ
Приходование подарочной карты после оплаты ею идёт в триггере GIFTCARD_DETAIL_BI, по
тем настройкам как сейчас - документом оприходования(тип документа 20)
Ссылки по теме
Запрос для получения списка активных подарочных карт с их номиналом и датой активации
select distinct gd.barcode, pr.summ, pr.s_date as sale_date from GIFTCARD_DETAIL gd left join PR_GIFTCARD(gd.barcode) pr on pr.oper_type=0 where gd.s_date > dateadd(year,-1,current_timestamp) and pr.summ is not null --and gd.barcode='1000000018585' -- order by pr.s_date
Теги
Подарочная карта 2, Подарочная карта, Подарочные карты 2