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

Звіт планування замовлень

Автор molotokk, Лютий 27, 2017, 16:17:22

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

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

molotokk

Зробив звіт "планування замовлень" з вибором постачальника.
Як зробити щоб в ньому показувало не тільки ті товари, що треба замовити, а взагалі всі товари по даному постачальнику?,
наприклад є:
№   Код           Назва          Ціна (прихід грн.)   Продано (шт)   Залишок на складі (шт)   Рекомендоване замовлення (шт)
1   09332        Рукавиці         7,860                   34,00                0,00                                          3,00

а щоб було:
№   Код           Назва          Ціна (прихід грн.)   Продано (шт)   Залишок на складі (шт)   Рекомендоване замовлення (шт)
1   09332        Рукавиці         7,860                   34,00                0,00                                          3,00
2   09333        пакет БМВ      7,860                   100,00                500                                          0


код звіту і зам звіт додаю, може комусь пригодиться:
SELECT
  sw.group_name,   
  tn.kod,
  tn.name,
  tn.cena,
  CASE
    WHEN (tn.cena_curr_id = #валюта_№#) THEN tn.cena   
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 1) THEN tn.cena/c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 1) THEN tn.cena*c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 0) THEN tn.cena/c.kurs*ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 0) THEN tn.cena*c.kurs*ct_in.kurs     
  END AS cena_valuta,   
  tz.kolvo AS tov_kolvo_zal,
  SUM(tm.from_kolvo) AS tov_kolvo
FROM 
  tovar_move tm,
  print_view_sklad(#товар_группа_№#,#склад_№#) sw,
  tovar_name tn
    LEFT JOIN currency ct_in ON tn.cena_curr_id = ct_in.num,
  currency c,
  tovar_zal tz
WHERE   
  c.num = #валюта_№# AND
  tm.doc_type_id = 1 AND   
  tm.mdate >= '#дата_с#' AND
  tm.mdate <= '#дата_по#' AND
  sw.num = tn.tip AND   
  tm.tovar_id = tn.num AND   
  tm.from_sklad_id = #склад_№# AND
  tm.tovar_id = tz.tovar_id AND
  tz.last_post_id = #поставщик_№# AND
  tz.sklad_id = #склад_№#
GROUP BY   
  1,2,3,4,5,6
HAVING
  SUM(tm.from_kolvo) > 0 
ORDER BY
  1,2





підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

molotokk

Шановне панство, все ще чекаю Вашої допомоги =))   ???    
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

admin

#2
Цитата: molotokk від Лютий 28, 2017, 11:06:39
Шановне панство, все ще чекаю Вашої допомоги =))   ???    

Вот ваш скрипт просто переделанный чтобы показывалась вся номенклатура:

SELECT
  sw.group_name,   
  tn.kod,
  tn.name,
  tn.cena,
  CASE
    WHEN (tn.cena_curr_id = #валюта_№#) THEN tn.cena
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 1) THEN tn.cena/c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 1) THEN tn.cena*c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 0) THEN tn.cena/c.kurs*ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 0) THEN tn.cena*c.kurs*ct_in.kurs     
  END AS cena_valuta,   
  tz.kolvo AS tov_kolvo_zal,
  SUM(tm.from_kolvo) AS tov_kolvo
FROM 
  tovar_name tn
    LEFT JOIN tovar_move tm ON (tm.doc_type_id =1  AND tm.mdate >= '#дата_с#' AND tm.mdate <= '#дата_по#' AND tm.from_sklad_id = #склад_№# AND tm.tovar_id = tn.num)
    LEFT JOIN currency ct_in ON tn.cena_curr_id = ct_in.num,
  print_view_sklad(#товар_группа_№#,#склад_№#) sw,
  currency c,
  tovar_zal tz
WHERE   
  c.num = #валюта_№# AND
  sw.num = tn.tip AND
  tn.num = tz.tovar_id AND
  tz.last_post_id = #поставщик_№# AND
  tz.sklad_id = #склад_№#
GROUP BY   
  1,2,3,4,5,6
ORDER BY
  1,2

molotokk

підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

fyodor

Спасибо, удобный отчет.

В этом отчете не выводятся товары поставщика, если в период анализа не было закупок этого товара. Т.е. по факту продажи товара (от данного поставщика) в период анализа были, а товара в отчете нет, и соответственно, нет плана заказа. Можно это как-то поправить?

И еще вопрос: Можно ли вывести план заказа на тот же период, что и период анализа? Т.е., если выбирается период анализа с 1.03.16 по 31.05.16 (92 дня), то и рекомендуемый заказ автоматически (а не высчитывать дни на календаре) расчитывается за период 92 дня. Это связано с сезонностью.
Спасибо.

molotokk

Цитата: fyodor від Березень 05, 2017, 22:50:49
Спасибо, удобный отчет.

В этом отчете не выводятся товары поставщика, если в период анализа не было закупок этого товара. Т.е. по факту продажи товара (от данного поставщика) в период анализа были, а товара в отчете нет, и соответственно, нет плана заказа. Можно это как-то поправить?

И еще вопрос: Можно ли вывести план заказа на тот же период, что и период анализа? Т.е., если выбирается период анализа с 1.03.16 по 31.05.16 (92 дня), то и рекомендуемый заказ автоматически (а не высчитывать дни на календаре) расчитывается за период 92 дня. Это связано с сезонностью.
Спасибо.

1. робіть по коду адміна і будуть всі товари по постачальнику, але ті що не треба купляти - рекомендоване замовлення буде 0.
2. я думаю то буде зайвий геморой в редагуванні коду. простіше вибрати дату вручну. =)
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

fyodor

1. Вопрос именно по коду админа. Если пользуетесь этим кодом, обратите внимание: в отчет не выводится товар поставщика, если не было закупок за анализируемый период у этого поставщика. Хотя продаж было много. Он в плане должен быть по логике.
Например, за месяц его продали 100 шт, на остатке 0. План на следующий месяц должен быть 100шт. А этого товара вообще нет в отчете по данному поставщику.

molotokk

#7
потестував я нарешті звіт. того що треба - немає, найліпший мені потрібний результат все ж в тому звіті, що я зробив.
SELECT
  sw.group_name,   
  tn.kod,
  tn.name,
  tn.cena,
  CASE
    WHEN (tn.cena_curr_id = #валюта_№#) THEN tn.cena   
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 1) THEN tn.cena/c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 1) THEN tn.cena*c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 0) THEN tn.cena/c.kurs*ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 0) THEN tn.cena*c.kurs*ct_in.kurs     
  END AS cena_valuta,   
  tz.kolvo AS tov_kolvo_zal,
  SUM(tm.from_kolvo) AS tov_kolvo
FROM 
  tovar_move tm,
  print_view_sklad(#товар_группа_№#,#склад_№#) sw,
  tovar_name tn
    LEFT JOIN currency ct_in ON tn.cena_curr_id = ct_in.num,
  currency c,
  tovar_zal tz
WHERE   
  c.num = #валюта_№# AND
  tm.doc_type_id = 1 AND   
  tm.mdate >= '#дата_с#' AND
  tm.mdate <= '#дата_по#' AND
  sw.num = tn.tip AND   
  tm.tovar_id = tn.num AND   
  tm.from_sklad_id = #склад_№# AND
  tm.tovar_id = tz.tovar_id AND
  tz.last_post_id = #поставщик_№# AND
  tz.sklad_id = #склад_№#
GROUP BY   
  1,2,3,4,5,6
HAVING
  SUM(tm.from_kolvo) > 0 
ORDER BY
  1,2

(файл звіту (шаблон також змінено) я прикріпив нижче.
Мені і "fyodor" потрібно фактично одне і теж (як я зрозумів) - щоб відображався ВЕСЬ список товару даного постачальника, незалежно чи період дат я поставив з 10.01.2015 по сьогодні, чи з 15.02.2017 по сьогодні, а вибір дати на день/місяць/рік вперед, а те, що не треба замовляти - було 0 в колонці "рекомендоване замовлення".
Поки що я добився що відображає більшість товару (наприклад якщо період дат невеликий то 25 з 30 найменувань, якщо ставлю рік/два то відображає всі але й аналіз проводить по великому періоду), а треба щоб відображало весь список, а аналіз і планування замовлення робило по заданому періоду дат як і робить зараз.
Хто має які ідеї - пропонуйте =)
п.с. і ще - як прописати щоб показувало не лише від продажів, а й від переміщення - ми  з основного складу близько 30-40% кидаєм на переміщення, а відповідно воно в плануванні не враховується, бо там прив'язка до вікна касира.
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

fyodor

+1

Да, как-то не корректно подтягивается список товаров выбранного поставщика.

Вот мне тут помогали с отчетом Движение товара по контрагенту. Добавили переменную остатка в отчет. Так там все норм.: выводится весь список товаров поставщика, которые когда-либо покупались у этого поставщика.

Надеемся на помощь.

molotokk

я не можу знайти яка змінна відповідає за те щоб показало всі товари даного постачальника без прив'язки до продаж/руху товару/закупки і т.д.
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

molotokk

Ще питання по даному звіту:
В нас близько 50% товару іде переміщенням на інші склади, а при плануванні замовлень переміщений товар не враховується.
Як зробити щоб в плануванні відштовхувалось від продаж і переміщення, а не лише від продаж.
підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

admin

Цитата: admin від Березень 03, 2017, 15:05:28
Вот ваш скрипт просто переделанный чтобы показывалась вся номенклатура:

Кстати выше нашли ошибку, надо не
LEFT JOIN tovar_move tm ON (tm.doc_type_id = #склад_№# AND tm.mdate >= '#дата_с#' AND tm.mdate <= '#дата_по#' AND tm.from_sklad_id = 1 AND tm.tovar_id = tn.num)
а вот такой:
LEFT JOIN tovar_move tm ON (tm.doc_type_id =1 AND tm.mdate >= '#дата_с#' AND tm.mdate <= '#дата_по#' AND tm.from_sklad_id = #склад_№# AND tm.tovar_id = tn.num)

выше код уже подправили.

admin

Цитата: molotokk від Квітень 11, 2017, 14:34:41
Ще питання по даному звіту:
В нас близько 50% товару іде переміщенням на інші склади, а при плануванні замовлень переміщений товар не враховується.
Як зробити щоб в плануванні відштовхувалось від продаж і переміщення, а не лише від продаж.

Возможно поможет, если заменить tm.doc_type_id =1 на tm.doc_type_id IN (1,10)

molotokk

підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01

molotokk

привіт)
знову граюсь з цим звітом )  таке питання
як мені прописати в цей звіт щоб по постачальнику відбирало не лише той товар що замовлявся в нього останнього разу, а наприклад якщо я колись давнооо в цього постачальника брав цей товар то щоб його теж в цей звіт кидало.
SELECT
  sw.group_name,   
  tn.kod,
  tn.name,
  tn.cena,
  CASE
    WHEN (tn.cena_curr_id = #валюта_№#) THEN tn.cena   
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 1) THEN tn.cena/c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 1) THEN tn.cena*c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 0) THEN tn.cena/c.kurs*ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 0) THEN tn.cena*c.kurs*ct_in.kurs     
  END AS cena_valuta,   
  tz.kolvo AS tov_kolvo_zal,
  SUM(tm.from_kolvo) AS tov_kolvo
FROM 
  tovar_move tm,
  print_view_sklad(#товар_группа_№#,#склад_№#) sw,
  tovar_name tn
    LEFT JOIN currency ct_in ON tn.cena_curr_id = ct_in.num,
  currency c,
  tovar_zal tz
WHERE   
  c.num = #валюта_№# AND
  tm.doc_type_id IN (1,10) AND   
  tm.mdate >= '#дата_с#' AND
  tm.mdate <= '#дата_по#' AND
  sw.num = tn.tip AND   
  tm.tovar_id = tn.num AND   
  tm.from_sklad_id = #склад_№# AND
  tm.tovar_id = tz.tovar_id AND
  tz.last_post_id = #поставщик_№# AND
  tz.sklad_id = #склад_№#
GROUP BY   
  1,2,3,4,5,6
HAVING
  SUM(tm.from_kolvo) > 0 
ORDER BY
  1,3

підбір та продаж обладнання для торгівлі, допомога в налаштуваннях програми ⇒ "komfort-m.com" ⇒ "t.me/komfortmservice" ⇒ ✆ 097-873-59-01