Ковыряясь с книгой покупок, набрёл на макрос PurchBook_RU, в котором есть такой фрагмент:
Код:
#IF.ARG(0)
(%1.DeliveryDate < #criticalDate ? 0.00 :
(%1.TransType == SalesPurchBookTransType_RU::CreditNote ?
((select firstonly FactureTrans_RU
where FactureTrans_RU.FactureId == %1.FactureId &&
FactureTrans_RU.Module == FactureModule_RU::Vend &&
FactureTrans_RU.VATType == VatType_RU::Full).VatValue == #vatValue20 ?
0.00 :
%1.AmountLiableToVAT20) :
%1.AmountLiableToVAT20))
#ENDIF
конкретно заинтересовала конструкция:
Код:
(select firstonly FactureTrans_RU...).VatValue
Проверил свои возникшие "опасения" - захлопал в ладоши! (поэтому и постюсь в "Детской"

)
Понравилось. Даже нашёл у А.Ерёменко, Р.Шашкова на стр.114 соответствующие разъяснения:
Цитата:
Отметим разницу между обычным оператором select и оператором select c полем.
Оператор select c полем работает прямо с таблицей, в то время как обычный оператор select работает c табличной переменной.
Почувствовал разницу между
Код:
static void TestJob1_Before_OpenEyes(Args _args)
{
LedgerTable ledgerTable;
select firstonly reverse ledgerTable order by AccountNum;
info( ledgerTable.AccountName );
}
и
Код:
static void TestJob2_After_OpenEyes(Args _args)
{
;
info( (select firstonly reverse LedgerTable order by AccountNum).AccountName );
}
И даже вложенные конструкции можно!
Код:
static void TestJob3_NuVasheeeee(Args _args)
{
// вывод в инфолог наименования ОС из первой записи в таблице проводок по ОС
;
info( (select RAssetTable where RAssetTable.AccountNum
== (select firstonly RAssetTrans).AccountNum ).Name );
}
Вот такая на меня сегодня свалилась радость познания.