parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Привожу код

sergei v.2 12.02.2006 11:43

Используются таблицы:
tovar (хранится перечень товаров и их свойств - 467 записей)
sostav_zakaz(хрянятся составы заказов поставки клиентам - 36083 записи)
sklad_sostav_zakaz (хрянятся составы заказов поставки на склад 840 записей)
sklad_zakazy (заказы поставки на склад sklad_zakazy.zakaz_status = 2 - означает, что товар поступил на склад - 466 записей)

/admin/_test/1.html
@USE
/classes/sklad_zakaz.p

@main[]
^connect[$connect_string]{
^test1[]
}
^rusage[ex1]

@test1[]
#$tab_t[^table::sql{select id from tovar where id=83}]

$tabX[^get_all[$tab_t]]
записей: ^tabX.count[]
<table border=1>
<tr valign=top>
<td>ID товара</td>
<td>ЗАКУПЛЕНО ВСЕГО</td>
<td>ПРОДАНО ВСЕГО</td>

<td>В РЕЗЕРВЕ</td>
<td>НА ВЫЕЗДЕ</td>
<td>Свободный отстаток</td>

<td>ЗАКАЗАНО ВСЕГО</td>
<td>ТРЕБУЕТСЯ ЗАРЕЗЕРВИРОВАТЬ</td>

</tr>	

^tabX.menu{
<tr^if($tabX.countS<0){ bgcolor=#00ffff}>
<td>$tabX.id</td>
<td>$tabX.countK</td>
<td>$tabX.countF</td>

<td>$tabX.countR</td>
<td>$tabX.countV</td>
<td>$tabX.countS</td>

<td>$tabX.countZ</td>
<td>$tabX.countT</td>

</tr>
}
</table>
/classes/sklad_zakaz.p
@rusage[comment][v;now;prefix;message;line;usec] 
$v[$status:rusage] 
$now[^date::now[]] 
$usec(^v.tv_usec.double[]) 
$prefix[[^now.sql-string[].^usec.format[%06.0f]] $env:REMOTE_ADDR: $comment] 
$message[$v.utime $v.stime $request:uri] 
$line[$prefix $message ^#0A] 
^line.save[append;/rusage.log] 
$result[] 



###############################
@get_zakupleno[tab]
	$result[^table::sql{
	SELECT idtovar as id, sum(count_tovar) as countK
	FROM sklad_sostav_zakaz
	WHERE idzakaz in (select id from sklad_zakazy where zakaz_status = 2)
	^if(def $tab){ and idtovar in (^tab.menu{$tab.id}[,])}
	GROUP by idtovar
	}]

	
###############################
@get_all[tab][tab_zakupleno;tab_prodano]

$tab_tovar[^table::sql{SELECT id FROM tovar
WHERE type_tovar=0 ^if(def $tab){and id in (^tab.menu{$tab.id}[,])}
}]

$tab_zakupleno[^get_zakupleno[$tab]]


$tab_zakazano[^table::sql{
	SELECT idtovar as id,
	sum(count_tovar) as countZ,
	sum(count_tovar_plus) as countR,
	sum(count_tovar_vyezd) as countV,
	sum(count_tovar_finish) as countF,
	sum(count_tovar)-(sum(count_tovar_plus)+ sum(count_tovar_vyezd) + sum(count_tovar_finish)) as countT
	
	FROM sostav_zakaz
	WHERE count_tovar>0
	^if(def $tab){ and idtovar in (^tab.menu{$tab.id}[,])}
	GROUP by idtovar
	}]

$hash_zakupleno[^tab_zakupleno.hash[id]]
$hash_zakazano[^tab_zakazano.hash[id]]

$tab_res[^table::create{id	countK	countZ	countR	countV	countF	countT	countS}]

^tab_tovar.menu{
	$K[$hash_zakupleno.[$tab_tovar.id].countK]
	$Z[$hash_zakazano.[$tab_tovar.id].countZ]

	^if($Z){
	$R[$hash_zakazano.[$tab_tovar.id].countR]
	$V[$hash_zakazano.[$tab_tovar.id].countV]
	$F[$hash_zakazano.[$tab_tovar.id].countF]
	$T[$hash_zakazano.[$tab_tovar.id].countT]
	$S(^K.int(0)-($F+$R+$V))
	
	^tab_res.append{$tab_tovar.id	^K.int(0)	$Z	$R	$V	$F	$T	$S} 
	}{
	^tab_res.append{$tab_tovar.id	^K.int(0)	0	0	0	0	0	^K.int(0)} 
	}

}
	
	$result[$tab_res]
Если честно, то я пока не сообразил как можно сделать это же на SQL "в две строчки" :) и в десять :))