Добро пожаловать, Гость. Для того, чтобы отвечать на сообщения и создавать новые темы, Вам необходимо зарегистрироваться, если Вы уже зарегистрированы, то войдите используя Ваши E-Mail и Пароль.
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Без точного описания ваших действий и манипуляций никакого ответа дать невозможно, скорее всего у вас ошибка в SQL-запросе вычисления цены, который используется в приоритете поставщиков.
Количество сообщений
64
Зарегистрирован:
11-11-2008, 04:35:57
Цитата
Написал: cifrosvit
Цитата
Написал: MaXX
Цитата
Написал: cifrosvit
А можно сделать чтобы его можно было использовать для всех товаров?
Добавьте условие проверки привязки IF EXISTS( SELECT * FROM TBL_SUPPLIERS_GOODS WHERE ...
И будет вам счастье.
Подскажите пожалуйста как это правильно сделать? Я к сожалению в скриптах не очень...
Что именно сделать? Если вы вообще не ориентируетесь в T-SQL то читайте литературу которой полно. Наша беседа напоминает мне фразу "зделайте мне што-то сам не знаю что". Вы хотите чтобы за вас оценили структуру ваших данных, описали желаемую методику расчета цен и еще за вас же и написали скрипт?
Количество сообщений
24
Зарегистрирован:
14-01-2014, 15:57:17
Цитата
Написал: support
Без точного описания ваших действий и манипуляций никакого ответа дать невозможно, скорее всего у вас ошибка в SQL-запросе вычисления цены, который используется в приоритете поставщиков.
При назначении "Приоритета поставщика" на некоторые товары появляются ошибки.
Скриншоты во вложении.
В приоритах поставщика новая запись:
Тип расчёта цены: минимальная
Тип работы: SQL
SG_S_ID - ИД поставщика с Рекомендованной ценой.
Код
SET @Price = (SELECT price from TBL_SUPPLIERS_GOODS WHERE SG_G_ID = @G_ID AND SG_S_ID = 376);
SET @G_PRESENT = 0;
SET @S_ID = (SELECT TOP 1 SG_S_ID from TBL_SUPPLIERS_GOODS WHERE SG_G_ID = @G_ID AND SG_PRESENT = 1 AND SG_S_ID <> 376 ORDER BY price ASC);
IF EXISTS(
SELECT 1
FROM TBL_SUPPLIERS_GOODS
WHERE SG_G_ID = @G_ID AND SG_PRESENT = 1 AND SG_S_ID <> 376
)
BEGIN
SET @G_PRESENT = 1;
END;
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Ошибка говорит, что какой-то из подзапросов возвращает более одного значения. Судя по тексту скрипта, такая ошибка может возникать только в одном месте
Код
SET @Price = (SELECT price from TBL_SUPPLIERS_GOODS WHERE SG_G_ID = @G_ID AND SG_S_ID = 376);
А это значит, что у вас к товару привязано несколько товаров одного и того же поставщика с рекомендованными ценами, что уже как-бы противоречит алгоритму, который наверное должен подразумевать, что такая цена у товара должна быть одна.
Можно, например, взять какую-то одну цену, ограничиваясь только первой попавшейся:
Код
SET @Price = (SELECT TOP 1 price from TBL_SUPPLIERS_GOODS WHERE SG_G_ID = @G_ID AND SG_S_ID = 376);
Но насколько ваш алгоритм правильный - решать только вам.
Количество сообщений
1199
Зарегистрирован:
11-04-2008, 19:11:57
Он вызывается из триггера [dbo].[TBL_GOODS#SET_PRICE_CALC_TYPE] ON [dbo].[TBL_GOODS]
FOR INSERT, UPDATE после срабатывания приоритетов поставщиков настроенных в интерфейсе, если указан соответствующий тип самого приоритета.
Можно сделать UPDATE других таблиц, в том числе и TBL_GOODS, но нужно внимательно следить за взаимоблокировками.