Имя: Пароль:
1C
1С v8
Функция возвращающая выходные и праздничные дни
0 Dmitry_333
 
24.05.18
12:19
Добрый день.
Хотел было написать такую функцию для своей текущей потребности (принимает дату и, если она официальный нерабочий день, возвращает истину).
Но подумал, что это достаточно очевидная вещь и наверняка уже таковая есть.
Если так и есть, дайте пожалуйста ссылочку.
1 Волшебник
 
24.05.18
12:20
вот лентяй
2 Малыш Джон
 
24.05.18
12:21
(0) В конфигурациях как правило присутствует Производственный календарь или его аналоги. Обычно используют его.
3 Dmitry_333
 
24.05.18
12:24
(1) ну дык зачем лишний раз велосипед изобретать-))

(2) Спасибо!
4 Cool_Profi
 
24.05.18
12:24
Регламентированный производственный календарь - не. никогда не слышал
5 SleepyHead
 
гуру
24.05.18
12:45
(0) Смотри в общих модулях, наверняка есть подсистемя работы с календарями, и в ней все нужные функции для этого. В ЗУП точно есть.
6 Dmitry_333
 
24.05.18
12:56
Все оказалось не так просто. Работаю со специализированной конфой (мониторинг транспорта), и там нет производственного календаря.
Скорее всего в самом деле придется писать функцию.
Не подадите идею, откуда можно этот справочник заполнять?
Ну типа как загружаются курсы валют с сайта рбк.
7 Dmitry_333
 
24.05.18
12:57
*этот справочник имел ввиду календарь
8 Малыш Джон
 
24.05.18
13:00
(6) Обычно используют регистр сведений, так как, хотя набор праздничных дней стандартен(Новый год, 23 февраля, 8 марта и т.д.), но из года в год происходят переносы праздничных дней, в субботу работаем за понедельник - вот это вот всё.
Делай автозаполнение в начале года стандартными выходными и праздниками, а потом ручками вноси все переносы и изменения в соответствии с законодательством.
9 singlych
 
24.05.18
13:04
10 Temai
 
24.05.18
13:07
Держи, я сегодня добрый

Функция ДобавитьКДатеРабочиеДни(ПередаваемаяДата = Неопределено, КоличествоРабочихДней) Экспорт
    
    Если ПередаваемаяДата = Неопределено или ПередаваемаяДата = Дата(1,1,1) Тогда
        ПередаваемаяДата = ТекущаяДата();
    КонецЕсли;

    СледующийДень = НачалоДня(ПередаваемаяДата);
    //СледующийДень = ПередаваемаяДата+60*60*24;
    Пропущено = 0;
    
    СЦ=0;
    Для СЦ = 1 По КоличествоРабочихДней Цикл
        СледующийДень = СледующийДень+60*60*24;
        Если НЕ ЭтоРабочийДень(СледующийДень) Тогда
            Пропущено = Пропущено+1;
        КонецЕсли;
    КонецЦикла;
    
    Если Пропущено<>0 Тогда
        СледующийДень = ДобавитьКДатеРабочиеДни(СледующийДень,Пропущено);
    КонецЕсли;
    
    Возврат СледующийДень;
    
КонецФункции

Функция ЭтоРабочийДень(ПроверяемаяДата = Неопределено) Экспорт
    Если ПроверяемаяДата = Неопределено или ПроверяемаяДата = Дата(1,1,1) Тогда
        ПроверяемаяДата = ТекущаяДата();
    КонецЕсли;
    НаборЗаписей = РегистрыСведений.РегламентированныйПроизводственныйКалендарь.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.ДатаКалендаря.Установить(ПроверяемаяДата);
    НаборЗаписей.Прочитать();
    Если НаборЗаписей.Количество() > 0 Тогда
        ВидДня = НаборЗаписей[0].ВидДня;
        Если ВидДня  = Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий или ВидДня  = Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный Тогда
            Возврат Истина;
        Иначе
            Возврат Ложь;
        КонецЕсли;
    Иначе
        Возврат Истина;
    КонецЕсли;
    
КонецФункции
11 Dmitry_333
 
24.05.18
13:54
Всем бооольшое спасибо!

(10)Temai отдельное гран мерси!-)
12 Temai
 
24.05.18
14:20
Пользуйся на здоровье бро
13 Волшебник
 
24.05.18
14:22
(10) Неправильная функция. В сабже нужно ровно наоборот.
Закон Брукера: Даже маленькая практика стоит большой теории.