Имя: Пароль:
1C
1С v8
1C + JScript
0 GhostMaul
 
20.08.20
13:27
Доброго всем дня!
Пытаюсь внедрить яваскрипт в 1С для расчета CRC8, но не выходит аленький цветочек (

{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(183)}: Ошибка при вызове метода контекста (AddCode)
                ScrptCtrl.AddCode("function CRC8(strN)
по причине:
Произошла исключительная ситуация (Ошибка компиляции Microsoft JScript): Синтаксическая ошибка

    ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
    ScrptCtrl.Language = "JScript";
    ScrptCtrl.AddCode("function CRC8(strN)
    |{
    |strHex = new String(""0123456789ABCDEF"");
    |result = 0;
    |fctr = 16;
    |for (i=0; i<strN.length; i++)
    |    {
    |        if (strN.charAt(i) == " ") continue;
    |        v = strHex.indexOf(strN.charAt(i));
    |        if (v < 0)
    |            {
    |            result = -1;
    |            break;
    |            }
    |        result += v * fctr;
    |        if (fctr == 16) fctr = 1; else fctr = 16;
    |    }
    |        // Calculate 2's complement
    |        result = (~(result & 0xff) + 1) & 0xFF;
    |        // Convert result to string
    |        //strResult = new String(result.toString());
    |        strResult = strHex.charAt(Math.floor(result/16)) + strHex.charAt(result%16);
    |        var a = strResult;
    |        return(a);
    |}");
    
    Результат = ScrptCtrl.Run("CRC8("+КодКарты+");");
1 vde69
 
20.08.20
13:29
замени " на '
2 acht
 
20.08.20
13:33
>   if (strN.charAt(i) == " ") continue;

Что за кавычки?
3 Garykom
 
гуру
20.08.20
13:36
(0) если на клиенте то можно в ПолеHTML засунуть
4 Garykom
 
гуру
20.08.20
13:37
(0) хотя имхо CRC8 есть и на 1С код
5 craxx
 
20.08.20
13:38
(0) на на фейхуа? Все тоже самое на 1С сложно написать?
6 GhostMaul
 
20.08.20
14:13
Для 1С которые, не тот результат выдают, нашел онлайн калькулятор на яве, который дает нужный результат и вытащил код из него.
Мне сложно интерпретировать в коде 1С вот это:
    |        result = (~(result & 0xff) + 1) & 0xFF;
    |        strResult = strHex.charAt(Math.floor(result/16)) + strHex.charAt(result%16);

Заменил кавычки
// КодКарты = AABBCCDD
    Результат = ScrptCtrl.Run("CRC8("""+КодКарты+""");");
по причине:
Произошла исключительная ситуация (0x80020006)
7 MyNick
 
20.08.20
14:20
(6) тута смотрел? http://catalog.mista.ru/1c/articles/83313/
8 GhostMaul
 
20.08.20
14:30
(7) Смотрел, не тот результат
Брал функцию тут: https://www.planetimming.com/checksum8.html
9 GhostMaul
 
20.08.20
14:58
Спасибо всем, надо использовать не Run, а Eval
    Результат = ScrptCtrl.Eval("CRC8("""+КодКарты+""");");
Независимо от того, куда вы едете — это в гору и против ветра!