Установка бонусов кассирам
Материал из wiki.standart-n.ru
Версия от 13:26, 10 сентября 2014; Aleksnick (обсуждение | вклад)
Содержание
Заменить версию Кассира
Заменить zkassa.exe на версию 2.17.8 от 27.08.2014 или выше.
Установить ТМС
- Создать новую ТМС в Кассире и назвать ее "Бонусы кассирам"
- Исходный код данной ТМС:
uses Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, ibquery, DB, ChequeList, FR, ScriptRes, Barcode,ZKassa, StrUtils, Windows, Classes, IBDataBase, SysUtils; Procedure BonusRecalc; var iq: tibquery; BONUS_CALCULATE_DAY: string; begin //Создаем соединение с базой iq := tibquery.create(nil); iq.transaction := CreateRT(CurrDB); iq.transaction.starttransaction; iq.active := False; //Определяем день, с которого считать бонусы iq.sql.text := 'select param_value from params where param_id=''BONUS_CALCULATE_DAY'''; iq.active := True; //забираем данные if iq.Eof then exit; BONUS_CALCULATE_DAY:= Trim(iq.FieldByName('param_value').AsString); //Определяем бонус за последний чек iq.active := False; iq.sql.text := 'select Round(coalesce(sum(bonus),0),2) as sum_bonus from DOCS d where d.id = '+ '(select max(id) from DOCS d2 where status = 1 and ( (doc_type = 3 and owner = ' + inttostr(userid) + ') or (doc_type = 9 and (select owner from docs d3 where d3.id = d2.parent_id) = ' + inttostr(userid) + ') ))' iq.active := True; TagSetContent(fmMain.ewbInfo, 't_bonus', StringReplace(iq.FieldByName('sum_bonus').AsString, '.', ',', 1) ); //Определяем суммарный бонус за смену iq.active := False; iq.sql.text := 'select Round(coalesce(sum(bonus),0),2) as sum_bonus from DOCS d where status = 1 and' + '((doc_type = 3 and d.owner = ' + inttostr(userid) + ') or (doc_type = 9 and (select owner from docs d2 where d2.id = d.parent_id) = ' + inttostr(userid) + ')) and ' + 'd.commitdate between CURRENT_DATE || '' 00:00'' and CURRENT_DATE || '' 23:59'''; iq.active := True; TagSetContent(fmMain.ewbInfo, 't_bonus_smena', StringReplace(iq.FieldByName('sum_bonus').AsString, '.', ',', 1) ); //Определяем суммарный бонус за месяц iq.active := False; iq.sql.text := 'select Round(coalesce(sum(bonus),0),2) as sum_bonus from DOCS d where status = 1 and' + '((doc_type = 3 and d.owner = ' + inttostr(userid) + ') or (doc_type = 9 and (select owner from docs d2 where d2.id = d.parent_id) = ' + inttostr(userid) + ')) and ' + 'd.commitdate between '''+BONUS_CALCULATE_DAY+''' || ''.'' || iif('+BONUS_CALCULATE_DAY+' > EXTRACT(DAY from CURRENT_DATE), EXTRACT(MONTH from DATEADD(month, -1, CURRENT_DATE)),EXTRACT(MONTH from CURRENT_DATE)) || ''.'' || EXTRACT(YEAR from CURRENT_DATE) || '' 00:00' '' + ' and CURRENT_DATE || '' 23:59'''; iq.active := True; TagSetContent(fmMain.ewbInfo, 't_bonus_all', StringReplace(iq.FieldByName('sum_bonus').AsString, '.', ',', 1) ); iq.active := False; iq.transaction.free; iq.free; end;
Включить вызов ТМС
- Включить вызов ТМС из п.1 в "После печати очереди чеков" и "После смены позиции", p84u1 заменить на соответствующий из п.1.
- Затем Перекомпилировать скрипты.
uses Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls, ibquery, DB, ChequeList, FR, ScriptRes, Barcode,ZKassa, StrUtils, Windows, Classes, IBDataBase, SysUtils, p84u1; begin BonusRecalc; end;
Отображение кол-ва бонус в окне информации о чеке
- В кассире в правом окне после строки:
<tr id="tr_del"><td class="dlm" /><td id="t_del_cap" class="mark size2">Сдача</td><td id="t_del" class="ar mark size3">0.00</td><td class="dlm" /></tr>
- добавить строки:
<tr id="tr_bonus"><td class="dlm" /><td id="t_bonus_cap" class="mark size2">Премия за посл. чек</td><td id="t_bonus" class="ar mark size3">0.00</td><td class="dlm" /></tr> <tr id="tr_bonus"><td class="dlm" /><td id="t_bonus_cap" class="mark size2">Премия за смену</td><td id="t_bonus_smena" class="ar mark size3">0.00</td><td class="dlm" /></tr> <tr id="tr_bonus_all"><td class="dlm" /><td id="t_bonus_all_cap" class="mark size2">Премия за мес.</td><td id="t_bonus_all" class="ar mark size3">0.00</td><td class="dlm" /></tr>
- Скопировать настройки для всех пользователей
Расчет премии
Кассир -> настройки -> администратор -> бонусы -> добавить "Премия 4%" с текстом:
result:= ::summa*-0.04;
Настройка с какого дня расчитывать премию
- Выполнить запрос, который добавляет новый параметр в менеджер "С какого дня месяца рассчитывать премию кассирам?"
INSERT INTO PARAMS (PARENT_ID, PARAM_ID, PARAM_CAPTION, PARAM_TYPE, PARAM_VALUE, AUDIT_ID, IMAGEINDEX, STATUS, INSERTDT, SORTING, PARAM_TYPE_DATA, PACKET) VALUES (-30, 'BONUS_CALCULATE_DAY', 'С какого дня месяца рассчитывать премию кассирам? (от 1 до 28)', 2, '20', 5082, 0, 0, '30-JUL-2014 08:34:35.812', 4, NULL, 16685);
Добавить отчет по премиям
- В папку с формами скопировать Bonus.cffr3 и добавить его спомощью sql-запроса:
INSERT INTO REPORTS (PARENT_ID, STATUS, REPORTTYPE, SORTING, CAPTION, PARAMS, DATA, WDICT_ID) VALUES (0, 0, 0, 12, 'Премии кассирам', '[freereport] tmplpath=bonus.cffr3', NULL, NULL);
Как себя проверить
Проверить все можно отбив любой чек на кассе, при этом должен расчитаться бонус в АРМ Кассира и в отчете "Премии кассирам" в АРМ Менеджера.
Теги: премии, бонусы кассирам, кассиры, продавцы, з/п, зарплата, заработная плата, материальное стимулирование