IPB

Здравствуйте, гость ( Вход | Регистрация )

> Frontol 4: прекращение поддержки. Восстановление лицензий

С 1 июля 2017 прекращена поддержка программного продукта Frontol 4
С 9 ноября 2019 прекращена поддержка программного продукта Frontol 5
пруф

С 3 августа 2017 восстановление лицензий производится ТОЛЬКО через СервисДеск
Просьба обращаться к партнерам компании для оформления заявок в СД

5 страниц V  « < 3 4 5  
Добавить ответ в эту темуОткрыть тему
Примеры создания сценариев с помощью языка Java Script
АТОЛ: Царюков Ро...
сообщение 6.10.2020, 12:49
Сообщение #81


Тех.поддержка
********

Группа: Администраторы
Сообщений: 58 083
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717



http://forum.atol.ru/index.php?showtopic=6...st&p=163789


--------------------
ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
POUL
сообщение 6.10.2020, 12:50
Сообщение #82


Магистр слова
********

Группа: Партнеры
Сообщений: 14 890
Регистрация: 17.2.2007
Из: Москва
Пользователь №: 10 778



Проблему удалось обойти, используя обработчик JSON как функцию, немного ее доработав:

Код
var SCRIPT_JSON = 0;

function get_JSON(){
if (SCRIPT_JSON == 0)
{
  var JSON = {};

  (function () {
    "use strict";

    var rx_one = /^[\],:{}\s]*$/;
    var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
    var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
    var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
    var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
    var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;

    function f(n) {
        return n < 10
            ? "0" + n
            : n;
    }

    function this_value() {
        return this.valueOf();
    }

    if (typeof Date.prototype.toJSON !== "function") {

        Date.prototype.toJSON = function () {

            return isFinite(this.valueOf())
                ? this.getUTCFullYear() + "-" +
                        f(this.getUTCMonth() + 1) + "-" +
                        f(this.getUTCDate()) + "T" +
                        f(this.getUTCHours()) + ":" +
                        f(this.getUTCMinutes()) + ":" +
                        f(this.getUTCSeconds()) + "Z"
                : null;
        };

        Boolean.prototype.toJSON = this_value;
        Number.prototype.toJSON = this_value;
        String.prototype.toJSON = this_value;

    }

    var gap;
    var indent;
    var meta;
    var rep;

    function quote(string) {
        rx_escapable.lastIndex = 0;
        return rx_escapable.test(string)
            ? "\"" + string.replace(rx_escapable, function (a) {
                var c = meta[a];
                return typeof c === "string"
                    ? c
                    : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
            }) + "\""
            : "\"" + string + "\"";
    }

    function str(key, holder) {
        var i;
        var k;
        var v;
        var length;
        var mind = gap;
        var partial;
        var value = holder[key];
        if (value && typeof value === "object" &&
                typeof value.toJSON === "function") {
            value = value.toJSON(key);
        }
        if (typeof rep === "function") {
            value = rep.call(holder, key, value);
        }
        switch (typeof value) {
        case "string":
            return quote(value);

        case "number":
            return isFinite(value)
                ? String(value)
                : "null";

        case "boolean":
        case "null":
            return String(value);
        case "object":
            if (!value) {
                return "null";
            }
            gap += indent;
            partial = [];
            if (Object.prototype.toString.apply(value) === "[object Array]") {
                length = value.length;
                for (i = 0; i < length; i += 1) {
                    partial[i] = str(i, value) || "null";
                }
                v = partial.length === 0
                    ? "[]"
                    : gap
                        ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
                        : "[" + partial.join(",") + "]";
                gap = mind;
                return v;
            }
            if (rep && typeof rep === "object") {
                length = rep.length;
                for (i = 0; i < length; i += 1) {
                    if (typeof rep[i] === "string") {
                        k = rep[i];
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (
                                gap
                                    ? ": "
                                    : ":"
                            ) + v);
                        }
                    }
                }
            } else {
                for (k in value) {
                    if (Object.prototype.hasOwnProperty.call(value, k)) {
                        v = str(k, value);
                        if (v) {
                            partial.push(quote(k) + (
                                gap
                                    ? ": "
                                    : ":"
                            ) + v);
                        }
                    }
                }
            }
            v = partial.length === 0
                ? "{}"
                : gap
                    ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
                    : "{" + partial.join(",") + "}";
            gap = mind;
            return v;
        }
    }
    if (typeof JSON.stringify !== "function") {
        meta = {
            "\b": "\\b",
            "\t": "\\t",
            "\n": "\\n",
            "\f": "\\f",
            "\r": "\\r",
            "\"": "\\\"",
            "\\": "\\\\"
        };
        JSON.stringify = function (value, replacer, space) {
            var i;
            gap = "";
            indent = "";
            if (typeof space === "number") {
                for (i = 0; i < space; i += 1) {
                    indent += " ";
                }
            } else if (typeof space === "string") {
                indent = space;
            }
            rep = replacer;
            if (replacer && typeof replacer !== "function" &&
                    (typeof replacer !== "object" ||
                    typeof replacer.length !== "number")) {
                throw new Error("JSON.stringify");
            }

            return str("", {"": value});
        };
    }
    if (typeof JSON.parse !== "function") {
        JSON.parse = function (text, reviver) {
            var j;
            function walk(holder, key) {
                var k;
                var v;
                var value = holder[key];
                if (value && typeof value === "object") {
                    for (k in value) {
                        if (Object.prototype.hasOwnProperty.call(value, k)) {
                            v = walk(value, k);
                            if (v !== undefined) {
                                value[k] = v;
                            } else {
                                delete value[k];
                            }
                        }
                    }
                }
                return reviver.call(holder, key, value);
            }
            text = String(text);
            rx_dangerous.lastIndex = 0;
            if (rx_dangerous.test(text)) {
                text = text.replace(rx_dangerous, function (a) {
                    return "\\u" +
                            ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
                });
            }
            if (
                rx_one.test(
                    text
                        .replace(rx_two, "@")
                        .replace(rx_three, "]")
                        .replace(rx_four, "")
                )
            ) {
                j = eval("(" + text + ")");

                return (typeof reviver === "function")
                    ? walk({"": j}, "")
                    : j;
            }
            throw new SyntaxError("JSON.parse");
        };
    }
}());
SCRIPT_JSON = JSON;
}
return SCRIPT_JSON;
}




