Вычитание рабочих дней от текущей даты

08.09.16

Разработка - Универсальные функции

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

В общем модуле БСП КалендарныеГрафики есть функции, которые позволяют получить даты по календарю, но все они выполняются со сдвигом "вправо", то есть позволяют получить дату после той, что была передана. Я написал простенькую функцию, которая позволяет получить рабочий день по календарю ранее переданной даты со сдвигом на указанное количество рабочих дней. Может, кому-то и будет полезно.


// Функция возвращает дату, которая меньше указанной даты на количество рабочих дней по выбранному графику
//
// Параметры
//	Календарь		- календарь, который необходимо использовать, тип СправочникСсылка.Календари
//	ДатаНачала			- дата, от которой нужно рассчитать количество дней, тип Дата
//	КоличествоДней	- количество дней, на которые нужно уменьшить дату начала, тип Число
//	ВызыватьИсключение - булево, если Истина вызывается исключение в случае незаполненного календаря
//  НеУчитыватьДатуНачала - Булево, если Истина,  берётся предыдущая рабочая дата, если ложь, то учитывается сама дата начала
//
// Возвращаемое значение
//	Дата			- дата, уменьшенная на количество рабочих дней по графику
//	Если выбранный календарь не заполнен, и ВызыватьИсключение = Ложь, возвращается Неопределено
//
Функция ПолучитьПредыдущуюРабочуюДатуПоКалендарю(Календарь, ДатаНачала, КоличествоДней, НеУчитыватьДатуНачала=Ложь,  ВызыватьИсключение=Истина) экспорт
	Если НЕ ЗначениеЗаполнено(Календарь) И  ВызыватьИсключение Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ИскомаяДата = Дата(1,1,1);
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	КалендарныеГрафики.ДатаГрафика КАК ДатаГрафика
	|ИЗ
	|	РегистрСведений.КалендарныеГрафики КАК КалендарныеГрафики
	|ГДЕ
	|	КалендарныеГрафики.Календарь = &Календарь
	|	И КалендарныеГрафики.Год = &Год
	|	И КалендарныеГрафики.ДеньВключенВГрафик = ИСТИНА
	|	И КалендарныеГрафики.ДатаГрафика <= &ДатаГрафика
	|
	|УПОРЯДОЧИТЬ ПО
	|	ДатаГрафика УБЫВ";
	Запрос.УстановитьПараметр("Календарь",Календарь);
	Запрос.УстановитьПараметр("Год",Год(ДатаНачала));
	Запрос.УстановитьПараметр("ДатаГрафика",ДатаНачала);
	
	Выгрузка = Запрос.Выполнить().Выгрузить();
	
	//проверим, что начальная дата входит в график, если не входит, то текущий день учитывать нельзя!
	МассивДат = Выгрузка.НайтиСтроки(Новый Структура("ДатаГрафика",ДатаНачала));
	Если МассивДат.Количество() =0 Тогда // не входит! переопределим НеУчитыватьДатуНачала  в ложь!
		НеУчитыватьДатуНачала = Ложь;
	КонецЕсли;		
	
	ИскомаяДата = Выгрузка[КоличествоДней - ?(НеУчитыватьДатуНачала,0,1)].ДатаГрафика; 
	
	Возврат ИскомаяДата;
КонецФункции // ПолучитьПредыдущуюРабочуюДатуПоКалендарю()

рабочий день получение рабочего дня вычитание рабочего дня предыдущая рабочая дата по календарю

См. также

Вставляем картинку из буфера обмена (платформа 1С 8.3.24)

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

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    2676    0    John_d    8    

55

GUID в 1С 8.3 - как с ними быть

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

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    4613    atdonya    22    

45

Переоткрытие внешних обработок

Универсальные функции Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    3962    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8840    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2077    21    progmaster    7    

3

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    16148    133    sapervodichka    112    

129

Система контроля ведения учета [БСП]

Универсальные функции Механизмы типовых конфигураций БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

В данном материале рассмотрим типовой алгоритм подсистемы контроля учета БСП в конфигурациях на примерах.

18.07.2022    7243    quazare    8    

109
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. white-mount 08.09.16 20:44 Сейчас в теме
Для создания документов "задним числом" или для отчётов?
2. alex-l19041 8 09.09.16 15:49 Сейчас в теме
запрос возвращает все рабочие дни с начала года по ДатаНачала. А ведь требуется только одна дата...
3. Razrab1c 41 09.09.16 19:20 Сейчас в теме
(2) alex-l19041, при чем тут запрос? Автор публикует функцию, она вроде бы возвращает то что нужно. Читайте внимательнее код.
rpgshnik; +1 Ответить
4. alex-l19041 8 12.09.16 12:35 Сейчас в теме
(3) Razrab1c, просто было бы интересно, если бы удалось решить одним запросом...
5. wolfsoft 2421 14.09.16 08:19 Сейчас в теме
(4) alex-l19041, ну как-то так

выбрать все рабочие даты меньше указанной
поместить ВсеРабочиеДаты

выбрать Минимум(Дата)
Из
(выбрать первые [НужноеКоличествоРабочихДней]
из ВсеРабочиеДаты
упорядочить по убыванию даты)
tdml; rpgshnik; Razrab1c; yghmd; Serj1C; +5 Ответить
6. fvadim 9 14.09.16 10:09 Сейчас в теме
скучно. я в запросе отбирал рабочие даты до нужной, нумеровал по порядку и вычитал необходимое количество дней из номера. просто мне эти даты нужны были дальше в запросе.
7. pepe 62 15.07.20 17:37 Сейчас в теме
(5)Так работать не будет. Последовательность выполнения запроса 1С: "Сначала выполняется расчет агрегатных функций без группировки, затем команды ПЕРВЫЕ <ХХ>– Упорядочить По" https://infostart.ru/public/527529/?detail=Y
Проверил, все так и работает, как в статье! Идея прикольная, но не работает.
8. pepe 62 15.07.20 17:46 Сейчас в теме
Данный запрос не будет работать с началом года, например мы хотим получить
ПолучитьПредыдущуюРабочуюДатуПоКалендарю(Календарь, 02.01.2020, 7, Ложь, Истина)
процедура упадет с ошибкой, я понимаю Автора, он хочет уменьшить выборку только этим годом, но это приводит к ошибке. Я сам сейчас столкнулся с данной задачей и думаю как решить!
Оставьте свое сообщение