Каркас для работы (умному достаточно имхо)
запрос= Новый Запрос();
запрос.Текст = "
|ВЫБРАТЬ
| ТипЦенСрезПоследних.Цена,
| ТипЦенСрезПоследних.НачалоТарифа,
| ТипЦенСрезПоследних.ОкончаниеТарифа
|ИЗ
| РегистрСведений.ТипЦен.СрезПоследних КАК ТипЦенСрезПоследних
|ГДЕ
| ТипЦенСрезПоследних.ТипЦен = &ТипЦен"
|";
запрос.УстановитьПараметр("ТипЦен", );
тз = запрос.Выполнить().Выгрузить();
запрос = Новый Запрос();
ТекстЗапроса="";
сч=1;
Для каждого стр Из тз Цикл
Если сч>1 Тогда
ТекстЗапроса=ТекстЗапроса+"UNION ALL "+Символы.ПС;
КонецЕсли;
ТекстЗапроса=ТекстЗапроса+"
|ВЫБРАТЬ
| ДокументОплаты.Администратор,
| ДокументОплаты.Компютер,
| ДокументОплаты.НачалоСеанса,
| ДокументОплаты.ОкончаниеСеанса,
| ДокументОплаты.Тариф,
| (CASE WHEN ОкончаниеСеанса>&ОкончаниеСеанса"+сч+" THEN &ОкончаниеСеанса"+сч+" ELSE ОкончаниеСеанса END -
| CASE WHEN НачалоСеанса<&ОкончаниеСеанса"+сч+" THEN &ОкончаниеСеанса"+сч+" ELSE НачалоСеанса END) как ПродолжРаботыВСекундах
// | дальше можно умножить на цену , чтобы получить сумму
|ИЗ
| Документ.ДокументОплаты КАК ДокументОплаты
|ГДЕ
| ДокументОплаты.НачалоСеанса = &НачалоСеанса"+сч+"
| И ДокументОплаты.ОкончаниеСеанса = &ОкончаниеСеанса"+сч+"
|";
запрос.УстановитьПараметр("НачалоСеанса"+сч,стр.НачалоТарифа);
запрос.УстановитьПараметр("ОкончаниеСеанса"+сч,стр.ОкончаниеТарифа);
сч=сч+1;
КонецЦикла;
табл=Запрос.Выполнить().Выгрузить();
табл.ВыбратьСтроку()
код написан на коленке - поэтому прошу не пинать