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

Наши программы => УкрСклад => Тема розпочата: zener від Березень 05, 2012, 00:19:23

Назва: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: zener від Березень 05, 2012, 00:19:23
Потрібно в звіті Прибуток по складу (різниця цін) в дизайнер шаблонів додати додаткові поля товару, підкажіть яким чином...

SELECT 
  gr.group_name,       
  tn.name,     
  tn.kod,     
  tn.ed_izm,     
  AVG(CASE     
    WHEN (c.how_to_calc IN (1,6)) THEN tn.cena/c.kurs 
    WHEN (c.how_to_calc = 0) THEN tn.cena*c.kurs       
  END) AS cena,     
  SUM(CASE       
    WHEN (tm.doc_type_id = 8) THEN tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_in,     
  AVG(CASE     
    WHEN (tm.doc_type_id = 8) THEN tm.to_cena       
    ELSE NULL       
  END) AS cena_in,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_out,     
  AVG(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_cena 
    WHEN (tm.doc_type_id = 12) THEN NULL       
    ELSE NULL       
  END) AS cena_out,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_suma 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_suma   
    ELSE NULL       
  END) AS suma_out     
FROM       
  tovar_move tm,       
  tovar_name tn       
    LEFT JOIN currency c ON tn.cena_curr_id = c.num,       
  print_view_sklad(0,#склад_№#) gr 
WHERE       
  ( 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 1 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 6 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 8 AND tm.to_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 12 AND tm.to_sklad_id = #склад_№#) 
  ) AND 
  tm.is_usluga = 0 AND 
  tm.tovar_id = tn.num AND       
  tn.tip = gr.num AND       
  tm.mdate >= '#дата_с#' AND 
  tm.mdate <= '#дата_по#' 
GROUP BY     
  1,2,3,4     
HAVING
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) IS NOT NULL
ORDER BY       
  1,2,3,4
