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

Прибуток по складу (різниця цін) + додаткові поля

Автор zener, Березень 05, 2012, 00:19:23

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

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

zener

Потрібно в звіті Прибуток по складу (різниця цін) в дизайнер шаблонів додати додаткові поля товару, підкажіть яким чином...

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

TheOK

Якщо ви говорите про додаткові поля для товару, то найпростіший спосіб додати ці поля (у них назви якісь заморочені...) це видалити вирази tn. ... , із тієї частини запиту, яку навожу нижче
------------
SELECT 
  gr.group_name,       
  tn.name,     
  tn.kod,     
  tn.ed_izm,     
  AVG(CASE 
....
Тобто видалити:  tn.name,  tn.kod,  tn.ed_izm,      , а замість них додати поле tn.*.
В наслідок цього зявляться ще деякі поля (які вам не потрібні), але їх можна ігнорувати.
Якщо щось буде не так, пишіть, щось придумаємо
Работа в УкрСклад(особенности и советы): [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]

zener

Ви правильно мене зрозуміли, додаткові поля товарів, я навіть в подібному звіті додавав 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

admin

нельзя просто добавлять tn.*, там ниже идет группировка и перечисляются поля по котором она идет
GROUP BY     
  1,2,3,4 
т.е. по этим четырем
  gr.group_name,       
  tn.name,     
  tn.kod,     
  tn.ed_izm,

надо добавить конкретное поле и соответственно это указать в группировке

zener

а як додати усі додаткові поля?? допоможіть будьласка...

zener

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

дякую, здається розібрався вже

zener

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, відображались в основній валюті, в доларах???

TheOK

#7
cena_cur_id - данное поле отвечает за тип валюты  на складе (таблица tovar_name ,  здесь в этом отчете обозначена как tn)
curr_type - данное поле отвечает за тип валюты в документах (таблица tovar_move ,  здесь tm)
так же в документах есть поля для обозначения цены в валюте (их там около 7-8)
Это на случай, если вы сами разберетесь.

Теперь по вашему вопросу. Уточните пожалуйста, что вы имели ввиду? Вы хотите, чтобы эти поля отображались именно в долларах, т.к. это основная валюта на вашей фирме?
P.S.если это так, думаю, здесь admin, возможно, подскажет в каком направлении двигаться, т.к. я никогда не менял основную валюту для фирмы и не знаю, что при этом изменяется...
Работа в УкрСклад(особенности и советы): [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]

zener

так, хотів би шоб відображались саме в доларах...

admin

Можно посмотреть как это сделано в отчете прайс-листы

zener

Рух по клієнтам: деталізація по товару + ЗП

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

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

допоможіть його виправити, дуже потібен..

TheOK

#11
Запускал у себя ваш отчет. У меня при выборке данных кол-вом в 3 000 (в тестовой базе данных всего столько) работает довольно шустро (1.9 сек).
Подозреваю, что у вас сложная структура склада.
Если вам не нужно поле gr.group_name, советую удалить упоминания о "таблице" gr из выражения, немножко ускорит работу (на моих смешных данных это увеличило скорость более чем в 2 раза (0.9 сек), у вас может быть на много круче, а может и не быть) ).
Если у вас сложная структура склада (много подгрупп в группах), то данная мера может значительно ускорить работу.

gr.group_name - отображает структуру склада группа1/подргуппа1/под подгруппа 1 ....
Работа в УкрСклад(особенности и советы): [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]

Petryk

Доброго дня
хочу до звіту по прибутку прикрутити поле к-сть на складі, підскажіть як це зробити????

admin

#13
Цитата: 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

===8<===========Окончание оригинала теста письма========

Petryk

#14
Прошу вибачення за дубль повідомлення, бо на підтримці довго не відповідали, і я вирішив написати на форум

Зробив все як ви мені написали, але видало помилку