Имя: Пароль:
1C
 
Какой результат по идее верный должен быть при получении ближайшей раб даты в прошлое?
0 ZloyBrawler
 
18.03.26
09:27
&НаСервере
Процедура Команда1НаСервере()
    
    НекаяДата = '20260316';
    
    ПроизводственныйКалендарь = Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ");
    
    ПараметрыПолученияБлижайшихРабочихДат = КалендарныеГрафики.ПараметрыПолученияБлижайшихРабочихДат(ПроизводственныйКалендарь);
    
    ПараметрыПолученияБлижайшихРабочихДат.ПолучатьПредшествующие = Истина; // зрим в прошлое
    ПараметрыПолученияБлижайшихРабочихДат.ПолучатьДатыЕслиКалендарьНеЗаполнен = Истина; // если календарь не заполнен, получаем из дефолтных значений
    
    СоответвиеРабочиеДни = КалендарныеГрафики.БлижайшиеРабочиеДаты(
        ПроизводственныйКалендарь,
        ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(НекаяДата),
        ПараметрыПолученияБлижайшихРабочихДат);
    
    ПредыдущийРабочийДень = СоответвиеРабочиеДни.Получить(НекаяДата);
    
    Сообщить(СтрШаблон("Для рабочего дня %1 найден предыдущий рабочий день %2", НекаяДата, ПредыдущийРабочийДень));
    
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
    Команда1НаСервере();
КонецПроцедуры


Прога выдает, что для 16.03.2026 ближайший раб день в прошлое, это 16.03.2026

ИТС поддержка отказывается такой пример рассматривать.

Наверное я не понимаю как должна работать сия функция?

Ошибка вообще в функции другой ВыборкаБлижайшихРабочихДат

Там знак меньше или равно следовало бы поменять на меньше
Да и знак больше или равно смущает, вроде поиск в будущее, а дальше текущего дня дату можем не получить, если она сама рабочая. То есть функция не позволяет найти дату в будущее, если мне нужно условно работы не сегодня выполнить, а в ближайший следующий раб день.
1 Гена
 
гуру
18.03.26
09:33
(0) Время анизотропично, т.е. с датами надо работать только прибавлением к прошлой таковой.
Вычитанием от сегодня в прошлое даже не думайте пользоваться если плотность не постоянная (как для рабочих дней). Вот у календарных дней плотность постоянная.
2 ZloyBrawler
 
18.03.26
09:32
Мне для отчета нужна вообще дата ближайшая из прошлого. Пока выкрутился тем что беру дату отчета - 1 день и уже для нее ищу ближайшую раб дату, где она сама тоже может быть ей и этот результат в принципе пойдет, однако смущают костыли
3 Garykom
 
гуру
18.03.26
09:39
Лично взял бы некий максимально возможный интервал "нерабочих дней"
Например месяц

Затем банально
ДатаНачала = ТекущаяДатаСеанса() - Месяц();
ДатаОкончания = ТекущаяДатаСеанса() - 1 День;
Получаем все рабочие дни за этот интервал
Из них выбираем самый последний - это и есть нужный нам "ближайший раб день в прошлое"
4 Гена
 
гуру
18.03.26
09:51
(3) Лучше не месяц, а лет 10 с запасом для длинных декретниц.
5 ZloyBrawler
 
18.03.26
09:59
(4) например сегодня ПН, у меня задача просто показать платежи прошлого дня, а если это ВС то платежей 0 да и СБ ноль, а хотят за ПТ, но и можно ПТ + СБ + ВС
А еще праздники бывают, тоже эти дни в период включить можно от первого предыдущего раб дня
Длинных декретниц нет))) есть две короткие и на удаленке ща в пол смены робят)))
Задачу та я решил, просто костыли не люблю. 1С потом раздуплит, что ошибка у них, исправят, а у меня сломается)))
6 Гена
 
гуру
18.03.26
10:03
(5) Гарри же ответил: берёте интервал с запасом, нормально в нём по стреле времени все рабочие дни, максимальная и будет последняя.
А вычитать не надо.
7 ZloyBrawler
 
18.03.26
10:22
(6) Так типовая так считай и делает, только она дура переданный день тоже учитывает потому и приходится минусовать один день, чтобы не больше него могла выдать результат.

Вопрос в топике был вообще, согласны вы или нет, что для 16.03 понедельник предыдущий первый раб день это тоже 16.03, а не 13.03 прошлая пятница
Типовой код 1С верный?
8 Михаил_
 
18.03.26
10:27
(7) К функции ОМ "КалендарныеГрафики.БлижайшиеРабочиеДаты" есть описание, что если передана рабочая дата, то она же и возвращается
9 ZloyBrawler
 
18.03.26
10:58
(8) да это тоже уже увидел
Тогда минус 1 день к передаваемой в эту функцию дате будет доооолго работать и счастливо
10 ZloyBrawler
 
18.03.26
10:59
(8) вообще конечно явное противоречие есть в названии функции и то какой она результат возвращает
11 ZloyBrawler
 
18.03.26
11:03
(8) я бы принял как не ошибку наличие еще одного параметра, булев, где указанная дата может быть результатом, если она сама по себе рабочая
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.