1С 8 Штрих-кодирование документов

Оборудование - Сканер штрих-кода

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

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

Некоторые пояснения:

Штрих-код  у меня состоит из полей: 2 символа - код документа (вряд ли в базе свыше 99 видов документов)-задает разработчик, 2 символа - код фирмы (вряд ли в одной базе ведут свыше 99 своих фирм)- я беру его из кода карточки фирмы, дата-пояснений не нужно, номер документа - поставлен в конец, т.к. в моей базе есть документы с разной длиной номера, плавает длина-номер в конце - проще разбор. Еще момент - от номера отсекается префикс документов (у нас префикс задается по фирме) для универсальности - некоторые виды штрих-кодов не понимают литер, а так - только цифры. Префикс однозначно восстанавливается (у меня) по фирме. Если применяются более сложные префиксы (пр-р по подразделениям), то проще перед номером добавить 2 символа с кодировкой префиксов.

Вторая функция позволяет найти документ по сканированному штрих-коду, а дальше по фантазии...

//формирование штрих-кода
Функция мирПолучитьШтрихКодПоДокументу(ДокСсылка) Экспорт
	стрНомерДокумента=Прав(СокрП(ДокСсылка.Номер),7);
	стрДата=""+Формат(ДокСсылка.Дата,"ДФ=yyyy")+?(Месяц(ДокСсылка.Дата)<10,"0"+Месяц(ДокСсылка.Дата),Месяц(ДокСсылка.Дата))+Лев(ДокСсылка.Дата,2);
	ВидДок=ТипЗнч(ДокСсылка);
	Если ВидДок=Тип("ДокументСсылка.ЗаказНаряд") Тогда  // для заказ-наряда
		КодДокумента="01";
	ИначеЕсли ВидДок=Тип("ДокументСсылка.РеализацияАвтомобилей") Тогда    
		КодДокумента="02";
	ИначеЕсли ВидДок=Тип("ДокументСсылка.СчетНаОплатуЗаАвтомобили") Тогда    
		КодДокумента="03";     
	ИначеЕсли ВидДок=Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда    
		КодДокумента="04";    
	ИначеЕсли ВидДок=Тип("ДокументСсылка.РасходныйКассовыйОрдер") Тогда    
		КодДокумента="05";
	ИначеЕсли ВидДок=Тип("ДокументСсылка.СчетНаОплату") Тогда    
		КодДокумента="06";    
	ИначеЕсли ВидДок=Тип("ДокументСсылка.РеализацияТоваров") Тогда    
		КодДокумента="07";    
	Иначе
		Возврат  "";
	КонецЕсли;
	КодФирмы=Число(Прав(СокрП(ДокСсылка.Организация.Код),2));
	СтрФирма=?(КодФирмы<10,"0"+КодФирмы, Строка(КодФирмы));
	ШтрихКод=КодДокумента+СтрФирма+стрДата+стрНомерДокумента;
	Возврат ШтрихКод;
КонецФункции

//получение документа
Функция мирПолучитьДокументПоШтрихКоду(ШтрихКод) Экспорт
	ШтрихКод=СокрЛ(ШтрихКод);
	КодДокумента=Лев(ШтрихКод,2);
	Если КодДокумента="01" Тогда
		ВидДок="ЗаказНаряд";
	ИначеЕсли КодДокумента="02" Тогда   
		ВидДок="РеализацияАвтомобилей";
	ИначеЕсли КодДокумента="03" Тогда   
		ВидДок="СчетНаОплатуЗаАвтомобили";
	ИначеЕсли КодДокумента="04" Тогда   
		ВидДок="ПриходныйКассовыйОрдер";
	ИначеЕсли КодДокумента="05" Тогда   
		ВидДок="РасходныйКассовыйОрдер";
	ИначеЕсли КодДокумента="06" Тогда   
		ВидДок="СчетНаОплату";
	ИначеЕсли КодДокумента="07" Тогда   
		ВидДок="РеализацияТоваров";
	Иначе 
		Возврат Неопределено;   
	КонецЕсли;   
	ДатаДок=Дата(Сред(ШтрихКод,5,4),Сред(ШтрихКод,9,2),Сред(ШтрихКод,11,2));
	КодФирмы="000000"+Сред(ШтрихКод,3,2);
	Организация=Справочники.Организации.НайтиПоКоду(КодФирмы);
	Префикс=Организация.Префикс;
	НомерДок=Префикс+Сред(ШтрихКод,13);
	Запрос=Новый Запрос;
	Запрос.Текст="ВЫБРАТЬ
	|    Документ.Ссылка
	|ИЗ
	|    Документ."+ВидДок+" КАК Документ
	|ГДЕ
	|    Документ.Номер = &Номер
	|    И Документ.Дата >= &ДатаНач";
	Запрос.УстановитьПараметр("ДатаНач",НачалоДня(ДатаДок));             
	Запрос.УстановитьПараметр("Номер",НомерДок);
	Выборка=Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.Ссылка;
	КонецЕсли;    
	Возврат Неопределено;
КонецФункции
32

См. также

Специальные предложения