Назва: Re:Прибуток по складу (різниця цін) + додатковo
Відправлено: TheOK від Березень 05, 2012, 16:48:57
Якщо ви говорите про додаткові поля для товару, то найпростіший спосіб додати ці поля (у них назви якісь заморочені...) це видалити вирази tn. ... , із тієї частини запиту, яку навожу нижче
------------
SELECT 
  gr.group_name,       
  tn.name,     
  tn.kod,     
  tn.ed_izm,     
  AVG(CASE 
....
Тобто видалити:  tn.name,  tn.kod,  tn.ed_izm,      , а замість них додати поле tn.*.
В наслідок цього зявляться ще деякі поля (які вам не потрібні), але їх можна ігнорувати.
Якщо щось буде не так, пишіть, щось придумаємо
Назва: Re:Прибуток по складу (різниця цін) + додаткові поля
Відправлено: zener від Березень 05, 2012, 17:29:29
Ви правильно мене зрозуміли, додаткові поля товарів, я навіть в подібному звіті додавав tn.*, і все працювало, а тут чомусь не працює, видає помилку:
DataM.QueryRep.SelectQuery
Column does not belong to referenced table.
Dynamic SQL error.
SQL error code =-206
TN.*.
At line 3, column 1.


SELECT 
  gr.group_name, 
tn.*,
  AVG(CASE     
    WHEN (c.how_to_calc IN (1,6)) THEN tn.cena/c.kurs 
    WHEN (c.how_to_calc = 0) THEN tn.cena*c.kurs       
  END) AS cena,     
  SUM(CASE       
    WHEN (tm.doc_type_id = 8) THEN tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_in,     
  AVG(CASE     
    WHEN (tm.doc_type_id = 8) THEN tm.to_cena       
    ELSE NULL       
  END) AS cena_in,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_out,     
  AVG(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_cena 
    WHEN (tm.doc_type_id = 12) THEN NULL       
    ELSE NULL       
  END) AS cena_out,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_suma 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_suma   
    ELSE NULL       
  END) AS suma_out     
FROM       
  tovar_move tm,       
  tovar_name tn       
    LEFT JOIN currency c ON tn.cena_curr_id = c.num,       
  print_view_sklad(0,#склад_№#) gr 
WHERE       
  ( 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 1 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 6 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 8 AND tm.to_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 12 AND tm.to_sklad_id = #склад_№#) 
  ) AND 
  tm.is_usluga = 0 AND 
  tm.tovar_id = tn.num AND       
  tn.tip = gr.num AND       
  tm.mdate >= '#дата_с#' AND 
  tm.mdate <= '#дата_по#' 
GROUP BY     
  1,2,3,4     
HAVING
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) IS NOT NULL
ORDER BY       
  1,2,3,4
Назва: Re:Прибуток по складу (різниця цін) + додаткові поля
Відправлено: admin від Березень 05, 2012, 18:10:37
нельзя просто добавлять tn.*, там ниже идет группировка и перечисляются поля по котором она идет
GROUP BY     
  1,2,3,4 
т.е. по этим четырем
  gr.group_name,       
  tn.name,     
  tn.kod,     
  tn.ed_izm,

надо добавить конкретное поле и соответственно это указать в группировке
Назва: Re:Прибуток по складу (різниця цін) + додаткові поля
Відправлено: zener від Березень 05, 2012, 18:18:56
а як додати усі додаткові поля?? допоможіть будьласка...
Назва: Re:Прибуток по складу (різниця цін) + додаткові поля
Відправлено: zener від Березень 05, 2012, 18:43:30
SELECT 
  gr.group_name,       
  tn.name,     
  tn.kod,     
tn.dopoln2,
tn.cena_1,
tn.dopoln3,
  tn.ed_izm,     
  AVG(CASE     
    WHEN (c.how_to_calc IN (1,6)) THEN tn.cena/c.kurs 
    WHEN (c.how_to_calc = 0) THEN tn.cena*c.kurs       
  END) AS cena,     
  SUM(CASE       
    WHEN (tm.doc_type_id = 8) THEN tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_in,     
  AVG(CASE     
    WHEN (tm.doc_type_id = 8) THEN tm.to_cena       
    ELSE NULL       
  END) AS cena_in,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_out,     
  AVG(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_cena 
    WHEN (tm.doc_type_id = 12) THEN NULL       
    ELSE NULL       
  END) AS cena_out,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_suma 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_suma   
    ELSE NULL       
  END) AS suma_out     
FROM       
  tovar_move tm,       
  tovar_name tn       
    LEFT JOIN currency c ON tn.cena_curr_id = c.num,       
  print_view_sklad(0,#склад_№#) gr 
WHERE       
  ( 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 1 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 6 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 8 AND tm.to_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 12 AND tm.to_sklad_id = #склад_№#) 
  ) AND 
  tm.is_usluga = 0 AND 
  tm.tovar_id = tn.num AND       
  tn.tip = gr.num AND       
  tm.mdate >= '#дата_с#' AND 
  tm.mdate <= '#дата_по#' 
GROUP BY     
  1,2,3,4,5,6,7     
HAVING
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) IS NOT NULL
ORDER BY       
  1,2,3,4

дякую, здається розібрався вже
Назва: Re:Прибуток по складу (різниця цін) + додаткові поля
Відправлено: zener від Березень 05, 2012, 20:49:49
SELECT 
  gr.group_name,       
  tn.name,     
  tn.kod,     
tn.cena_1,
tn.cena_R,
tn.dopoln2,
tn.dopoln3,
  tn.ed_izm,     
  AVG(CASE     
    WHEN (c.how_to_calc IN (1,6)) THEN tn.cena/c.kurs 
    WHEN (c.how_to_calc = 0) THEN tn.cena*c.kurs       
  END) AS cena,     
  SUM(CASE       
    WHEN (tm.doc_type_id = 8) THEN tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_in,     
  AVG(CASE     
    WHEN (tm.doc_type_id = 8) THEN tm.to_cena       
    ELSE NULL       
  END) AS cena_in,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_out,     
  AVG(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_cena 
    WHEN (tm.doc_type_id = 12) THEN NULL       
    ELSE NULL       
  END) AS cena_out,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_suma 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_suma   
    ELSE NULL       
  END) AS suma_out     
FROM       
  tovar_move tm,       
  tovar_name tn       
    LEFT JOIN currency c ON tn.cena_curr_id = c.num,       
  print_view_sklad(0,#склад_№#) gr 
WHERE       
  ( 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 1 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 6 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 8 AND tm.to_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 12 AND tm.to_sklad_id = #склад_№#) 
  ) AND 
  tm.is_usluga = 0 AND 
  tm.tovar_id = tn.num AND       
  tn.tip = gr.num AND       
  tm.mdate >= '#дата_с#' AND 
  tm.mdate <= '#дата_по#' 
GROUP BY     
  1,2,3,4,5,6,7,8     
HAVING
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) IS NOT NULL
ORDER BY       
  1,2,3,4

а як зробити так що, tn.cena_1, tn.cena_R, відображались в основній валюті, в доларах???
Назва: Re:Прибуток по складу (різниця цін) + додатковo
Відправлено: TheOK від Березень 06, 2012, 10:58:05
cena_cur_id - данное поле отвечает за тип валюты  на складе (таблица tovar_name ,  здесь в этом отчете обозначена как tn)
curr_type - данное поле отвечает за тип валюты в документах (таблица tovar_move ,  здесь tm)
так же в документах есть поля для обозначения цены в валюте (их там около 7-8)
Это на случай, если вы сами разберетесь.

Теперь по вашему вопросу. Уточните пожалуйста, что вы имели ввиду? Вы хотите, чтобы эти поля отображались именно в долларах, т.к. это основная валюта на вашей фирме?
P.S.если это так, думаю, здесь admin, возможно, подскажет в каком направлении двигаться, т.к. я никогда не менял основную валюту для фирмы и не знаю, что при этом изменяется...
Назва: Re:Прибуток по складу (різниця цін) + додаткові поля
Відправлено: zener від Березень 06, 2012, 14:06:51
так, хотів би шоб відображались саме в доларах...
Назва: Re:Прибуток по складу (різниця цін) + додаткові поля
Відправлено: admin від Березень 06, 2012, 14:17:01
Можно посмотреть как это сделано в отчете прайс-листы
Назва: Re:Прибуток по складу (різниця цін) + додаткові поля
Відправлено: zener від Березень 23, 2012, 21:11:03
Рух по клієнтам: деталізація по товару + ЗП

SELECT
  tz.kolvo,
  t.*,
  CASE
    WHEN (t.cena_curr_id = par.param) THEN t.cena
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 1) THEN t.cena/c.kurs/ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 1) THEN t.cena*c.kurs/ct_in.kurs   
    WHEN (c.how_to_calc = 0 AND ct_in.how_to_calc = 0) THEN t.cena/c.kurs*ct_in.kurs
    WHEN (c.how_to_calc = 1 AND ct_in.how_to_calc = 0) THEN t.cena*c.kurs*ct_in.kurs   
  END AS cena_national_valuta,
  CASE
    WHEN (t.cena_out_curr_id = par.param) THEN t.cena_r
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 1) THEN t.cena_r/c.kurs/ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 1) THEN t.cena_r*c.kurs/ct_out.kurs
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 0) THEN t.cena_r/c.kurs*ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 0) THEN t.cena_r*c.kurs*ct_out.kurs
  END AS cena_r_national_valuta,
  CASE
    WHEN (t.cena_out_curr_id = par.param) THEN t.cena_o
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 1) THEN t.cena_o/c.kurs/ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 1) THEN t.cena_o*c.kurs/ct_out.kurs   
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 0) THEN t.cena_o/c.kurs*ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 0) THEN t.cena_o*c.kurs*ct_out.kurs   
  END AS cena_o_national_valuta,
  CASE
    WHEN (t.cena_out_curr_id = par.param) THEN t.cena_1
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 1) THEN t.cena_1/c.kurs/ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 1) THEN t.cena_1*c.kurs/ct_out.kurs   
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 0) THEN t.cena_1/c.kurs*ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 0) THEN t.cena_1*c.kurs*ct_out.kurs   
  END AS cena_1_national_valuta,
  CASE
    WHEN (t.cena_out_curr_id = par.param) THEN t.cena_2
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 1) THEN t.cena_2/c.kurs/ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 1) THEN t.cena_2*c.kurs/ct_out.kurs
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 0) THEN t.cena_2/c.kurs*ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 0) THEN t.cena_2*c.kurs*ct_out.kurs
  END AS cena_2_national_valuta,
  CASE
    WHEN (t.cena_out_curr_id = par.param) THEN t.cena_3
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 1) THEN t.cena_3/c.kurs/ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 1) THEN t.cena_3*c.kurs/ct_out.kurs
    WHEN (c.how_to_calc = 0 AND ct_out.how_to_calc = 0) THEN t.cena_3/c.kurs*ct_out.kurs
    WHEN (c.how_to_calc = 1 AND ct_out.how_to_calc = 0) THEN t.cena_3*c.kurs*ct_out.kurs
  END AS cena_3_national_valuta,
  CASE     
    WHEN (t.cena_curr_id = 0) THEN t.cena
    WHEN (ct_in.how_to_calc = 1) THEN t.cena/ct_in.kurs
    WHEN (ct_in.how_to_calc = 0) THEN t.cena*ct_in.kurs
  END AS cena_main_valuta,
  CASE     
    WHEN (t.cena_curr_id = 0) THEN t.cena_r
    WHEN (ct_out.how_to_calc = 1) THEN t.cena_r/ct_out.kurs
    WHEN (ct_out.how_to_calc = 0) THEN t.cena_r*ct_out.kurs
  END AS cena_r_main_valuta,
  CASE     
    WHEN (t.cena_curr_id = 0) THEN t.cena_o
    WHEN (ct_out.how_to_calc = 1) THEN t.cena_o/ct_out.kurs
    WHEN (ct_out.how_to_calc = 0) THEN t.cena_o*ct_out.kurs
  END AS cena_o_main_valuta,
  CASE     
    WHEN (t.cena_curr_id = 0) THEN t.cena_1
    WHEN (ct_out.how_to_calc = 1) THEN t.cena_1/ct_out.kurs
    WHEN (ct_out.how_to_calc = 0) THEN t.cena_1*ct_out.kurs
  END AS cena_1_main_valuta,
  CASE     
    WHEN (t.cena_curr_id = 0) THEN t.cena_2
    WHEN (ct_out.how_to_calc = 1) THEN t.cena_2/ct_out.kurs
    WHEN (ct_out.how_to_calc = 0) THEN t.cena_2*ct_out.kurs
  END AS cena_2_main_valuta,
  CASE     
    WHEN (t.cena_curr_id = 0) THEN t.cena_3
    WHEN (ct_out.how_to_calc = 1) THEN t.cena_3/ct_out.kurs
    WHEN (ct_out.how_to_calc = 0) THEN t.cena_3*ct_out.kurs
  END AS cena_3_main_valuta,
  gr.group_name,
  cln.fio,
  vn.date_dok,   
  vn.nu,   
  vn_.tov_name,   
  vn_.tov_ed,   
  vn_.tov_cena,   
  vn_.tov_kolvo,   
  vn_.tov_suma,   
  vn.sklad_id,   
  vn.cena,   
  vn.cena_znig,
  vn.znig_type,
  vn.num
FROM   
tovar_name t
    LEFT JOIN currency ct_in ON t.cena_curr_id = ct_in.num
    LEFT JOIN currency ct_out ON t.cena_out_curr_id = ct_out.num,
  print_view_sklad(#товар_группа_№#,#склад_№#) gr,
  tovar_zal tz,   
  currency c,   
  params par,
  vnakl vn,
  client cln,   
  vnakl_ vn_
WHERE   
  vn.is_move = 1 AND
  vn.date_dok >= '#дата_с#' AND
  vn.date_dok <= '#дата_по#' AND
  vn.client_id = cln.num AND   
  vn.num = vn_.pid AND
  vn_.sklad_id = #склад_№#    AND   
  par.name = 'NationalValutaId' AND   
  c.num = par.param AND   
  t.tip = gr.num AND   
  vn_.tovar_id = t.num AND
  t.visible = 1 AND   
  t.is_price_invisible = 0 AND
  t.num=tz.tovar_id AND   
  tz.sklad_id=#склад_№#
ORDER BY   
  vn.client,   
  vn.date_dok,   
  vn.num,
  gr.group_name,   
  t.name

ось так все працює, єдине що звіт формується дуже довго, підозрюю виконує якісь непотрібні підрахунки, так як складений із двох... Рух по клієнтам: деталізація по товару + Прайс

допоможіть його виправити, дуже потібен..
Назва: Re:Прибуток по складу (різниця цін) + додатковo
Відправлено: TheOK від Березень 23, 2012, 23:40:00
Запускал у себя ваш отчет. У меня при выборке данных кол-вом в 3 000 (в тестовой базе данных всего столько) работает довольно шустро (1.9 сек).
Подозреваю, что у вас сложная структура склада.
Если вам не нужно поле gr.group_name, советую удалить упоминания о "таблице" gr из выражения, немножко ускорит работу (на моих смешных данных это увеличило скорость более чем в 2 раза (0.9 сек), у вас может быть на много круче, а может и не быть) ).
Если у вас сложная структура склада (много подгрупп в группах), то данная мера может значительно ускорить работу.

