Нужна помощь по функции, по идее должна работать, но не работает, выдает ошибку что не может быть преобразовано в Число
Задача из 12 чисел высчитать 13-ое число(Контрольное Число)
Принцип: сложить все четные, результат умножить на 3, затем сложить все нечетные и сложить с результатом второго действия, далее откинуть десятки и от 10 отнять то число которое получилось. Самостоятельно набросал функцию расчета, строго не судите за лисапед.
Функция КЧ_ШК(Код1,Код2,УникЧисло) // Всего 12 чисел , 1 число-Код1, 2 числа-Код2, 9 чисел-УникЧисло
Старт = ""+Код1+Код2+УникЧисло; //Соединяем вместе
Старт = СокрЛП(Старт);
Старт = Число(Старт); // Переводим в формат Число();
// Определяем все цифры нашего числа
Ч1=Лев(Старт,1);
Ч2=Прав(Лев(Старт,2),1);
Ч3=Прав(Лев(Старт,3),1);
Ч4=Прав(Лев(Старт,4),1);
Ч5=Прав(Лев(Старт,5),1);
Ч6=Прав(Лев(Старт,6),1);
Ч7=Прав(Лев(Старт,7),1);
Ч8=Прав(Лев(Старт,8),1);
Ч9=Прав(Лев(Старт,9),1);
Ч10=Прав(Лев(Старт, 10),1);
Ч11Прав(Лев(Старт,11),1);
Ч12=Прав(Старт,1);
// Плюсуем,множим и снова плюсуем по формуле EAN-13
Результат = ((Ч2+Ч4+Ч6+Ч8+Ч10+Ч12)*3)+(Ч1+Ч3+Ч5+Ч7+Ч9+Ч11); // ошибка в этом месте, когда ставлю к примеру Результат = 125 то дальше все считает правильно
// Определяем Число от которого будем итнимать результат
Если Результат < 220 И Результат > 210 Тогда ОтЧисло = 220;
ИначеЕсли Результат < 210 И Результат > 200 Тогда ОтЧисло = 210;
ИначеЕсли Результат < 200 И Результат > 190 Тогда ОтЧисло = 200;
ИначеЕсли Результат < 190 И Результат > 180 Тогда ОтЧисло = 190;
ИначеЕсли Результат < 180 И Результат > 170 Тогда ОтЧисло = 180;
ИначеЕсли Результат < 170 И Результат > 160 Тогда ОтЧисло = 170;
ИначеЕсли Результат < 160 И Результат > 150 Тогда ОтЧисло = 160;
ИначеЕсли Результат < 150 И Результат > 140 Тогда ОтЧисло = 150;
ИначеЕсли Результат < 140 И Результат > 130 Тогда ОтЧисло = 140;
ИначеЕсли Результат < 130 И Результат > 120 Тогда ОтЧисло = 130;
ИначеЕсли Результат < 120 И Результат > 110 Тогда ОтЧисло = 120;
ИначеЕсли Результат < 110 И Результат > 100 Тогда ОтЧисло = 110;
ИначеЕсли Результат < 100 И Результат > 90 Тогда ОтЧисло = 100;
ИначеЕсли Результат < 90 И Результат > 80 Тогда ОтЧисло = 90;
ИначеЕсли Результат < 80 И Результат > 70 Тогда ОтЧисло = 80;
ИначеЕсли Результат < 70 И Результат > 60 Тогда ОтЧисло = 70;
ИначеЕсли Результат < 60 И Результат > 50 Тогда ОтЧисло = 60;
ИначеЕсли Результат < 50 И Результат > 40 Тогда ОтЧисло = 50;
ИначеЕсли Результат < 40 И Результат > 30 Тогда ОтЧисло = 40;
ИначеЕсли Результат < 30 И Результат > 20 Тогда ОтЧисло = 30;
ИначеЕсли Результат < 20 И Результат > 10 Тогда ОтЧисло = 20;
ИначеЕсли Результат < 10 И Результат > 0 Тогда ОтЧисло = 10;
Иначе ОтЧисло = Результат;
КонецЕсли;
// Получаем контрольное число EAN-13
Конец = ОтЧисло-Результат;
Возврат Конец;
КонецФункции
// Функция вычисляет контрольный символ кода EAN
//
// Параметры:
// ШтрихКод - штрихкод (без контрольной цифры)
// Тип - тип штрихкода: 13 - EAN13, 8 - EAN8
//
// Возвращаемое значение:
// Контрольный символ штрихкода
//
Функция КонтрольныйСимволEAN(ШтрихКод, Тип) Экспорт
Четн = 0;
Нечетн = 0;
КоличествоИтераций = ?(Тип = 13, 6, 4);
Для Индекс = 1 По КоличествоИтераций Цикл
Если (Тип = 8) и (Индекс = КоличествоИтераций) Тогда
Иначе
Четн = Четн + Сред(ШтрихКод, 2 * Индекс, 1);
КонецЕсли;
Нечетн = Нечетн + Сред(ШтрихКод, 2 * Индекс - 1, 1);
КонецЦикла;
Если Тип = 13 Тогда
Четн = Четн * 3;
Иначе
Нечетн = Нечетн * 3;
КонецЕсли;
КонтЦифра = 10 - (Четн + Нечетн) % 10;
Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра));
КонецФункции // КонтрольныйСимволEAN()
logist @ 15.10.16, 12:32
,
Спасибо за код. Работает прекрасно. Я только учусь и если чесно очень тяжело дается это дело.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua