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

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))) * ТаблицаПериодов.ОстатокДнейПериодПо КАК Сумма
ИЗ
	ТаблицаПериодов КАК ТаблицаПериодов

Вступайте в нашу телеграмм-группу Инфостарт

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)

Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

16500 руб.

02.09.2020    278306    1571    423    

1206

Инструментарий разработчика Запросы Разработчик 1С 8.3 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Структура запроса. Обработка визуально показывает, из какого количества подзапросов состоит запрос.

2 стартмани

06.07.2026    4441    59    XSlava    20    

46

Запросы Разработчик 1С 8.3 Россия Бесплатно (free)

Визуальный «Конструктор запроса» 1С, встроенный прямо в VS Code, — аналог конструктора из Конфигуратора и EDT, но без запуска платформы. Расширение читает конфигурацию, выгруженную в файлы, позволяет собрать запрос мышью и генерирует корректный текст на языке запросов 1С (SDBL). Открывает уже существующий текст запроса из кода для правки и — что особенно ценно — сохраняет комментарии при цикле «открыть - править - сохранить». Подходит тем, кто пишет код 1С в VS Code, держит под рукой множество проектов и не хочет ради одного запроса запускать тяжёлый Конфигуратор или EDT.

26.06.2026    10026    Alex_YAM    7    

33

WEB-интеграция Запросы Разработчик 1С 8.3 Абонемент ($m)

Post1C - это внешняя обработка, которая превращает 1С в полноценный инструмент для тестирования REST API. Всё управление сосредоточено в одном окне: настройка запроса, выполнение, просмотр ответа и генерация кода - без переключения между формами. Аналог Postman, но работающий в привычной среде 1С.

1 стартмани

02.04.2026    3860    94    priem_nv    27    

67

Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    13093    163    zup_dev    32    

86

Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    7405    25    XilDen    12    

29

Обновление 1С Запросы Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

3 стартмани

06.02.2025    6640    39    XilDen    26    

42
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. AAZ 5 13.05.15 09:40 Сейчас в теме
за 15 дней из полного 30 дневного месяца из 100 получается 49,95, разве не ровно половина должна быть?
2. maxis33 46 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 Сейчас в теме
я делал среднечасовую * колвочасов = получалось точно
Для отправки сообщения требуется регистрация/авторизация