gr.group_name - отображает структуру склада группа1/подргуппа1/под подгруппа 1 ....
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: Petryk від Січень 30, 2014, 11:48:09
Доброго дня
хочу до звіту по прибутку прикрутити поле к-сть на складі, підскажіть як це зробити????
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: admin від Січень 31, 2014, 17:17:33
Цитата: Petryk від Січень 30, 2014, 11:48:09
Доброго дня
хочу до звіту по прибутку прикрутити поле к-сть на складі, підскажіть як це зробити????

Не дублируйте сообщения на форум и на поддержку. Т.к. это происходит часто, с этого момента будем минусовать или давать бан на денек два.

Это перенаправленное письмо:
От: Служба поддержки
Кому: Петро
Дата: 31 січня 2014 р., 17:17:57
Тема: Звіт по прибутку

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

29.01.2014 в 10:47, Вы писали:

>         Добрий день!
> Допоможіть в звіт по прибутку(середня ціна) добавити поле залишок товару на складі. Звіт прикріпляю
>  Наперед вдячний


Текущий остаток, тот что в справочнике товаров.

Как делать отчет на основе другого?
1. Заходим в меню "Отчеты" и открываем нужный нам отчет.
2. Потом нажимаем на кнопку "В режим редактирования", и раскрываем
окно на максимум (так будет удобней)
3. В открывшемся окне в полях "Название по-украински" и "Название
по-русски", меняем или дописываем название для будущего отчета.
4. Далее меняем или правим в окне SQL запрос текст SQL запроса к базе
данных.
5. Если надо включаем в "Выбор нужных параметров для отчета" галочки
что надо выбирать перед формированием отчета, а что нет.
6. Нажимаем кнопку "Сохранить как новый", и закрываем окно.
7. Далее заходим обратно в меню Отчеты : Отчеты пользователей и ищем
имя отчета которое вы задали в п.3 Открываем его и запускаем, если
надо правим печатную форму.

