Добро пожаловать, Гость. Для того, чтобы отвечать на сообщения и создавать новые темы, Вам необходимо зарегистрироваться, если Вы уже зарегистрированы, то войдите используя Ваши E-Mail и Пароль.
Количество сообщений
54
Зарегистрирован:
12-03-2016, 18:32:41
В программе сравнение товара происходит только двумя способами, по артикулу и по описанию, специфика моего направления подразумевает уникальность совпадения только в связке бренд+артикул.
Подскажите пожалуйста возможно-ли реализовать такое сравнение в программе?
Спасибо.
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Идентификация товаров прайса
Да, поиск соответствий товаров прайс-листов к товарам каталога в данный момент производится или по названию или по артикулу. Артикул производителя по определению должен быть неким уникальным ключом по которому можно однозначно определить товары, но это к сожалению бывает не всегда, т.к. поставщики могут давать свои внутренние коды товаров или сами производители не заботятся об уникальности артикулов.
Автоматически сравнить и привязать товары по связке "Артикул+Бренд" не составляет труда средствами самой базы данных через sql-запрос:
DECLARE cSuppliersGoods CURSOR FOR
SELECT SG_ID, SG_ARTIKUL, SG_B_ID
FROM TBL_SUPPLIERS_GOODS
WHERE SG_S_ID = @S_ID
AND SG_B_ID > 0
AND ISNULL(SG_ARTIKUL, '') <> ''
AND SG_G_ID is NULL;
OPEN cSuppliersGoods;
FETCH NEXT FROM cSuppliersGoods INTO @SG_ID, @SG_ARTIKUL, @B_ID;
WHILE (@@FETCH_STATUS <> -1)
BEGIN
SET @G_ID = (
SELECT G_ID
FROM TBL_GOODS
WHERE G_B_ID = @B_ID
AND UPPER(G_SID) = UPPER(@SG_ARTIKUL)
);
IF (@G_ID > 0)
BEGIN
UPDATE TBL_SUPPLIERS_GOODS
SET SG_G_ID = @G_ID
WHERE SG_ID = @SG_ID;
END;
FETCH NEXT FROM cSuppliersGoods INTO @SG_ID, @SG_ARTIKUL, @B_ID;
END
CLOSE cSuppliersGoods;
DEALLOCATE cSuppliersGoods;
Данный пользовательский SQL-запрос для всех товаров указанного поставщика (поставщик выбирается перед запуском) у которых указаны (не пустые) колонки бренд, артикул и которые не привязаны к товару каталога ищет совпадение по связке бренд+артикул в справочнике товаров и автоматически привязывает товар прайса к товару каталога. Полные настройки данного sql-запроса с привязкой к окну программы, переменными и настройками справочников вы можете скачать в разделе загрузок Пользовательские sql-запросы
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Чтобы добавить новые товары в каталог, товару в обязательном порядке требуется присвоить группу товоара и указать соответствие полей из товара прайса. Данный sql-скрипт дял этого не предназначен и выполняет только изначально указанную задачу.
Количество сообщений
54
Зарегистрирован:
12-03-2016, 18:32:41
Процесс сравнения останавливается вот такой ошибкой. Можно внести в код дополнение что-бы сравнение останавливалось на ошибочной строке, что-бы видеть почему произошла ошибка?
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Цитата
Написал: Denndy
Процесс сравнения останавливается вот такой ошибкой.
Ошибка говорит, что SQL-запрос выборки товара по бренду и артикулу возвращает более одной записи, а значит эта связка у вас не уникальна в каталоге, а потому вместо одного кода товара возвращается несколько.
Цитата
SELECT G_ID
FROM TBL_GOODS
WHERE G_B_ID = @B_ID
AND UPPER(G_SID) = UPPER(@SG_ARTIKUL)
Цитата
Написал: Denndy
Можно внести в код дополнение что-бы сравнение останавливалось на ошибочной строке, что-бы видеть почему произошла ошибка?
Пользовательские sql-запросы на имеют обратной связи с интерфейсом, тем более данный запрос работает по всем товарам поставщика, а не по выделенным строкам в таблице. Если вам нужно получить информацию о проблемном товаре, то вариантов несколько:
1. Брать первый попавшийся найденный товар.
2. Добавить в SQL-запрос предварительное получение количества найденных товаров и выдавать нужное сообщение об ошибке с кодом товара или кодом товара поставщика, что в свою очередь замедлит поиск товаров. Более того, ситуация поиска товаров не типичная для базы данных, потому для большого количества товаров нужно добавить в таблицу товаров TBL_GOODS индекс по двум полям G_B_ID и G_SID (в версиях MSSQL 2005 и выше в индекс можно включить данные поля G_ID чтобы запрос поиска получал код товара в выборке прямо из индекса и не искал физическое расположение записи после индекса)
3. Добавить блок TRY...CATCH и выдавать нужное сообщение об ошибке (для MSSQL 2005 и выше)
4. Сделать экспорт в MSSQL товаров каталога которые дублируются по связке "Бренд + Артикул"
Количество сообщений
54
Зарегистрирован:
12-03-2016, 18:32:41
"1. Брать первый попавшийся найденный товар."
Брать где?
Все остальное наверное более действенные методы, но к сожалению, я хочу наконец-то начать пользоваться вашей программой а не освоить основы программирования.
Спасибо.
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Вы так же можете экспортировать в Эксель список товаров которые дублируются в справочнике товаров по полям Бренд и Артикул, sql-запрос создание такого отчета выглядит так:
Код
SELECT g.G_ID, g.G_NAME, b.B_NAME, g.G_SID
FROM
(
SELECT COUNT(G_ID) cnt, G_B_ID, G_SID
FROM TBL_GOODS
WHERE G_B_ID > 0 AND ISNULL(G_SID, '') <> ''
GROUP BY G_B_ID, G_SID
HAVING COUNT(G_ID) > 1
) t, TBL_BRANDS b, TBL_GOODS g
WHERE t.G_B_ID = g.G_B_ID
AND t.G_SID = g.G_SID
AND g.G_B_ID = b.B_ID
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Цитата
Написал: Denndy
Запрос отрабатывает не корректно
а тот товар который правильно идентифицировался, не привязался автоматом
На скриншоте не видно к какому товару привязан данный товар поставщика. Если он привязан, то покажите его в справочнике товаров. А если скрипт его не привязал, то на скриншоте отчетливо видно, что артикул и бренд товара поставщика и товаров в таблице не совпадают.
Так же стоит заметить, что данный скрипт привязки работает только на еще не привязанные (новые) товары, так как в условиях выборки списка товаров прайса есть условие "AND SG_G_ID is NULL". Это специально сделано для того, чтобы чтобы при выполнение этого скрипта не привязывать каждый раз один уже обработанные товары поставщика и не производить пересчет цен в товарах. Возможно, что неправильная привязка была уже произведена ранее другими алгоритмами?
Количество сообщений
54
Зарегистрирован:
12-03-2016, 18:32:41
Запуск скрипта производился на только-что импортированный прайс.
Меня смущает то, что все неправильный позиции определило на соответствие 100%, может алгоритм проверки некорректен.
Плюс есть позиции которые определились правильно, но не произошло автоматической привязки.
Могу дать доступ к серверу посмотрите сами.
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Цитата
Написал: Denndy
Запуск скрипта производился на только-что импортированный прайс.
При запуске данного пользовательского скрипта требуется указать поставщика, товары которого он будет сравнивать и привязывать к каталогу. Вы выбрали поставщика из выпадающего списка?
Цитата
Написал: Denndy
Меня смущает то, что все неправильный позиции определило на соответствие 100%, может алгоритм проверки некорректен.
На скриншоте справочника товаров поставщиков видно, что названия товаров совпадают на 100%.
Количество сообщений
54
Зарегистрирован:
12-03-2016, 18:32:41
1 конечно выбрал
2 скрипт по идее должен отрабатывать связку бренд+артикул, или нет? http://***/VrweLQRUKE0W42 в этом случае все отработало как нужно, только не произошло привязки...