Главная 
 Каталог 
 Поддержка 
 Компания 
 Партнеры 
 1C:Франчайзинг 
 Карта сайта 

Задать вопрос
Часто задаваемые вопросы
Справочные материалы
Публикации


Поиск по сайту



Авторизация

Запомнить меня на этом компьютере
  Забыли свой пароль?
  Регистрация


Подписка

Изменение параметров





Hits 88240103
1825
Hosts 3942225
243
Visitors 18999631
315

33


Поддержка / Форумы / Публичные форумы / Программное обеспечение / AMCBase - поле штрих-код

  AMCBase - поле штрих-код

Версия для печати
RSS
AMCBase - поле штрих-код
 
Почему AMCBase не переносит штрих-код более 12 символов. Тоже самое и с другими продуктами. Только не надо говорить что 13-й символ контрольный. Вы же в EAN-8 не режете контрольный символ. И мне не интересно, что касса чего-то там не понимает. У меня штрих-код это УНИКАЛЬНОЕ значение в номенклатуре, в отличие от кода, наименования и т.д. И когда мне надо найти товар при получении данных товароучета я хочу пользоваться именно этим полем, но не могу, так как в AMCBase 12-ти символьный код, а в 1с 13-ти. Почему не хранить в AMCBase все 13 символов. При этом вы можете не импользовать 13-й символ. Но дайте мне право использовать его!
Тоже самое у Вас с OnlineServer. Зачем так ограничивать?[/b]
 
13 разряд ШК ЕАН13 - контрольный, зависящий однозначно от 12 основных разрядов, поэтому никто не лишает Вас права имея 12 разрядов основного кода добавить вычисленный 13-й разряд и использовать полноценный ШК в стандартных процедурах 1с.
 
Цитата
ping писал(а):
13 разряд ШК ЕАН13 - контрольный, зависящий однозначно от 12 основных разрядов, поэтому никто не лишает Вас права имея 12 разрядов основного кода добавить вычисленный 13-й разряд и использовать полноценный ШК в стандартных процедурах 1с.


Замечательно. Теперь я еще и котрольную цифру должен сам расчитывать. Зачем было ее вообще резать. Зачем доводить до потери информации, когда это можно не делать?
 
Программы работают с тем представлением штрих-кодов, с которым работают поддерживаемые ими кассы.
Для вычисления контрольной цифры EAN-13 воспользуйтесь этой функцией:

// Функция вычисляет контрольный символ кода EAN13
// дополняет им переданный параметр и возвращает сформированный EAN13
Функция СформировтьEAN13(ШтрКод) Экспорт
ШтрКод=СокрЛП(ШтрКод);
ШтрКод=Лев(ШтрКод,12);
ШтрКод=ДополнитьСтроку(ШтрКод,"0",12,1);
ШтрКод=Число(ШтрКод);
Четн = 0;
Нечетн = 0;
Для Индекс=1 По 6 Цикл
Четн=Четн+Сред(ШтрКод,2*Индекс,1);
КонецЦикла;
Четн=Четн*3;
Для Индекс=1 По 6 Цикл
Нечетн=Нечетн+Сред(ШтрКод,2*Индекс-1,1);
КонецЦикла;
КонтЦифра=(Четн+Нечетн)/10-Цел((Четн+Нечетн)/10);
КонтЦифра=10-Цел(КонтЦифра*10);
Если КонтЦифра=10 Тогда
КонтЦифра=0;
КонецЕсли;
Возврат Число(Строка(ШтрКод)+Строка(КонтЦифра));
КонецФункции

//Дополняет передаваемую строку Стр символами Чем до строки длиной Длина
//справа или слева в зависимости от значения переменной Режим (1-слева, 2-справа)
Функция ДополнитьСтроку(Стр,Чем,Длина,Режим=1) Экспорт
Добавить=Длина-СтрДлина(Стр);
Если Добавить>0 Тогда
Добавок="";
Для Сч = 1 По Добавить Цикл
Добавок=Добавок+Чем
КонецЦикла;
Возврат ?(Режим=1,Добавок+Стр,Стр+Добавок);
Иначе
Возврат Стр;
КонецЕсли;
КонецФункции
 
Александр, конечно спасибо за функцию, не придется самому писать, но все равно такое поведение программы я считаю не правильным. Программа работает с пользователем, что и как Вы делаете на железном уровне мне не интересно. Мое глубокое убежение то, что штрих-код должен храниться в программе в 13-ти символьном виде. Вам же для своей работы можно поместить урезанный код в переменную и работать с ней.
 
Цитата
AlexeyVt писал(а):
Мое глубокое убежение то, что штрих-код должен храниться в программе в 13-ти символьном виде


