Доброго всем дня!
Пытаюсь внедрить яваскрипт в 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);
|}");
Для 1С которые, не тот результат выдают, нашел онлайн калькулятор на яве, который дает нужный результат и вытащил код из него.
Мне сложно интерпретировать в коде 1С вот это:
| result = (~(result & 0xff) + 1) & 0xFF;
| strResult = strHex.charAt(Math.floor(result/16)) + strHex.charAt(result%16);
Заменил кавычки
// КодКарты = AABBCCDD
Результат = ScrptCtrl.Run("CRC8("""+КодКарты+""");");
по причине:
Произошла исключительная ситуация (0x80020006)
Спасибо всем, надо использовать не Run, а Eval
Результат = ScrptCtrl.Eval("CRC8("""+КодКарты+""");");
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс