gifts2017

Штрихкодирование автозапчастей. Альфа-авто.

Опубликовал Денис Аграновский (de0nis) в раздел Программирование - Практика программирования

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

Но на упаковках в большинстве случаях есть штрихкоды производителей. И можно попробовать использовать их.

Большинство штрихкодов производителей по оригинальным и приличным не оригинальным брендам - это каталожный номер детали. Но с небольшими дополнениями/изменениями. Есть, конечно, еще китай, но там своя песня.  :)

Обычно не хватает каких-то символов или штрихкод содержит дополнительные "лишние" символы. Повлиять на считывание штрихкода сканером мы не можем, но можем изменить его обработку.

В статье сделана попытка систематизировать отличия штрихкода от каталожного номера, информация получена опытным путем, и буду благодарен за комментарии и дополнения. Плюс приведены фрагменты кода для автоматизации этих проверок на базе Альфа-авто, ред.5. (Для ред.4 потребует некоторых корректировок).

Первое, сделаем автоматическое формирование штрихкода, равному артикулу при записи номенклатуры:

// Если нет ещё штрих кода, то заполним его по Артикулу.
Если НЕ ЭтоГруппа Тогда
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ШтрихКоды.ШтрихКод
	|ИЗ
	|	РегистрСведений.ШтрихКоды КАК ШтрихКоды
	|ГДЕ
	|	ШтрихКоды.Объект = &Объект
	|	И ШтрихКоды.ШтрихКод = ПОДСТРОКА(&ШтрихКод, 1, 22)";
	Запрос.УстановитьПараметр("Объект",   Ссылка);
	Запрос.УстановитьПараметр("ШтрихКод", Артикул);
	Выборка = Запрос.Выполнить().Выбрать();
	Если Не Выборка.Следующий() ТОгда
		// Ещё не записи, сделаем новую запись
		Набор = РегистрыСведений.ШтрихКоды.СоздатьНаборЗаписей();	
		Набор.Отбор.Объект.Значение      = Ссылка;
		Набор.Отбор.Объект.Использование = Истина;
		Набор.Прочитать();
		
		НоваяСтрока = Набор.Добавить();
		НоваяСтрока.Запрет 			 = Ложь;
		НоваяСтрока.Объект           = Ссылка;
		НоваяСтрока.ЕдиницаИзмерения = ОсновнаяЕдиницаИзмерения;
		НоваяСтрока.ШтрихКод         = Артикул;
		
		Набор.Записать();
	КонецЕсли;
КонецЕсли;

Дальше, если штрих код, равный артикулу, не найден, то пробуем модифицировать его по различным вариантам и найти в нем каталожный номер детали. В Альфа-авто для этого в обработке ШтрихКоды необходимо модифицировать процедуру НайтиСтруктуруПоШтрихКоду().

Для запчастей Toyota, Suzuki и некоторых других в конце штрих кода обычно встречается дополнительный символ через два пробела: <8871006420  Q>, <531112B060  K> и др.

// Если в штрих коде есть два пробела и буква в конце, то убираем их. . 
ЕстьПробелы = Найти(ШК," ");
Если ЕстьПробелы > 0 И ЕстьПробелы + 2 = СтрДлина(ШК) Тогда
 СтуктураОбъект = НайтиСтруктуруПоШтрихКоду(Формат(Лев(ШК,СтрДлина(ШК)-3),"ЧГ=0"), флРугатьсяНаЗапрещенныйШтрихКод);

Тут же можно добавить добавление нового реально прочитанного штрихкода в базу: 

СтуктураОбъект =  НайтиСтруктуруПоШтрихКоду(Формат(Лев(ШК,Найти(ШК,"  T")),"ЧГ=0"), флРугатьсяНаЗапрещенныйШтрихКод);	
							
				Если ТипЗнч(СтуктураОбъект) = Тип("Структура") Тогда
					// Нашли, изменим штирих код и вернём эту структуру.
					Набор = РегистрыСведений.ШтрихКоды.СоздатьНаборЗаписей();
					Набор.Отбор.Объект.Значение = СтуктураОбъект.Объект;
					Набор.Отбор.Объект.Использование = Истина;
					Набор.Прочитать();  
					
					НовыйШтрихКод = Набор.Добавить();
					НовыйШтрихКод.Объект           = СтуктураОбъект.Объект; 
					Если ТипЗнч(СтуктураОбъект.Объект)=Тип("СправочникСсылка.Номенклатура") Тогда 
						НовыйШтрихКод.ЕдиницаИзмерения           = СтуктураОбъект.Объект.ОсновнаяЕдиницаИзмерения;
					КонецЕсли;
					НовыйШтрихКод.ШтрихКод               = ШК;
					НовыйШтрихКод.Запрет= Ложь;
					Набор.Записать();
				
					Сообщить("Для номенклатуры '"+СтуктураОбъект.Объект.Артикул+"', "+СтуктураОбъект.Объект+
							" добавлен новый штрих код '"+ШК+"'."); 
										
					Возврат СтуктураОбъект; 
				КонецЕсли;

Для Honda штрихкод полностью соответствует каталожному номеру с "-" и разделителями, но для удобства ввода и поиска"-" обычно убирают при заполнении номенклатуры. Плюс у некоторых производителей могут быть лишние дефисы в штрихкодах, поэтому проверим штрих код без дефисов:

// Если в штрих коде есть "-", то убираем их. . 
Если Найти(ШК, "-") > 0 Тогда
СтуктураОбъект = НайтиСтруктуруПоШтрихКоду(Формат(СтрЗаменить(ШК,"-",""),"ЧГ=0"), флРугатьсяНаЗапрещенныйШтрихКод);

Встречаются штрихкоды с одним или двумя лишними нулями на конце. Также можно проверить без них:

// Если в конце один ноль, проверим без них:
Если Сред(ШК,СтрДлина(Шк),СтрДлина(Шк)) = "0" Тогда
СтуктураОбъект = НайтиСтруктуруПоШтрихКоду(Формат(Лев(ШК,СтрДлина(ШК)-1),"ЧГ=0"), флРугатьсяНаЗапрещенныйШтрихКод);

Для Cirtoen и, возможно, для всех PSA в штрихкоде на конце встречается -000, когда в каталожном номере -0000, встречаются лишние -С148 в конце номера:

Если Прав(ШК,4) = "-000" Тогда
СтуктураОбъект = НайтиСтруктуруПоШтрихКоду(ШК+"0", флРугатьсяНаЗапрещенныйШтрихКод);

Для Mitsubishi в конце бывает лишние "  T" и через пробел число с двумя или треми лидирующими нулями <MF453033V T   001>,  <MD339754  T  0001>, <MD050316  T  0005>. Так же "T" и количество может быть без пробелов или с одним пробелом.  <MD339754T  0001>,  <MD339754 T  0001>. Бывает в переди символ "P".

// Если в конце " T" и количество, то отрезаем его:
Если Найти(ШК,"  T") > 0 Тогда
СтуктураОбъект = НайтиСтруктуруПоШтрихКоду(Формат(Лев(ШК,Найти(ШК,"  T")),"ЧГ=0"), флРугатьсяНаЗапрещенныйШтрихКод);

Для Mitsubishi, Hyundai, Kia и некоторых других брендов число через различное количество пробелов (обычно это количество штук в упаковке): <MN195668      001>, <MF453019  0002> и т.д. Пробелов обычно больше двух, поэтому для отсечения таких символов можно ориентироваться на два пробела и выполнять эту проверку после остальных, чтобы не отсечь нужные символы.

Если Найти(ШК,"  ") > 0 Тогда
СтуктураОбъект = НайтиСтруктуруПоШтрихКоду(Формат(Лев(ШК,Найти(ШК,"  ")),"ЧГ=0"), флРугатьсяНаЗапрещенныйШтрихКод);

Ну и вариант, когда каталожный номер числовой и зашифрован обычным EAN13. В таком случае к штрихкоду добавляется 13-й контрольный символ, и надо проверить штрихкод без него:

// Если 13 символов, попробуем обрезать последний
Если СтрДлина(ШК) = 13 Тогда
СтуктураОбъект = НайтиСтруктуруПоШтрихКоду(Формат(Лев(ШК,12),"ЧГ=0"), флРугатьсяНаЗапрещенныйШтрихКод);

Так как штрихкод, равный каталожному номеру, может содержать любое количество символов, буквы и цифры, то для его печати (к примеру, для восстановления поврежденного ШК на упаковке или при разделении одной упаковки на несколько) использовать коды EAN13 не получится, и надо будет использовать Code128 или другие форматы, способные кодировать строки различной длины с буквами и цифрами.