Ну почему же? Давайте разберемся. Кроме кода EAN13 существуют совершенно другие штриховые коды, и считать что код который Вы выгружаете в программу является кодом EAN-13 не есть правильно. Вы можете например считать сканером код в кодировке 39, те же 12 и более цифр, касса при этом воспримет и упакует первые 12. Что тогда делать программе? Поэтому программа оперирует адекватными данными хранящимися в кассе, другое дело если Вы работаете с EAN13, то это легко учитывается функцией приведенной Выше.
 
Цитата
admin писал(а):

Вы можете например считать сканером код в кодировке 39, те же 12 и более цифр, касса при этом воспримет и упакует первые 12. Что тогда делать программе? Поэтому программа оперирует адекватными данными хранящимися в кассе


Что вам мешает хранить 13 символов, а работать с оборудованием только с 12 из них.
Тем более что вы сейчас все переводите на InterBase, я может вообще буду забирать данные с сервера минуя ваш софт. Мне удобнее (как пользователю) работать с нормальным штрих-кодом, который я ввел. Это же удобнее и обьяснять продавщицам, которые работают с программой. Вам же никакой разницы. Храните 13 символов, но при использовании режьте до 12 и вперед работайте с кассами.

Цитата

другое дело если Вы работаете с EAN13, то это легко учитывается функцией приведенной Выше.

Согласитесь, что EAN13 и EAN8 гораздо более распростанены в розничной торговле в России, чем например код 39.
 
Вот моя версия функции СформировтьEAN13

Функция СформировтьEAN13(ШтрКод)

Если СтрДлина(ШтрКод) <> 12 Тогда //Отсекаем все ШК меньше 12 символов
Возврат ШтрКод;
КонецЕсли;

ВремШтрКод = ШтрКод; //Сохраняем ориг. ШК

ШтрКод=СокрЛП(ШтрКод);
ШтрКод=Лев(ШтрКод,12);

ШтрКод=ДополнитьСтроку(ШтрКод,"0",12,1);
ШтрКод=Число(ШтрКод); //Вот тут должны осекаться все ШК с нецифромыми символами
Четн = 0;
Нечетн = 0;

Для Индекс=1 По 6 Цикл
Четн=Четн+Сред(ШтрКод,2*Индекс,1);
КонецЦикла;

Четн=Четн*3;

Для Индекс=1 По 6 Цикл
Нечетн=Нечетн+Сред(ШтрКод,2*Индекс-1,1);
КонецЦикла;

КонтЦифра=(Четн+Нечетн)/10-Цел((Четн+Нечетн)/10);
КонтЦифра=10-Цел(КонтЦифра*10);

Если КонтЦифра=10 Тогда
КонтЦифра=0;
КонецЕсли;

ИтогШтрКод = Строка(ШтрКод)+Строка(КонтЦифра);

Если ВремШтрКод = Лев(ИтогШтрКод,12) Тогда //Если это EAN-13 то все ОК и строки совпадут
Возврат ИтогШтрКод;
Иначе
Возврат ВремШтрКод; //Это 100% не EAN-13
КонецЕсли;

КонецФункции
[/i]
 
А - кстати - 13-значное пространство оказалось тесновато.
EAN и UPC приняли решение о переходе к 2005 году на единую 14-значную систему кодирования...
Что по этому поводу может сказать Версия-Т? :wink:
 
Цитата
NiGMa писал(а):
А - кстати - 13-значное пространство оказалось тесновато.
EAN и UPC приняли решение о переходе к 2005 году на единую 14-значную систему кодирования...


А можно попросить ссылочку на первоисточник? :)
Ни на сайте Юнискан, ни на сайте EAN International я никаких упоминаний не нашел. :(
Единственное что мне на данный момент известно, что EAN перекроили структуру номеров EAN/UCC-13 c "7/5" на "9/3". Но это было еще 1998, а использование их началось в 2001.
 
На самом деле, именно на сайте ЮНИСКАН/EAN-Россия и есть:
Что такое Глобальный номер товара (GTIN)?
Вот цитата оттуда:
----------------------------
Глобальный номер товара GTIN (Global Trade Item Number, англ.) - это 14-разрядный международный номер товара, используемый в электронных каталогах и информационных системах.

С 1 января 2005 года Международная Ассоциация товарной нумерации (EAN International) и Американский Совет по единому коду (UCC) объединяются в единую систему EAN·UCC.
.......
Вот почему в системе EAN·UCC для хранения номера товара в компьютерных базах данных рекомендуется отводить специальное поле GTIN длиной 14 разрядов.

----------------------------
 
Спасибо за ссылку.
До 2005 года и мы перейдем на EAN/UCC-14. :)
 
Пожалуйста сбросьте мне и функцию

ДополнитьСтроку(ШтрКод,"0",12,1);

а то 1С такой не знает.

С уважением, Стас.

staslabs@narod.ru
 
Функция ДополнитьСтроку приведена немного выше в этой же теме (первое сообщение с функцией расчета контрольной цифры EAN-13). Это здесь.
 
Спасибо!!!

Вот я слепой то :shock:







© 2000-2024 Версия-Т