Расчет стоимости за период

08.05.15

Разработка - Запросы

Простенький запрос для расчета стоимости периодической услуги

Всем добрый день.

Хотелось бы представить общественности на суд простенький запрос (первая публикация) для расчета стоимости периодической услуги.

Исходная задача ставилась следующим образом:

1) На вход подается стоимость услуги за полный месяц;

2) ПериодС и ПериодПо, могут быть как полными месяцами (01.01.15-31.03.15), так и в любой дате месяца (05.01.15-23.02.15)

3) На выходе получаем Сумму исходя из количества полных месяцев в периоде и остатков дней

Если можно решить задачу другим, более красивым способом, интересно было бы почитать мнение гуру

 

ВЫБРАТЬ
	&ПериодС,
	&ПериодПо,
	ВЫБОР
		КОГДА НАЧАЛОПЕРИОДА(&ПериодС, МЕСЯЦ) = &ПериодС
				И КОНЕЦПЕРИОДА(&ПериодПо, МЕСЯЦ) = &ПериодПо
			ТОГДА РАЗНОСТЬДАТ(&ПериодС, &ПериодПо, МЕСЯЦ) + 1
		КОГДА НАЧАЛОПЕРИОДА(&ПериодС, МЕСЯЦ) <> &ПериодС
				И КОНЕЦПЕРИОДА(&ПериодПо, МЕСЯЦ) = &ПериодПо
			ТОГДА РАЗНОСТЬДАТ(&ПериодС, &ПериодПо, МЕСЯЦ)
		КОГДА НАЧАЛОПЕРИОДА(&ПериодС, МЕСЯЦ) = &ПериодС
				И КОНЕЦПЕРИОДА(&ПериодПо, МЕСЯЦ) <> &ПериодПо
			ТОГДА РАЗНОСТЬДАТ(&ПериодС, &ПериодПо, МЕСЯЦ)
		ИНАЧЕ 0
	КОНЕЦ КАК КоличествоПолныхМесяцев,
	ЕСТЬNULL(ВЫБОР
			КОГДА НЕ НАЧАЛОПЕРИОДА(&ПериодС, МЕСЯЦ) = &ПериодС
				ТОГДА РАЗНОСТЬДАТ(&ПериодС, КОНЕЦПЕРИОДА(&ПериодС, МЕСЯЦ), ДЕНЬ)
		КОНЕЦ, 0) КАК ОстатокДнейПериодС,
	ЕСТЬNULL(ВЫБОР
			КОГДА НЕ КОНЕЦПЕРИОДА(&ПериодПо, МЕСЯЦ) = &ПериодПо
				ТОГДА РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ПериодПо, МЕСЯЦ), &ПериодПо, ДЕНЬ) + 1
		КОНЕЦ, 0) КАК ОстатокДнейПериодПо,
	НАЧАЛОПЕРИОДА(&ПериодС, МЕСЯЦ) КАК НачалоМесяцаПериодС,
	КОНЕЦПЕРИОДА(&ПериодС, МЕСЯЦ) КАК КонецоМесяцаПериодС,
	РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ПериодС, МЕСЯЦ), КОНЕЦПЕРИОДА(&ПериодС, МЕСЯЦ), ДЕНЬ) + 1 КАК КоличествоДнейПериодС,
	РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ПериодПо, МЕСЯЦ), КОНЕЦПЕРИОДА(&ПериодПо, МЕСЯЦ), ДЕНЬ) + 1 КАК КоличествоДнейПериодПо
ПОМЕСТИТЬ ТаблицаПериодов
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
	ТаблицаПериодов.ПериодС,
	ТаблицаПериодов.ПериодПо,
	ТаблицаПериодов.КоличествоПолныхМесяцев,
	ТаблицаПериодов.ОстатокДнейПериодС,
	ТаблицаПериодов.ОстатокДнейПериодПо,
	ТаблицаПериодов.КоличествоДнейПериодС,
	ТаблицаПериодов.КоличествоДнейПериодПо,
	ВЫРАЗИТЬ(&Цена / ТаблицаПериодов.КоличествоДнейПериодС КАК ЧИСЛО(15, 2)) КАК ЦенаДняПериодС,
	ВЫРАЗИТЬ(&Цена / ТаблицаПериодов.КоличествоДнейПериодПо КАК ЧИСЛО(15, 2)) КАК ЦенаДняПериодПо,
	&Цена * ТаблицаПериодов.КоличествоПолныхМесяцев + (ВЫРАЗИТЬ(&Цена / ТаблицаПериодов.КоличествоДнейПериодС КАК ЧИСЛО(15, 2))) * ТаблицаПериодов.ОстатокДнейПериодС + (ВЫРАЗИТЬ(&Цена / ТаблицаПериодов.КоличествоДнейПериодПо КАК ЧИСЛО(15, 2))) * ТаблицаПериодов.ОстатокДнейПериодПо КАК Сумма
ИЗ
	ТаблицаПериодов КАК ТаблицаПериодов

разность периодов период стоимость

См. также

SALE! 20%

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

13000 10400 руб.

02.09.2020    121557    670    389    

709

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

Запросы СКД Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    5738    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    1999    2    Yashazz    0    

29

Запрос 1С copilot

Инструментарий разработчика Запросы Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6276    30    mkalimulin    25    

49

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1739    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

Запросы Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5382    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16161    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. AAZ 5 13.05.15 09:40 Сейчас в теме
за 15 дней из полного 30 дневного месяца из 100 получается 49,95, разве не ровно половина должна быть?
2. maxis33 45 13.05.15 11:07 Сейчас в теме
Главная ошибка это то, что расчет идет в днях. Для месячной ставки расчет необходимо делать в месяцах.
т.е. в расчете должно быть не 1 мес и 3 дня, а 1.1434 мес
решал подобную задачу позавчера, только для ЛЕТ а не месяцев. Количество лет получал по формуле

ВЫБРАТЬ (РАЗНОСТЬДАТ(&ДатаНачалаАренды, КОНЕЦПЕРИОДА(&ДатаНачалаАренды, ГОД), ДЕНЬ) + 1)
/ (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаНачалаАренды, ГОД), КОНЕЦПЕРИОДА(&ДатаНачалаАренды, ГОД), ДЕНЬ) + 1)
+ (РАЗНОСТЬДАТ(&ДатаНачалаАренды, &ДатаОкончанияАренды, ГОД) - 1)
+ (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаОкончанияАренды, ГОД), &ДатаОкончанияАренды, ДЕНЬ) + 1)
/ (РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаОкончанияАренды, ГОД), КОНЕЦПЕРИОДА(&ДатаОкончанияАренды, ГОД), ДЕНЬ) + 1)


для месяцев думаю по аналогии. Смысл такой:
для ДатыНачала определяем количество входящих дней в году "даты начала" и делим на количество дней в году всего, (т.е. для 01.02.2015 будет 11 месяцев, т.е. 0,9 (примерно) лет
затем прибавляем количество полных лет (РАЗНОСТЬДАТ(&ДатаНачалаАренды, &ДатаОкончанияАренды, ГОД) - 1)
затем прибавляем для даты окончания количество лет в последнем году
3. AAZ 5 13.05.15 11:16 Сейчас в теме
я делал среднечасовую * колвочасов = получалось точно
Оставьте свое сообщение