Ситуация, когда штрих-код при каждом новом постеплении различный, и для этого существует справочник.ус_Партии с реквитом "ШтрихКод", подчиненный справочнику "Номенклатура". Так вот, допустим что есть определенное правило поставщика, где конкретная часть штрих-кода отвечает за определенную информацию, например, первые 6 символов это дата, с 7-11 это наименование товара, 12-13 это цвет, дальше идет номер партии и свободные символы. Искать приходится только по конкретному товару (7-11 символы) и цвету (12-13 символы) , изходя их правил поставщика. Например: имеется штрих-кода: 1009110065230145267, 1809110065230262345, 1009110065210671342 ...первые 2 штрих-кода это один и тотже товар, только с разной датой, партией и конечными символами, третий штрих-код это тотже товар только еще и с другим цветом. Допустим пришел новый товар, штрих-кода которого в базе не существует...2510110065230763210. Необходимо определить, что это за товар, для этого ниже приведен код прямого запроса, который организует необходимую задачу. Работает только в SQL версии, при установленной ВК 1С++, плюс используется класс ЗапросSQL, который прилагаю отдельным файлом.
Запрос = СоздатьОбъект("ЗапросSQL");
Запрос.ДобавитьУсловие("Ном", "ID", "", Группа, "");
Запрос.текст = "
|SELECT Ном.ID AS [Товар $Справочник.Номенклатура]
|FROM
| $Справочник.Номенклатура AS Ном
|WHERE %ID AND Ном.ISMARK = '' AND Ном.IsFolder = 2
|ORDER BY Ном.ID
|";
тз = Запрос.Выполнить();
тз.выбратьСтроки();
СписокТовара = СоздатьОбъект("СписокЗначений");
тз.выгрузить(СписокТовара);
RS = СоздатьОбъект("ODBCRecordset");
ТекстЗапроса = "
|SELECT ус_Партии.PARENTEXT [Владелец $Справочник.Номенклатура]
| ,$ус_Партии.ШтрихКод ШтрихКод
|FROM $Справочник.ус_Партии AS ус_Партии With (NOLOCK)
|WHERE (ус_Партии.PARENTEXT IN (SELECT Val FROM #СписокТовара)) AND (ус_Партии.ISMARK = 0) AND ($ус_Партии.ШтрихКод LIKE '%"+СокрЛП(КодТовара)+"%')
|GROUP BY ус_Партии.PARENTEXT
| , $ус_Партии.ШтрихКод
|ORDER BY ус_Партии.PARENTEXT
|";
RS.УложитьСписокОбъектов(СписокТовара,"#СписокТовара");
ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
Если ПустоеЗначение(ТЗ) = 1 Тогда Нашли = 0; КонецЕсли;
ТЗ.выбратьСтроку();
В итоге выберутся только товары из справочника партий с нужным вхождением символов "КодТовара", например, у каждого товара указан основной поставщик, а у поставщика имеется свое правило, исходя из этого я узнаю с какой группой товаров мне работать. Далее при сканировании 2510110065230763210, ищу, например КодТовара = 006523 в справочнике ус_Партии и нахожу два штрих-кода 1009110065230145267, 1809110065230262345. Все нужный товар найден.