Далее выдываем методы JSON таким образом:



var responseText = get_JSON().parse (xhr.responseText);


--------------------
FireBird Service Manager
Пишу скрипты за еду. Интегрирую в программы лояльности.
ООО "B2C"

Если долго вглядываться в докуметацию, она начнет давать ответы на вопросы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
POUL
сообщение 6.10.2020, 14:49
Сообщение #83


Магистр слова
********

Группа: Партнеры
Сообщений: 14 890
Регистрация: 17.2.2007
Из: Москва
Пользователь №: 10 778



Обработчик Base64:

Код
var Base64={_keyStr:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",encode:function(e){var t="";var n,r,i,s,o,u,a;
             var f=0;
             e=Base64._utf8_encode(e);
             while(f<e.length){n=e.charCodeAt(f++);
             r=e.charCodeAt(f++);
             i=e.charCodeAt(f++);
             s=n>>2;
             o=(n&3)<<4|r>>4;
             u=(r&15)<<2|i>>6;a=i&63;
             if(isNaN(r)){u=a=64}
             else
             if(isNaN(i))
             {a=64}t=t+this._keyStr.charAt(s)+this._keyStr.charAt(o)+this._keyStr.charAt(u)+this._keyStr.charAt(a)}return t},decode:function(e)
             {var t="";
             var n,r,i;
             var s,o,u,a;
             var f=0;
             e=e.replace(/[^A-Za-z0-9\+\/\=]/g,"");
             while(f<e.length){s=this._keyStr.indexOf(e.charAt(f++));
             o=this._keyStr.indexOf(e.charAt(f++));
             u=this._keyStr.indexOf(e.charAt(f++));
             a=this._keyStr.indexOf(e.charAt(f++));
             n=s<<2|o>>4;r=(o&15)<<4|u>>2;
             i=(u&3)<<6|a;
             t=t+String.fromCharCode(n);
             if(u!=64){t=t+String.fromCharCode(r)}
             if(a!=64){t=t+String.fromCharCode(i)}}
             t=Base64._utf8_decode(t);
             return t},_utf8_encode:function(e)
             {e=e.replace(/\r\n/g,"\n");
             var t="";
             for(var n=0;
                 n<e.length;
                 n++)
             {var r=e.charCodeAt(n);
             if(r<128)
             {t+=String.fromCharCode(r)}
             else
             if(r>127&&r<2048)
             {t+=String.fromCharCode(r>>6|192);
             t+=String.fromCharCode(r&63|128)}
             else{t+=String.fromCharCode(r>>12|224);
             t+=String.fromCharCode(r>>6&63|128);
             t+=String.fromCharCode(r&63|128)}}
             return t},_utf8_decode:function(e){
             var t="";
             var n=0;
             var r=c1=c2=0;
             while(n<e.length)
             {r=e.charCodeAt(n);
             if(r<128)
             {t+=String.fromCharCode(r);
             n++}
             else
             if(r>191&&r<224)
             {c2=e.charCodeAt(n+1);
             t+=String.fromCharCode((r&31)<<6|c2&63);
             n+=2}
             else
             {c2=e.charCodeAt(n+1);
              c3=e.charCodeAt(n+2);
             t+=String.fromCharCode((r&15)<<12|(c2&63)<<6|c3&63);
             n+=3}}
             return t}}


var encodedString = Base64.encode (clienId + ":" + secretKey);
var decodedString = Base64.decode ('dgYTIEdiuosidsdGkucyesiueFFkdsdhskj');


--------------------
FireBird Service Manager
Пишу скрипты за еду. Интегрирую в программы лояльности.
ООО "B2C"

Если долго вглядываться в докуметацию, она начнет давать ответы на вопросы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 7.6.2021, 15:35
Сообщение #84


Магистр слова
********

Группа: Пользователи
Сообщений: 4 650
Регистрация: 30.10.2007
Пользователь №: 12 033



Цитата(POUL @ 6.10.2020, 12:50) *
var responseText = get_JSON().parse (xhr.responseText);


Эта функция позволила создать свою поделку. Итак УТМ 4 может проверять марки "на лету". Идея такая - каждая добавляемая марка проверяется через УТМ, и если не проходит проверку, то в чек не добавляется. Ответ возвращается в JSON, поэтому нужна была функция разбора.

В функции checkStamp меняем адрес УТМ на свой.

Код
var SCRIPT_JSON = 0;

function init() {
  frontol.addEventListener( "addPosition", "beforeAddPosition", true );
  frontol.addEventListener( "changePosition", "beforeChangePosition", true );
}

function checkStamp( stamp ) {

  url = "http://localhost:8080/api/mark/check?code="+stamp;

  try {
    xmlHTTP = new ActiveXObject("Microsoft.xmlHTTP");
    xmlHTTP.Open( "GET", url, 0);
    xmlHTTP.Send();
  } catch(e) {}

  var responseText = get_JSON().parse( xmlHTTP.responseText );

  if ( xmlHTTP.Status != 200 )
    frontol.actions.showError( "УТМ не доступен. Продажа алкогольной продукции не возможна!" );

  if ( responseText.owner != true )
    frontol.actions.showMessage( "Внимание! Данная марка не прошла проверку на УТМ. Продажа не возможна!" );

}

function beforeChangePosition( position ) {
  position.stamp.index = position.stamp.count;
  checkStamp(position.stamp.value);
}

function beforeAddPosition( position ) {
  beforeChangePosition( position );
}

