Добрый день.Есть ЗАПРОС
ВЫБРАТЬ
Администратор,
Компютер,
НачалоСеанса,
ОкончаниеСеанса,
Тариф,
Сумма,
ТипЦен,
РСТипЦен.НачалоТарифа КАК НачалоТарифа,
РСТипЦен.ОкончаниеТарифа КАК ОкончаниеТарифа,
Цена
ИЗ
Документ.ДокументОплаты КАК ДокОп
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ТипЦен.СрезПоследних КАК РСТипЦен
ПО
ДокОп.Тариф = РСТипЦен.ТипЦен
ГДЕ
ВЫБОР
ТипЦен КОГДА МЕЖДУ НачалоТарифа И НачалоСеанса И ТипЦен МЕЖДУ ОкончаниеТарифа И ОкончаниеСеанса
ТОГДА
Сумма = 1
КОНЕЦ
тогда написать
ГДЕ
ТипЦен МЕЖДУ НачалоТарифа И НачалоСеанса И ТипЦен МЕЖДУ ОкончаниеТарифа И ОкончаниеСеанса
в результате - вернет записи где типЦен между указанными значениями
(по-мне так там не ТипЦен а какие-то значения должны быть ???)
Описание рС.ТипЦен в студию
РСТипЦен.ТипЦен это имя тарифа, тариф имеет имя, временной промежуток(к примеру с 08:00:00 до 20:00:00) и цену.
Не, так долго гадать можно...
Опишите, плиз, структуры данных, участвующих в приведенном запросе.
в см - реквизиты Документ.ДокументОплаты, РегистрСведений.ТипЦен с типами данных.
А то пока видится такое решение:
...
ИЗ
Документ.ДокументОплаты КАК ДокОп
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ТипЦен.СрезПоследних КАК РСТипЦен
ПО
ДокОп.Тариф = РСТипЦен.ТипЦен И
ДокОп.НачалоСеанса МЕЖДУ РСТипЦен.НачалоТарифа И РСТипЦен.ОкончаниеТарифа
...
ИЗ
Документ.ДокументОплаты КАК ДокОп
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ТипЦен.СрезПоследних КАК РСТипЦен
ПО
ДокОп.Тариф = РСТипЦен.ТипЦен И
ДокОп.НачалоСеанса МЕЖДУ РСТипЦен.НачалоТарифа И РСТипЦен.ОкончаниеТарифа
ВЫБОР
КОГДА
НачалоТарифа МЕЖДУ НачалоСеанса И ОкончаниеСеанса И ОкончаниеСеанса МЕЖДУ НачалоСеанса И ОкончаниеСеанса
ТОГДА
РАЗНОСТЬДАТ Сумма=(НачалоСеанса - ОкончаниеСеанса,МИНУТА) * Цена
ИНАЧЕ
РАЗНОСТЬДАТ Сумма = (НачалоСеанса - ОкончаниеТарифа)* Цена + (НачалоСеанса - ОкончаниеТарифа)* Цена
Конец
VolandMaster, ознакомьтесь с правилами.
Особенно обратите внимание на:
i | Правила пункт № 13 |
Ознакомился,извините .
По-мне постановка задачи некорректна - где стоимость тарифа?
Опишите систему ценообразования
Итак:
1.Запрос надо будет формировать динамически (по-большому счету) ;
секции запроса через Объединить
количество секций равно количеству тарифов.
Приблизительно так: (для двух тарифов)
выбрать
// здесь лирика
(&КонецТарифа1 - выбрать когда НачалоРаботы<&НачалоТарифа1 тогда &НачалоТарифа1 иначе НачалоРаботы конец ) как ПродолжительностьРаботы
из документа
где док.НачалоРаботы<&Конецтарифа1 или конецРаботы>&началоТарифа1
объединить
выбрать
// здесь лирика
(&КонецТарифа2 - выбрать когда НачалоРаботы<&НачалоТарифа2 тогда &НачалоТарифа2 иначе НачалоРаботы конец ) как ПродолжительностьРаботы
из документа
где док.НачалоРаботы<&Конецтарифа2 или конецРаботы>&началоТарифа2
sava1
При таких условиях пользователь не сможет самостоятельно создавать тарифы
SQl -щики - предложите решение по-красивше
Тарифы создаются документом.
Хранятся в РС.
Мы же здесь строим запрос, чтобы получить информацию из документов оплаты (или в документе,что не прописано) по продолжительности работы
в разных тарифных периодах для расчета к-примеру Суммы оплаты или получения отчета по работе пользователя
все.Обед
Как задать параметр &КонецТарифа и &НачалоТарифа, создавать вложений запрос с РС?
Каркас для работы (умному достаточно имхо)
запрос= Новый Запрос();
запрос.Текст = "
|ВЫБРАТЬ
| ТипЦенСрезПоследних.Цена,
| ТипЦенСрезПоследних.НачалоТарифа,
| ТипЦенСрезПоследних.ОкончаниеТарифа
|ИЗ
| РегистрСведений.ТипЦен.СрезПоследних КАК ТипЦенСрезПоследних
|ГДЕ
| ТипЦенСрезПоследних.ТипЦен = &ТипЦен"
|";
запрос.УстановитьПараметр("ТипЦен", );
тз = запрос.Выполнить().Выгрузить();
запрос = Новый Запрос();
ТекстЗапроса="";
сч=1;
Для каждого стр Из тз Цикл
Если сч>1 Тогда
ТекстЗапроса=ТекстЗапроса+"UNION ALL "+Символы.ПС;
КонецЕсли;
ТекстЗапроса=ТекстЗапроса+"
|ВЫБРАТЬ
| ДокументОплаты.Администратор,
| ДокументОплаты.Компютер,
| ДокументОплаты.НачалоСеанса,
| ДокументОплаты.ОкончаниеСеанса,
| ДокументОплаты.Тариф,
| (CASE WHEN ОкончаниеСеанса>&ОкончаниеСеанса"+сч+" THEN &ОкончаниеСеанса"+сч+" ELSE ОкончаниеСеанса END -
| CASE WHEN НачалоСеанса<&ОкончаниеСеанса"+сч+" THEN &ОкончаниеСеанса"+сч+" ELSE НачалоСеанса END) как ПродолжРаботыВСекундах
// | дальше можно умножить на цену , чтобы получить сумму
|ИЗ
| Документ.ДокументОплаты КАК ДокументОплаты
|ГДЕ
| ДокументОплаты.НачалоСеанса = &НачалоСеанса"+сч+"
| И ДокументОплаты.ОкончаниеСеанса = &ОкончаниеСеанса"+сч+"
|";
запрос.УстановитьПараметр("НачалоСеанса"+сч,стр.НачалоТарифа);
запрос.УстановитьПараметр("ОкончаниеСеанса"+сч,стр.ОкончаниеТарифа);
сч=сч+1;
КонецЦикла;
табл=Запрос.Выполнить().Выгрузить();
табл.ВыбратьСтроку()
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua