Спільнота для обміну досвідом між користувачами програм УкрБланк, УкрСклад, УкрЗарплата

Наши программы => УкрСклад => Тема розпочата: Digital від Грудень 16, 2008, 22:44:54

Назва: Наценка товаров скриптом
Відправлено: Digital від Грудень 16, 2008, 22:44:54
Перечитав много тем по поводу наценок и перенаценок на розничный товар, а также возможности програмы пришол к выводу что для меня один вариант - написать скрипт.
В скриптах SQL не очень, хотя когода то програмил на делфи базы.
Так вот, сама задача - на разные ценовые групы нужна своя наценка (от 0 и до 5у.е. нацениваем 20%, от 5у.е до 10у.е нацениваем 16% ну и т.д.). Вместе с этим хочу сам перещитывать курс - долар на гривну.
Может я чего то недосмотрел, но гибкости наценок я не нашол такой как мне надо, да и с курсом долара сбиваются наценки вбитые в ручную.
Вот и хочу вашей помощи в таком деле

UPDATE
  tovar_name
SET
if cena <= 5 then
   begin
     cena_r = cena * 1,2,   {это моя первая наценка 20% на групу от 0 до 5 у.е.}
   end.
else
         if cena > 5 and < 10 then
           begin
             cena_r = cena * 1,18,   {это моя вторая наценка 18% на групу от 5 до 10 у.е.}
           end.
end.

cena_out_curr_id = 1
WHERE
  cena_out_curr_id = 0


Очень грубо набросал на языке паскаль в готовый скрипт, так как не знаю SQL
Так же добавить умножение на курс чтобы была гривна, там где и наценка умножается (не писал потому что и так код громоздкий слабо читабельный)
Если в скрипте это не возможно может как нибудь сам в делфи сварганю если подскажете куда подключатся.
Огромное спасибо.
Назва: Re: Нужна помощь в создании скрипта
Відправлено: Digital від Грудень 17, 2008, 12:03:00
Если в скриптом не получается тогда как сделать чтобы при именении курса долара прямопропорционально изменялись наценки на товар забитые вручную?
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Грудень 18, 2008, 17:15:14
Ну раз уж пошла такая жара давайте покажу как делать наценку с условиями в одном скрипте.

0. ВАЖНО Сделайте резерв базы перед началом экспериментов.

1. Создаем пустышку процедуры:

CREATE PROCEDURE usr_tovar_nacenka
AS
BEGIN
END;


2. Далее на примере ваших условий модифицируем процедуру:

ALTER PROCEDURE usr_tovar_nacenka
AS
DECLARE VARIABLE v_tovar_id INTEGER;
DECLARE VARIABLE v_cena DOUBLE PRECISION;
DECLARE VARIABLE v_cena_r DOUBLE PRECISION;
DECLARE VARIABLE v_cena_o DOUBLE PRECISION;
DECLARE VARIABLE v_cena_1 DOUBLE PRECISION;
DECLARE VARIABLE v_cena_2 DOUBLE PRECISION;

BEGIN
  FOR
    SELECT
      num,
      cena,
      cena_r,
      cena_o,
      cena_1,
      cena_2
    FROM
      tovar_name
    WHERE
      visible = 1
    INTO
      :v_tovar_id,
      :v_cena,
      :v_cena_r,
      :v_cena_o,
      :v_cena_1,
      :v_cena_2
  DO
  BEGIN
    -- до этого момента не трогаем, только тут делаем условия по наценке
    -- скрипт при условии валюты приходной и расходной одинаковой, для неодинаковых надо делать еще и пересчет по курсу
    IF (:v_cena <= 5) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.2 WHERE num = :v_tovar_id AND cena_curr_id = cena_out_curr_id;  -- наценка 20% на розницу от 0 до 5
    END
    ELSE
    IF (:v_cena > 5 AND :v_cena <= 10) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.18 WHERE num = :v_tovar_id  AND cena_curr_id = cena_out_curr_id;  -- наценка 18% на розницу на групу от 5 до 10
    END
  END
END;


3. Запускать процедуру надо так:

EXECUTE PROCEDURE usr_tovar_nacenka

Тему можно развивать, можно научить скрипт и наценивать с валютой и автоматически подтягивать текущий курс и даже делать автоматическую наценку нового товара, т.е. вы будете добавлять новый товар в программу, а скрипт будет вызываться триггером и товар автоматически нацениватся по условию. Если соберем пару заявок на такую процедуру, распишу все подробно :)
Назва: Re: Наценка товаров скриптом
Відправлено: Digital від Грудень 18, 2008, 20:28:56
Скрипт не работал, после некоторых модификаций начал по идеи считать
В коде было вот такое UPDATE tovar_name SET cena_r = cena * 1.2 WHERE num = :v_tovar_id AND cena_curr_id = cena_out_curr_id;
Сделал вот так
UPDATE tovar_name SET cena_r = cena * 1.2  WHERE num = num AND cena_curr_id = cena_out_curr_id;

Не шла переменная v_tovar_id, зачем она вызывалась я так и не понял :( Ну и ещё поубирал двоеточия.
Вот что вышло -

ALTER PROCEDURE usr_tovar_nacenka
AS
DECLARE VARIABLE v_tovar_id INTEGER;
DECLARE VARIABLE v_cena DOUBLE PRECISION;
DECLARE VARIABLE v_cena_r DOUBLE PRECISION;
DECLARE VARIABLE v_cena_o DOUBLE PRECISION;
DECLARE VARIABLE v_cena_1 DOUBLE PRECISION;
DECLARE VARIABLE v_cena_2 DOUBLE PRECISION;

BEGIN
  FOR
    SELECT
      num,
      cena,
      cena_r,
      cena_o,
      cena_1,
      cena_2
    FROM
      tovar_name
    WHERE
      visible = 1
    INTO
      v_tovar_id,
      v_cena,
      v_cena_r,
      v_cena_o,
      v_cena_1,
      v_cena_2
  DO
  BEGIN
    IF (v_cena <= 5) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.2  WHERE num = num AND cena_curr_id = cena_out_curr_id;
    END
    ELSE
    IF (v_cena > 5 AND v_cena <= 10) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.18 WHERE num = num AND cena_curr_id = cena_out_curr_id;
    END
END
END;


В процесе работы возникли такие вопросы:
Перевел базу в долар, розницу и закупку. До этого была в гривнах. В справочнике начало все отображатся в доларах.
Установил основную валюту долар, чтобы в нем шол перещёт, но в справочниках отобразилась гривна. И ни при каких обстоятельствах, при основной валюте долар, не отображает долар, отображает гривну, только цены в доларах.
Что не так? Или я что то не понял.
З.Ы. С кодом я ещё поработаю. Результат выложу.
Огромнейшее спасибо за помощь.
Назва: Re: Наценка товаров скриптом
Відправлено: Digital від Грудень 18, 2008, 21:54:28
Вот мой оконечный вариант
ALTER PROCEDURE usr_tovar_nacenka
AS
DECLARE VARIABLE v_tovar_id INTEGER;
DECLARE VARIABLE v_cena DOUBLE PRECISION;
DECLARE VARIABLE v_cena_r DOUBLE PRECISION;
DECLARE VARIABLE v_cena_o DOUBLE PRECISION;
DECLARE VARIABLE v_cena_1 DOUBLE PRECISION;
DECLARE VARIABLE v_cena_2 DOUBLE PRECISION;

BEGIN
  FOR
    SELECT
      num,
      cena,
      cena_r,
      cena_o,
      cena_1,
      cena_2
    FROM
      tovar_name
    WHERE
      visible = 1
    INTO
      v_tovar_id,
      v_cena,
      v_cena_r,
      v_cena_o,
      v_cena_1,
      v_cena_2
  DO
  BEGIN
    IF (v_cena <= 5) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.4  WHERE num = num AND cena_curr_id = cena_out_curr_id;
    END
    ELSE
    IF (v_cena > 5 AND v_cena <= 10) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.3 WHERE num = num AND cena_curr_id = cena_out_curr_id;
    END
         ELSE
         IF (v_cena > 10 AND v_cena <= 20) THEN
          BEGIN
            UPDATE tovar_name SET cena_r = cena * 1.2 WHERE num = num AND cena_curr_id = cena_out_curr_id;
          END
               ELSE
                 IF (v_cena > 20 AND v_cena <= 30) THEN
                  BEGIN
                    UPDATE tovar_name SET cena_r = cena * 1.15 WHERE num = num AND cena_curr_id = cena_out_curr_id;
                  END

  END
END;


Почему то во всей базе ставится наценка 1,3 без разницы какая сума закупки.
Меняю цифру 1.3 на любую дргугую снова пересчитывает базу минуя все остальные условия  ??? ???
Я чёт потерялся.
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Грудень 19, 2008, 09:59:25
Цитата: Digital від Грудень 18, 2008, 21:54:28
Почему то во всей базе ставится наценка 1,3 без разницы какая сума закупки.

Потому как изначально я писал скрипт верно, надо
num = :v_tovar_id
а не
num = num

Вместо :v_tovar_id подставляется номер товарав выбранный в верхнем SELECT, а в вашем случае num = num равнозначно 1=1, условие всегда выполняется.
Назва: Re: Наценка товаров скриптом
Відправлено: Digital від Грудень 19, 2008, 16:42:04
Изначально ваш скрипт выдал ошибку в оглавлении переменных  DECLARE VARIABLE v_tovar_id INTEGER; Убрал двоеточие, оглавление переменных начало работать.
Далее в INTO
      v_tovar_id,
      v_cena,
      v_cena_r,
      v_cena_o,
      v_cena_1,
      v_cena_2
  DO

убрал двоеточия, так как выдавало ошибку.

Сделал num=num только потому что num = : v_tovar_id выдавал ошибку
ЦитатаSQL Parse Error:

Parameter name expected
При установке num = v_tovar_id выдает такую ошибку
ЦитатаDynamic SQL Error
SQL error code = -206
Column unknown
V_TOVAR_ID
At line 34, column 73
А что делать дальше я не знаю   :-\ Вариантов у меня больше нет что то пробывать.
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Грудень 24, 2008, 14:44:37
Да, двоеточие не проходит, попробуем поправить. А пока создайте файл с названием 999, скопируйте его в папку /db/patch/ , с содержимым вроде этого, через строку просто добавьте COMMIT

ALTER PROCEDURE usr_tovar_nacenka
AS
DECLARE VARIABLE v_tovar_id INTEGER;
DECLARE VARIABLE v_cena DOUBLE PRECISION;
DECLARE VARIABLE v_cena_r DOUBLE PRECISION;
DECLARE VARIABLE v_cena_o DOUBLE PRECISION;
DECLARE VARIABLE v_cena_1 DOUBLE PRECISION;
DECLARE VARIABLE v_cena_2 DOUBLE PRECISION;

BEGIN
  FOR
    SELECT
      num,
      cena,
      cena_r,
      cena_o,
      cena_1,
      cena_2
    FROM
      tovar_name
    WHERE
      visible = 1
    INTO
      :v_tovar_id,
      :v_cena,
      :v_cena_r,
      :v_cena_o,
      :v_cena_1,
      :v_cena_2
  DO
  BEGIN
    -- до этого момента не трогаем, только тут делаем условия по наценке
    -- скрипт при условии валюты приходной и расходной одинаковой, для неодинаковых надо делать еще и пересчет по курсу
    IF (:v_cena <= 5) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.2 WHERE num = :v_tovar_id AND cena_curr_id = cena_out_curr_id;  -- наценка 20% на розницу от 0 до 5
    END
    ELSE
    IF (:v_cena > 5 AND :v_cena <= 10) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.18 WHERE num = :v_tovar_id  AND cena_curr_id = cena_out_curr_id;  -- наценка 18% на розницу на групу от 5 до 10
    END
  END
END;

COMMIT


А уже EXECUTE PROCEDURE usr_tovar_nacenka выполняйте из SQL менеджера.
Назва: Re: Наценка товаров скриптом
Відправлено: s.print.kr від Квітень 07, 2009, 21:27:32
Добрый день, Дмитрий
Вы вот писали:
Тему можно развивать, можно научить скрипт и наценивать с валютой и автоматически подтягивать текущий курс и даже делать автоматическую наценку нового товара, т.е. вы будете добавлять новый товар в программу, а скрипт будет вызываться триггером и товар автоматически нацениватся по условию.
Перепробовав все варианты :): двоеточия ,num=num, создание файлов, но скрипт так и не работает ??? :-[, цена не меняется, а очень бы хотелось
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Квітень 08, 2009, 11:00:53
Цитата: s.print.kr від Квітень 07, 2009, 21:27:32
Добрый день, Дмитрий
Вы вот писали:
Тему можно развивать, можно научить скрипт и наценивать с валютой и автоматически подтягивать текущий курс и даже делать автоматическую наценку нового товара, т.е. вы будете добавлять новый товар в программу, а скрипт будет вызываться триггером и товар автоматически нацениватся по условию.
Перепробовав все варианты :): двоеточия ,num=num, создание файлов, но скрипт так и не работает ??? :-[, цена не меняется, а очень бы хотелось

С файлом не должно быть проблем, приведите текстовку файла скрипта, вы делали триггер или просто процедуру?
Назва: Re: Наценка товаров скриптом
Відправлено: SerJio від Квітень 12, 2009, 17:39:38
Здравствуйте, очень нравится ваша программа, очень нужен скрипт, но к сожалению мои познания в программировании - близки к "0". Ребята, подскажите пожалуйста ответы на пару вопросов:
1. Как пользоваться скриптами и куда их вносить???
2. Скрипт необходимо вносить постоянно или достаточно ввести один раз, чтобы он работал все время?
2. У меня тоже проблема с наценками на товары. Необходимо установить разную наценку на разные группы товаров, и не только розничные цены, но и скидки. Я этого сделать не могу, и вручную приходится вбивать цены на все товары - это очень неудобно. Кроме того, при пересчете розничных цен на цены со скидками в расходных накладных, у меня пересчитываются все цены по складу, введенные вручную.
   Пожалуйста, подскажите мне какой скрипт необходимо вводить? Распишите, пожалуйста "чайнику" подробнее все пошагово. Буду ОЧЕНЬ благодарен. Без этого вся работа на смарку.
   Заранее благодарен.  :)
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Квітень 13, 2009, 10:43:51
1. Скрипты вводятся через меню Опции : SQL менеджер, только процедуры пока не получается там сохранить их можно добавить через файл как было описано выше.
2. Смотря какой скрипт если сделать тригером то не надо будет выполнять процедуру либо другой скрипт по наценке при каждом вводе товара, а если одноразовая наценка надо будет выполнять тогда когда захотите.
3. Как наценивать без процедуры было несколько раз описано на форуме, пользуйтесь поиском, например тут http://www.softbalance.com.ua/forum/index.php?topic=23.msg1273#msg1273
Назва: Re: Наценка товаров скриптом
Відправлено: s.print.kr від Квітень 18, 2009, 22:47:24
Дмитрий, пробовал как процедуру так и через файл. И там и там ситуация такая:
ввожу значение соответствующему  значению  (v_cena <= 5) при условии
UPDATE tovar_name SET cena_r = cena * 1.5  WHERE num = num AND cena_curr_id = cena_out_curr_id; (почему num=num?, потому что відает ошибку)
Пересчитывает ВЕСЬ товар на +50%, хотя есть товар, который не соответствует условию (v_cena <= 5)
Ввожу новую входящую цену, НО уже в этом диапазоне (v_cena > 5 AND v_cena <= 10)
при условии UPDATE tovar_name SET cena_r = cena * 1.35 WHERE num = num AND cena_curr_id = cena_out_curr_id;
Так опять пересчитывает ВЕСЬ ТОВАР,но уже на +35%.
Как все-таки заставить скрипт работать по определеннім условиям? А то уже голова пухнет.
Дмитрий, на  Вас вся надежда. Спасибо
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Квітень 21, 2009, 12:36:07
Цитата: s.print.kr від Квітень 18, 2009, 22:47:24
Дмитрий, пробовал как процедуру так и через файл. И там и там ситуация такая:
ввожу значение соответствующему  значению  (v_cena <= 5) при условии
UPDATE tovar_name SET cena_r = cena * 1.5  WHERE num = num AND cena_curr_id = cena_out_curr_id; (почему num=num?, потому что відает ошибку)