в п.4 меняем текст на:

SELECT 
  gr.group_name,       
  tn.name,     
  tn.kod,     
  tn.ed_izm,
  tz.kolvo,
  AVG(CASE     
    WHEN (c.how_to_calc IN (1,6)) THEN tn.cena/c.kurs 
    WHEN (c.how_to_calc = 0) THEN tn.cena*c.kurs       
  END) AS cena,     
  SUM(CASE       
    WHEN (tm.doc_type_id = 8) THEN tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_in,     
  AVG(CASE     
    WHEN (tm.doc_type_id = 8) THEN tm.to_cena       
    ELSE NULL       
  END) AS cena_in,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) AS kolvo_out,     
  AVG(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_cena 
    WHEN (tm.doc_type_id = 12) THEN NULL       
    ELSE NULL       
  END) AS cena_out,     
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_suma 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_suma   
    ELSE NULL       
  END) AS suma_out     
FROM       
  tovar_move tm,       
  tovar_name tn
    LEFT JOIN currency c ON tn.cena_curr_id = c.num,       
  tovar_zal tz,
  print_view_sklad(0,#склад_№#) gr 
WHERE       
  ( 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 1 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.from_firma_id = #активная_фирма_№# AND tm.doc_type_id = 6 AND tm.from_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 8 AND tm.to_sklad_id = #склад_№#) OR 
    (tm.to_firma_id = #активная_фирма_№# AND tm.doc_type_id = 12 AND tm.to_sklad_id = #склад_№#) 
  ) AND 
  tm.is_usluga = 0 AND 
  tm.tovar_id = tn.num AND       
  tz.sklad_id = #склад_№# AND
  tn.num = tz.tovar_id AND
  tn.tip = gr.num AND       
  tm.mdate >= '#дата_с#' AND 
  tm.mdate <= '#дата_по#' 
GROUP BY     
  1,2,3,4,5
HAVING
  SUM(CASE     
    WHEN (tm.doc_type_id IN (1,6)) THEN tm.to_kolvo 
    WHEN (tm.doc_type_id = 12) THEN (-1)*tm.to_kolvo       
    ELSE NULL       
  END) IS NOT NULL
ORDER BY       
  1,2,3,4



--
С уважением, Служба поддержки пользователей
http://www.softbalance.com.ua (http://www.softbalance.com.ua)

===8<===========Окончание оригинала теста письма========
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: Petryk від Лютий 01, 2014, 18:53:37
Прошу вибачення за дубль повідомлення, бо на підтримці довго не відповідали, і я вирішив написати на форум

Зробив все як ви мені написали, але видало помилку
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: admin від Лютий 01, 2014, 20:01:53
Цитата: Petryk від Лютий 01, 2014, 18:53:37
Прошу вибачення за дубль повідомлення, бо на підтримці довго не відповідали, і я вирішив написати на форум

Долго это сколько? День? :)

Цитата: Petryk від Лютий 01, 2014, 18:53:37
Зробив все як ви мені написали, але видало помилку

тут была пропущена запятая
tovar_zal tz,
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: Petryk від Лютий 02, 2014, 14:40:51
Цитата: admin від Лютий 01, 2014, 20:01:53
Цитата: Petryk від Лютий 01, 2014, 18:53:37
Прошу вибачення за дубль повідомлення, бо на підтримці довго не відповідали, і я вирішив написати на форум

Долго это сколько? День? :)

