Как реализовать свой алгоритм поиска в таблице Номенклатура выгруженной на ТСД

Максим Кудрявцев 3 года назад в Прочие разделы / - Вопросы по разработке обновлен Михаил Пузырев (Разработчик) 3 года назад 6

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

Заранее благодарен за ответы.

Установленный продукт:
1С Драйвер ТСД Wi-Fi ПРОФ
Версия драйвера:
3.0.0.45486
Типовая конфигурация драйвера?:
Да
Операционная система:
Windows 7
Версия и конфигурация 1С, и режим работы (Файловы или Серверный):
Управление торговлей 10.3
Типовая конфигурация 1с?:
Нет
Модель ТСД:
АТОЛ Smart.Droid

Добрый день

В поле Штрихкод можно выгружать несколько значений через |

Кроме того, у товара может быть неск. упаковок, в каждой неск. ШК (также через |). Поиск происходит по всем штрихкодам. 

Если нужно сканировать ШК без поиска номенклатуры, используйте действие Редактирование поля (сканер в данном действии работает) с настройкой Источник данных - Поле в сессии, укажите Имя редактируемого поля. После сканирования в указанной переменной будет значение отсканированного ШК.


Спасибо. Михаил, а если при сканировании штрихкода в действии Выбор номенклатуры будет найдено несколько номенклатур появляется список выбора. Сохраняется ли этот список в какой то переменной сессии, чтобы например можно было в действии Выбор номенклатуры настроить выбор первого, а потом вторым сканированием в действии Редактирование поля получить еще один штрихкод и поэтому штрихкоду найти номенклатуру из списка, полученного ранее в действии Выбор номенклатуры при первом сканировании. Или возможно ли прямо в действии Выбор номенклатуры когда появляется список выбора выбрать значение из этого списка путем сканирования штрихкода (другого, отличного от первого) .

И по поводу сканирования в действии Редактирование поля: после сканирования обязательно ли подтверждать ввод нажатием 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, т.к. справочник номенклатуры имеет индексный файл для поиска по ШК.

Сервис поддержки клиентов работает на платформе UserEcho