Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

1C + JScript

1C + JScript
Я
   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("+КодКарты+");");
   vde69
 
1 - 20.08.20 - 13:29
замени " на '
   acht
 
2 - 20.08.20 - 13:33
>   if (strN.charAt(i) == " ") continue; 

Что за кавычки?
   Garykom
 
3 - 20.08.20 - 13:36
(0) если на клиенте то можно в ПолеHTML засунуть
   Garykom
 
4 - 20.08.20 - 13:37
(0) хотя имхо CRC8 есть и на 1С код
   craxx
 
5 - 20.08.20 - 13:38
(0) на на фейхуа? Все тоже самое на 1С сложно написать?
   GhostMaul
 
6 - 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)
   MyNick
 
7 - 20.08.20 - 14:20
   GhostMaul
 
8 - 20.08.20 - 14:30
(7) Смотрел, не тот результат
Брал функцию тут: https://www.planetimming.com/checksum8.html
   GhostMaul
 
9 - 20.08.20 - 14:58
Спасибо всем, надо использовать не Run, а Eval
    Результат = ScrptCtrl.Eval("CRC8("""+КодКарты+""");");

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.