| Результаты опроса: Знали ли вы об этой конструкции раньше? | |||
| ДА - и пользовался | 
		 | 
	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 );
} 
		 | 
| 
	
 |