Почему AMCBase не переносит штрих-код более 12 символов. Тоже самое и с другими продуктами. Только не надо говорить что 13-й символ контрольный. Вы же в EAN-8 не режете контрольный символ. И мне не интересно, что касса чего-то там не понимает. У меня штрих-код это УНИКАЛЬНОЕ значение в номенклатуре, в отличие от кода, наименования и т.д. И когда мне надо найти товар при получении данных товароучета я хочу пользоваться именно этим полем, но не могу, так как в AMCBase 12-ти символьный код, а в 1с 13-ти. Почему не хранить в AMCBase все 13 символов. При этом вы можете не импользовать 13-й символ. Но дайте мне право использовать его!
Тоже самое у Вас с OnlineServer. Зачем так ограничивать?[/b]
Пользователь
Сообщений: Регистрация: 05.11.2002
04.12.2002 09:04:09
13 разряд ШК ЕАН13 - контрольный, зависящий однозначно от 12 основных разрядов, поэтому никто не лишает Вас права имея 12 разрядов основного кода добавить вычисленный 13-й разряд и использовать полноценный ШК в стандартных процедурах 1с.
Пользователь
Сообщений: Регистрация: 26.11.2002
04.12.2002 13:30:44
Цитата
ping писал(а):
13 разряд ШК ЕАН13 - контрольный, зависящий однозначно от 12 основных разрядов, поэтому никто не лишает Вас права имея 12 разрядов основного кода добавить вычисленный 13-й разряд и использовать полноценный ШК в стандартных процедурах 1с.
Замечательно. Теперь я еще и котрольную цифру должен сам расчитывать. Зачем было ее вообще резать. Зачем доводить до потери информации, когда это можно не делать?
Сообщений: Регистрация: 31.10.2002
05.12.2002 11:19:44
Программы работают с тем представлением штрих-кодов, с которым работают поддерживаемые ими кассы.
Для вычисления контрольной цифры 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,Добавок+Стр,Стр+Добавок);
Иначе
Возврат Стр;
КонецЕсли;
КонецФункции
Пользователь
Сообщений: Регистрация: 26.11.2002
05.12.2002 13:49:39
Александр, конечно спасибо за функцию, не придется самому писать, но все равно такое поведение программы я считаю не правильным. Программа работает с пользователем, что и как Вы делаете на железном уровне мне не интересно. Мое глубокое убежение то, что штрих-код должен храниться в программе в 13-ти символьном виде. Вам же для своей работы можно поместить урезанный код в переменную и работать с ней.
Администратор
Сообщений: Регистрация: 29.11.2004
06.12.2002 07:59:22
Цитата
AlexeyVt писал(а):
Мое глубокое убежение то, что штрих-код должен храниться в программе в 13-ти символьном виде
Ну почему же? Давайте разберемся. Кроме кода EAN13 существуют совершенно другие штриховые коды, и считать что код который Вы выгружаете в программу является кодом EAN-13 не есть правильно. Вы можете например считать сканером код в кодировке 39, те же 12 и более цифр, касса при этом воспримет и упакует первые 12. Что тогда делать программе? Поэтому программа оперирует адекватными данными хранящимися в кассе, другое дело если Вы работаете с EAN13, то это легко учитывается функцией приведенной Выше.
Пользователь
Сообщений: Регистрация: 26.11.2002
07.12.2002 09:28:57
Цитата
admin писал(а):
Вы можете например считать сканером код в кодировке 39, те же 12 и более цифр, касса при этом воспримет и упакует первые 12. Что тогда делать программе? Поэтому программа оперирует адекватными данными хранящимися в кассе
Что вам мешает хранить 13 символов, а работать с оборудованием только с 12 из них.
Тем более что вы сейчас все переводите на InterBase, я может вообще буду забирать данные с сервера минуя ваш софт. Мне удобнее (как пользователю) работать с нормальным штрих-кодом, который я ввел. Это же удобнее и обьяснять продавщицам, которые работают с программой. Вам же никакой разницы. Храните 13 символов, но при использовании режьте до 12 и вперед работайте с кассами.
Цитата
другое дело если Вы работаете с EAN13, то это легко учитывается функцией приведенной Выше.
Согласитесь, что EAN13 и EAN8 гораздо более распростанены в розничной торговле в России, чем например код 39.
Пользователь
Сообщений: Регистрация: 08.01.2003
10.01.2003 11:43:16
Вот моя версия функции СформировтьEAN13
Функция СформировтьEAN13(ШтрКод)
Если СтрДлина(ШтрКод) <> 12 Тогда //Отсекаем все ШК меньше 12 символов
Возврат ШтрКод;
КонецЕсли;
ВремШтрКод = ШтрКод; //Сохраняем ориг. ШК
ШтрКод=СокрЛП(ШтрКод);
ШтрКод=Лев(ШтрКод,12);
ШтрКод=ДополнитьСтроку(ШтрКод,"0",12,1);
ШтрКод=Число(ШтрКод); //Вот тут должны осекаться все ШК с нецифромыми символами
Четн = 0;
Нечетн = 0;
Для Индекс=1 По 6 Цикл
Четн=Четн+Сред(ШтрКод,2*Индекс,1);
КонецЦикла;
Четн=Четн*3;
Для Индекс=1 По 6 Цикл
Нечетн=Нечетн+Сред(ШтрКод,2*Индекс-1,1);
КонецЦикла;
Если ВремШтрКод = Лев(ИтогШтрКод,12) Тогда //Если это EAN-13 то все ОК и строки совпадут
Возврат ИтогШтрКод;
Иначе
Возврат ВремШтрКод; //Это 100% не EAN-13
КонецЕсли;
КонецФункции [/i]
Пользователь
Сообщений: Регистрация: 19.11.2002
16.01.2003 10:42:16
А - кстати - 13-значное пространство оказалось тесновато.
EAN и UPC приняли решение о переходе к 2005 году на единую 14-значную систему кодирования...
Что по этому поводу может сказать Версия-Т? :wink:
Администратор
Сообщений: Регистрация: 31.10.2002
16.01.2003 11:47:08
Цитата
NiGMa писал(а):
А - кстати - 13-значное пространство оказалось тесновато.
EAN и UPC приняли решение о переходе к 2005 году на единую 14-значную систему кодирования...
А можно попросить ссылочку на первоисточник? Ни на сайте Юнискан, ни на сайте EAN International я никаких упоминаний не нашел. Единственное что мне на данный момент известно, что EAN перекроили структуру номеров EAN/UCC-13 c "7/5" на . Но это было еще 1998, а использование их началось в 2001.
Пользователь
Сообщений: Регистрация: 19.11.2002
17.01.2003 03:37:34
На самом деле, именно на сайте ЮНИСКАН/EAN-Россия и есть:
Вот цитата оттуда:
----------------------------
Глобальный номер товара GTIN (Global Trade Item Number, англ.) - это 14-разрядный международный номер товара, используемый в электронных каталогах и информационных системах.
С 1 января 2005 года Международная Ассоциация товарной нумерации (EAN International) и Американский Совет по единому коду (UCC) объединяются в единую систему EAN·UCC.
.......
Вот почему в системе EAN·UCC для хранения номера товара в компьютерных базах данных рекомендуется отводить специальное поле GTIN длиной 14 разрядов. ----------------------------
Администратор
Сообщений: Регистрация: 31.10.2002
17.01.2003 07:59:17
Спасибо за ссылку.
До 2005 года и мы перейдем на EAN/UCC-14.
Пользователь
Сообщений: Регистрация: 04.06.2003
28.07.2003 10:18:54
Пожалуйста сбросьте мне и функцию
ДополнитьСтроку(ШтрКод,"0",12,1);
а то 1С такой не знает.
С уважением, Стас.
staslabs@narod.ru
Администратор
Сообщений: Регистрация: 31.10.2002
29.07.2003 10:45:13
Функция ДополнитьСтроку приведена немного выше в этой же теме (первое сообщение с функцией расчета контрольной цифры EAN-13). Это .