Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

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



> Контрольное число Штрих-кода EAN-13 1C:Підприємство 8.3(8.3.8.1652) Бухгалтерия с/х предприятия для Украині, редакция 1.2          
nickolas Подменю пользователя
сообщение 15.10.16, 11:02
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0

Нужна помощь по функции, по идее должна работать, но не работает, выдает ошибку что не может быть преобразовано в Число
Задача из 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
Конец = ОтЧисло-Результат;
Возврат Конец;
КонецФункции


logist Подменю пользователя
сообщение 15.10.16, 11:32
Сообщение #2

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(nickolas @ 15.10.16, 12:02) *
строго не судите за лисапед.

Это скорее лисапедище))

// Функция вычисляет контрольный символ кода 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()


Цитата(nickolas @ 15.10.16, 12:02) *
// ошибка в этом месте

Лев, Прав, Сред, - возвращает тип "строка", а вы ее пытаетесь умножить.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

Спасибо сказали: nickolas, xSerj,

nickolas Подменю пользователя
сообщение 18.10.16, 21:27
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0

logist @ 15.10.16, 12:32 * ,
Спасибо за код. Работает прекрасно. Я только учусь и если чесно очень тяжело дается это дело.

Vofka Подменю пользователя
сообщение 19.10.16, 8:12
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

nickolas, для спасибо есть специальная кнопка

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 4:57
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!