Как реализовать свой алгоритм поиска в таблице Номенклатура выгруженной на ТСД
Добрый день. Подскажите, пожайлуста, как реализовать следующий функционал. В УТ 10.3 для номенклатуры в регистр сведений "Штрихкоды" было добавлено измерение "штрихкод2". Соответственно каждая номенклатура определяется парой штрихкодов (штрихкод и штрихкод2). Возможно ли для таблицы "Номенклатура" добавить поле "штрихкод2" и организвать свой алгоритм (запрос к таблице Номенклатура) поиска номенклатуры по двум штрихкодам? Возможно ли реализовать интерфейс запроса сканирования штрихкода для получения значения штрихкода без поиска номенклатуры реализованного в действии "Выбор номенклатуры"? Как настроить данное действие на такую работу или может реализовано для этих целей какое то другое действие? Номенклатура выгружается на ТСД, обмен данными происходит по проводу. Подскажите в каком направлении двигаться?
Заранее благодарен за ответы.
Сервис поддержки клиентов работает на платформе UserEcho
Добрый день
В поле Штрихкод можно выгружать несколько значений через |
Кроме того, у товара может быть неск. упаковок, в каждой неск. ШК (также через |). Поиск происходит по всем штрихкодам.
Если нужно сканировать ШК без поиска номенклатуры, используйте действие Редактирование поля (сканер в данном действии работает) с настройкой Источник данных - Поле в сессии, укажите Имя редактируемого поля. После сканирования в указанной переменной будет значение отсканированного ШК.
Спасибо. Михаил, а если при сканировании штрихкода в действии Выбор номенклатуры будет найдено несколько номенклатур появляется список выбора. Сохраняется ли этот список в какой то переменной сессии, чтобы например можно было в действии Выбор номенклатуры настроить выбор первого, а потом вторым сканированием в действии Редактирование поля получить еще один штрихкод и поэтому штрихкоду найти номенклатуру из списка, полученного ранее в действии Выбор номенклатуры при первом сканировании. Или возможно ли прямо в действии Выбор номенклатуры когда появляется список выбора выбрать значение из этого списка путем сканирования штрихкода (другого, отличного от первого) .
И по поводу сканирования в действии Редактирование поля: после сканирования обязательно ли подтверждать ввод нажатием Enter или возможно настроить автоматическое подтверждение ввода после сканирования.
Можно сделать так: 1-ый ШК сканируем в действии Редактирование поля, поиск номенклатуры можно сделать с помощью действия присваивания:
FindedProducts = global::Cleverence.Warehouse.ProductsManager.FindEverywhere(ScannedBarcode, false, false, false)
FindedProducts - объект PackedProductCollection.
Далее сканируем 2-ой ШК также с помощью Редактирования поля.
Для поиска позиции в FindedProducts используйте действие Выбор строки, запрос:
SelectedProduct = select (*) from FindedProducts where Item.Packing.Barcodes.Contains(ScannedBarcode2) == true
ScannedBarcode2 - 2-ой отсканированный ШК.
Другой вариант - при выгрузке формировать составной ШК из 1-ого и 2-ого, на ТСД делать конкантенацию двух ШК: ScannedBarcode = Bc1 + Bc2 и искать по полному ШК.
Михаил, добрый день. Реализовал при выгрузке номенклатуры в поле штрихкод упаковки выгрузку штрихкода1, штрихкода2, штрихкода1+штрихкода2, штрихкод2+штрихкода1. Поиск номенклатуры методом: FindedProducts = global::Cleverence.Warehouse.ProductsManager.FindEverywhere(штрихкода1, false, false, false). Если в FindedProducts более одной записи запрашиваю штрихкод2 и делаю присваивани ШтрихкодДлинный = штрихкода1+штрихкода2. Далее использую Выбор строки с запросом
SelectedProduct = select (*) from FindedProducts where Item.Packing.Barcodes.Contains(ШтрихкодДлинный ) == true. Однако поиск срабатывает не всегда. Запустил отладку, почему то в элементах FindedProducts в Packing.Barcodes содержаться не все штрихкода упаковки. Посмотрел в панели управления - данные - номенклатура все штрихкода (штрихкода1, штрихкода2, штрихкода1+штрихкода2, штрихкод2+штрихкода1) упаковки выгружены.
Вместо Выбор строки с запросом попробовал использовать еще раз FindedProducts = global::Cleverence.Warehouse.ProductsManager.FindEverywhere(ШтрихкодДлинный , false, false, false) - номенклатура находится. Но получается, что второй раз выполняется поиск по всей базе номенклатуры, что возможно может сказаться на производительности. Хотелось бы понять почему при реализации первым способом в Barcodes содержаться не все значения штрихкодов.
Заранее благодарен.
Похоже, что берется не более первых 3х штрихкодов.
При большом количестве штрихкодов у упаковки не все ШК загружаются в память. Поиск с помощью ProductsManager.FindEverywhere или действия Выбор номенклатуры выполняет быстрее, чем запрос к коллекции найденных товаров с сравнением Barcodes.Contains, т.к. справочник номенклатуры имеет индексный файл для поиска по ШК.