| Результаты опроса: Знали ли вы об этой конструкции раньше? | |||
| ДА - и пользовался |
|
18 | 78.26% |
| ДА - но не пользовался |
|
1 | 4.35% |
| НЕТ - но любопытно |
|
4 | 17.39% |
| НЕТ - и неинтересно |
|
0 | 0% |
| Голосовавшие: 23. Вы ещё не голосовали в этом опросе | |||
|
|
Опции темы |
|
|
#1 |
|
Moderator
|
Прикольная конструкция: оператор 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 );
}
|
|
|