Дело было на этой неделе, когда складские уже начали просто зашиваться от количества отгрузок и поступлений, мы поняли, что у нас есть очень узкое место в компании, неет, мы и раньше это понимали, но теперь, когда появился еще и свой импорт, все стало еще хуже. И тут пришла, странно что не раньше, крутая идея, ускорить склад. Начали с ТСД и подбора заказа по этикеткам со ШК (благо это уже давно было сделано), а вот чего не было, так это ШК на документах и каждый документ, приходилось искать вручную по поиску , что крайне замедляет процесс обработки. И тут пришла крутая мысль, почему бы не закодировать УИД документа, вывести его на печатную форму в шапку и спокойно искать уже сканером.
Коль придумали, начали делать и как оказалось, работы на пару часов, с отладкой и тестами.
Первое, что надо сделать, запихнуть Штрихкоды, во все макеты, которые нужны нам.
Если кто не знает, как добавить ШК
Устанавливаем компоненту 1С ШтрихКоды с ИТС. В макете, на панельке сверху, идем по меню Таблица - Рисунки - Вставить объект, Выделаем на макете область в которую вставляем , данный ШК, и из меню , выбираем следующее
После того, как добавили область и ШК на форму, переходим к коду и выводу этого самого ШК.
ОбластьШК = Макет.ПолучитьОбласть("ШК");
Компонент = ОбластьШК.Рисунки.Штрихкод.Объект;
Компонент.Автотип = Истина;
Компонент.Сообщение = Строка(Ссылка.УникальныйИдентификатор());
Компонент.ОтображатьТекст = Ложь;
ОбластьШК.Рисунки.Штрихкод.Ширина = Компонент.МинимальнаяШирина + 5;
ТабДокумент.Вывести(ОбластьШК);
Тут стоит Автотип, для того, чтоб 1С сама подобрала тип ШК, но для УИД, он будет Code128.
Так же, убран текст, и назначена автоширина для рисунка. Но почему то, с такой опцией, он не отобразился, поэтому прибавил 5.
После таких манипуляций, у вас на печатной форме, будет красоваться вот это
После, нужно было сделать поиск по ШК и тут я начал добавлять для каждого документа, где есть ШК, в форме списка, кнопку для поиска, вызывалась кнопка по F7 (Де факто для 1С и сканеров )
В коде указывал
Результат = РаботаСТорговымОборудованием.ВвестиШтрихкод();
Если Результат<> "" Тогда
Документы.РасходныйОрдерНаТовары.ПолучитьСсылку(Новый УникальныйИдентификатор(Результат)).ПолучитьФорму("ФормаДокумента").Открыть();
КонецЕсли;
Тут вроде все просто, сканируем ШК, получаем строку, и получаем ссылку по УИД. Единственный косяк, который еще не правил, раскладка при сканировании должна быть eng
И вроде бы все красиво, уже можно работать и все будет работать, но я пошел дальше. Захотелось просто подность любой документ со ШК к сканеру и получать форму.
Поэтому было сделано следующее, на панель интерфейса, добавляем значок, так же вызываемый по F7, который обращается к модулю и выполняет следующее
A279;A279;A279;A279;A279;A279;A279;&НаКлиенте
Процедура НайтиПоШК() Экспорт
Результат = "";
ВвестиСтроку(Результат, "Введите штрихкод");
Если СтрДлина(Результат) < 30 ИЛИ Результат = "" Тогда
Сообщить("Введен не верный УИД объекта");
Возврат;
КонецЕсли;
Для Каждого Документ из Метаданные.Документы Цикл
Ссылка = Документы[Документ.Имя].ПолучитьСсылку(Новый УникальныйИдентификатор(Результат));
Если СокрЛ(Ссылка.Номер) = "" Тогда
Продолжить;
Иначе
Ссылка.ПолучитьФорму().Открыть();
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Он перебирает все документы и ищет по УИД, то есть, если не открыт ни какой список, просто все закрыто и поднести документ к сканеру, то через пару секунд, у вас открытая форма документа.
Причем, если открыт список документов и там так же есть поиск по F7, то сработает тот, что из списка. Но никто не запрещает, вызывать поиск по нажатию кнопки на панельке =)
Ну вроде по Code128 все. И это работает, будем потиху вводить на складе и надеяться , что это ускорит процесс работы.
Так же , можно использовать QR код, но он требует 2D сканера и другой компоненты. Я использую Octavita
Там есть подробный мануал + мануал по API
Но если кратко, то вывод QR выглядит так
ОбластьQR = Макет.ПолучитьОбласть("Штрих");
ОбластьQR.Рисунки.QR.Объект.symbology = 58; // тип = QR
ОбластьQR.Рисунки.QR.Объект.barcode = ШтрихКод;
ТабДокумент.Вывести(ОбластьQR);
Если эта статья Вам как то поможет, будет здорово =) Всегда рад поделиться чем то хорошим =)
p.s.
По совету Tria , чтоб не обходить все документы , в поисках нужного, можно закодировать сразу имя, через метаданные. Для QR будет самое то.
Сначала получаем строку для кодирования , разделяя имя и УИД символом, который будем искать
УИД = Строка(Ссылка.УникальныйИдентификатор());
Имя = Ссылка.Метаданные().Имя;
СтрокаДляКодирования = Имя + "/" + Уид;
Далее уже ищем
Позиция = Найти(мСтрока,"/");
Имя = Лев(мСтрока,Позиция-1);
УИД = Сред(мСтрока,Позиция+1,(СтрДлина(мСтрока) - Позиция + 1));
Документы[Имя].ПолучитьСсылку(Новый УникальныйИдентификатор(УИД)).ПолучитьФорму().Открыть();
Процедура поиска может быть разбита на несколько ЕСЛИ, к примеру длинна УИД = 36 символов, поиск номер 1, если больше, то уже через имя + уид, если меньге, то уже какой то другой.