Перечитав много тем по поводу наценок и перенаценок на розничный товар, а также возможности програмы пришол к выводу что для меня один вариант - написать скрипт.
В скриптах 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
Так же добавить умножение на курс чтобы была гривна, там где и наценка умножается (не писал потому что и так код громоздкий слабо читабельный)
Если в скрипте это не возможно может как нибудь сам в делфи сварганю если подскажете куда подключатся.
Огромное спасибо.
Если в скриптом не получается тогда как сделать чтобы при именении курса долара прямопропорционально изменялись наценки на товар забитые вручную?
Ну раз уж пошла такая жара давайте покажу как делать наценку с условиями в одном скрипте.
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
Тему можно развивать, можно научить скрипт и наценивать с валютой и автоматически подтягивать текущий курс и даже делать автоматическую наценку нового товара, т.е. вы будете добавлять новый товар в программу, а скрипт будет вызываться триггером и товар автоматически нацениватся по условию. Если соберем пару заявок на такую процедуру, распишу все подробно :)
Скрипт не работал, после некоторых модификаций начал по идеи считать
В коде было вот такое 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;
В процесе работы возникли такие вопросы:
Перевел базу в долар, розницу и закупку. До этого была в гривнах. В справочнике начало все отображатся в доларах.
Установил основную валюту долар, чтобы в нем шол перещёт, но в справочниках отобразилась гривна. И ни при каких обстоятельствах, при основной валюте долар, не отображает долар, отображает гривну, только цены в доларах.
Что не так? Или я что то не понял.
З.Ы. С кодом я ещё поработаю. Результат выложу.
Огромнейшее спасибо за помощь.
Вот мой оконечный вариант
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 на любую дргугую снова пересчитывает базу минуя все остальные условия ??? ???
Я чёт потерялся.
Цитата: Digital від Грудень 18, 2008, 21:54:28
Почему то во всей базе ставится наценка 1,3 без разницы какая сума закупки.
Потому как изначально я писал скрипт верно, надо
num = :v_tovar_id
а не
num = num
Вместо :v_tovar_id подставляется номер товарав выбранный в верхнем SELECT, а в вашем случае num = num равнозначно 1=1, условие всегда выполняется.
Изначально ваш скрипт выдал ошибку в оглавлении переменных
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
А что делать дальше я не знаю :-\ Вариантов у меня больше нет что то пробывать.
Да, двоеточие не проходит, попробуем поправить. А пока создайте файл с названием 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 менеджера.
Добрый день, Дмитрий
Вы вот писали:
Тему можно развивать, можно научить скрипт и наценивать с валютой и автоматически подтягивать текущий курс и даже делать автоматическую наценку нового товара, т.е. вы будете добавлять новый товар в программу, а скрипт будет вызываться триггером и товар автоматически нацениватся по условию.
Перепробовав все варианты :): двоеточия ,num=num, создание файлов, но скрипт так и не работает ??? :-[, цена не меняется, а очень бы хотелось
Цитата: s.print.kr від Квітень 07, 2009, 21:27:32
Добрый день, Дмитрий
Вы вот писали:
Тему можно развивать, можно научить скрипт и наценивать с валютой и автоматически подтягивать текущий курс и даже делать автоматическую наценку нового товара, т.е. вы будете добавлять новый товар в программу, а скрипт будет вызываться триггером и товар автоматически нацениватся по условию.
Перепробовав все варианты :): двоеточия ,num=num, создание файлов, но скрипт так и не работает ??? :-[, цена не меняется, а очень бы хотелось
С файлом не должно быть проблем, приведите текстовку файла скрипта, вы делали триггер или просто процедуру?
Здравствуйте, очень нравится ваша программа, очень нужен скрипт, но к сожалению мои познания в программировании - близки к "0". Ребята, подскажите пожалуйста ответы на пару вопросов:
1. Как пользоваться скриптами и куда их вносить???
2. Скрипт необходимо вносить постоянно или достаточно ввести один раз, чтобы он работал все время?
2. У меня тоже проблема с наценками на товары. Необходимо установить разную наценку на разные группы товаров, и не только розничные цены, но и скидки. Я этого сделать не могу, и вручную приходится вбивать цены на все товары - это очень неудобно. Кроме того, при пересчете розничных цен на цены со скидками в расходных накладных, у меня пересчитываются все цены по складу, введенные вручную.
Пожалуйста, подскажите мне какой скрипт необходимо вводить? Распишите, пожалуйста "чайнику" подробнее все пошагово. Буду ОЧЕНЬ благодарен. Без этого вся работа на смарку.
Заранее благодарен. :)
1. Скрипты вводятся через меню Опции : SQL менеджер, только процедуры пока не получается там сохранить их можно добавить через файл как было описано выше.
2. Смотря какой скрипт если сделать тригером то не надо будет выполнять процедуру либо другой скрипт по наценке при каждом вводе товара, а если одноразовая наценка надо будет выполнять тогда когда захотите.
3. Как наценивать без процедуры было несколько раз описано на форуме, пользуйтесь поиском, например тут http://www.softbalance.com.ua/forum/index.php?topic=23.msg1273#msg1273
Дмитрий, пробовал как процедуру так и через файл. И там и там ситуация такая:
ввожу значение соответствующему значению (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%.
Как все-таки заставить скрипт работать по определеннім условиям? А то уже голова пухнет.
Дмитрий, на Вас вся надежда. Спасибо
Цитата: 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 отдельно, читайте по-пунктно, вначале создается процедура, потом обновляете ее как хотите там пример с объяснениями, а потом из скрипта запускаете эту процедуру. Смотрите внимательно на авторов сообщений.
Повторил с полной корректировкой:
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
Приветствую Вас,
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
Можно конечно элегантней создавать триггер и процедуру и передавать в
процедуру какой товар именно добавлен узнавать его группу и делать
обновление только по этому товару, но пока остановимся на этом.
Здравствуйте!
Делал наценку как описано:
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.
Пожалуйста, разъясните ситуацию.
Спасибо.
Тут вообще все просто, в предыдущем примере там была выборка из справочника, а у вас это делать не надо если просто наценка по группам то что-то вроде этого:
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" не должны быть, и вещественные числа разделяются не запятой, а точкой.
Добрый день, Дмитрий.
Вопрос по поводу наценки товара скриптом, а именно наценки на определенный склад. Наценку делает на все склады, а интересует определенный склад
Добрый день, Дмитрий.
Вопрос по поводу наценки товара скриптом, а именно наценки на определенный склад. Наценку делает на все склады, а интересует определенный склад
Пробовал вставлять эти данные в скрипт, но безрезультатно
Код:
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!
Пощадите!!!... У меня от ваших закарючек в глазах рябит! Тут с горем пополам пользоваться программой научилась, не-то что какие-то скрипты писать. Кесарю - кесарево. А мне и таким как я с торговлей бы управиться. Цены действительно сейчас скачут как с перепугу. И наценки все разные. Я уже так запуталась, что не знаю на чем гилю сверх меры, а что продаю ниже закупочных цен. Вы-же можете! Просто сделайте это в следующей версии! Я и все чайники будут Вам несказанно благодарны.
Хочется маленько поднять тему, так как она в данный момент для меня стала актуальной.
имеем подгруппу :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 - это наверное и есть искомый номер подгруппы.
Жалко что скрипты нельзя сохранять, а потом вызывать по мере необходимости с нужными параметрами.
Прошу помощи в первых трех вопросах.
Спасибо разобрался сам, выполнив скрипт
UPDATE tovar_name SET CENA_R = 78 WHERE tip = 44
где 78 -новая розничная цена,
а 44 номер подгруппы из скрипта
SELECT * FROM PRINT_VIEW_SKLAD(0,2)
где 2 - номер склада
Подскажите пожалуйста мне нужно переоценить несколько групп товаров, в окне 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.
Что я делаю не так?
По одной строчке все выполняется, а пакетом никак не хочет.
Цитата: Valerikkon від Серпень 14, 2011, 16:13:59
Что я делаю не так?
Просматривайте сообщения в теме до того как пишите, прочитайте тему с самого начала, там объяснено что надо для такого делать процедуру.
Внимание!
Перед использованием ОБЯЗАТЕЛЬНО сделайте резерв базы!
Побочным эффектом выполнения одного из последних заказов по автоматической наценке (по расписанию) стал данный файл.
К сожалению, он предоставляет информацию в "нечитаемом" виде, поэтому для заказчика был предложен другой вариант (здесь его по некоторым причинам не предлагаю).
Полученный запрос изменяет расходные цены (розничную, оптовую, Цена1) в зависимости от выставленного диапазона приходной цены (диапазон выставляется в основной валюте).
Отчет работает независимо от валют (как расходной так и приходной), а вернее с учетом курса валют. Т.е. наценка происходит в зависимости от курса в справочнике валют.
Во вложенном файле Excel документ, который формирует автоматически запрос по обновлению данных. А именно расходных цен: розничной, опт, Цена1.
В документе Excel в соответствующих полях, на соответствующих закладках необходимо задать диапазоны цен.
Рекомендации:
1) Диапазоны цен должны полностью перекрываться. Т.е. Первым нужно выставлять диапазон, начиная от 0. А последним должен быть диапазон, со значением, которое значительно превышает максимально возможную цену товара на складе.
2) Не стоит переходить в режим редактирования формул и изменять их, если только вы не умеете строить SQL запросы
3) В случае, если необходимо не обновлять какие-то типы цен, просто необходимо удалить текст из всех или одной колонки (например, из колонки коэффициент).
4) Кол-во диапазонов в данном файле от 0 до 20 шт. для каждого из типов цен (можно и больше... но не вижу смысла)
Запрос находится на листе Результат и выделен Желтым цветом.
Копируете его и вставляете в в SQL менеджер и жмете выполнение.
Писать в этой ветке не буду. Надеюсь, что кто-то разберется как и что делать и всем разъяснит.