Перейти к содержимому


Тип поля: штрих-код


Сообщений в теме: 9

#1 AChekin

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений

Отправлено 27 Май 2013 - 13:43

Собственно, сабж.

Дело в том, что при использовании КБ в сфере продаж или предоставления услуг, очень было бы удобно иметь поле, в котором бы размещался уникальный штрих-код строки.

Не знаю, можно ли сделать такое поле путем вычислений, но от наличия такой возможности в базовой программе я (как, полагаю, и многие) бы не отказался.

Спасибо.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 27 Май 2013 - 13:53

Путем вычислений можно - такой опыт у нас уже неоднократно был при разработке персональных конфигураций. Что касается базовой возможности, такой вариант не исключен, но вряд ли будет реализован, т.к. невозможно уместить в программе все возможные варианты полей и настроек. Скорее всего просто выложим готовый код вычисления в документации.

#3 teacs

    Активный участник

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 06 Июнь 2013 - 12:21

Присоединяюсь! Очень было бы интересно иметь в функционале своей конфигурации штрих-код.

#4 teacs

    Активный участник

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 02 Февраль 2014 - 16:08

Добрый день. Подскажите, надеяться ли на обнародование готового кода вычисления для штрих-кода?
Несколько дней пытаюсь сделать, чтобы штрих-код был и в поле и в шаблоне печати, пока не получается нигде его отобразить.
Использую инструкции найденные в интернете по поисковому запросу штрих-код на php и css

#5 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Февраль 2014 - 12:28

Пример вычисления для визуализации штрих-кода:

$number = $line['Число']; // поле с числом, которое необходимо преобразовать в штрих-код

$digits = array("0001101","0011001","0010011","0111101","0100011","0110001","0101111","0111011","0110111","0001011");
$chet = ''; $nechet = ''; $left = ''; $right = ''; $barcode = ''; 

$precode = sprintf("%011d", $number);
for ($i=0; $i<11; $i++) {
    if ($i%2==1) $chet += $precode[$i]; else $nechet += $precode[$i];
}
$ctrl_digit = substr((10 - substr($chet + $nechet * 3, -1)), -1);
$code = $precode.$ctrl_digit;

for ($i=0; $i<6; $i++) {
    $left.= $digits[$code[$i]];
}
for ($i=6; $i<12; $i++) {
    $right.= $digits[$code[$i]];
}

$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
for ($i=0; $i<42; $i++) {
    $barcode.= "<div style='width:0px; height:40px; border-left:2px ".($left[$i]?"black":"white")." solid; float:left;'></div>";
}
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
for ($i=0; $i<42; $i++) {
    $barcode.= "<div style='width:0px; height:40px; border-left:2px ".($right[$i]?"white":"black")." solid; float:left;'></div>";
}
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";

$barcode.= "<div style='height:50px;'></div>";
$barcode.= "<div style='margin:-5px 15px; letter-spacing:3px; float:left;'>".substr($code,0,6)."</div>";
$barcode.= "<div style='margin:-5px 04px; letter-spacing:3px; float:left;'>".substr($code,6,6)."</div>";

$line['Штрих-код'] = $barcode;

В поле "Штрих-код" будет отображен штрих-код по числу из поля "Число". Разумеется, в поле "Штрих-код" должен быть включен режим HTML-форматирования.

#6 teacs

    Активный участник

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 03 Февраль 2014 - 20:03

Огромное спасибо, за код!! Все корректно отображается и работает, только не понимаю как сделать чтобы поиск по штрих-коду заработал..
  • Отобразил на панели фиксированного поиска поле штрих-код, сканирую, далее сканер сам нажимает enter и поиск ничего к сожалению не показывает.
  • В поле номер (тип число + автонумерация) значение 11, а в поле штрих-код (тип текст+html форматирование) значение 000000000116 .
  • В коде подправил только height, чтобы меньше по высоте был штрих-код. Больше никаких исправлений не делал.

Сообщение отредактировал teacs: 04 Февраль 2014 - 09:53


#7 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 04 Февраль 2014 - 09:58

По полю "Штрих-код" искать бесполезно, т.к. это по сути "графическое" поле, там хранится визуальное представление в виде html-кода. По полю "Число" непосредственный поиск тоже невозможен, т.к. к нему в штрих-коде добавляется контрольная цифра, которую сканер тоже считывает (как в вашем примере: 11 & 6 (контр.цифра от 11) = 116). Наиболее верным алгоритмом является считывание кода, проверка корректности контрольной цифры, ее "убирание" и затем поиск по чистому числу. Но в вашем случае можно сделать и проще, добавив еще одно вычисляемое поле "Код", куда заносить числовое представление кода в виде "000000000116" и соответственно поиск вести уже по нему. Добавьте поле и замените вычисление на следующее:

$number = $line['Число']; // поле с числом, которое необходимо преобразовать в штрих-код

$digits = array("0001101","0011001","0010011","0111101","0100011","0110001","0101111","0111011","0110111","0001011");
$chet = ''; $nechet = ''; $left = ''; $right = ''; $barcode = '';

$precode = sprintf("%011d", $number);
for ($i=0; $i<11; $i++) {
	if ($i%2==1) $chet += $precode[$i]; else $nechet += $precode[$i];
}
$ctrl_digit = substr((10 - substr($chet + $nechet * 3, -1)), -1);
$code = $precode.$ctrl_digit;
$line['Код'] = $code; // выводим числовое представление кода в поле "Код" (тип поля "текст")

for ($i=0; $i<6; $i++) {
	$left.= $digits[$code[$i]];
}
for ($i=6; $i<12; $i++) {
	$right.= $digits[$code[$i]];
}

$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
for ($i=0; $i<42; $i++) {
	$barcode.= "<div style='width:0px; height:40px; border-left:2px ".($left[$i]?"black":"white")." solid; float:left;'></div>";
}
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
for ($i=0; $i<42; $i++) {
	$barcode.= "<div style='width:0px; height:40px; border-left:2px ".($right[$i]?"white":"black")." solid; float:left;'></div>";
}
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px white solid; float:left;'></div>";
$barcode.= "<div style='width:0px; height:50px; border-left:2px black solid; float:left;'></div>";

$barcode.= "<div style='height:50px;'></div>";
$barcode.= "<div style='margin:-5px 15px; letter-spacing:3px; float:left;'>".substr($code,0,6)."</div>";
$barcode.= "<div style='margin:-5px 04px; letter-spacing:3px; float:left;'>".substr($code,6,6)."</div>";

$line['Штрих-код'] = $barcode;

Тут добавлен вывод в поле "Код" (см. комментарии в коде)

#8 teacs

    Активный участник

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 04 Февраль 2014 - 10:40

Вот теперь все работает просто замечательно!! Еще раз огромное спасибо!!

#9 teacs

    Активный участник

  • Пользователи
  • PipPipPip
  • 80 сообщений
  • Пол:Мужчина
  • Город:Санкт-Петербург

Отправлено 21 Июль 2014 - 12:37

Уважаемые программисты КБ!
Подскажите пожалуйста, что нужно добавить в код, чтобы результат создания штрих-кода отобразился в шаблоне печати PDF?
Искал в документации по mpdf на оффициальном сайте, но безрезультатно =(

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 761 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Июль 2014 - 12:45

К сожалению, сам не знаю, т.к. не выводил и не сталкивался с этой проблемой. Очевидно, нужно как-то менять формат вывода, к тому, который не будет искажать конвертер.





Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 анонимных