Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Скрипт для видимости валют

  1. #1
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    126
    Поблагодарил(а)
    44
    Благодарностей: 13 (сообщений: 12)

    Post Скрипт для видимости валют

    Помогите написать скрипт для события OnOrderVerify объекта TCheckView формы быстрого чека для видимости валют. Задача такая, если в заказе есть блюда (одно или несколько, неважно) из определенной классификации, то в режиме оплаты должна отображаться одна валюта (с указанным в скрипте кодом), если в этом же заказе есть частичная оплата валютой (с указанным в скрипте кодом), то тогда в режиме оплаты отображаются все валюты.

  2. #2
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    126
    Поблагодарил(а)
    44
    Благодарностей: 13 (сообщений: 12)
    Дополню, возможно все это можно сделать и другим способом. Необходимость заключается в том, что бы разграничить оплату между питанием сотрудников и обычными заказами. На кассе три валюты: нал, безнал и пдс оплата. Есть два вида меню, блюда для гостей и блюда для персонала, у каждого вида своя классификация, по которой кстати можно настроить ограничение на использование валюты, но вот беда только для безнала и пдс. Налик ни как, так как он является национальной базовой валютой и для него ограничение по классификации не предусмотрено. На картах персонала есть лимит суммы потрат на месяц, например пусть будет - 3000р, на валюту пдс уже стоит ограничение, она может закрыть только заказ с блюдами классификации "для персонала", но эти же блюда можно оплатить наликом и это проблема, вместе с этим необходимо чтобы персонал мог выбирать свой лимит в 3000р полностью, ибо если не хватает остатка лимита, то доступна комбинированная оплата (пдс+нал либо пдс+безнал).

    В итоге имеем следующую задачу, если в заказе блюда для персонала, то в режиме оплаты должна отображаться только одна валюта (пдс), если сумма заказа более остатка по лимиту, то при внесении части оплаты пдс, появляются оставшиеся валюты, которыми можно закрыть оставшуюся сумму и не более того, чтоб блюда для персонала без комбинирования, по принципу сначала пдс потом любая другая валюта, нельзя было свободно оплачивать налом и безналом. Комбинирование валют на данный момент работает, а вот как скрыть валюты по этим критериям ума не приложу...

  3. #3
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    126
    Поблагодарил(а)
    44
    Благодарностей: 13 (сообщений: 12)
    Если это невозможно ни как реализовать, то можно отказаться от комбинирования оплаты и выборки всей суммы по лимиту. Сделать хотя бы так, когда в заказе есть блюда из классификации "для персонала", в режиме оплаты отображается только одна валюта, пдс оплата.

  4. #4
    Разбирающийся
    Регистрация
    28.06.2013
    Адрес
    Краснодар
    Сообщений
    1,333
    Поблагодарил(а)
    23
    Благодарностей: 143 (сообщений: 101)
    Можно же правами национальную валюту закрыть, ее копию, например, использовать в ограничении по классификациям, а еще можно меню персонала ограничить категорией заказа и ограничить валюту там

  5. 1 пользователь сказал cпасибо satan за это полезное сообщение::

    pixnet (01.09.2020)

  6. #5
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    126
    Поблагодарил(а)
    44
    Благодарностей: 13 (сообщений: 12)
    Цитата Сообщение от satan Посмотреть сообщение
    Можно же правами национальную валюту закрыть, ее копию, например, использовать в ограничении по классификациям,
    Вот это тема! Настроил, работает.


    А вот как связать правом категорию заказа с нужными валютами и меню не понял, право же все равно надо будет привязывать к пользователю, а он один, и если создать два права для каждой классификации меню, то их все равно нужно оба привязывать к пользователю, то бишь этим комбинированную оплату по критериям о которых писал выше не настроить За вторую валюту благодарю!

  7. #6
    Разбирающийся
    Регистрация
    28.06.2013
    Адрес
    Краснодар
    Сообщений
    1,333
    Поблагодарил(а)
    23
    Благодарностей: 143 (сообщений: 101)
    Цитата Сообщение от pixnet Посмотреть сообщение
    А вот как связать правом категорию заказа с нужными валютами и меню не понял, право же все равно надо будет привязывать к пользователю,
    Право не нужно, в свойствах категории заказа можно ограничить валюты

  8. #7
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    126
    Поблагодарил(а)
    44
    Благодарностей: 13 (сообщений: 12)
    На support.ucs.ru нашел вот такой скрипт:

    procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string);
    var i, CategCode, dishpresent: integer;
    it: TCheckItem;
    Categ: TClassificatorGroup;
    CardCode: string;
    McrPay: TMcrPay;


    begin


    CategCode := 9; // категория контролируемых блюд
    dishpresent := 0;
    Categ := TClassificatorGroup(getitemBycodeNum('Classificato rGroups', CategCode));
    CardCode := '';


    // проверка наличия карты в заказе
    for i := 0 to RKCheck.CurrentOrder.Sessions.McrPays.ItemCount - 1 do begin
    McrPay := TMcrPay(RKCheck.CurrentOrder.Sessions.McrPays.Item s[i]);
    CardCode := McrPay.CardNum;
    end;


    // проверка наличия контролируемых блюд в заказе
    for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin
    it := RKCheck.CurrentOrder.Sessions.Lines[i];
    if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then
    if Categ.IsChild(it.RefItem) then
    dishpresent := dishpresent + 1;
    end;


    // контроль при оплате
    if SYS.ObjectInheritsFrom(AObjectAft, 'TPayLine') then
    if dishpresent > 0 then
    if CardCode <> '' then
    AAllow:= True
    else
    begin
    AAllow := false;
    AMessage := 'Оплата товаров из служебного меню, наличными или банковской картой, доступна только после авторизации Карты!';
    end;
    end;

    Он почти подходит под текущую задачу но, контролирует товары в заказе из определенной классификации и дает оплатить налом или безналом только если есть авторизация карты.
    Пытаюсь его доработать, пока не получается. Необходимо, чтоб он помимо (или вместо) наличия карты заказе, проверял сумму этой картой оплаченную, если валютой пдс было оплачено 1р или более, то тогда можно доплатить остатки любой другой, если нет, то показ сообщения.

    По сути нужно лишь добавить в него контроль суммы оплаты определенной валютой. Перепробовал несколько вариантов, безуспешно....
    Заранее благодарю всех откликнувшихся

  9. #8
    Сведущий
    Регистрация
    26.01.2012
    Адрес
    чебоксары
    Сообщений
    50
    Поблагодарил(а)
    0
    Благодарностей: 19 (сообщений: 14)
    Цитата Сообщение от pixnet Посмотреть сообщение
    На support.ucs.ru нашел вот такой скрипт:

    // проверка наличия контролируемых блюд в заказе
    for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin
    it := RKCheck.CurrentOrder.Sessions.Lines[i];
    if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then



    Он почти подходит под текущую задачу но, контролирует товары в заказе из определенной классификации и дает оплатить налом или безналом только если есть авторизация карты.
    Пытаюсь его доработать, пока не получается. Необходимо, чтоб он помимо (или вместо) наличия карты заказе, проверял сумму этой картой оплаченную, если валютой пдс было оплачено 1р или более, то тогда можно доплатить остатки любой другой, если нет, то показ сообщения.

    По сути нужно лишь добавить в него контроль суммы оплаты определенной валютой. Перепробовал несколько вариантов, безуспешно....
    Заранее благодарю всех откликнувшихся
    У вас половина ответа в вопросе содержится. Тут вы все блюда перебираете, а надо практически так же перебрать все оплаты на предмет выполнения дополнительного условия. Возьмите любой скрипт на проверку оплат и поймете в чем отличия. 'TDish' на 'tpayline' заменить, насколько помню.

  10. 2 пользователей сказали cпасибо Snap01 за это полезное сообщение:

    pixnet (10.09.2020),SH (08.09.2020)

  11. #9
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    126
    Поблагодарил(а)
    44
    Благодарностей: 13 (сообщений: 12)
    Я его доработал до вот этого состояния:

    procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var AAllow: boolean; var AMessage: string);
    var i, CategCode, currpresent, dishpresent: integer;


    it: TCheckItem;
    Categ: TClassificatorGroup;
    CardCode: string;
    McrPay: TMcrPay;
    Limit: double;


    begin


    currpresent := 0; // сумма оплаты
    CategCode := 9; // категория контролируемых блюд
    dishpresent := 0; // блюда в заказе
    Categ := TClassificatorGroup(getitemBycodeNum('Classificato rGroups', CategCode));
    CardCode := '';
    Limit :=0;

    //проверка наличия карты в заказе


    for i := 0 to RKCheck.CurrentOrder.Sessions.McrPays.ItemCount - 1 do begin
    McrPay := TMcrPay(RKCheck.CurrentOrder.Sessions.McrPays.Item s[i]);
    Limit := Limit + McrPay.MaxAmount;
    CardCode := McrPay.CardNum;
    end;

    // проверка наличия контролируемых блюд в заказе


    for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin
    it := RKCheck.CurrentOrder.Sessions.Lines[i];
    if SYS.ObjectInheritsFrom(TObject(it), 'TDish') then
    if Categ.IsChild(it.RefItem) then
    dishpresent := dishpresent + 1;
    end;

    //проверка суммы оплаты

    for i := 0 to RKCheck.CurrentOrder.Sessions.LinesCount - 1 do begin
    it := RKCheck.CurrentOrder.Sessions.Lines[i];
    if SYS.ObjectInheritsFrom(TObject(it), 'TPayLine') then
    if (it.Code = 10) then //код валюты
    if TPayLine(it).CurrLineSum > 0 then
    currpresent := currpresent + 1;
    end;


    // контроль при оплате

    if SYS.ObjectInheritsFrom(AObjectAft, 'TPayLine') then
    if dishpresent > 0 then
    if (CardCode <> '') and (Limit > 0) then
    else if (currpresent > 1) then
    AAllow:= True
    else
    begin
    AAllow := false;
    AMessage := 'Сообщение';
    end;
    end;

    Работает так, если в заказе присутствуют блюда из определенной классификации, то при выборе валют нал и безнал запрет с выводом сообщения, при авторизации карты с нулевым остатком, тоже вывод сообщения. Если в заказе присутствует оплата спец валютой хотя бы на рубль, то можно доплатить налом или без налом. Все как я хотел, но за одним исключением, есть дыра в этом алгоритме. Если авторизировать карту с положительным остатком, а потом оплату по ней удалить из заказа, он дает оплатить любой валютой, хотя не должен, оплата любой валютой должна быть доступна только при наличии в заказе оплаты спец валютой на сумму от 1 рубля и более. Буду признателен если подскажите где что не так

  12. #10
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    126
    Поблагодарил(а)
    44
    Благодарностей: 13 (сообщений: 12)
    if SYS.ObjectInheritsFrom(AObjectAft, 'TPayLine') then
    if dishpresent > 0 then
    if (CardCode <> '') and (Limit > 0) then
    else if (currpresent > 1) then
    Вот этот участок кода должен быть таким:

    if SYS.ObjectInheritsFrom(AObjectAft, 'TPayLine') then
    if dishpresent > 0 then // проверка блюда из классификации
    if (CardCode <> '') and (Limit > 0) then // одновременная проверка авторизации карты с лимитом по ней
    if (currpresent > 1) then // проверка суммы оплаты спец валютой


    Без else, но он в таком виде вообще перестает работать...

Похожие темы

  1. Настройка Валют + комбинированные оплаты
    от choovak в разделе R-Keeper 7 и фискальные регистраторы, а также чеки и пречеки
    Ответов: 9
    Последнее сообщение: 11.12.2018, 15:50
  2. Печать валют при закрытии кассовой смены
    от mcmaster в разделе R-Keeper 7 и фискальные регистраторы, а также чеки и пречеки
    Ответов: 7
    Последнее сообщение: 11.05.2017, 08:46
  3. Как сделать печать 2-ух валют в пречеке?
    от Victor12 в разделе RK: Сервис-печать, принтеры
    Ответов: 3
    Последнее сообщение: 11.05.2014, 18:20
  4. Настройка Валют и ФР bixolon-01k
    от ffff в разделе R-Keeper 7 и фискальные регистраторы, а также чеки и пречеки
    Ответов: 10
    Последнее сообщение: 30.12.2013, 02:36

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •