Показать сообщение отдельно
Старый 28.06.2006, 18:22   #1  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Прикольная конструкция: оператор select с полем
Ковыряясь с книгой покупок, набрёл на макрос 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 );
}
Вот такая на меня сегодня свалилась радость познания.