Добавить к дате рабочие дни в запросе
Собственно запрос получился такой:
ВЫБРАТЬ Даты.Дата,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК КоличествоРабочихДней, МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК ДатаКалендаря, РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря КАК ДатаКалендаряДляГруппировки ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ВНУТРЕННЕЕ СОЕДИНЕНИЕ Даты КАК Даты ПО (Даты.Дата <= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) И (ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, &ГлубинаДней) > РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь1 ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря ГДЕ (РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)) СГРУППИРОВАТЬ ПО РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря, Даты.Дата ИМЕЮЩИЕ МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
Таблица "Даты" может содержать любые данные с датой в виде отдельного поля или в виде реквизита документа. Параметр "ГлубинаДней" определяет, как глубоко вперёд просматривать даты относительно входящих дат.
Вот пример работы для одной даты 28.11.2012
| Дата | КоличествоРабочихДней | ДатаКалендаря | ДатаКалендаряДляГруппировки | |
| 28.11.2012 | 1 | 28.11.2012 | 28.11.2012 | |
| 28.11.2012 | 2 | 29.11.2012 | 29.11.2012 | |
| 28.11.2012 | 3 | 30.11.2012 | 30.11.2012 | |
| 28.11.2012 | 4 | 03.12.2012 | 03.12.2012 | |
| 28.11.2012 | 5 | 04.12.2012 | 04.12.2012 | |
| 28.11.2012 | 6 | 05.12.2012 | 05.12.2012 | |
| 28.11.2012 | 7 | 06.12.2012 | 06.12.2012 | |
| 28.11.2012 | 8 | 07.12.2012 | 07.12.2012 | |
| 28.11.2012 | 9 | 10.12.2012 | 10.12.2012 | |
| 28.11.2012 | 10 | 11.12.2012 | 11.12.2012 | |
| 28.11.2012 | 11 | 12.12.2012 | 12.12.2012 | |
| 28.11.2012 | 12 | 13.12.2012 | 13.12.2012 | |
| 28.11.2012 | 13 | 14.12.2012 | 14.12.2012 | |
| 28.11.2012 | 14 | 17.12.2012 | 17.12.2012 | |
| 28.11.2012 | 15 | 18.12.2012 | 18.12.2012 | |
| 28.11.2012 | 16 | 19.12.2012 | 19.12.2012 | |
| 28.11.2012 | 17 | 20.12.2012 | 20.12.2012 | |
| 28.11.2012 | 18 | 21.12.2012 | 21.12.2012 | |
| 28.11.2012 | 19 | 24.12.2012 | 24.12.2012 | |
| 28.11.2012 | 20 | 25.12.2012 | 25.12.2012 | |
| 28.11.2012 | 21 | 26.12.2012 | 26.12.2012 | |
| 28.11.2012 | 22 | 27.12.2012 | 27.12.2012 |
В конец запроса осталось добавить условие
И КОЛИЧЕСТВО(РАЗЛИЧНЫЕРегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = &РабочихДней
и отобрать данные по нужному количеству рабочих дней в параметре "РабочихДней"
Ну и в конце полная верия запроса, если захочется опробовать в консоли запросов
ВЫБРАТЬ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Дата ПОМЕСТИТЬ Даты ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ГДЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря В(&ВходящиеДаты) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Даты.Дата, КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК КоличествоРабочихДней, МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК ДатаКалендаря, РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря КАК ДатаКалендаряДляГруппировки ИЗ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь ВНУТРЕННЕЕ СОЕДИНЕНИЕ Даты КАК Даты ПО (Даты.Дата <= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) И (ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, &ГлубинаДней) > РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь1 ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря ГДЕ (РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)) СГРУППИРОВАТЬ ПО РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря, Даты.Дата ИМЕЮЩИЕ МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря И КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = &РабочихДней
Вступайте в нашу телеграмм-группу Инфостарт
Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
См. также
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 286065 1608 423
Инструментарий разработчика Запросы Разработчик 1С 8.3 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)
Структура запроса. Обработка визуально показывает, из какого количества подзапросов состоит запрос.
2 стартмани
06.07.2026 4994 65 XSlava 20
Запросы Разработчик 1С 8.3 Россия Бесплатно (free)
Визуальный «Конструктор запроса» 1С, встроенный прямо в VS Code, — аналог конструктора из Конфигуратора и EDT, но без запуска платформы. Расширение читает конфигурацию, выгруженную в файлы, позволяет собрать запрос мышью и генерирует корректный текст на языке запросов 1С (SDBL). Открывает уже существующий текст запроса из кода для правки и — что особенно ценно — сохраняет комментарии при цикле «открыть - править - сохранить». Подходит тем, кто пишет код 1С в VS Code, держит под рукой множество проектов и не хочет ради одного запроса запускать тяжёлый Конфигуратор или EDT.
26.06.2026 10720 Alex_YAM 7
Нейросети Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 Абонемент ($m)
Консоль запросов 1.0: добавлен ИИ-помощник (запрос в DeepSeek), который помогает быстрее получать каркас Запроса 1С Сформулируйте простое описание; нажмите кнопку – получите результат прямо в консоли. Где дальше его можно дорабатывать и тестировать. 28.5.2026 Добавил "Консоль запросов 2.0" (запрос в DeepSeek + Claude) 4.10.2026 Обновил "Консоль запросов 2.0"
3 стартмани
20.05.2026 9616 46 German4739 72
WEB-интеграция Запросы Разработчик 1С 8.3 Абонемент ($m)
Post1C - это внешняя обработка, которая превращает 1С в полноценный инструмент для тестирования REST API. Всё управление сосредоточено в одном окне: настройка запроса, выполнение, просмотр ответа и генерация кода - без переключения между формами. Аналог Postman, но работающий в привычной среде 1С.
1 стартмани
02.04.2026 4700 106 priem_nv 27
Запросы Механизмы типовых конфигураций Разработчик 1С:Предприятие 8 1С:Управление торговлей 11 Россия Бесплатно (free)
Предлагается обзор работы с объектной моделью запроса по схемам запросов типовым функционалом УТ 11.5.
09.10.2025 13447 aximo 18
Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)
QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.
1 стартмани
16.05.2025 13717 168 zup_dev 32
Инструментарий разработчика Запросы Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 Абонемент ($m)
В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.
2 стартмани
05.03.2025 7762 25 XilDen 12
ВЫБРАТЬ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Дата
ПОМЕСТИТЬ Даты
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря В(&ВходящиеДаты)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Даты.Дата,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК КоличествоРабочихДней,
ВЫБОР
КОГДА &ОтнятьДни
ТОГДА МИНИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
ИНАЧЕ МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
КОНЕЦ КАК ДатаКалендаря,
РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря КАК ДатаКалендаряДляГруппировки
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Даты КАК Даты
ПО (ВЫБОР
КОГДА &ОтнятьДни
ТОГДА Даты.Дата >= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ИНАЧЕ Даты.Дата <= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
КОНЕЦ)
И (ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, &ГлубинаДней) > РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь1
ПО (ВЫБОР
КОГДА &ОтнятьДни
ТОГДА РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
ИНАЧЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
КОНЕЦ)
ГДЕ
(РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий))
СГРУППИРОВАТЬ ПО
РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря,
Даты.Дата
ИМЕЮЩИЕ
ВЫБОР
КОГДА &ОтнятьДни
ТОГДА МИНИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
ИНАЧЕ МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
КОНЕЦ И
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = &РабочихДней Показатьили так
ВЫБРАТЬ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК Дата
ПОМЕСТИТЬ Даты
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ГДЕ
РегламентированныйПроизводственныйКалендарь.ДатаКалендаря В(&ВходящиеДаты)
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Даты.Дата,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК КоличествоРабочихДней,
ВЫБОР
КОГДА &РабочихДней < 0
ТОГДА МИНИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
ИНАЧЕ МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
КОНЕЦ КАК ДатаКалендаря,
РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря КАК ДатаКалендаряДляГруппировки
ИЗ
РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Даты КАК Даты
ПО (ВЫБОР
КОГДА &РабочихДней < 0
ТОГДА Даты.Дата >= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
ИНАЧЕ Даты.Дата <= РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
КОНЕЦ)
И (ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, &ГлубинаДней) > РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь1
ПО (ВЫБОР
КОГДА &РабочихДней < 0
ТОГДА РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
ИНАЧЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
КОНЕЦ)
ГДЕ
(РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий))
СГРУППИРОВАТЬ ПО
РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря,
Даты.Дата
ИМЕЮЩИЕ
ВЫБОР
КОГДА &РабочихДней < 0
ТОГДА МИНИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
ИНАЧЕ МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
КОНЕЦ И
ВЫБОР
КОГДА &РабочихДней < 0
ТОГДА КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = -&РабочихДней
ИНАЧЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = &РабочихДней
КОНЕЦ Показать
Функция ОтсчитатьРабочиеДни(ДатаОтсчета,Отсрочка)
Запрос = Новый Запрос;
Запрос.Текст = "Select
| ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь,
| ДанныеПроизводственногоКалендаря.Дата,
| ДанныеПроизводственногоКалендаря.Год,
| ДанныеПроизводственногоКалендаря.ВидДня,
| ДанныеПроизводственногоКалендаря.ДатаПереноса
|
|into
| cal
|from
| РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
|where
| ДанныеПроизводственногоКалендаря.Дата between &ДатаОтсчета
| and DateAdd(&ДатаОтсчета, день, &Отсрочка*2 + 12)
|;
|
|Select
|min(дата) датаОтсрочки
|from(
|Select
|
|c1.дата дата,
|
|count(*) -1 РабочихДней
|
|from cal c1
|left join cal c2
|on (c2.ВидДня = value(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный) or c2.ВидДня = value(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий))
|and c1.дата>=c2.дата
|group by c1.дата
|having count(*)= &Отсрочка+1
|) tt
|group by РабочихДней";
попытка
Запрос.УстановитьПараметр("ДатаОтсчета", ДатаОтсчета);
Запрос.УстановитьПараметр("Отсрочка", Отсрочка);
Результат = Запрос.Выполнить().Выгрузить();
Возврат Результат[0].датаОтсрочки;
исключение
конецпопытки;
конецФункции
Показатьполезно будет добавить условие типа (отмечено жирным)
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь1
ПО РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря
И (ДОБАВИТЬКДАТЕ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря, ДЕНЬ, &ГлубинаДней) > РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря)
иначе много доп сведений (дат) добавляется, которые не очень-то нужны,
разница в скорострельности ощутима на 3-х значениях В (&ВходящиеДаты)
Автору спасибо, очень помогло
Если по запросу установить входящую дату 22.02.2017 и попросить добавить к дате 2 рабочих дня то запрос выдает 27.02.2017.
Ну а должен наверно 28.02.2017
08.02.2015 + 7 дней получаю 13.02.2015 хотя явно должно быть 16.02.2015 (это если учитывать начальную дату 08.02.2015)
но эта дата является выходным днем, поэтому учитывать ее нельзя, а в этом случае результатом должен быть 17.02.2015
но ни как не 13.02.2015.
Короче не работает.
ВЫБРАТЬ
ПК.Дата КАК Дата,
ПК.ВидДня КАК ВидДня
ПОМЕСТИТЬ Рабочие
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ПК
ГДЕ
ПК.Дата МЕЖДУ ДОБАВИТЬКДАТЕ(&тДата, МЕСЯЦ, -2) И ДОБАВИТЬКДАТЕ(&тДата, ДЕНЬ, 15)
И ПК.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
;
ВЫБРАТЬ
Даты.Дата,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.Дата)-1 КАК КоличествоРабочихДней,
МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.Дата) КАК ДатаКалендаря,
РегламентированныйПроизводственныйКалендарь1.Дата КАК ДатаКалендаряДляГруппировки
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Рабочие КАК Даты
ПО (РегламентированныйПроизводственныйКалендарь.Дата Между Даты.Дата И ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, 20))
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеПроизводственногоКалендаря КАК РегламентированныйПроизводственныйКалендарь1
ПО РегламентированныйПроизводственныйКалендарь.Дата <= РегламентированныйПроизводственныйКалендарь1.Дата
И ДОБАВИТЬКДАТЕ(Даты.Дата, ДЕНЬ, 20) > РегламентированныйПроизводственныйКалендарь1.Дата
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.апкОбщиеНастройки КАК ЧасыОплатыЗаявки
ПО (ЧасыОплатыЗаявки.Настройка = ЗНАЧЕНИЕ(ПланВидовХарактеристик.апкОбщиеНастройки.ЧасовОтСозданияЗаявкиДСДоВыполненияЗаказаРассылка))
ГДЕ
РегламентированныйПроизводственныйКалендарь.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
СГРУППИРОВАТЬ ПО
РегламентированныйПроизводственныйКалендарь1.Дата,
Даты.Дата,
ЧасыОплатыЗаявки.Значение
ИМЕЮЩИЕ
МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.Дата) = РегламентированныйПроизводственныйКалендарь1.Дата
И КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РегламентированныйПроизводственныйКалендарь.Дата)-1 = ВЫРАЗИТЬ(ВЫРАЗИТЬ(ЧасыОплатыЗаявки.Значение КАК ЧИСЛО(10, 0))/24 КАК ЧИСЛО(10, 0)) Показатьдобавил условие на соединение РегламентированныйПроизводственныйКалендарь1
ВЫБРАТЬ
&ДатаККоторойНужноДобавитьДни КАК Дата,
&КоличествоДней КАК КоличествоДней
ПОМЕСТИТЬ втДаты
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДанныеКалендаря.Дата
ПОМЕСТИТЬ втДанныеКалендаря
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеКалендаря
ГДЕ
ДанныеКалендаря.ПроизводственныйКалендарь.Код = "РФ"
И (ДанныеКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ ДанныеКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
И ДанныеКалендаря.Дата >= &ДатаДляКалендаря
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДанныеКалендаря1.Дата,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеКалендаря2.Дата) КАК Индекс
ПОМЕСТИТЬ втДанныеКалендаряСИндексами
ИЗ
втДанныеКалендаря КАК ДанныеКалендаря1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ втДанныеКалендаря КАК ДанныеКалендаря2
ПО ДанныеКалендаря1.Дата >= ДанныеКалендаря2.Дата
СГРУППИРОВАТЬ ПО
ДанныеКалендаря1.Дата
ИНДЕКСИРОВАТЬ ПО
Индекс
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ.Дата,
ВТ.КоличествоДней,
ДанныеКалендаря.Индекс КАК Индекс
ПОМЕСТИТЬ втДатыСИндексами
ИЗ
втДаты КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ втДанныеКалендаряСИндексами КАК ДанныеКалендаря
ПО ВТ.Дата = ДанныеКалендаря.Дата
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Даты.Дата,
ДанныеКалендаря.Дата КАК ДатаПослеДобавленияДней
ИЗ
втДатыСИндексами КАК Даты
ЛЕВОЕ СОЕДИНЕНИЕ втДанныеКалендаряСИндексами КАК ДанныеКалендаря
ПО (ДанныеКалендаря.Индекс - Даты.Индекс = Даты.КоличествоДней)
ПоказатьВЫБРАТЬ
ДАТАВРЕМЯ(2024, 1, 1) КАК Дата,
10 КАК КоличествоДней
ПОМЕСТИТЬ втДаты
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2024, 1, 2),
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2024, 1, 4),
10
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2024, 4, 30),
15
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2024, 4, 27),
15
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2024, 5, 1),
15
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2024, 5, 31),
12
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
ДАТАВРЕМЯ(2024, 6, 1),
12
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДанныеКалендаря.Дата КАК Дата,
ВЫБОР
КОГДА ДанныеКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
ИЛИ ДанныеКалендаря.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК РабочийДень
ПОМЕСТИТЬ втДанныеКалендаря
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеКалендаря
ГДЕ
ДанныеКалендаря.ПроизводственныйКалендарь.Код = "РФ"
И ДанныеКалендаря.Дата >= &ДатаДляКалендаря
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ДанныеКалендаря1.Дата КАК Дата,
ДанныеКалендаря1.РабочийДень КАК РабочийДень,
СУММА(ДанныеКалендаря2.РабочийДень) КАК Индекс
ПОМЕСТИТЬ втДанныеКалендаряСИндексами
ИЗ
втДанныеКалендаря КАК ДанныеКалендаря1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ втДанныеКалендаря КАК ДанныеКалендаря2
ПО ДанныеКалендаря1.Дата >= ДанныеКалендаря2.Дата
СГРУППИРОВАТЬ ПО
ДанныеКалендаря1.Дата,
ДанныеКалендаря1.РабочийДень
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ВТ.Дата КАК Дата,
ВТ.КоличествоДней КАК КоличествоДней,
ДанныеКалендаря.РабочийДень КАК РабочийДень,
ДанныеКалендаря.Индекс КАК Индекс
ПОМЕСТИТЬ втДатыСИндексами
ИЗ
втДаты КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ втДанныеКалендаряСИндексами КАК ДанныеКалендаря
ПО ВТ.Дата = ДанныеКалендаря.Дата
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
втДатыСИндексами.Дата КАК Дата,
втДатыСИндексами.КоличествоДней КАК КоличествоДней,
втДанныеКалендаряСИндексами.Дата КАК ДатаПослеДобавленияДней,
втДанныеКалендаряСИндексами.РабочийДень КАК РабочийДень
ИЗ
втДатыСИндексами КАК втДатыСИндексами
ЛЕВОЕ СОЕДИНЕНИЕ втДанныеКалендаряСИндексами КАК втДанныеКалендаряСИндексами
ПО (втДанныеКалендаряСИндексами.Индекс - втДатыСИндексами.Индекс = втДатыСИндексами.КоличествоДней)
И (втДанныеКалендаряСИндексами.РабочийДень = 1)
УПОРЯДОЧИТЬ ПО
втДатыСИндексами.Дата ПоказатьПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных, ДанныеРасшифровки, Истина);
по причине:
Ошибка компоновки данных
по причине:
Ошибка инициализации
по причине:
Ошибка создания набора данных "НаборДанных1"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(53, 72)}: Поле не входит в группу "РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря"
МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = <<?>>РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря И
поправил вот так МАКСИМУМ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) = МАКСИМУМ(РегламентированныйПроизводственныйКалендарь1.ДатаКалендаря) И
т.к. ДатаКалендаря совпадает с ДатаКалендаряДляГруппировки в последующем СКД использую ДатаКалендаряДляГруппировки
а вообще автор красавчик сэкономил мне кучу времени и нервов
&НаСервереБезКонтекста
Функция ПолучитьДатуЧерезКоличествоРабочихДней(КоличествоДней)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ Первые 1000
| ДанныеПроизводственногоКалендаря.Дата КАК Дата
|ИЗ
| РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
|ГДЕ
| ДанныеПроизводственногоКалендаря.ВидДня <> ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Воскресенье)
| И ДанныеПроизводственногоКалендаря.ВидДня <> ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Праздник)
| И ДанныеПроизводственногоКалендаря.Дата >= &ТекущаяДата
|
|СГРУППИРОВАТЬ ПО
| ДанныеПроизводственногоКалендаря.Дата
|
|УПОРЯДОЧИТЬ ПО
| Дата";
Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДата()));
ТаблицаКалендарь = Запрос.Выполнить().Выгрузить();
Возврат(ТаблицаКалендарь[КоличествоДней].Дата);
КонецФункции
ПоказатьВЫБРАТЬ ПЕРВЫЕ 10
ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь КАК ПроизводственныйКалендарь,
ДанныеПроизводственногоКалендаря.Дата КАК Дата,
ДанныеПроизводственногоКалендаря.Год КАК Год,
ДанныеПроизводственногоКалендаря.ВидДня КАК ВидДня,
ДанныеПроизводственногоКалендаря.ДатаПереноса КАК ДатаПереноса
ПОМЕСТИТЬ вт_дни
ИЗ
РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПроизводственныеКалендари КАК ПроизводственныеКалендари
ПО (ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь = ПроизводственныеКалендари.Ссылка)
ГДЕ
ДанныеПроизводственногоКалендаря.Дата > &Дата
И ДанныеПроизводственногоКалендаря.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.предпраздничный))
И ПроизводственныеКалендари.Наименование = "Российская Федерация"
УПОРЯДОЧИТЬ ПО
Дата
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
МАКСИМУМ(вт_дни.Дата) КАК Дата
ИЗ
вт_дни КАК вт_дни ПоказатьСамую первую "10" в запросе заменяем на кол-во прибавляемых дней
Функция ВычестьРабочиеДни(Дата, КолДней) Экспорт
Текст =
"ВЫБРАТЬ ПЕРВЫЕ 3
| ДанныеПроизводственногоКалендаря.Дата КАК Дата
|ПОМЕСТИТЬ ВТ_дни
|ИЗ
| РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
|ГДЕ
| ДанныеПроизводственногоКалендаря.Дата < &Дата
| И ДанныеПроизводственногоКалендаря.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
| И ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь.Наименование = ""Российская Федерация""
|
|УПОРЯДОЧИТЬ ПО
| Дата УБЫВ
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МИНИМУМ(ВТ_дни.Дата) КАК Дата
|ИЗ
| ВТ_дни КАК ВТ_дни";
Текст = СтрЗаменить(Текст, "3", Формат(КолДней,"ЧГ="));
Запрос = Новый Запрос;
Запрос.Текст = Текст;
Запрос.УстановитьПараметр("Дата", Дата);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
НовДата = Выборка.Дата;
Иначе
НовДата = Дата;
КонецЕсли;
Возврат НовДата;
КонецФункции
ПоказатьФункция ДобавитьРабочиеДни(Дата, КолДней) Экспорт
Текст =
"ВЫБРАТЬ ПЕРВЫЕ 3
| ДанныеПроизводственногоКалендаря.Дата КАК Дата
|ПОМЕСТИТЬ ВТ_дни
|ИЗ
| РегистрСведений.ДанныеПроизводственногоКалендаря КАК ДанныеПроизводственногоКалендаря
|ГДЕ
| ДанныеПроизводственногоКалендаря.Дата > &Дата
| И ДанныеПроизводственногоКалендаря.ВидДня В (ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий), ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный))
| И ДанныеПроизводственногоКалендаря.ПроизводственныйКалендарь.Наименование = ""Российская Федерация""
|
|УПОРЯДОЧИТЬ ПО
| Дата
|;
|
|//////////////////////////////////////////////////////////// ////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ВТ_дни.Дата) КАК Дата
|ИЗ
| ВТ_дни КАК ВТ_дни";
Текст = СтрЗаменить(Текст, "3", Формат(КолДней,"ЧГ="));
Запрос = Новый Запрос;
Запрос.Текст = Текст;
Запрос.УстановитьПараметр("Дата", Дата);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
НовДата = Выборка.Дата;
Иначе
НовДата = Дата;
КонецЕсли;
Возврат НовДата;
КонецФункции
ПоказатьКалендарныеГрафики.ОсновнойПроизводственныйКалендарь()Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 166349
Создание 16.12.12 21:45
Обновление 16.12.12 21:45
Просмотры 53217
Загрузки 0
Рейтинг
67
Комментарии 42
Код открыт Да
Рубрики Запросы
Кому Для всех
Тип файла Нет файла
Платформа 1С:Предприятие 8
Конфигурация 1C:Бухгалтерия
Операционная система Windows
Страна Россия
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)