Цитата: Petryk від Лютий 01, 2014, 18:53:37
Зробив все як ви мені написали, але видало помилку

тут была пропущена запятая
tovar_zal tz,
А як в звіт добавити к-сть на складі?
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: admin від Лютий 03, 2014, 09:08:27
Цитата: Petryk від Лютий 02, 2014, 14:40:51
А як в звіт добавити к-сть на складі?

[DataRep."KOLVO"]
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: Petryk від Лютий 03, 2014, 13:03:49
Цитата: admin від Лютий 03, 2014, 09:08:27
Цитата: Petryk від Лютий 02, 2014, 14:40:51
А як в звіт добавити к-сть на складі?

[DataRep."KOLVO"]
я добавив, але щось не те показує, залишок зовсім не такий як показує в заданому звіті
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: admin від Лютий 03, 2014, 14:05:40
Цитата: Petryk від Лютий 03, 2014, 13:03:49
я добавив, але щось не те показує, залишок зовсім не такий як показує в заданому звіті

Остаток показывается не из отчета, а из справочника, как и писали в письме:

Цитата: admin від Січень 31, 2014, 17:17:33
Текущий остаток, тот что в справочнике товаров.
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: Petryk від Лютий 03, 2014, 15:04:30
Цитата: admin від Лютий 03, 2014, 14:05:40
Цитата: Petryk від Лютий 03, 2014, 13:03:49
я добавив, але щось не те показує, залишок зовсім не такий як показує в заданому звіті

Остаток показывается не из отчета, а из справочника, как и писали в письме:

Цитата: admin від Січень 31, 2014, 17:17:33
Текущий остаток, тот что в справочнике товаров.
все правильно в довіднику товарів к-сть зовсім не така як тягне в звіті!!!!
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: admin від Лютий 03, 2014, 15:21:36
  tm.is_usluga = 0 AND 
  tm.tovar_id = tn.num AND       
  tz.sklad_id = #склад_№# AND
  tn.num = tz.tovar_id AND
  tn.tip = gr.num AND       
  tm.mdate >= '#дата_с#' AND 
  tm.mdate <= '#дата_по#
Назва: Re: Прибуток по складу (різниця цін) + додаткові поля
Відправлено: Petryk від Лютий 03, 2014, 19:26:59
Цитата: admin від Лютий 03, 2014, 15:21:36
  tm.is_usluga = 0 AND 
  tm.tovar_id = tn.num AND       
  tz.sklad_id = #склад_№# AND
  tn.num = tz.tovar_id AND
  tn.tip = gr.num AND       
  tm.mdate >= '#дата_с#' AND 
  tm.mdate <= '#дата_по#
Дякую все запрацювало