• Модуль: catalog
  • Путь к файлу: ~/bitrix/modules/catalog/lib/v2/Integration/UI/EntitySelector/BarcodeProvider.php
  • Класс: BitrixCatalogv2IntegrationUIEntitySelectorBarcodeProvider
  • Вызов: BarcodeProvider::doSearch
public function doSearch(SearchQuery $searchQuery, Dialog $dialog): void
{
	$searchQuery->setCacheable(false);
	$productIds = $this->getProductIdsByBarcode($searchQuery->getQuery());
	if (!$productIds)
	{
		return;
	}

	$productIds = array_unique($productIds);
	$products = $this->getProductsByIds($productIds);
	$elementMap = [];
	foreach ($products as $key => $product)
	{
		$elementMap[$product['ID']][] = $key;
	}

	if (!empty($products))
	{
		$barcodeRaw = BitrixCatalogStoreBarcodeTable::getList([
			'filter' => [
				'=PRODUCT_ID' => $productIds,
				'BARCODE' => $searchQuery->getQuery() . '%'
			],
			'select' => ['BARCODE', 'PRODUCT_ID']
		]);

		while ($barcode = $barcodeRaw->fetch())
		{
			$productId = $barcode['PRODUCT_ID'];
			if (!isset($elementMap[$productId]))
			{
				continue;
			}

			foreach ($elementMap[$productId] as $key)
			{
				$products[$key]['BARCODE'] = $barcode['BARCODE'];
			}
		}

		foreach ($products as $product)
		{
			$dialog->addItem(
				$this->makeItem($product)
			);
		}
	}
}