Имя: Пароль:
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) я бы принял как не ошибку наличие еще одного параметра, булев, где указанная дата может быть результатом, если она сама по себе рабочая
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан