Имя: Пароль:
1C
1С v8
Разработать штрихкод.
0 Solitar
 
18.09.11
16:52
Есть код номенклатур, например, 000001105 и есть штрих код 2301105000000.
штрих код формируется так "23"+5 последних символов кода + 5 нулей + случайная цифра .
мб у кого нить есть похожие наработки или кто знает как все эта данные соединить в штрих код? какая процедура или функция уже есть в 1с для соединения строк?
1 DSSS
 
18.09.11
16:54
(0) в типовой УТ смотри процедуру формирования нового ШК для номенклатуры.
2 muffol
 
18.09.11
16:55
Зачем изобретать велик? В УТ глянь
3 vudo
 
18.09.11
17:18
(0) Нельзя так штрих код формировать!
Это не по стандарту!
http://www.shtrih-yug.ru/tr_ean.html
4 vudo
 
18.09.11
17:26
Вот так у меня было. Где взял не помню...

// Функция осуществляет преобразование PLU в штрихкод.
//
// Параметры:
//  ПЛУ      - <Строка>
//           - PLU товара.
//
// Возвращаемое значение:
//  <Строка> - Штрихкод.
//
Функция ПолучитьШтрихкодПЛУ(ПЛУ,ЭтоКод = Ложь)
   Если ЭтоКод Тогда
       Возврат Формат(Число(ПЛУ), "ЧДЦ=0; ЧГ=");
   КонецЕсли;    
   Штрихкод = ПЛУ;
   Если      СтрДлина(Штрихкод) < 8 Тогда
       Попытка
           Штрихкод = Формат(Число(Штрихкод), "ЧЦ=7; ЧДЦ=0; ЧН=0; ЧВН=; ЧГ=0");
           Штрихкод = Штрихкод + КонтрольныйСимволEANТО(Штрихкод, 8);
       Исключение
           ШтрихКод = "Error";
       КонецПопытки;    
   ИначеЕсли СтрДлина(Штрихкод) < 13 И Не ТипШтрихкодаEAN8(Штрихкод) Тогда
       Попытка
           Штрихкод = Формат(Число(Штрихкод), "ЧЦ=12; ЧДЦ=0; ЧН=0; ЧВН=; ЧГ=0");
           Штрихкод = Штрихкод + КонтрольныйСимволEANТО(Штрихкод, 13);
       Исключение
           ШтрихКод = "Error";
       КонецПопытки;    
   КонецЕсли;

   Возврат Штрихкод;

КонецФункции // ПолучитьШтрихкодПЛУ()

//////////////////////////////////////////////////////////////////////////////
// ФУНКЦИИ РАБОТЫ СО ШТРИХКОДАМИ

// Функция возвращает результат проверки строки на предмет соответствия
// штрихкоду формата EAN8.
//
// Параметры:
//  Штрихкод - <Строка>
//           - Проверяемый штрихкод.
//
// Возвращаемое значение:
//  <Булево> - Результат проверки.
//
Функция ТипШтрихкодаEAN8(Штрихкод)

   Результат   = Ложь;
   Сумма       = 0;
   Коэффициент = 3;

   Если СтрДлина(Штрихкод) = 8 Тогда
       Индекс = Неопределено;
       Для Индекс = 1 По 7 Цикл
           КодСимв = КодСимвола(Штрихкод, Индекс);
           Если КодСимв < 48 Или КодСимв > 57 Тогда
               Возврат Результат;
           КонецЕсли;
           Сумма       = Сумма + Коэффициент * (КодСимв - 48);
           Коэффициент = 4 - Коэффициент;
       КонецЦикла;
       Сумма     = (10 - Сумма % 10) % 10;
       Результат = (КодСимвола(Штрихкод, 8) = Сумма + 48);
   КонецЕсли;

   Возврат Результат;

КонецФункции // ТипШтрихкодаEAN8ТО()

// Функция вычисляет контрольный символ кода 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()
5 Solitar
 
18.09.11
20:35
vudo огромное спасибо за листинг.

глянул ут, переделал под себя. огромное спасибо всем)

х3 вроде правильно.

Функция ШтрихКодНаСервере(Парам1,ПрефиксВнутреннегоШтрихкода = "00000")
Штрихкод = "23"+Формат(Число(Парам1), "ЧЦ=5; ЧВН=; ЧГ=")+ПрефиксВнутреннегоШтрихкода;
Штрихкод =  Штрихкод + КонтрольныйСимволEANТО(Штрихкод, 13);
Возврат Штрихкод;

КонецФункции
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.