Тут же я писал, что пункт 2 выполняется так и он нормально работает, а далее через скрипт:

Цитата: Дмитрий Котельников від Грудень 24, 2008, 14:44:37
Да, двоеточие не проходит, попробуем поправить. А пока создайте файл с названием 999, скопируйте его в папку /db/patch/ , с содержимым вроде этого, через строку просто добавьте COMMIT

ALTER PROCEDURE usr_tovar_nacenka
AS
DECLARE VARIABLE v_tovar_id INTEGER;
DECLARE VARIABLE v_cena DOUBLE PRECISION;
DECLARE VARIABLE v_cena_r DOUBLE PRECISION;
DECLARE VARIABLE v_cena_o DOUBLE PRECISION;
DECLARE VARIABLE v_cena_1 DOUBLE PRECISION;
DECLARE VARIABLE v_cena_2 DOUBLE PRECISION;

BEGIN
  FOR
    SELECT
      num,
      cena,
      cena_r,
      cena_o,
      cena_1,
      cena_2
    FROM
      tovar_name
    WHERE
      visible = 1
    INTO
      :v_tovar_id,
      :v_cena,
      :v_cena_r,
      :v_cena_o,
      :v_cena_1,
      :v_cena_2
  DO
  BEGIN
    -- до этого момента не трогаем, только тут делаем условия по наценке
    -- скрипт при условии валюты приходной и расходной одинаковой, для неодинаковых надо делать еще и пересчет по курсу
    IF (:v_cena <= 5) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.2 WHERE num = :v_tovar_id AND cena_curr_id = cena_out_curr_id;  -- наценка 20% на розницу от 0 до 5
    END
    ELSE
    IF (:v_cena > 5 AND :v_cena <= 10) THEN
    BEGIN
      UPDATE tovar_name SET cena_r = cena * 1.18 WHERE num = :v_tovar_id  AND cena_curr_id = cena_out_curr_id;  -- наценка 18% на розницу на групу от 5 до 10
    END
  END
END;

COMMIT


А уже EXECUTE PROCEDURE usr_tovar_nacenka выполняйте из SQL менеджера.


Цитата: s.print.kr від Квітень 18, 2009, 22:47:24
Ввожу новую входящую цену, НО уже в этом диапазоне (v_cena > 5 AND v_cena <= 10)
при условии UPDATE tovar_name SET cena_r = cena * 1.35 WHERE num = num AND cena_curr_id = cena_out_curr_id;
Так опять пересчитывает ВЕСЬ ТОВАР,но уже на +35%.
Как все-таки заставить скрипт работать по определеннім условиям? А то уже голова пухнет.
Дмитрий, на  Вас вся надежда. Спасибо

Также я не писал выполнять UPDATE отдельно, читайте по-пунктно, вначале создается процедура, потом обновляете ее как хотите там пример с объяснениями, а потом из скрипта запускаете эту процедуру. Смотрите внимательно на авторов сообщений.
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Квітень 23, 2009, 16:32:26
Повторил с полной корректировкой:

0. ВАЖНО Сделайте резерв базы перед началом экспериментов.

1. Создаем пустышку процедуры в SQL менеджере:

CREATE PROCEDURE usr_tovar_nacenka
AS
BEGIN
END;


2. Далее на примере ваших условий модифицируем процедуру. Создайте файл с названием 999, скопируйте его в папку /db/patch/ , с содержимым вроде этого, через строку просто добавьте COMMIT

ALTER PROCEDURE usr_tovar_nacenka
AS
DECLARE VARIABLE v_tovar_id INTEGER;
DECLARE VARIABLE v_cena DOUBLE PRECISION;
DECLARE VARIABLE v_cena_r DOUBLE PRECISION;
DECLARE VARIABLE v_cena_o DOUBLE PRECISION;
DECLARE VARIABLE v_cena_1 DOUBLE PRECISION;
DECLARE VARIABLE v_cena_2 DOUBLE PRECISION;
BEGIN
 FOR
   SELECT
     num,
     cena,
     cena_r,
     cena_o,
     cena_1,
     cena_2
   FROM
     tovar_name
   WHERE
     visible = 1
   INTO
     :v_tovar_id,
     :v_cena,
     :v_cena_r,
     :v_cena_o,
     :v_cena_1,
     :v_cena_2
 DO
 BEGIN
   -- до этого момента не трогаем, только тут делаем условия по наценке
   -- скрипт при условии валюты приходной и расходной одинаковой, для неодинаковых надо делать еще и пересчет по курсу
   IF (:v_cena <= 5) THEN
   BEGIN
     UPDATE tovar_name SET cena_r = cena * 1.2 WHERE num = :v_tovar_id AND cena_curr_id = cena_out_curr_id;  -- наценка 20% на розницу от 0 до 5
   END
   ELSE
   IF (:v_cena > 5 AND :v_cena <= 10) THEN
   BEGIN
     UPDATE tovar_name SET cena_r = cena * 1.18 WHERE num = :v_tovar_id  AND cena_curr_id = cena_out_curr_id;  -- наценка 18% на розницу на групу от 5 до 10
   END
    -- конец вашего скрипта
 END