function get_JSON(){
  if (SCRIPT_JSON == 0)
  {
    var JSON = {};

    (function () {
    "use strict";

    var rx_one = /^[\],:{}\s]*$/;
    var rx_two = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g;
    var rx_three = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g;
    var rx_four = /(?:^|:|,)(?:\s*\[)+/g;
    var rx_escapable = /[\\"\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
    var rx_dangerous = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;

    function f(n) {
      return n < 10
        ? "0" + n
        : n;
    }

    function this_value() {
      return this.valueOf();
    }

    if (typeof Date.prototype.toJSON !== "function") {

      Date.prototype.toJSON = function () {

        return isFinite(this.valueOf())
          ? this.getUTCFullYear() + "-" +
              f(this.getUTCMonth() + 1) + "-" +
              f(this.getUTCDate()) + "T" +
              f(this.getUTCHours()) + ":" +
              f(this.getUTCMinutes()) + ":" +
              f(this.getUTCSeconds()) + "Z"
          : null;
      };

      Boolean.prototype.toJSON = this_value;
      Number.prototype.toJSON = this_value;
      String.prototype.toJSON = this_value;

    }

    var gap;
    var indent;
    var meta;
    var rep;

    function quote(string) {
      rx_escapable.lastIndex = 0;
      return rx_escapable.test(string)
        ? "\"" + string.replace(rx_escapable, function (a) {
          var c = meta[a];
          return typeof c === "string"
            ? c
            : "\\u" + ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
        }) + "\""
        : "\"" + string + "\"";
    }

    function str(key, holder) {
      var i;
      var k;
      var v;
      var length;
      var mind = gap;
      var partial;
      var value = holder[key];
      if (value && typeof value === "object" &&
          typeof value.toJSON === "function") {
        value = value.toJSON(key);
      }
      if (typeof rep === "function") {
        value = rep.call(holder, key, value);
      }
      switch (typeof value) {
      case "string":
        return quote(value);

      case "number":
        return isFinite(value)
          ? String(value)
          : "null";

      case "boolean":
      case "null":
        return String(value);
      case "object":
        if (!value) {
          return "null";
        }
        gap += indent;
        partial = [];
        if (Object.prototype.toString.apply(value) === "[object Array]") {
          length = value.length;
          for (i = 0; i < length; i += 1) {
            partial[i] = str(i, value) || "null";
          }
          v = partial.length === 0
            ? "[]"
            : gap
              ? "[\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "]"
              : "[" + partial.join(",") + "]";
          gap = mind;
          return v;
        }
        if (rep && typeof rep === "object") {
          length = rep.length;
          for (i = 0; i < length; i += 1) {
            if (typeof rep[i] === "string") {
              k = rep[i];
              v = str(k, value);
              if (v) {
                partial.push(quote(k) + (
                  gap
                    ? ": "
                    : ":"
                ) + v);
              }
            }
          }
        } else {
          for (k in value) {
            if (Object.prototype.hasOwnProperty.call(value, k)) {
              v = str(k, value);
              if (v) {
                partial.push(quote(k) + (
                  gap
                    ? ": "
                    : ":"
                ) + v);
              }
            }
          }
        }
        v = partial.length === 0
          ? "{}"
          : gap
            ? "{\n" + gap + partial.join(",\n" + gap) + "\n" + mind + "}"
            : "{" + partial.join(",") + "}";
        gap = mind;
        return v;
      }
    }
    if (typeof JSON.stringify !== "function") {
      meta = {
        "\b": "\\b",
        "\t": "\\t",
        "\n": "\\n",
        "\f": "\\f",
        "\r": "\\r",
        "\"": "\\\"",
        "\\": "\\\\"
      };
      JSON.stringify = function (value, replacer, space) {
        var i;
        gap = "";
        indent = "";
        if (typeof space === "number") {
          for (i = 0; i < space; i += 1) {
            indent += " ";
          }
        } else if (typeof space === "string") {
          indent = space;
        }
        rep = replacer;
        if (replacer && typeof replacer !== "function" &&
            (typeof replacer !== "object" ||
            typeof replacer.length !== "number")) {
          throw new Error("JSON.stringify");
        }

        return str("", {"": value});
      };
    }
    if (typeof JSON.parse !== "function") {
      JSON.parse = function (text, reviver) {
        var j;
        function walk(holder, key) {
          var k;
          var v;
          var value = holder[key];
          if (value && typeof value === "object") {
            for (k in value) {
              if (Object.prototype.hasOwnProperty.call(value, k)) {
                v = walk(value, k);
                if (v !== undefined) {
                  value[k] = v;
                } else {
                  delete value[k];
                }
              }
            }
          }
          return reviver.call(holder, key, value);
        }
        text = String(text);
        rx_dangerous.lastIndex = 0;
        if (rx_dangerous.test(text)) {
          text = text.replace(rx_dangerous, function (a) {
            return "\\u" +
                ("0000" + a.charCodeAt(0).toString(16)).slice(-4);
          });
        }
        if (
          rx_one.test(
            text
              .replace(rx_two, "@")
              .replace(rx_three, "]")
              .replace(rx_four, "")
          )
        ) {
          j = eval("(" + text + ")");

          return (typeof reviver === "function")
            ? walk({"": j}, "")
            : j;
        }
        throw new SyntaxError("JSON.parse");
      };
    }
  }());
  SCRIPT_JSON = JSON;
  }
  return SCRIPT_JSON;
}


