Показано с 1 по 10 из 13

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

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Сведущий
    Регистрация
    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' заменить, насколько помню.

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

    pixnet (10.09.2020),SH (08.09.2020)

  3. #2
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    130
    Поблагодарил(а)
    45
    Благодарностей: 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 рубля и более. Буду признателен если подскажите где что не так

  4. #3
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    130
    Поблагодарил(а)
    45
    Благодарностей: 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, но он в таком виде вообще перестает работать...

  5. #4
    Сведущий
    Регистрация
    26.01.2012
    Адрес
    чебоксары
    Сообщений
    50
    Поблагодарил(а)
    0
    Благодарностей: 19 (сообщений: 14)
    Цитата Сообщение от pixnet Посмотреть сообщение
    Я его доработал до вот этого состояния:

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

  6. #5
    Разбирающийся
    Регистрация
    07.02.2018
    Адрес
    Ижевск
    Сообщений
    130
    Поблагодарил(а)
    45
    Благодарностей: 13 (сообщений: 12)
    Цитата Сообщение от Snap01 Посмотреть сообщение
    потому что нужно как правило проверять статусы.
    Не понял о чем речь, если лень писать, то лучше этого не делать, а то от таких ответов еще больше вопросов

    Скрипт дописал, работает четко.

    procedure CheckViewOnBeforeCheckViewEdit(Sender: TObject; AEditType: TEditType; AObjectBef, AObjectAft: TObject; var i, CategCode, CurrencyCode, dishpresent: integer;


    it: TCheckItem;


    Categ: TClassificatorGroup;

    currsum: double;


    begin


    currsum := 0; // для проверки оплаты

    CurrencyCode := 10; //код валюты


    CategCode := 9; // категория контролируемых блюд


    dishpresent := 0; //для проверки блюд


    Categ := TClassificatorGroup(getitemBycodeNum('Classificato rGroups', CategCode));



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


    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 = CurrencyCode) then

    currsum := currsum + 1;

    end;


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

    if SYS.ObjectInheritsFrom(AObjectAft, 'TPayLine') then

    if dishpresent > 0 then

    if (TPayLine(AObjectAft).code = CurrencyCode) then


    else if currsum > 0 then


    AAllow:= True

    else

    begin


    AAllow := false;


    AMessage := 'Данная операция недоступна!';


    end;


    end;

  7. #6
    Сведущий
    Регистрация
    26.01.2012
    Адрес
    чебоксары
    Сообщений
    50
    Поблагодарил(а)
    0
    Благодарностей: 19 (сообщений: 14)
    Цитата Сообщение от pixnet Посмотреть сообщение
    Не понял о чем речь, если лень писать, то лучше этого не делать, а то от таких ответов еще больше вопросов
    Речь о том, что я цитировал. Если у вас не контролировались удаления оплат, то это потому, что вы вообще нигде в скрипте не проверяете статусы. Ни у блюд, ни у оплат.
    А сам скрипт я не читал, потому что сразу вижу, что он не соответствует ТЗ из первого поста.

Похожие темы

  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

Ваши права

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