END;

COMMIT


3. Запускать процедуру надо в SQL менеджере так :

EXECUTE PROCEDURE usr_tovar_nacenka
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Червень 05, 2009, 10:25:25
Приветствую Вас,

03.06.2009 в 18:56, Вы писали:

ЦитатаИВ> Еще раз прошу прощения за беспокойство.
С COMMIT я разобрался.
Теперь надеюсь пока что последний вопрос:
- Как сделать так - чтобы установленная наценка насчитывалась автоматически при добавлении нового товара.

Создаем файл 999 с содержанием:

EXECUTE PROCEDURE usr_tovar_nacenka

COMMIT

и помещаем в db/patch_ok

Далее создаем файл в каталоге программы например с названием
my_sklad.bat с содержанием:

copy db\patch_ok\999 db\patch\999
start sklad.exe


Выведите ярлык на рабочий стол файл my_sklad.bat и запускайте
программу этим файлом. Этот батник будет копировать скрипт в каталог
для выполнения и запускать программу. Т.е. цены по вашему скрипту
будут изменяться при каждом запуске программы.

При добавлении нового товара тоже можно но если скрипт большой или
номенклатура большая то лучше выполнять при запуске программы, но
можно конечно и на триггер "повесить", будет срабатывать после
каждого добавления товара. Для этого просто выполните след код:

CREATE OR ALTER TRIGGER tovar_name_usr_ai0 FOR tovar_name
ACTIVE AFTER INSERT POSITION 0
AS
BEGIN
  EXECUTE PROCEDURE usr_tovar_nacenka;
END

Можно конечно элегантней создавать триггер и процедуру и передавать в
процедуру какой товар именно добавлен узнавать его группу и делать
обновление только по этому товару, но пока остановимся на этом.
Назва: Re: Наценка товаров скриптом
Відправлено: Димон 911 від Серпень 31, 2009, 15:19:38
Здравствуйте!

Делал наценку как описано:
http://www.softbalance.com.ua/forum/index.php?topic=461.msg3610#msg3610

Получилось следующее:
ALTER PROCEDURE usr_tovar_nacenka
AS
DECLARE VARIABLE v_tovar_id INTEGER;
DECLARE VARIABLE v_cena DOUBLE PRECISION;
DECLARE VARIABLE v_cena_r DOUBLE PRECISION;
DECLARE VARIABLE v_cena_o DOUBLE PRECISION;
DECLARE VARIABLE v_cena_1 DOUBLE PRECISION;
DECLARE VARIABLE v_cena_2 DOUBLE PRECISION;
BEGIN
  FOR
    SELECT
      num,
      cena,
      cena_r,
      cena_o,
      cena_1,
      cena_2
    FROM
      tovar_name
    WHERE
      visible = 1
    INTO
      :v_tovar_id,
      :v_cena,
      :v_cena_r,
      :v_cena_o,
      :v_cena_1,
      :v_cena_2
  DO
  BEGIN


UPDATE tovar_name SET cena_r = cena * 2,0, cena_o = cena * 1,25, cena_1 = cena * 1,5, cena_2 = cena * 1,75  WHERE tip = 84;                                          
    END
  END
END;

COMMIT