з.ы. Было бы не плохо это интегрировать сразу во фронтол wink.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
POUL
сообщение 7.6.2021, 16:39
Сообщение #85


Магистр слова
********

Группа: Партнеры
Сообщений: 14 890
Регистрация: 17.2.2007
Из: Москва
Пользователь №: 10 778



во фронтоле вроде это есть


--------------------
FireBird Service Manager
Пишу скрипты за еду. Интегрирую в программы лояльности.
ООО "B2C"

Если долго вглядываться в докуметацию, она начнет давать ответы на вопросы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 7.6.2021, 16:43
Сообщение #86


Магистр слова
********

Группа: Пользователи
Сообщений: 4 650
Регистрация: 30.10.2007
Пользователь №: 12 033



Цитата(POUL @ 7.6.2021, 16:39) *
во фронтоле вроде это есть

Он проверяет просто по базе проданных марок... Это не то. Тут гарантированная проверка марки.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
POUL
сообщение 7.6.2021, 17:00
Сообщение #87


Магистр слова
********

Группа: Партнеры
Сообщений: 14 890
Регистрация: 17.2.2007
Из: Москва
Пользователь №: 10 778



есть также проверка силами УТМ
но проблема в том, что УТМ проверяет тольк при наличии связи с ЕГАИС
если связи нет, то УТМ возвращает ДОБРО


--------------------
FireBird Service Manager
Пишу скрипты за еду. Интегрирую в программы лояльности.
ООО "B2C"

Если долго вглядываться в докуметацию, она начнет давать ответы на вопросы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 7.6.2021, 17:16
Сообщение #88


Магистр слова
********

Группа: Пользователи
Сообщений: 4 650
Регистрация: 30.10.2007
Пользователь №: 12 033



Цитата(POUL @ 7.6.2021, 17:00) *
есть также проверка силами УТМ
но проблема в том, что УТМ проверяет тольк при наличии связи с ЕГАИС
если связи нет, то УТМ возвращает ДОБРО

Нет. УТМ хранит список доступных марок локально и по этому запросу сверяет с локальной базой. В 3.0.8 запрос работал немного по другому и на старые марки всегда возвращал - нет в наличии. В 4.2.0 проверку переделали и этот запрос работает вполне корректно как с новыми так и со старыми марками. Скажу честно, на кассе в бою не проверял, но марки разные подсовывал - было норм. В любом случае получить ошибку на стадии пиканья марок удобнее, нежели после ввода оплаты в чек на сотню марок.
Я буду использовать, но беда в том, что у нас с 7 по 11 запретили продажу алкоголя - я пока вне тестов sad.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 8.6.2021, 10:45
Сообщение #89


Магистр слова
********

Группа: Пользователи
Сообщений: 4 650
Регистрация: 30.10.2007
Пользователь №: 12 033



Код
  if ( responseText.owner != true )
    frontol.actions.showMessage( "Внимание! Данная марка не прошла проверку на УТМ. Продажа не возможна!" );

Конечно же должно быть так:
Цитата
if ( responseText.owner != true )
frontol.actions.showError( "Внимание! Данная марка не прошла проверку на УТМ. Продажа не возможна!" );

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 8.6.2021, 14:01
Сообщение #90


Магистр слова
********

Группа: Пользователи
Сообщений: 4 650
Регистрация: 30.10.2007
Пользователь №: 12 033



