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

Наценка товаров скриптом

Автор Digital, Грудень 16, 2008, 22:44:54

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

admin

#15
Приветствую Вас,

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

Можно конечно элегантней создавать триггер и процедуру и передавать в
процедуру какой товар именно добавлен узнавать его группу и делать
обновление только по этому товару, но пока остановимся на этом.

Димон 911

Здравствуйте!

Делал наценку как описано:
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.

Пожалуйста, разъясните ситуацию.
Спасибо.

admin

Тут вообще все просто, в предыдущем примере там была выборка из справочника, а у вас это делать не надо если просто наценка по группам то что-то вроде этого:


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" не должны быть, и вещественные числа разделяются не запятой, а точкой.

s.print.kr

Добрый день, Дмитрий.
Вопрос по поводу наценки товара скриптом, а именно наценки на определенный склад. Наценку делает на все склады, а интересует определенный склад

s.print.kr

Добрый день, Дмитрий.
Вопрос по поводу наценки товара скриптом, а именно наценки на определенный склад. Наценку делает на все склады, а интересует определенный склад
Пробовал вставлять эти данные в скрипт, но безрезультатно

Код:
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!

Лариса_С.

Пощадите!!!... У меня от ваших закарючек в глазах рябит! Тут с горем пополам пользоваться программой научилась, не-то что какие-то скрипты писать. Кесарю - кесарево. А мне и таким как я с торговлей бы управиться. Цены действительно сейчас скачут как с перепугу. И наценки все разные. Я уже так запуталась, что не знаю на чем гилю сверх меры, а что продаю ниже закупочных цен. Вы-же можете! Просто сделайте это в следующей версии! Я и все чайники будут Вам несказанно благодарны.

Valerikkon

Хочется маленько поднять тему, так как она в данный момент для меня стала актуальной.

имеем подгруппу :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 - это наверное и есть искомый номер подгруппы.

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

Прошу помощи в первых трех вопросах.

Valerikkon

Спасибо разобрался сам, выполнив скрипт

UPDATE tovar_name SET CENA_R = 78  WHERE tip = 44

где 78 -новая розничная цена,
а 44 номер подгруппы из скрипта
SELECT * FROM PRINT_VIEW_SKLAD(0,2)
где 2 - номер склада

Valerikkon

#23
Подскажите пожалуйста мне нужно переоценить несколько групп товаров, в окне 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.

Что я делаю не так?
По одной строчке все выполняется, а пакетом никак не хочет.

admin

Цитата: Valerikkon від Серпень 14, 2011, 16:13:59
Что я делаю не так?

Просматривайте сообщения в теме до того как пишите, прочитайте тему с самого начала, там объяснено что надо для такого делать процедуру.

TheOK

#25

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

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

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

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

Писать в этой ветке не буду. Надеюсь, что кто-то разберется как и что делать и всем разъяснит.
Работа в УкрСклад(особенности и советы): [url="//www.softbalance.com.ua/forum/index.php/topic,2362.0.html"]www.softbalance.com.ua/forum/index.php/topic,2362.0.html[/url]
Некоторые мои отчеты можно найти здесь: [url="http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html"]http://www.softbalance.com.ua/forum/index.php/topic,2307.0.html[/url]