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

Тема: Свзяка ПДС + РК7 +РК 6 + fixlen

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

Uchenik Свзяка ПДС + РК7 +РК 6 +... 23.11.2017, 06:45
Uchenik Буду очень благодарен 23.11.2017, 17:08
sibgaba я думаю 307777 24.11.2017, 17:35
SLion function... 25.11.2017, 20:52
Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    ТВОРЕЦ СЧАСТЬЯ Аватар для SH
    Регистрация
    29.11.2006
    Сообщений
    18,069
    Поблагодарил(а)
    481
    Благодарностей: 192 (сообщений: 165)
    Если и не готовое решение, то направление, куда думать.

    Сервис - Обработка сигналов устройств - MCR-алгоритмы
    Персональные дебетовые (ПДС), делаем копию.
    В свойствах внизу - Скрипт, открываем.

    Скрипт принимает на вход строку Parameter, пытается ее преобразовать и возвращает ответ, соответствует ли код в строке коду ресторана.

    function MCR1001280(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
    var RestCode: integer;
    begin
    { 778=КодРесторана=КодКарты }
    if pos('778=', Parameter) = 1 then begin - здесь скрипт определяет, что строка начинается с 778. При неверной кодировке можно задать свое начало строки.
    delete(Parameter, 1, 4); - здесь удаляется все начало, остается только "КодРесторана=КодКарты"
    if pos('=', Parameter) > 1 then begin
    RestCode := StrToIntDef(copy(Parameter, 1, pos('=', Parameter) - 1),-1); - в RestCode копируется код ресторана
    delete(Parameter, 1, pos('=', Parameter)); - удаляется код ресторана, остается только код карты. Важно, чтобы алгоритм дошел до этого пункта.
    if RestCode mod 10000 = 0 then - если код, в конце без кода ресторана (делится на 1000 без остатка), то...
    {без кода ресторана - на всю компанию}
    Result := RestCode div 10000 = IntParam('EnterpriseCode') - ... проверяем на соответствие коду предприятия,
    else
    Result := RestCode = IntParam('RestaurantCode'); - а иначе проверяем на соответствие полному коду.
    end;
    end;
    end;

    Если у нас закодированный код не совпадает, то нам надо добавить условия, по которым будет срабатывание.
    Есть две задачи:
    1. принимать чужой код ресторана
    2. у карт с чужим номером отбрасывать "30" в начале.

    Если просто не совпадает код ресторана, то алгоритм нормально пройдет разбор номера и в Parameter будет номер карты, но споткнется при сравнении с кодом ресторана.
    Поэтому, для первой задачи можно просто добавить условие в строку последней проверки:
    Result := (RestCode = IntParam('RestaurantCode')) OR (RestCode = 123450001); - начальное условие оставил и взял в скобки для удобства, далее добавлено ИЛИ и прямое сравнение с кодом, закодированным на карте. 123450001 - код чужого ресторана.

    Далее, в Parameter у нас остается код карты, но он с лидирующими 30, т.е. формата 301234
    Можно, например, так
    После
    delete(Parameter, 1, pos('=', Parameter));
    Добавить строку
    if RestCode = 123450001 then delete(Parameter, 1, 2);
    - эта операция должна удалить первые два символа.

    Если я нигде не ошибся, то итог будет такой:

    function MCR1001280(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
    var RestCode: integer;
    begin
    { 778=КодРесторана=КодКарты }
    if pos('778=', Parameter) = 1 then begin
    delete(Parameter, 1, 4);
    if pos('=', Parameter) > 1 then begin
    RestCode := StrToIntDef(copy(Parameter, 1, pos('=', Parameter) - 1),-1);
    delete(Parameter, 1, pos('=', Parameter));
    if RestCode = 123450001 then delete(Parameter, 1, 2);
    if RestCode mod 10000 = 0 then
    {без кода ресторана - на всю компанию}
    Result := RestCode div 10000 = IntParam('EnterpriseCode')
    else
    Result := (RestCode = IntParam('RestaurantCode')) OR (RestCode = 123450001);
    end;
    end;
    end;
    Алексей Аркадьев

    Когда заказчик ищет волшебника, то чаще всего он находит сказочника.
    Если у Вас есть вопрос по поддержке - напишите его на форуме, я обязательно отвечу, если знаю ответ.
    Если Вам нужны какие-то файлы, пишите на почту: support@carbis.ru, но вначале посмотрите в разделе для скачивания.
    Для коммерческих вопросов:
    +7 (495) 740-49-91, или на почту: sales@carbis.ru

  2. #2
    Интересующийся
    Регистрация
    10.05.2017
    Адрес
    Иркутск
    Сообщений
    39
    Поблагодарил(а)
    0
    Благодарностей: 1 (сообщений: 1)
    Цитата Сообщение от SH Посмотреть сообщение
    if RestCode = 123450001 then delete(Parameter, 1, 2);
    - эта операция должна удалить первые два символа.
    тогда получается надо изменить эту строку, и вписать по другому? не подскажете что написать? =)

  3. #3
    Разбирающийся
    Регистрация
    27.02.2017
    Адрес
    Москва
    Сообщений
    279
    Поблагодарил(а)
    8
    Благодарностей: 101 (сообщений: 66)
    function MCR1001280(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;
    var RestCode: integer;
    begin
    result := false;
    { 778=КодРесторана=КодКарты }
    if pos('778=', Parameter) = 1 then
    begin
    delete(Parameter, 1, 4);
    if pos('=', Parameter) > 1 then
    begin
    RestCode := StrToIntDef(copy(Parameter, 1, pos('=', Parameter) - 1),-1);
    delete(Parameter, 1, pos('=', Parameter));
    if RestCode = 123450002 then
    Parameter := '30'+Parameter;
    Result := RestCode div 10000 = IntParam('EnterpriseCode')
    end;
    end;
    end;

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

    SH (27.11.2017),sibgaba (27.11.2017)

  5. #4
    Интересующийся
    Регистрация
    10.05.2017
    Адрес
    Иркутск
    Сообщений
    39
    Поблагодарил(а)
    0
    Благодарностей: 1 (сообщений: 1)
    Цитата Сообщение от SLion Посмотреть сообщение
    function MCR1001280(DeviceSignal: Integer; DeviceIdent: Integer; var Parameter: String): Boolean;var RestCode: integer;begin result := false; { 778=КодРесторана=КодКарты } if pos('778=', Parameter) = 1 then begin delete(Parameter, 1, 4); if pos('=', Parameter) > 1 then begin RestCode := StrToIntDef(copy(Parameter, 1, pos('=', Parameter) - 1),-1); delete(Parameter, 1, pos('=', Parameter)); if RestCode = 123450002 then Parameter := '30'+Parameter; Result := RestCode div 10000 = IntParam('EnterpriseCode') end; end;end;
    спасибо, сегодня попробую

Похожие темы

  1. FixLen
    от dimon_trd в разделе R-Keeper 6
    Ответов: 14
    Последнее сообщение: 25.05.2009, 03:39

Ваши права

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