pageInfo=#pageInfo#
id="#d.contract_id#"
status=#pageInfo.status#
trackOut="tr"
idAttributesOut="id"
/>
select
a.login as creator, a.shortname as creator_shortname, m.login as updater, m.shortname as updater_shortname
from contract g
left outer join usr a on (g.creator_id=a.usr_id)
left outer join usr m on (g.updater_id=m.usr_id)
where g.contract_id=
Договор
#d.contract#
[#d.contract_id#]
ID
#d.contract_id#
Номер договора
Дата договора
Контрагент
select c.contragent_id, c.contragent
from contragent c
order by 2
select
s.specification_id
,s.specification
,(select count(*) from specification_item i where i.specification_id=s.specification_id) as item_cnt
/*,(select count(*) from specification_version v where v.specification_id=s.specification_id) as version_cnt*/
from specification s
where s.contract_id=
order by 1
Спецификации (#qSpecification.recordCount#)
Как правило, в договоре 1 спецификация, а ее версии определяются дополнительными соглашениями
Номер спецификации
Строк
#specification#
#item_cnt#
select
a.contract_id
,a.agreement_version
,a.agreement
,a.dt_agreement
,a.is_actual
from agreement a
where a.contract_id=
order by 1
Соглашения (#qAgreement.recordCount#)
Соглашение - это пакет изменений спецификации. Базовое соглашение соответствует исходной спецификации договора (переход от несуществующей спецификации). Остальные - дополнительным соглашениям.
Создание базового соглашения надо автоматизировать, но пока вручную.
Номер соглашения (версия)
Название
Дата
Действует
#agreement_version#
#agreement#
#dateFormat(dt_agreement,'DD.MM.YYYY')#
любопытное последствие использования составного ключа: отпадает желание делать для сущности самостоятельный реестр (может быть, только если есть явная сущность-владелец, как договор для соглашения). Это аналогично отразится на структуре ReST API URL, если вдруг