Далее в SQL менеджере запускаю: EXECUTE PROCEDURE usr_tovar_nacenka
Скрипт выполняется, но наценка не разносится.

Условия задачи следующие:
Наценка розничная - 100%;
Наценка оптовая - 25%;
Наценка Цена1 - 50%;
Наценка Цена2 - 75%;
Код товарной группы - 84.

Пожалуйста, разъясните ситуацию.
Спасибо.
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Серпень 31, 2009, 15:29:22
Тут вообще все просто, в предыдущем примере там была выборка из справочника, а у вас это делать не надо если просто наценка по группам то что-то вроде этого:


ALTER PROCEDURE usr_tovar_nacenka
AS
BEGIN
  UPDATE tovar_name SET cena_r = cena * 2.0, cena_o = cena * 1.25, cena_1 = cena * 1.5, cena_2 = cena * 1.75  WHERE tip = 84;
  UPDATE tovar_name SET cena_r = cena * 2.0, cena_o = cena * 1.25, cena_1 = cena * 1.5, cena_2 = cena * 1.75  WHERE tip = 85;
  UPDATE tovar_name SET cena_r = cena * 2.0, cena_o = cena * 1.25, cena_1 = cena * 1.5, cena_2 = cena * 1.75  WHERE tip = 86;
END;

COMMIT


PS: Каждый UPDATE должен быть разделен ";" точкой с запятой, пробелов между строками в "ALTER PROCEDURE" не должны быть, и вещественные числа разделяются не запятой, а точкой.
Назва: Re: Наценка товаров скриптом
Відправлено: s.print.kr від Жовтень 07, 2009, 20:48:40
Добрый день, Дмитрий.
Вопрос по поводу наценки товара скриптом, а именно наценки на определенный склад. Наценку делает на все склады, а интересует определенный склад
Назва: Re: Наценка товаров скриптом
Відправлено: s.print.kr від Жовтень 09, 2009, 19:21:34
Добрый день, Дмитрий.
Вопрос по поводу наценки товара скриптом, а именно наценки на определенный склад. Наценку делает на все склады, а интересует определенный склад
Пробовал вставлять эти данные в скрипт, но безрезультатно

Код:
SELECT
  t.num,
  t.name,
  t.grupa
FROM
  tip t
WHERE
  t.visible = 1
ORDER BY
  t.name

grupa покажет базовую группу, либо показывает дерево

Код:
SELECT * FROM PRINT_VIEW_SKLAD(0,1)

вместо 1 указывайте номер склада, номер склада можно посмотреть так:

Код:
SELECT
  sn.num,
  sn.name
FROM
  sklad_names sn
WHERE
  sn.visible = 1

help!
Назва: Re: Наценка товаров скриптом
Відправлено: Лариса_С. від Листопад 27, 2009, 02:25:16
Пощадите!!!... У меня от ваших закарючек в глазах рябит! Тут с горем пополам пользоваться программой научилась, не-то что какие-то скрипты писать. Кесарю - кесарево. А мне и таким как я с торговлей бы управиться. Цены действительно сейчас скачут как с перепугу. И наценки все разные. Я уже так запуталась, что не знаю на чем гилю сверх меры, а что продаю ниже закупочных цен. Вы-же можете! Просто сделайте это в следующей версии! Я и все чайники будут Вам несказанно благодарны.
Назва: Re: Наценка товаров скриптом
Відправлено: Valerikkon від Червень 30, 2011, 15:15:14
Хочется маленько поднять тему, так как она в данный момент для меня стала актуальной.

имеем подгруппу :02131
                                                     цена Зак    Цена Розница1   Цена Розница2
в ней имеем товар: 02131 беж 75С           60грн          75грн             70грн
                            02131 беж 75D           60грн          75грн             70грн
                            02131 беж 75E           60грн          75грн             70грн
                            ....................
                            02131 беж 80C           60грн          75грн             70грн
                            02131 беж 80D           60грн          75грн             70грн
...
                            02131 черн 95D          60грн          75грн             70грн

допустим поставщик изменил закупочную цену, но мы получили не весь товар из подгруппы,
а только 02131 беж 75D           62грн          78грн             73грн