Поправка 1: что бы при ошибке было окно "с кнопкой" и не исчезало при сканировании следующего ШК...
Код
  if ( xmlHTTP.Status != 200 ) {
    frontol.actions.showMessage( "УТМ не доступен. Продажа алкогольной продукции не возможна!", Icon.Error + Button.Ok );
    frontol.actions.cancel();
  }

  if ( responseText.owner != true ) {
    frontol.actions.showMessage( "Внимание! Данная марка не прошла проверку на УТМ. Продажа не возможна!", Icon.Error + Button.Ok );
    frontol.actions.cancel();
  }


Поправка 2: Проверяем марки только у алкоголя естественно smile.gif
Код
function controlPosition( position ) {
  if ( position.ware.type == 1 ) {
    position.stamp.index = position.stamp.count;
    checkStamp(position.stamp.value);
  }
}

function beforeChangePosition( position ) {
  controlPosition( position );
}

function beforeAddPosition( position ) {
  controlPosition( position );
}
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 10.6.2021, 20:01
Сообщение #91


Магистр слова
********

Группа: Пользователи
Сообщений: 4 650
Регистрация: 30.10.2007
Пользователь №: 12 033



ЫшО одна поправка:
Код
function controlPosition( position ) {
  if ( position.ware.type == 1 )
    if (position.ware.hasAlcoStamp == 1) {
      position.stamp.index = position.stamp.count;
      checkStamp(position.stamp.value);
    }
}

А то пиво на маркировку пыталсО проверить.
Что могу сказать, в целом скрипт жизнеспособный, проверка марок осуществляется очень быстро. На форуме ФСРАР выяснил, что эта проверка делается сразу на серверах ЕГАИС, а не локально на УТМ. Надо проверить как он отработает в случае отсутствия тырнета...
У нас же обычно как - кассир напикал бутылки и марки, покупатель дал карту, оплата прошла, у покупателя денег сняли, а потом чек в ЕГАИС не прошел, но покупателя это уже не волнует, он взял и пошел.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 11.6.2021, 18:38
Сообщение #92


Магистр слова
********

Группа: Пользователи
Сообщений: 4 650
Регистрация: 30.10.2007
Пользователь №: 12 033



Сегодня, после нескольких дней успешной работы скрипт перестал работать одновременно на 20 кассах blink.gif
Отказала функция JSON:
Код
"Ошибка при выполнении скрипта!Строка 319:         throw new SyntaxError(""JSON.parse"");Исключение брошено и не поймано"

Пришлось что то думать. Решил отказаться от громоздкого парсинга JSON, сделал просто поиск по строке:
Код
  if ( xmlHTTP.responseText.indexOf("true") < 0 ) {
    frontol.actions.showMessage( "Внимание! Данная марка не прошла проверку на УТМ. Продажа не возможна!", Icon.Error + Button.Ok );
    frontol.actions.cancel();
  }

Но ситуация прямо таки очень странная. Скрипт посыпался у всех в одно время.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
gudvin
сообщение 28.6.2021, 21:53
Сообщение #93


Прохожий


Группа: Пользователи
Сообщений: 37
Регистрация: 29.9.2011
Пользователь №: 41 555



а можно ли как то реализовать функционал, при считывании QR кода сигарет, расшифровываем его, получаем оттуда МРЦ, и если дата > 01.07.2021 и МРЦ < 108 выводить Ошибку,

frontol.actions.showMessage( "Внимание! Данная пачка сигарет запрещена к продаже", Icon.Error + Button.Ok );

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

Сообщение отредактировал gudvin - 28.6.2021, 22:01
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 28.6.2021, 22:00
Сообщение #94


Тех.поддержка
********

Группа: Администраторы
Сообщений: 58 083
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717



У вас в DM сигарет имеется дата?

И как бы этот раздел для выкладывания ГОТОВЫХ решений, а не 'мне только спросить'


--------------------
ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
gudvin
сообщение 28.6.2021, 22:21
Сообщение #95


Прохожий


Группа: Пользователи
Сообщений: 37
Регистрация: 29.9.2011
Пользователь №: 41 555



Цитата(АТОЛ: Царюков Роман @ 28.6.2021, 23:00) *
У вас в DM сигарет имеется дата?

И как бы этот раздел для выкладывания ГОТОВЫХ решений, а не 'мне только спросить'

