Поиск документов по штрих-коду в 1С 8.3 (8.2)
Рассмотрим подключение подсистемы штрихкодирования документов на примере подключения такого механизма в конфигурации 1С 8.2 и 8.3 Управление торговлей.
Содержание
Зачем нужно штрихкодирование документов в 1С?
Штрихкодирование документов может понадобиться для наведения порядка в бумажном документообороте — любому бумажному документу за считанные секунды можно найти электронный аналог в системе. Например, очень удобно, когда клиенты приходят в офис с уже распечатанным заказом, в котором есть штрих-код, — в этом случае обслуживание клиента занимает существенно меньше времени.
Настройка штрихкодирования документов 1С
Первый шаг к настройке штрихкодирования — создание штрих-кода, хранение его в базе данных и распечатка на бумажном носителе.
Генерация штрих-кода и сохранение его в 1С
Для хранения штрих-кода создадим у документа новый реквизит — назовём его «штрихкод».
С генерацией нового штрих-кода немного труднее. Необходимо воспользоваться процедурой РаботаСТорговымОборудованием.СформироватьШтрихКод() из конфигурации управление торговлей и сформировать его перед записью нового документа:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) ..... Если ЭтоНовый() Тогда Штрихкод = РаботаСТорговымОборудованием.СформироватьШтрихКод(); КонецЕсли; ..... КонецПроцедуры;
Распечатка штрих-кода на печатной форме описана в отдельной статье — вывод на печатную форму штрих-кода.
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
С установкой, хранением и распечаткой документов мы разобрались. Перейдем к другому этапу — поиск документов по штрих-коду.
Настройка поиска документа в 1С по штрих-коду
Рассмотрим поиск документа по штрих-коду из формы списка документа «Заказ покупателю».
Первым делом необходимо скопировать из других форм (например, форма списка номенклатуры), отвечающих за работу с внешним оборудованием — сканером штрих-кода. Вот процедуры, которые необходимо поместить в форму списка:
Процедура ВнешнееСобытие(Источник, Событие, Данные) ПолучитьСерверТО().ОбработатьВнешнееСобытие(Источник, Событие, Данные, ЭтаФорма); КонецПроцедуры Функция ПоддерживаетсяВидТО(Вид) Экспорт Результат = Ложь; Если Вид = Перечисления.ВидыТорговогоОборудования.СканерШтрихКода Тогда Результат = Истина; КонецЕсли; Возврат Результат; КонецФункции // ПоддерживаетсяВидТО() Функция СШКНоменклатура(Номенклатура, Характеристика, Серия, Качество, Единица, Количество, СШК) Экспорт Результат = Истина; Возврат Результат; КонецФункции // СШКНоменклатура() Функция СШКСерийныйНомер(Номер, СШК) Экспорт Возврат Истина; КонецФункции // СШКСерийныйНомер() Функция СШКИнформационнаяКарта(Карта, СШК) Экспорт Результат = Истина; Возврат Результат; КонецФункции // СШКИнформационнаяКарта() Функция СШКНеизвестныйКод(Штрихкод, ТипКода, СШК) Экспорт НайтиЗаказПоШтрихкоду(Штрихкод); Возврат Истина; КонецФункции // СШКНеизвестныйКод() Процедура СШКОшибка(Ошибка, Штрихкод, ТипШК, СШК) Экспорт Текст = ПолучитьСерверТО().ПолучитьТекстОшибкиСШКТО(Ошибка, Штрихкод, ТипШК); Предупреждение(Текст); КонецПроцедуры // СШКОшибка()
Обратите внимание на процедуру СШКНеизвестныйКод, если стандартные механизмы не смогли найти номенклатуру, они вернут нас в функцию «СШКНеизвестныйКод», где мы его и обработаем.
Опишем процедуру НайтиЗаказПоШтрихкоду, с помощью которой мы найдем нужный документ по штрих-коду и откроем его форму:
Процедура НайтиЗаказПоШтрихкоду(ТекШтрихкод) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказПокупателя.Ссылка |ИЗ | Документ.ЗаказПокупателя КАК ЗаказПокупателя |ГДЕ | ЗаказПокупателя.Штрихкод= &Штрихкод"; Запрос.УстановитьПараметр("Штрихкод", ТекШтрихкод); Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Сообщить("Заказ с штрихкодом " + ТекШтрихкод + " не найден"); Возврат; Иначе Выборка = Результат.Выбрать(); Выборка.Следующий(); СсылкаНаДокумент = Выборка.Ссылка; СсылкаНаДокумент.ПолучитьФорму().Открыть(); КонецЕсли; КонецПроцедуры
При выполнении данной процедуры будет происходить поиск нужного заказа по штрих-коду. Если заказ найден по штрих-коду, то система откроет заказ, не найден — сообщит об этом.
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Роман:
А в каком месте нужно проводить вызов «НайтиЗаказПоШтрихкоду(ТекШтрихкод)»
Из какой процедуры или функции?
В какой функции 1с анализирует данные, полученные со сканера?
Программист 1С:
ВнешнееСобытие()
Султан:
Все получилось более чем отлично, если бы на все документы не формировался один и тоже ШК, как это можно исправить?
Программист 1С:
А как вы генерируете новый штрих-код для документа?
Программист 1С:
С помощью РаботаСТорговымОборудованием.СформироватьШтрихКод() ?
Султан:
Да, вставил как описано в начале статьи в процедуру
Процедуру ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Код
Если ЭтоНовый() Тогда
Штрихкод = РаботаСТорговымОборудованием.СформироватьШтрихКод();
КонецЕсли;
добавлял для заказа покупателя и реализации, во всех случаях код один
Программист 1С:
Получается по какой то причине косячит типовая функция 🙁
Посмотрите в отладке что там происходит, иначе никак помочь не могу 🙁
Ирина:
А если мне в документе надо преобразовать в штрих-код числовой реквизит, т.е. сформировать ШК с определённым значением. Это возможно?
Кирилл:
Конечно возможно. Штрих-код это и есть, чаще всего, числовой параметр.
Андрей:
Здравствуйте. у меня почему-то ничего не работает. при сканировании в форме списка заказов ничего не происходит. в форме списка номенклатуры все работает нормально. насколько я успеваю заметить при сканировании вводятся данные как при ручном вводе в журнале(ищет по дате). у меня УТП для Укр.
Кирилл:
Добрый день!
Проверьте процедуру «ВнешнееСобытие» — попадает вообще туда в отладке7
Владислав:
Такая же проблема с реализацией. Не заходит в точку остановки может где-то, что-то ещё нужно воткнуть?
Кирилл:
Где стоит точка? Процедура прописана в обработчиках формы?
Владислав:
Разобрался. Нужно в событиях (свойства формы) Как внешнее событие установить нашу процедуру. Ещё не проверял, но думаю из-за этого.. Если что напишу 😉
Кирилл:
Да, скорее всего из-за этого))
Спасибо что отписались — кому то поможете :))
Владислав:
Это не помогло… так же не «заныривает» в отладку.
Владислав:
Есть какие ни будь ещё предложения как эту проблему решить можно?
Владислав:
В общем как дело обстоит. При открытии формы нужно ещё подключать клиент ТО к этой форме. Это делается в одну строчку
ПолучитьСерверТО().ПодключитьКлиента(ЭтаФорма);
У меня 1с ут 10.3 переписанная в хламину включая РЛС и т.д. на 1с сервере. Мб пригодится кому
Владислав:
ПолучитьСерверТО(). ПодключитьКлиента(ЭтаФорма);
Кирилл:
Спасибо за коммент)
Я уже был бессилен ))
Max:
Владислав, большая просьба, напишите, пожалуйста, подробнее, что и где дописывать. У нас УТ 10.3 (33.1) Пытаюсь делать Ваши рекомендации, но для чайника нужно по шагам. Что открыть и куда и что добавить. Большое Вам спасибо, если ответите. Можно на почту [email protected] Буду безмерно благодарен. Очень нужно внедрить ШК в доки.
Tarlich:
Что бы система работала и создавался новый ШК тебуется добавлять запись в РС.ШтрихКод , А не проще задействовать УнИдентификатор ?
iipobaji:
Процедура «РаботаСТорговымОборудованием.СформироватьШтрихКод()» сформирует новый штрихкод на основании данных регистра сведений «Штрихкоды», при этом в статье написано, что мы этот новый штрихкод сохраним не в регистре сведений, а в реквизит документа! Таким образом, если новых записей в регистре сведений не будет, то у нас процедура будет формировать один и тот же штрихкод — соответственно такой подход к штрихкодированию документа не сработает