1-каким скриптом можно изменить допустим закупочную цену на всю подгруппу, а потом можно переоценить через меню наценки на товары всю подгруппу.

2-или как вариант не трогая закупочную цену установить новую розничную цену1 и розничную цену2 для всей подгруппы (пусть цена будет фиксированной в пределах подгруппы, я посчитаю вручную)

3-переоценится подгруппа на всех 5 складах или только на выбранном, а потом можно синхронизировать номенклатуру на других складах?

Как пользоваться скриптами я уже маленько разобрался.



Скрипт
SELECT * FROM PRINT_VIEW_SKLAD(0,2)
Показывает дерево для второго склада NUM - это наверное и есть искомый номер подгруппы.

Жалко что скрипты нельзя сохранять, а потом вызывать по мере необходимости с нужными параметрами.

Прошу помощи в первых трех вопросах.
Назва: Re: Наценка товаров скриптом
Відправлено: Valerikkon від Червень 30, 2011, 15:39:14
Спасибо разобрался сам, выполнив скрипт

UPDATE tovar_name SET CENA_R = 78  WHERE tip = 44

где 78 -новая розничная цена,
а 44 номер подгруппы из скрипта
SELECT * FROM PRINT_VIEW_SKLAD(0,2)
где 2 - номер склада
Назва: Re: Наценка товаров скриптом
Відправлено: Valerikkon від Серпень 14, 2011, 16:13:59
Подскажите пожалуйста мне нужно переоценить несколько групп товаров, в окне SQL менеждера запускаю скрипт такого вида

UPDATE tovar_name SET CENA_R = 60.35  WHERE tip = 42;
UPDATE tovar_name SET CENA_R = 40.2  WHERE tip = 43;
UPDATE tovar_name SET CENA_R = 65  WHERE tip = 41;

ругается на вторую строчку

DataM.sDo:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 2, char 1.
UPDATE.

Что я делаю не так?
По одной строчке все выполняется, а пакетом никак не хочет.
Назва: Re: Наценка товаров скриптом
Відправлено: admin від Серпень 15, 2011, 12:03:53
Цитата: Valerikkon від Серпень 14, 2011, 16:13:59
Что я делаю не так?

Просматривайте сообщения в теме до того как пишите, прочитайте тему с самого начала, там объяснено что надо для такого делать процедуру.
Назва: Re: Наценка товаров скриптом
Відправлено: TheOK від Травень 03, 2013, 22:04:02

Внимание!
Перед использованием ОБЯЗАТЕЛЬНО сделайте резерв базы!
Побочным эффектом выполнения одного из последних заказов по автоматической наценке (по расписанию) стал данный файл.
К сожалению, он предоставляет информацию в "нечитаемом" виде, поэтому для заказчика был предложен другой вариант (здесь его по некоторым причинам не предлагаю).
Полученный запрос изменяет расходные цены (розничную, оптовую, Цена1) в зависимости от выставленного диапазона приходной цены (диапазон выставляется в основной валюте).
Отчет работает независимо от валют (как расходной так и приходной), а вернее с учетом курса валют. Т.е. наценка происходит в зависимости от курса в справочнике валют.
Во вложенном файле Excel документ, который формирует автоматически запрос по обновлению данных. А именно расходных цен: розничной, опт, Цена1.

В документе Excel в соответствующих полях, на соответствующих закладках необходимо задать диапазоны цен.
Рекомендации:
1) Диапазоны цен должны полностью перекрываться. Т.е. Первым нужно выставлять диапазон, начиная от 0. А последним должен быть диапазон, со значением, которое значительно превышает максимально возможную цену товара на складе.
2) Не стоит переходить в режим редактирования формул и изменять их, если только вы не умеете строить SQL запросы

3) В случае, если необходимо не обновлять какие-то типы цен, просто необходимо удалить  текст из всех или одной колонки (например, из колонки коэффициент).
4) Кол-во диапазонов в данном файле от 0 до 20 шт. для каждого из типов цен  (можно и больше... но не вижу смысла)

Запрос находится на листе Результат и выделен Желтым цветом.
Копируете его и вставляете в в SQL менеджер и жмете выполнение.

Писать в этой ветке не буду. Надеюсь, что кто-то разберется как и что делать и всем разъяснит.