Доброго дня! Нам потрібен звіт, аналогічний "Руху по клієнтам:деталізація по товару" але додатково мають бути дані з полів: ціна №3, додаткове поле 1, додаткове поле 2
в режимі редагування, далі sql запит, далі під SELECT вписував t.dopoln1 але помилку видає помилку
sql error code - 206
сolumn unknown t.dopoln1
допоможіть будьласка реалізувати звіт з описаними вище полями
По аналогии как здесь:
http://www.softbalance.com.ua/forum/index.php?topic=408.0 (http://www.softbalance.com.ua/forum/index.php?topic=408.0)
только ваши поля это
tn.cena3
tn.dopoln1
tn.dopoln2
Дуже дякую, з цим розібрався!!
Питання наступне...
Якшо для різних товарів ціна вказана в різній валюті, напр:
Товар №1 Роздрібна ціна 10 грн
Товар №2 Роздрібна ціна 10 $
як в дизайнері зробити так, щоб колонка з обома цінами була вказана в національній валюті, а саме
Товар №1 Роздрібна ціна 10 грн
Товар №2 Роздрібна ціна 80 грн (це при умові що курс 8)
якшо я правильно зрозумів це за допомогою функції ToNacValuta, але не можу розібратись як це записати
Посмотрите как это сделано в отчете Прайс-листы, а ToNacValuta используется в приходной накладной при печати ценников.
Добрый день. Ув. администрация сайта с кем можно обсудить разработку ПО.
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,
c.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 c,
vnakl_ vn_
WHERE
vn.is_move = 1 AND
vn.date_dok >= '#дата_с#' AND
vn.date_dok <= '#дата_по#' AND
vn.client_id = c.num AND
vn.num = vn_.pid AND
vn_.sklad_id = #склад_№#
par.name = 'NationalValutaId' AND
c.num = par.param AND
t.tip = gr.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
Помилка:
DataM. QueryRep. SelectQuery:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown -line 108, char 3.
Par.
Цитата: gvvdoze від Березень 14, 2011, 12:10:10
Добрый день. Ув. администрация сайта с кем можно обсудить разработку ПО.
С поддержкой программы. Т.е. на емаил.
Цитата: zener від Березень 14, 2011, 16:56:32
vn_.sklad_id = #склад_№#
par.name = 'NationalValutaId' AND
пропущен AND
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,
c.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 c,
vnakl_ vn_
WHERE
vn.is_move = 1 AND
vn.date_dok >= '#дата_с#' AND
vn.date_dok <= '#дата_по#' AND
vn.client_id = c.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
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
DataM. QueryRep. SelectQuery:
Underfined name.
Dynamic SQL Error.
SQL error code = -204.
Token unknown -line 108, char 3.
Alias C conflict with an alias in the same statement.
Шановний, Дмитро! Вибачте за мою необізнаність в цій справі.
DataM. QueryRep. SelectQuery:
Underfined name.
Dynamic SQL Error.
SQL error code = -204.
Alias C conflict with an alias in the same statement.
Цитата: zener від Березень 15, 2011, 22:16:03
DataM. QueryRep. SelectQuery:
Underfined name.
Dynamic SQL Error.
SQL error code = -204.
Alias C conflict with an alias in the same statement.
2 одинкаовых альяса в куске кода:
currency c,
params par,
vnakl vn,
client c,
нельзя две "c" надо например так
currency c,
params par,
vnakl vn,
client cln,
соответственно тогда надо менять
c.fio, на cln.fio,
vn.client_id = c.num AND на vn.client_id = cln.num AND
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
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
Вже все добре звіт формується, всі дані які мене цікавлять там є, лише кожну позицію воно повторює ту кількість разів скільки існує позицій товару на складі, або в групі якщо поставити фільтр по групі
не проверял скрипт но на первый взгляд нет привязки накладной к товарам, т.е. надо в условие WHERE добавить
vn.tovar_id = t.num AND