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

Наценка скриптом с учётом валюты

Автор scalemodel, Жовтень 08, 2013, 10:44:21

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

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

scalemodel

Закупочная цена в евро, при наценке скриптом:

IF(grupa_id_in=477)THEN
BEGIN
cena_o_out=udf_roundto(cena_in*1.32,1);
END

оптовая цена пересчитывает тоже в евро, хотя когда товар импортировался в программу, отмечалось, что приходная цена в евро, а расходная в гривне.
При обычной наценке всё работало, но появилась необходимость редактировать кол-во знаков после запятой в разных группах, пришлось обратиться к скрипту (я так понимаю, что другим способом никак?)
Так вот что изменить в скрипте, чтоб расходные цены были в гривне?
И можно ли сразу перечислить несколько групп, типа (grupa_id_in=477,488,489 и.т.д.
Заранее благодарен.

admin

По нескольким группам делайте так:
IF(grupa_id_in IN (34,55,45)) THEN
А вот с валютой мы за нее забыли в наценках скриптом и добавить чуть сложновато т.к. тело процедуры уже многие для себя исправили, в след. версиях что-то придумаем чтобы делать выборку к валюте. Можно использовать для курса одну из переменных цен, но это неправильно. Ждите обновлений, а пока используйте статические курсы т.е. прописывайте курс прямо в скрипте.

Creat


admin

Цитата: Creat від Жовтень 15, 2013, 20:40:12
А как этот скрипт запускается?

Меню Опции : Наценки на товары : Наценки SQL скриптом.

Следите за обновлениями :)
ЦитатаУкрСклад 5.75 (01.10.2013)
--------------------------------------------------------
- Добавлен импорт контрагентов из файла CSV (меню Опции : Импорт товаров / контрагентов из файла).
- В меню Опции : Наценки на товары добавлена штатная наценка SQL скриптом (для более опытных пользователей и точной настройки наценок) .
- Добавлена опция "Текущую дату получать с Сервера программы".
- Доработана опция "Изменять текущую дату", была возможность обойти это ограничение прав.
- Доработано: в некоторых печатных формах не печаталась валюта для НДС.
- Исправлена проблема с идентификацией пользователя при событии удалении документа в "Действиях пользователей".
- Исправлена проблема с отметкой на закладке "Права на документы и справочники".
- Добавили ID групп в "Настройка наценок по группам товара".
- Исправлена ошибка с 50% скидкой в Окне кассира.
- Исправлена проблема выбора ранее удаленного контрагента / сотрудника сканером штрих-кодов.
- Исправлена ошибка в оплате товаров кассовым ордером из "Окна кассира", иногда не помечало документ как проведенный.
- Обновлен справочник МФО Банков Украины.

Creat

#4
Я то слежу! И уже предлагал вам несколько раз делать анонс выхода новых версий здесь на форуме в отдельной теме.
Я имел ввиду что нет такой кнопки как во вкладке наценка по группах - назначить новые цены!
Т.е. мой вопрос в следующем
1) поправил скрипт под себя
2) как после этого назначить эти цены товарам?
3) предложение добавьте в пример IF(grupa_id_in IN (34,55,45)) THEN
4) попробовал и вот первые неудобства - при пользовании наценок по группам - цена меняется после окончания ввода розничной цены - и мы сразу видим какая будет цена с наценкой и при желании можем подкорректировать вверх или вниз(ну или округлить). А при автоматической наценке скриптом цена рассчитывается уже при сохранении и ты уже мог вписать свою нужную цену, но при сохранении она будет подкорректирована соответственно скрипту. Некоторые товары в коллекции немного неудачны и цену надо ставить ниже стандартной наценки. При таком раскладе автоматической наценкой скриптом невозможно пользоваться вообще.

admin

Цитата: Creat від Жовтень 17, 2013, 10:15:55
Я то слежу! И уже предлагал вам несколько раз делать анонс выхода новых версий здесь на форуме в отдельной теме.

Новости есть на сайте, можно подписаться на рассылку на емаил или по rss, дублировать на форуме считаем лишним.

Цитата: Creat від Жовтень 17, 2013, 10:15:55
Я имел ввиду что нет такой кнопки как во вкладке наценка по группах - назначить новые цены!

На данный момент цены рассчитываются только при сохранении товара. Наценка только появилась, а вы все сразу хотите, так не получается, всего сразу не предусмотришь и не сделаешь. В новой версии будет уже по группе делать и по всему справочнику.

Цитата: Creat від Жовтень 17, 2013, 10:15:55
3) предложение добавьте в пример IF(grupa_id_in IN (34,55,45)) THEN

Для новый баз такое уже сделано и валюты тоже, а вот для старых нельзя уже ничего менять, т.к. процедуры переписаны. Кнопку восстановить по-умолчанию уже сделали, будет в след. версии, а валюта включиться при перекомпиле процедуры т.е. при пересохранении.

Цитата: Creat від Жовтень 17, 2013, 10:15:55
А при автоматической наценке скриптом цена рассчитывается уже при сохранении и ты уже мог вписать свою нужную цену, но при сохранении она будет подкорректирована соответственно скрипту. Некоторые товары в коллекции немного неудачны и цену надо ставить ниже стандартной наценки. При таком раскладе автоматической наценкой скриптом невозможно пользоваться вообще.

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

admin

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

Creat

Цитата: admin від Жовтень 17, 2013, 16:34:53
Хотя можно подсвечивать новые цены до сохранения, но надо переделывать логику, убирать тригеры и делать через саму программу просчет.
Я назвал реальные ситуации, когда это надо - надо переоценить конкретную позицию товара в группе. Всё автонаценку скриптом надо выключать. При приходе товара определённые позиции можно поставить дороже, определённые уценить.
Мы сейчас так и используем наценку по группах - увидели какая цена будет исходя из процента наценки и уже ручками округлили цену до необходимой, или меняем из соображений продажности :)
Ну и сама логика работы товароведа - зашёл в карточку товара, поменял расходную цену ручками, сохранил а цену уже опять другая :(
Я за
Цитата: admin від Жовтень 17, 2013, 16:34:53
переделывать логику, убирать тригеры и делать через саму программу просчет.
А так возможность наценки скриптом классная, логичная и удобная. Я когдато давно ещё просил добавить округления в наценки по группам. А таким вариантом реализуются все хотелки по ценообразованию.

Creat

#8
Спасибо, хорошо работает.
И ещё пока горячо в этом направлении. Сделать возможность сохранения нескольких скриптов, как SQL менеджере.

isian1

#9
Как правильно учитывать валюту товара для наценки скриптом? Например в одной групе есть товар за 20 доларов и товар за 500 грн,  делаю вот так что бы учитывалась валюта , но что-то неполучается :

IF (cena_in > 5000 AND cena_in <= 8000 AND valuta_id = 1) THEN
  BEGIN   
   
    cena_r_out = udf_roundto(cena_in * 1.10, 2);
    cena_o_out = udf_roundto(cena_in * 1.03, 2);
    cena_1_out = udf_roundto(cena_in * 1.07, 2);
    cena_2_out = udf_roundto(cena_in * 1.08, 2);
    cena_3_out = udf_roundto(cena_in * 1.09, 2);
  END
   ELSE
IF (cena_in > 5000 AND cena_in <= 8000 AND valuta_id = 0) THEN
  BEGIN   
   
    cena_r_out = udf_roundto(cena_in * 1.20, 2);
    cena_o_out = udf_roundto(cena_in * 1.08, 2);
    cena_1_out = udf_roundto(cena_in * 1.15, 2);
    cena_2_out = udf_roundto(cena_in * 1.17, 2);
    cena_3_out = udf_roundto(cena_in * 1.18, 2);
  END
   ELSE
У нас скриптом в зависимости от цены захода делается наценка на розницу , а также по групам ,
Но получается что если неучитывать валюту то товар стоимость 1 долар будет  наценка 50% а если  22 грн - 15% хотя один товар но нацеки будут по разному считать.
Как здесь правильно прописать ,а то от експериментов уже :o   

admin

#10
Вот из переписки поддержки:

Это перенаправленное письмо:
От: УкрСклад
Кому: Денис
Дата: 2 вересня 2015 р., 12:32:05
Тема: Вопрос по скрипту

===8<==============Оригинал текста письма===============
Приветствую Вас,

01.09.2015 в 10:32, Вы писали:

ДЖ> Здравствуйте!
ДЖ> Во вложении я изложил суть проблемы с примерами


Надо вначале узнать ID приходной валюты товара

    SELECT
      tn.cena_curr_id
    FROM
      tovar_name tn
    WHERE
      tn.num = tovar_id_in
    INTO
      tmp_int1;
    -- tmp_int1 = ID приходной валюты товара

а далее проверять в условии наценки еще и валюту, вот пример для
валюты 2 это ЕВРО:

IF (tmp_int1 = 2 AND grupa_id_in IN (20,43,46) AND ((cena_in*valuta_kurs) > 1 AND (cena_in*valuta_kurs) <= 1200)) THEN


--
С уважением, Дмитрий Котельников
  Служба поддержки УкрСклад.
===8<===========Окончание оригинала теста письма========

В вашем случае valuta_id - это переменная которая не заполнена. Ниже пример где заполняем valuta_id  текущего товара:

SELECT
  tn.cena_curr_id
FROM
  tovar_name tn
WHERE
  tn.num = :tovar_id_in
INTO
  valuta_id;
-- valuta_id = ID приходной валюты товара
-- если надо ID расходной валюты узнавать, выше вместо cena_curr_id используйте cena_out_curr_id
IF (cena_in > 5000 AND cena_in <= 8000 AND valuta_id = 1) THEN
  BEGIN   
    cena_r_out = udf_roundto(cena_in * 1.10, 2);
    cena_o_out = udf_roundto(cena_in * 1.03, 2);
    cena_1_out = udf_roundto(cena_in * 1.07, 2);
    cena_2_out = udf_roundto(cena_in * 1.08, 2);
    cena_3_out = udf_roundto(cena_in * 1.09, 2);
  END
ELSE
IF (cena_in > 5000 AND cena_in <= 8000 AND valuta_id = 0) THEN
  BEGIN   
    cena_r_out = udf_roundto(cena_in * 1.20, 2);
    cena_o_out = udf_roundto(cena_in * 1.08, 2);
    cena_1_out = udf_roundto(cena_in * 1.15, 2);
    cena_2_out = udf_roundto(cena_in * 1.17, 2);
    cena_3_out = udf_roundto(cena_in * 1.18, 2);
  END


Или сразу две валюты узнаем:

SELECT
  tn.cena_curr_id,
  tn.cena_out_curr_id
FROM
  tovar_name tn
WHERE
  tn.num = :tovar_id_in
INTO
  tmp_int1,
  tmp_int2;

tmp_int1 - ID входящей
tmp_int1 - ID расходной валюты