Роман, зачем дата нужна в DM , достаточно проверить системую.
Прошу простить если не в тот раздел, не нашел просто конкретной темы где можно спросить. Думалось в этой можно спокойно спрашивать.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АТОЛ: Царюков Ро...
сообщение 28.6.2021, 22:22
Сообщение #96


Тех.поддержка
********

Группа: Администраторы
Сообщений: 58 083
Регистрация: 25.9.2008
Из: Москва
Пользователь №: 14 717



В этой теме спокойно можно решения свои готовые выкладывать


--------------------
ответы на 90% вопросов находятся в ДОКУМЕНТАЦИИ
еще 9% ответов ТУТ
P.S.: уважайте труд наших писателей - читайте мануалы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
zenik
сообщение 2.7.2021, 11:57
Сообщение #97


Магистр слова
********

Группа: Пользователи
Сообщений: 4 650
Регистрация: 30.10.2007
Пользователь №: 12 033



Сценарий запрещающий добавлять оплаты в "нулевой чек".
Код
function init() {

  frontol.addEventListener( "addPayment", "beforeAddPayment", true );

}

function beforeAddPayment( payment ) {

  if ( frontol.currentDocument.totalSum == 0 ) {
    frontol.actions.showMessage( "Сумма документ равна 0. Добавление оплаты не возможно.", Icon.Error + Button.Ok );
    frontol.actions.cancel();
  }

}
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
POUL
сообщение 28.10.2021, 14:11
Сообщение #98


Магистр слова
********

Группа: Партнеры
Сообщений: 14 890
Регистрация: 17.2.2007
Из: Москва
Пользователь №: 10 778



В JS нет встроенных функций хеширования, включая MD5, поэтому придется использовать сторонние реализации. Далее приведен пример, функция работает с UTF-8 и кириллическими символами.

Код
var MD5 = function(d) {
    d = unescape(encodeURIComponent(d));
    result = M(V(Y(X(d), 8 * d.length)));
    return result.toLowerCase();
};

function M(d) {
    for (var _, m = "0123456789ABCDEF", f = "", r = 0; r < d.length; r++) _ = d.charCodeAt(r), f += m.charAt(_ >>> 4 & 15) + m.charAt(15 & _);
    return f
}

function X(d) {
    for (var _ = Array(d.length >> 2), m = 0; m < _.length; m++) _[m] = 0;
    for (m = 0; m < 8 * d.length; m += 8) _[m >> 5] |= (255 & d.charCodeAt(m / 8)) << m % 32;
    return _
}

function V(d) {
    for (var _ = "", m = 0; m < 32 * d.length; m += 8) _ += String.fromCharCode(d[m >> 5] >>> m % 32 & 255);
    return _
}

