|
Какой результат по идее верный должен быть при получении ближайшей раб даты в прошлое? 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) я бы принял как не ошибку наличие еще одного параметра, булев, где указанная дата может быть результатом, если она сама по себе рабочая
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |