|
|
Какой результат по идее верный должен быть при получении ближайшей раб даты в прошлое?
yurikmellon2, qwerty, ZloyBrawler, scanduta, Михаил_, X Leshiy, phabeZ, Ненавижу 1С, RomanYS, PR, Garykom, H A D G E H O G s, Галахад, alexxx961503, obs191, Kigo_Kigo, tir654, pavlika, Доминошник, Мультук, Гена, АгентБезопаснойНацио, SleepyHead, Vstur, kupec, Ногаминебить, Telcher, Timon1405, maxar, Bad_Aleks, maxab72, 2S, torgm, PLUT
| ☑ |
|
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) я бы принял как не ошибку наличие еще одного параметра, булев, где указанная дата может быть результатом, если она сама по себе рабочая
|
|