function Y(d, _) {
    d[_ >> 5] |= 128 << _ % 32, d[14 + (_ + 64 >>> 9 << 4)] = _;
    for (var m = 1732584193, f = -271733879, r = -1732584194, i = 271733878, n = 0; n < d.length; n += 16) {
        var h = m,
            t = f,
            g = r,
            e = i;
        f = md5_ii(f = md5_ii(f = md5_ii(f = md5_ii(f = md5_hh(f = md5_hh(f = md5_hh(f = md5_hh(f = md5_gg(f = md5_gg(f = md5_gg(f = md5_gg(f = md5_ff(f = md5_ff(f = md5_ff(f = md5_ff(f, r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 0], 7, -680876936), f, r, d[n + 1], 12, -389564586), m, f, d[n + 2], 17, 606105819), i, m, d[n + 3], 22, -1044525330), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 4], 7, -176418897), f, r, d[n + 5], 12, 1200080426), m, f, d[n + 6], 17, -1473231341), i, m, d[n + 7], 22, -45705983), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 8], 7, 1770035416), f, r, d[n + 9], 12, -1958414417), m, f, d[n + 10], 17, -42063), i, m, d[n + 11], 22, -1990404162), r = md5_ff(r, i = md5_ff(i, m = md5_ff(m, f, r, i, d[n + 12], 7, 1804603682), f, r, d[n + 13], 12, -40341101), m, f, d[n + 14], 17, -1502002290), i, m, d[n + 15], 22, 1236535329), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 1], 5, -165796510), f, r, d[n + 6], 9, -1069501632), m, f, d[n + 11], 14, 643717713), i, m, d[n + 0], 20, -373897302), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 5], 5, -701558691), f, r, d[n + 10], 9, 38016083), m, f, d[n + 15], 14, -660478335), i, m, d[n + 4], 20, -405537848), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 9], 5, 568446438), f, r, d[n + 14], 9, -1019803690), m, f, d[n + 3], 14, -187363961), i, m, d[n + 8], 20, 1163531501), r = md5_gg(r, i = md5_gg(i, m = md5_gg(m, f, r, i, d[n + 13], 5, -1444681467), f, r, d[n + 2], 9, -51403784), m, f, d[n + 7], 14, 1735328473), i, m, d[n + 12], 20, -1926607734), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 5], 4, -378558), f, r, d[n + 8], 11, -2022574463), m, f, d[n + 11], 16, 1839030562), i, m, d[n + 14], 23, -35309556), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 1], 4, -1530992060), f, r, d[n + 4], 11, 1272893353), m, f, d[n + 7], 16, -155497632), i, m, d[n + 10], 23, -1094730640), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 13], 4, 681279174), f, r, d[n + 0], 11, -358537222), m, f, d[n + 3], 16, -722521979), i, m, d[n + 6], 23, 76029189), r = md5_hh(r, i = md5_hh(i, m = md5_hh(m, f, r, i, d[n + 9], 4, -640364487), f, r, d[n + 12], 11, -421815835), m, f, d[n + 15], 16, 530742520), i, m, d[n + 2], 23, -995338651), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 0], 6, -198630844), f, r, d[n + 7], 10, 1126891415), m, f, d[n + 14], 15, -1416354905), i, m, d[n + 5], 21, -57434055), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 12], 6, 1700485571), f, r, d[n + 3], 10, -1894986606), m, f, d[n + 10], 15, -1051523), i, m, d[n + 1], 21, -2054922799), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 8], 6, 1873313359), f, r, d[n + 15], 10, -30611744), m, f, d[n + 6], 15, -1560198380), i, m, d[n + 13], 21, 1309151649), r = md5_ii(r, i = md5_ii(i, m = md5_ii(m, f, r, i, d[n + 4], 6, -145523070), f, r, d[n + 11], 10, -1120210379), m, f, d[n + 2], 15, 718787259), i, m, d[n + 9], 21, -343485551), m = safe_add(m, h), f = safe_add(f, t), r = safe_add(r, g), i = safe_add(i, e)
    }
    return Array(m, f, r, i)
}

function md5_cmn(d, _, m, f, r, i) {
    return safe_add(bit_rol(safe_add(safe_add(_, d), safe_add(f, i)), r), m)
}

function md5_ff(d, _, m, f, r, i, n) {
    return md5_cmn(_ & m | ~_ & f, d, _, r, i, n)
}

function md5_gg(d, _, m, f, r, i, n) {
    return md5_cmn(_ & f | m & ~f, d, _, r, i, n)
}

function md5_hh(d, _, m, f, r, i, n) {
    return md5_cmn(_ ^ m ^ f, d, _, r, i, n)
}

function md5_ii(d, _, m, f, r, i, n) {
    return md5_cmn(m ^ (_ | ~f), d, _, r, i, n)
}

function safe_add(d, _) {
    var m = (65535 & d) + (65535 & _);
    return (d >> 16) + (_ >> 16) + (m >> 16) << 16 | 65535 & m
}

function bit_rol(d, _) {
    return d << _ | d >>> 32 - _
}


Пример использования:

var result = MD5('Lorem Ipsum is simply dummy text of the printing');
console.log(result);

var result = MD5('Прародителем текста-рыбы является известный "Lorem Ipsum"');
console.log(result);


--------------------
FireBird Service Manager
Пишу скрипты за еду. Интегрирую в программы лояльности.
ООО "B2C"

Если долго вглядываться в докуметацию, она начнет давать ответы на вопросы
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

5 страниц V  « < 3 4 5
Добавить ответ в эту темуОткрыть тему
18 чел. читают эту тему (гостей: 18, скрытых пользователей: 0)
Пользователей: 0

 



RSS Текстовая версия Сейчас: 2.12.2022, 0:01
 Яндекс цитирования  Rambler's Top100