073 deep debug
This commit is contained in:
+2
-2
@@ -27,7 +27,7 @@
|
||||
|
||||
<cfset this.datasources["inmem"] = {
|
||||
class: "org.hsqldb.jdbcDriver",
|
||||
// Внимание наjdbc:hsqldb:mem:
|
||||
// Внимание на jdbc:hsqldb:mem:
|
||||
connectionString: "jdbc:hsqldb:mem:lucee_mem;shutdown=false",
|
||||
username: "sa",
|
||||
password: "",
|
||||
@@ -87,7 +87,7 @@
|
||||
<!--- global settings --->
|
||||
|
||||
<cfset request.RECORDS_PER_PAGE=500/>
|
||||
<cfset request.APP_VERSION="0.00.072"/>
|
||||
<cfset request.APP_VERSION="0.00.073"/>
|
||||
<cfset request.STAND=getStand()/>
|
||||
|
||||
<cflock scope="application" type="readonly" timeout=3>
|
||||
|
||||
+2
-1
@@ -1,5 +1,5 @@
|
||||
component {
|
||||
|
||||
/*0.02 timestamp support*/
|
||||
/**
|
||||
* HSQL 1.8
|
||||
* Принимает Lucee Query, создает в HSQL временную таблицу и льет в нее данные
|
||||
@@ -69,6 +69,7 @@ component {
|
||||
case "DOUBLE": case "FLOAT": case "REAL": return "DOUBLE";
|
||||
case "BOOLEAN": case "BIT": return "BIT";
|
||||
case "DECIMAL": case "NUMERIC": return "DECIMAL(20,6)";
|
||||
case "TIMESTAMP": case "DATE": case "TIME": return "TIMESTAMP";
|
||||
default: return "LONGVARCHAR"; // И тут тоже
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,19 +44,21 @@
|
||||
<cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
||||
</cfif> --->
|
||||
<!--- нужны компании, которые есть в пейге --->
|
||||
<!--- <cfset qFreeTier=queryNew("code,free_tier","CF_SQL_VARCHAR,CF_SQL_NUMERIC",[['paas.s3.ceph.vol-m',1],['paas.s3.ceph.get-m',10],['paas.s3.ceph.put-m',1],['paas.s3.ceph.trf-m',100]])/> --->
|
||||
|
||||
<cfquery name="qSpec" datasource="dwh" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
|
||||
select k.id_klienta as wz, k.__id::text as contragent_uid,
|
||||
p.code,
|
||||
SUBSTRING(p.code FROM 1 FOR LENGTH(p.code) - 2) as service_code,
|
||||
SUBSTRING(p.code FROM 1 FOR LENGTH(p.code) - 2) as sku_code,
|
||||
p.price, p.discount, k.__name as contragent, a.__name as contract, a.__id::text as contract_uid, d.__name as deal, d.__id::text as deal_uid, siv.abstractive_service as abstract_service, siv.modifier, siv.user_description, siv.hash as line_key
|
||||
,siv.date_nop as dt_from, siv.date_end as dt_to, siv.discount as service_discount, siv.cnt as service_quantity
|
||||
,siv.date_nop as serviceStart, siv.date_end as serviceEnd, siv.discount as service_discount, siv.cnt as service_quantity
|
||||
/*,p.__name as line_key*/, p.ed_izm, p.name as component, p.type, p.cnt*coalesce(siv.cnt,1) as component_quantity,
|
||||
aa.__name as additional_agreement, aa.__id::text as additional_agreement_uid
|
||||
--, aa.is_actual
|
||||
,siv.end_customer as end_customer_uid
|
||||
,z.id_klienta as end_customer_wz
|
||||
,z.__name as end_customer_name
|
||||
,ft.free_tier
|
||||
from elma.deals d
|
||||
join elma.deals_services siv on (d.__id=ANY(siv.deal))
|
||||
join elma.service_parametrs p on (p.__id = ANY(siv.params))
|
||||
@@ -64,6 +66,7 @@
|
||||
join elma.additional_agreements aa on (aa.__id = ANY(siv.additional_agreement))
|
||||
join elma.aggrements a on (aa.contract_uid = a.__id)
|
||||
left outer join elma.companies z on (siv.end_customer=z.__id)
|
||||
left outer join (values ('paas.s3.ceph.vol-m',1),('paas.s3.ceph.get-m',10),('paas.s3.ceph.put-m',1),('paas.s3.ceph.trf-m',100)) as ft(code,free_tier) ON (p.code=ft.code)
|
||||
where p.type IN (2,3) AND aa.is_actual
|
||||
AND siv.date_nop < <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_finish#/>
|
||||
AND (siv.date_end > <cfqueryparam cfsqltype="cf_sql_timestamp" value=#dt_start#/> OR siv.date_end IS NULL)/*****/
|
||||
@@ -146,8 +149,8 @@
|
||||
ELSE '.['|| storage_profile_types.name ||']' END
|
||||
as code,
|
||||
storage_profile_types.name as profile,
|
||||
sum("limit")/1024./4./720. as gb_m_limit, -- 4 потому, что сбор раз в 15 минут
|
||||
sum(used)/1024./4./720. as gb_m_used -- 720 это количество часов в условном месяце
|
||||
sum("limit")/1024./4./<cfqueryparam cfsqltype="cf_sql_integer" value=#hours#/> as gb_m_limit, -- 4 потому, что сбор раз в 15 минут
|
||||
sum(used)/1024./4./<cfqueryparam cfsqltype="cf_sql_integer" value=#hours#/> as gb_m_used
|
||||
from ngcloud_ru.capacity_storage
|
||||
join ngcloud_ru.vdc on capacity_storage.vdc_id=vdc.id
|
||||
join ngcloud_ru.tenant t on t.id=vdc.tenant_id
|
||||
@@ -186,10 +189,7 @@ HOT_FREE_LIMIT 1 10 1 100
|
||||
<cfquery name="qS3Vol" datasource="billing-s3" cachedWithin=#createTimeSpan(0, 0, 25, 0)#>
|
||||
select /* *** ниже дублирование кода агрегации - round ceil etc, обратить внимание при правке */
|
||||
(sum(bucket_stat.usage_rgw_main_size_actual)/<cfqueryparam cfsqltype="cf_sql_integer" value=#hours#/>) as vol_B
|
||||
,ceil(sum(bucket_stat.usage_rgw_main_size_actual)/<cfqueryparam cfsqltype="cf_sql_integer" value=#hours#/>/1024/1024/1024) as vol_GB
|
||||
,greatest(ceil(sum(bucket_stat.usage_rgw_main_size_actual)/<cfqueryparam cfsqltype="cf_sql_integer" value=#hours#/>
|
||||
/1024/1024/1024)-
|
||||
case when bucket_stat.placement_id = 1 then 1 else 0 end, 0) as vol_GB_free_tier_subtracted /*считается не в точности так, как в функции*/
|
||||
,sum(bucket_stat.usage_rgw_main_size_actual)/<cfqueryparam cfsqltype="cf_sql_integer" value=#hours#/>/1024/1024/1024 as vol_GB
|
||||
,case
|
||||
when bucket_stat.placement_id = 1 then 'paas.s3.ceph'
|
||||
when bucket_stat.placement_id = 2 then 'paas.s3.cphc'
|
||||
@@ -311,31 +311,31 @@ select
|
||||
|
||||
|
||||
<cfquery name="qUnifiedMetric" dbType="query">
|
||||
select wz, code || '.vcpu' as code, core_h as raw_metric, core_h as metric, core_h as chargeable_metric, 'core-h' as unit, vdc as dimension1
|
||||
select wz, code || '.vcpu' as code, core_h as raw_metric, core_h as metric, 'core-h' as unit, vdc as dimension1
|
||||
from qComputing
|
||||
|
||||
union all
|
||||
select wz, code || '.ram', gb_h as raw_metric, gb_h as metric, gb_h as chargeable_metric, 'GByte-h' as unit, vdc as dimension1
|
||||
select wz, code || '.ram', gb_h as raw_metric, gb_h as metric, 'GByte-h' as unit, vdc as dimension1
|
||||
from qComputing
|
||||
|
||||
union all
|
||||
select wz, code, gb_m_used as raw_metric, gb_m_used as metric, gb_m_used as chargeable_metric, 'GByte-m' as unit, vdc ||':'|| profile as dimension1
|
||||
select wz, code, gb_m_used as raw_metric, gb_m_used as metric, 'GByte-m' as unit, vdc ||':'|| profile as dimension1
|
||||
from qStorage
|
||||
|
||||
union all
|
||||
select wz, code || '.vol', vol_b as raw_metric, vol_gb as metric, vol_GB_free_tier_subtracted as chargeable_metric, 'GByte-m' as unit, bucket as dimension1
|
||||
select wz, code || '.vol', vol_b as raw_metric, vol_gb as metric, 'GByte-m' as unit, bucket as dimension1
|
||||
from qS3Vol
|
||||
|
||||
union all
|
||||
select wz, code || '.get', get as raw_metric, get_10k as metric, get_10k_free_tier_subtracted as chargeable_metric, '10k' as unit, bucket as dimension1
|
||||
select wz, code || '.get', get as raw_metric, get_10k as metric, '10k' as unit, bucket as dimension1
|
||||
from qS3OpsTrf
|
||||
|
||||
union all
|
||||
select wz, code || '.put', put as raw_metric, put_10k as metric, put_10k_free_tier_subtracted as chargeable_metric, '10k' as unit, bucket as dimension1
|
||||
select wz, code || '.put', put as raw_metric, put_10k as metric, '10k' as unit, bucket as dimension1
|
||||
from qS3OpsTrf
|
||||
|
||||
union all
|
||||
select wz, code || '.trf', bytes_sent as raw_metric, bytes_sent_gb as metric, bytes_sent_gb_free_tier_subtracted as chargeable_metric, 'GByte' as unit, bucket as dimension1
|
||||
select wz, code || '.trf', bytes_sent as raw_metric, bytes_sent_gb as metric, 'GByte' as unit, bucket as dimension1
|
||||
from qS3OpsTrf
|
||||
|
||||
order by wz, code
|
||||
@@ -368,21 +368,25 @@ SELECT
|
||||
<d:field title="WZ">m.wz as wzm</d:field>
|
||||
<d:field title="WZE">s.end_customer_wz as wze</d:field>
|
||||
<d:field title="Артикул">coalesce(s.code, m.code) as code</d:field>
|
||||
<d:field title="Артикул по спец.">s.code as s_code</d:field>
|
||||
<d:field title="Кол-во по спец.">s.component_quantity</d:field>
|
||||
<d:field title="Артикул по спец.">s.code as s_code</d:field>
|
||||
<d:field title="SKU code">s.sku_code as sku_code</d:field>
|
||||
<d:field title="Артикул по метрикам">m.code as m_code</d:field>
|
||||
<d:field title="Кол-во компонента по спец.">s.component_quantity</d:field>
|
||||
<d:field title="Кол-во сервиса по спец.">s.service_quantity</d:field>
|
||||
<d:field title="Скидка на сервис">s.service_discount</d:field>
|
||||
<d:field title="Free Tier">coalesce(s.free_tier,0) as free_tier</d:field>
|
||||
<d:field>m.dimension1</d:field>
|
||||
<d:field title="Тип по спец.">s.type</d:field>
|
||||
<d:field title="Кол-во к оплате" cfSqlType="CF_SQL_NUMERIC">ceiling(m.chargeable_metric) as chargeable_metric</d:field>
|
||||
<!--- <d:field title="Кол-во к оплате" cfSqlType="CF_SQL_NUMERIC">ceiling(m.chargeable_metric) as chargeable_metric</d:field> --->
|
||||
<d:field title="Ед.изм.">m.unit</d:field>
|
||||
<d:field title="Ед.изм.">s.ed_izm</d:field>
|
||||
<d:field title="Цена &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">s.service_quantity*(100-s.service_discount)/100*s.price*(100-s.discount)/100 as discounted_price</d:field>
|
||||
<d:field title="Стоимость &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">CASE WHEN s.type=3 THEN s.service_quantity*(100-s.service_discount)/100*s.price*(100-s.discount)/100*ceiling(m.chargeable_metric) ELSE NULL END as charge</d:field>
|
||||
<d:field title="Дата НОУ" cfSqlType="CF_SQL_TIMESTAMP">s.dt_from</d:field>
|
||||
<d:field title="Дата оконч." cfSqlType="CF_SQL_TIMESTAMP">s.dt_to</d:field>
|
||||
<d:field title="Цена &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">coalesce(s.service_quantity*(100.-s.service_discount)/100.*s.price*(100.-s.discount)/100., 0.) as discounted_price</d:field>
|
||||
<!--- <d:field title="Стоимость &##8381; с НДС" cfSqlType="CF_SQL_NUMERIC">CASE WHEN s.type=3 THEN s.service_quantity*(100-s.service_discount)/100*s.price*(100-s.discount)/100*ceiling(m.chargeable_metric) ELSE NULL END as charge</d:field> --->
|
||||
<d:field title="Дата НОУ" cfSqlType="CF_SQL_TIMESTAMP">s.serviceStart</d:field>
|
||||
<d:field title="Дата оконч." cfSqlType="CF_SQL_TIMESTAMP">s.serviceEnd</d:field>
|
||||
<d:field title="Ключ строки">s.line_key</d:field>
|
||||
<d:field title="Цена с НДС" cfSqlType="CF_SQL_NUMERIC">s.price</d:field>
|
||||
<d:field title="Скидка%" cfSqlType="CF_SQL_NUMERIC">s.discount</d:field>
|
||||
<d:field title="Скидка % на компонент" cfSqlType="CF_SQL_NUMERIC">s.discount</d:field>
|
||||
<d:field title="Сырая метрика" cfSqlType="CF_SQL_NUMERIC">m.raw_metric</d:field>
|
||||
<d:field title="Приведенная метрика" cfSqlType="CF_SQL_NUMERIC">m.metric</d:field>
|
||||
|
||||
@@ -400,7 +404,7 @@ SELECT
|
||||
<d:field title="Клиентс. назв.">s.user_description</d:field>
|
||||
</d:field_set>
|
||||
FROM qUnifiedMetric m
|
||||
FULL JOIN qSpec s ON (m.wz=s.wz AND m.code=s.service_code) -- или компонент, но не цена
|
||||
FULL JOIN qSpec s ON (m.wz=s.wz AND m.code=s.sku_code) -- сервис или компонент, но не цена с типом тарификации
|
||||
LEFT JOIN qContragent c ON (trim(coalesce(s.wz,m.wz))=trim(c.wz)) -- пробелы тут стоили нескольких часов работы
|
||||
<!--- LEFT JOIN qContragent cs ON (s.wz=cs.wz) -- неуклюже, но иначе контрагент теряется --->
|
||||
WHERE 1=1 --AND (s.type=3 OR NOT m.metric IS NULL)
|
||||
@@ -415,7 +419,7 @@ AND 1=0
|
||||
--->
|
||||
ORDER BY coalesce(coalesce(c.wz, m.wz), s.wz), coalesce(s.code, m.code)
|
||||
</cfquery>
|
||||
|
||||
<cfdump var=#qCharge#/>
|
||||
|
||||
<cfoutput>qCharge:#getTickCount()-request.startTickCount#</cfoutput><cfif !isDefined("output_xls") AND !isDefined("output_json")><cfflush/></cfif>
|
||||
<cfif isDefined("DEBUG")>
|
||||
@@ -472,31 +476,40 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
|
||||
<thead>
|
||||
<td width="1%"></td>
|
||||
<!--- <th width="3%">WZ</th> --->
|
||||
<th width="7%">Артикул спец.</th>
|
||||
<th width="5%">Кол-во спец.</th>
|
||||
<th width="7%">Артикул метр.</th>
|
||||
<th width="3%"></th>
|
||||
<th width="7%">Артикул специф.</th>
|
||||
<th width="5%">Кол-во специф.</th>
|
||||
<th width="5%">Артикул метр.</th>
|
||||
<th width="5%">Детализация</th>
|
||||
<th width="5%">Кол-во метр.</th>
|
||||
<th width="5%">Free Tier.</th>
|
||||
<th width="5%">Опл. объем</th>
|
||||
<th width="3%">Ед.изм.</th>
|
||||
<th width="3%">Цена ₽ со скид., с НДС</th>
|
||||
<th width="3%">Стоимость ₽ с НДС</th>
|
||||
|
||||
<td width="3%"> </td>
|
||||
|
||||
<td width="10%">Услуга</td>
|
||||
<td width="10%">Компонент</td>
|
||||
<td width="10%">Клиентс. назв.</td>
|
||||
<td width="15%">Услуга</td>
|
||||
<td width="15%">Компонент</td>
|
||||
<td width="15%">Клиентс. назв.</td>
|
||||
|
||||
<td width="3%">GPL с НДС</td>
|
||||
<td width="3%">Скидка%</td>
|
||||
|
||||
<td width="6%">Дата НОУ</td>
|
||||
<td width="6%">Дата оконч.</td>
|
||||
<td width="3%">Дата НОУ ***</td>
|
||||
<td width="3%">Дата оконч.</td>
|
||||
|
||||
<td width="3%">Ключ строки</td>
|
||||
<td width="5%">Ключ строки</td>
|
||||
<td width="3%">Сырая метрика</td>
|
||||
<td width="3%">Приведен­ная метрика</td>
|
||||
|
||||
<td width="3%">Цена ₽ до ск. с НДС</td>
|
||||
<td width="3%">Цена ₽ co ск. с НДС без окр.</td>
|
||||
<td width="3%">Service Quantity</td>
|
||||
<td width="3%">Service Discount</td>
|
||||
<td width="3%">Component Quantity</td>
|
||||
<td width="3%">Component Discount</td>
|
||||
|
||||
<td width="5%">Договор</td>
|
||||
<td width="10%">Допник</td>
|
||||
<td width="10%">Сделка</td>
|
||||
@@ -505,7 +518,10 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
|
||||
</thead>
|
||||
|
||||
<cfoutput query="qCharge" group="wz">
|
||||
<cfset var acc=0/>
|
||||
|
||||
<cfset var accum_cost_svc = 0/>
|
||||
<cfset var accum_metric_svc = 0/>
|
||||
<cfset var acc=0/>
|
||||
<tr>
|
||||
<td bgcolor="##ccc"></td>
|
||||
<td bgcolor="##ccc" colspan="5" class="b">
|
||||
@@ -516,48 +532,84 @@ S3 операции и трафик: <b>#dateFormat(qS3OpsTrfAge.dt_load,'YYYY-M
|
||||
<td></td>
|
||||
<td bgcolor="##ccc" colspan="99"></td>
|
||||
</tr>
|
||||
<cfoutput>
|
||||
<cfset acc += (isNumeric(charge)) ? charge : 0/>
|
||||
<tr<cfif !len(unit)> class="gray"</cfif>>
|
||||
<td>#currentRow#</a></td>
|
||||
<cfoutput group="code">
|
||||
<cfoutput group="serviceStart">
|
||||
<cfset accum_metric_svc += isNumeric(metric) ? metric : 0/>
|
||||
<cfset accum_metric_dimension_1 = 0/>
|
||||
<cfoutput><!--- dimensions --->
|
||||
<cfif type EQ 3>
|
||||
|
||||
<cfset accum_metric_dimension_1 += isNumeric(metric) ? metric : 0/>
|
||||
</cfif>
|
||||
<!--- детализация --->
|
||||
<tr<cfif !len(unit)> class="gray"</cfif>>
|
||||
<td>#currentRow#</a></td>
|
||||
|
||||
<td<cfif type EQ 3> style="background:lightgreen;color:black;"</cfif>>#s_code#</td>
|
||||
<td class=<cfif type EQ 3 AND component_quantity NEQ 1>"err r"<cfelse>"r"</cfif>>#component_quantity#</td>
|
||||
<td>#m_code#</td>
|
||||
<td>#dimension1#</td>
|
||||
<td class="r" style="font-size:110%; padding:0 1em;">#request.roundSafe(metric,3)#</td>
|
||||
<td class="r">#free_tier#</td>
|
||||
<td></td>
|
||||
<td style="font-size:90%;">#unit# <cfif len(ed_izm)>[#ed_izm#]</cfif></td><!--- #len(unit)?unit:'['& ed_izm &']'# --->
|
||||
<td class="r">#gaussianRound(discounted_price,2)#</td>
|
||||
<td class="r"><!---#gaussianRoundSafe(charge,2)# <cfif type EQ 3></cfif> ---></td>
|
||||
|
||||
<td></td>
|
||||
|
||||
<td>#abstract_service# #modifier#</td>
|
||||
<td>#component#</td>
|
||||
<td>#user_description#</td>
|
||||
|
||||
<td class="r">#gaussianRoundSafe(price,2)#</td>
|
||||
<td class="r">#discount#</td>
|
||||
|
||||
<td class="r">#dateFormat(serviceStart,'YYYY-MM-DD')#</td>
|
||||
<td class="r">#dateFormat(serviceEnd,'YYYY-MM-DD')#</td>
|
||||
|
||||
<td class="r">#line_key#</td>
|
||||
<td class="r" style="color:##bbb">#request.roundSafe(raw_metric,3)#</td>
|
||||
<td class="r">#request.roundSafe(metric,3)#</td>
|
||||
|
||||
<!--- сырые исходные данные без округлений --->
|
||||
<td class="r">#price#</td>
|
||||
<td class="r">#discounted_price#</td>
|
||||
<td class="r">#service_quantity#</td>
|
||||
<td class="r">#service_discount#</td>
|
||||
<td class="r">#component_quantity#</td>
|
||||
<td class="r">#discount#</td>
|
||||
|
||||
<td><a href="contract.cfm?__id=#contract_uid#&#tr.fwx#">#contract#</a></td>
|
||||
<td><a href="additional_agreement.cfm?__id=#additional_agreement_uid#&#tr.fwx#">#additional_agreement#</a></td>
|
||||
<td><a href="deal.cfm?__id=#deal_uid#&#tr.fwx#">#deal#</a></td>
|
||||
<td>#WZE#</a></td>
|
||||
</tr>
|
||||
</cfoutput>
|
||||
<cfset final_metric_dimension_1 = ceiling(accum_metric_dimension_1)/>
|
||||
<cfset cost_dimension_1 = precisionEvaluate("gaussianRound(max(final_metric_dimension_1 - free_tier, 0)*gaussianRound(discounted_price, 2), 2)")/>
|
||||
<cfset accum_cost_svc = precisionEvaluate("accum_cost_svc + cost_dimension_1")/><!--- простое сложение дает ошибку округления и лишние знаки, но и precisionEvaluate не выглядит слишком надежным --->
|
||||
<tr>
|
||||
<td colspan="3"></td>
|
||||
<td colspan="2" class="b">#code#</td>
|
||||
<td class="b r" style="font-size:110%; padding:0 1em;"><cfif final_metric_dimension_1 NEQ 0 AND isNumeric(final_metric_dimension_1)>#round(final_metric_dimension_1,3)#</cfif></td>
|
||||
<td class="b r">#free_tier#</td>
|
||||
<td class="b r" style="font-size:120%; padding:0 1em;"><cfif final_metric_dimension_1 NEQ 0 AND isNumeric(final_metric_dimension_1)>#max(ceiling(final_metric_dimension_1) - free_tier, 0)#</cfif></td>
|
||||
<td class="b c">#unit# <cfif len(ed_izm)>[#ed_izm#]</cfif></td>
|
||||
<td class="b r">#gaussianRoundSafe(discounted_price,2)#</td>
|
||||
<td class="b r">#gaussianRoundSafe(cost_dimension_1,2)#</td>
|
||||
<td colspan="100"></td>
|
||||
</tr>
|
||||
</cfoutput><!--- serviceStart --->
|
||||
</cfoutput><!--- code --->
|
||||
|
||||
<td<cfif type EQ 3> style="background:lightgreen;color:black;"</cfif>>#s_code#</td>
|
||||
<td>#component_quantity#</td>
|
||||
<td>#m_code#</td>
|
||||
<td>#dimension1#</td>
|
||||
<td class="r" style="font-size:120%; padding:0 1em;">#request.roundSafe(chargeable_metric,3)#</td>
|
||||
<td class="c" style="font-size:90%;">#unit# <cfif len(ed_izm)>[#ed_izm#]</cfif></td><!--- #len(unit)?unit:'['& ed_izm &']'# --->
|
||||
<td class="r">#gaussianRoundSafe(discounted_price,2)#</td>
|
||||
<td class="r">#gaussianRoundSafe(charge,2)#</td>
|
||||
|
||||
<td></td>
|
||||
|
||||
<td>#abstract_service# #modifier#</td>
|
||||
<td>#component#</td>
|
||||
<td>#user_description#</td>
|
||||
|
||||
<td class="r">#gaussianRoundSafe(price,2)#</td>
|
||||
<td class="r">#discount#</td>
|
||||
|
||||
<td class="r">#dateFormat(dt_from,'YYYY-MM-DD')#</td>
|
||||
<td class="r">#dateFormat(dt_to,'YYYY-MM-DD')#</td>
|
||||
|
||||
<td class="r">#line_key#</td>
|
||||
<td class="r" style="color:##bbb">#request.roundSafe(raw_metric,3)#</td>
|
||||
<td class="r">#request.roundSafe(metric,3)#</td>
|
||||
<td><a href="contract.cfm?__id=#contract_uid#&#tr.fwx#">#contract#</a></td>
|
||||
<td><a href="additional_agreement.cfm?__id=#additional_agreement_uid#&#tr.fwx#">#additional_agreement#</a></td>
|
||||
<td><a href="deal.cfm?__id=#deal_uid#&#tr.fwx#">#deal#</a></td>
|
||||
<td>#WZE#</a></td>
|
||||
</tr>
|
||||
</cfoutput>
|
||||
<tr>
|
||||
<td bgcolor="##eee" style="border-bottom:2px solid gray;"></td>
|
||||
<td bgcolor="##eee" colspan="6" class="r" style="border-bottom:2px solid gray;"><b>Итого</b> <a href="contragent.cfm?__id=#contragent_uid#&#tr.fwx#">#wz#</a> #contragent#:</td>
|
||||
<td bgcolor="##eee" colspan="1" class="r b nw" style="border-bottom:2px solid gray;">#NumFmt(acc,2)#</td>
|
||||
<td bgcolor="##eee" colspan="9" class="r" style="border-bottom:2px solid gray;"><b>Итого</b> <a href="contragent.cfm?__id=#contragent_uid#&#tr.fwx#">#wz#</a> #contragent#:</td>
|
||||
<td bgcolor="##eee" colspan="1" class="r b nw" style="border-bottom:2px solid gray; font-size:130%; padding:0 1em;">#accum_cost_svc#</td>
|
||||
<td colspan="99" style="border-bottom:2px solid gray;"></td>
|
||||
</tr >
|
||||
</cfoutput>
|
||||
</cfoutput><!--- wz --->
|
||||
|
||||
</table>
|
||||
<!--- <cfdump var=#qCharge#/> --->
|
||||
|
||||
Reference in New Issue
Block a user