К минусам данного метода можно отнести:

  • При работе с различными брендами каталожные номера у разных производителей все-таки иногда пересекаются, что может привести к ошибкам. Тут можно добавить дополнительную проверку по бренду в случае нахождения нескольких одинаковых артикулов.
  • В базе уже должны быть заполнены сканируемые номенклатурные позиции с каталожными номерами.
  • На разных коробках у разных производителей штрихкоды находятся в разных местах, могут присутствовать другие штрихкоды, не содержащие в себе каталожного номера, что приводит к неудобству считывания штрихкодов.
  • Мелкие детали (болты, гайки, шайбы, клипсы и т.д.) не имеют оригинальных коробок.
  • Некоторые детали приходят по несколько штук в одной коробке, и их надо разделять.

К плюсам то, что нет необходимости оклеивать все детали, формировать и заносить штрихкоды в базу.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Nio Nio (Nio) 11.12.15 08:39
Сколько раз брался за это так и не получилось запустить ШК на складах. Дело в том что поставщики предоставляют электронные документы. И проще грузить из электронных версия. А для выдачи используют каталоги, где уже проставлены кат. номера. Кладовщику в таком случаи нужно просто найти запчасть уже по готовому списку. В итоге получается что ШК нужны только для инвентаризации. А быстрая и точная инвентаризация кладовщикам не выгодна. Вот я и попадал на откровенный саботаж. Вводили даже дополнительные премии за заведение ШК и оклейку товаров, но так и не сложилось.
Хорошо взлетели ячейки на складах. В приходных документах можно использовать раскладочный лист и при выдачи удобно так же указывать ячейку из которой нужно взять запчасть.
2. борян петров (TODD22) 11.12.15 09:07
(1) Nio,
Вводили даже дополнительные премии за заведение ШК и оклейку товаров, но так и не сложилось.

Ещё бы ввели прогрессивную шкалу депремирования за отсутствие ШК. Может и дело бы наладилось.

И нормальный руководитель всех саботажников отправил бы искать себе другую работу.
3. Денис Аграновский (de0nis) 11.12.15 11:55
Да, тут для поступления товара не всегда имеет смысл, т.к. есть электронные накладные и надо побыстрее товар принять. А для отгрузок бывает удобно иногда. С ячейками как раз тоже удобно бывает, в Альфе если вести полноценный ячеистый склад (не просто привязать номенклатуру к ячейкам, а именно возможность учета чего сколько в какой ячейке) то склад должен быть ордерный. И получается двойной документооборот - ПТиУ, РТиУ и Складские ордера. Менеджеры заполняют доки по электронным, а кладовщики сканером заполняют складские ордера. Потом можно сравнить, что получилось и проверить приходы и отгрузки. Можно еще ячейки оклеить штрих кодами и подставлять их в документы автоматически.
4. Евгений Сасаев (GopSTOP) 16.12.15 10:18
Делал недавно похожую работу с корейскими запчастями. Решение было похожим, считывал штрих-код пробовал достать артикул из него, дальше искал по артикулу. Если артикул не находился то искал уже по штрих-коду в регистре сведений.
5. Александр Омельянов (proger1c81) 16.12.15 13:43
У нас тоже штрихкодирование не взлетело, т.к. при приемке товар ссортируется по брендам и номерам каталожным. В таком же порядке отправляются на полке. В таком же порядке после оформления электронной накладной печатается приемочный лист. По нему кладовщики быстро крыжат отклонения. При отпуске товара - его можно легко найти, т.к. по бренду и первым буквам кат.номера понятно, где товар находится. А инвентаризацию просто проводят незаинтересованные лица. Отклонения конечно потом показываются материально-ответственным лицам и происходит разбор полетов.
Таким образом, ни штрихкодирование, ни ячеистость не применяется у нас.
6. Денис Аграновский (de0nis) 16.12.15 17:26
(5) proger1c81, тоже хороший вариант. По сути "псевдо ячеистость". Координаты только не числовые, а по брендам артикулам. Но это удобно только если поддерживается примерно постоянный склад. Если он часто и сильно меняется, то это не применимо, особенно для кузовных деталей, бампера и капоты по алфавиту сортировать не очень то удобно и не везде положишь их, а если что-нт не влезет и придется весь склад переставлять. :) От ячеек в такой ситуации никуда не деться.
7. Александр Омельянов (proger1c81) 17.12.15 11:38
(6) de0nis, Все верно, у меня случай, когда поддерживается ПРИМЕРНО постоянный склад, когда работаешь с постоянными поставщиками. В случае больших складов для интернет магазинов нужна совсем другая WMS.
Каждый сам выбирает по своему бюджету и необходимостям
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа