Вход | Регистрация


ЗУП 3.1 Правильно определить рабочий/праздничный день

ЗУП 3.1 Правильно определить рабочий/праздничный день
Я
   егаис
 
03.12.18 - 13:17
Как программно кошерно определить, что день является праздничным или выходным в текущей редакции?
 
 
   Натуральный Йог
 
1 - 03.12.18 - 13:17
(0) Из производственного календаря
   егаис
 
2 - 03.12.18 - 13:20
(1) из него только выходные
есть суммировщики
   иубиповец
 
3 - 03.12.18 - 13:21
(1) у конкретного сотрудника выходной из графика (если график не 5.2  то Производственный не поможет)
А праздники да из календаря (но регионального если несколько)
   егаис
 
4 - 03.12.18 - 13:32
строить запрос по "Графики работы по видам времени" с отбором по основному времени Выходные или Праздники.
Решение в лоб конечно, пока не вижу другого варианта
Может есть готовые функции в ОМ?
   Cyberhawk
 
5 - 03.12.18 - 13:46
"Может есть готовые функции в ОМ?" // Там так сложно поискать по именам методов?
   mikeA
 
6 - 03.12.18 - 14:29
(5) В программном интерфейсе календарных графиков нет метода, явно определяющего, рабочий день это или выходной. Зато есть метод, получающий календарь Российской федерации вот таким чудесным способом))

Справочники.ПроизводственныеКалендари.НайтиПоКоду("РФ")

(0) Можно попроовать через ДатыБлижайшихРабочихДней.

КалендарныеГрафики.ДатыБлижайшихРабочихДней(График, НачальныеДаты)

В массив НачальныеДаты помещаешь дату или даты которые надо проверить.
Функция возвращает соответствие, причём проверяемая дата входит. Т.е. для рабочей даты ближайшая к ней рабочая будет она же.

Получается несколько через #опу. Так что ты задачу полностью озвучь, может тогда по-человечески получится использовать интерфейс календарных графиков. Или таки да надо запросом.
   егаис
 
7 - 03.12.18 - 14:31
(6) надо сейчас. На коленке накидал быстро
Функция РаботаВПраздничныйИлиВыходнойДень(Сотрудник, РабочаяДата)
    
    КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудник, "ГрафикРаботы", РабочаяДата);
    Если КадровыеДанные.Количество() = 1 Тогда
        ГрафикРаботы = КадровыеДанные[0].ГрафикРаботы;
        Запрос = Новый Запрос;
        Запрос.Текст = 
            "ВЫБРАТЬ
            |    ГрафикиРаботыПоВидамВремени.ВидУчетаВремени.ОсновноеВремя КАК ОсновноеВремя
            |ИЗ
            |    РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
            |ГДЕ
            |    ГрафикиРаботыПоВидамВремени.ГрафикРаботы = &ГрафикРаботы
            |    И ГрафикиРаботыПоВидамВремени.Дата = &Дата";
        
        Запрос.УстановитьПараметр("ГрафикРаботы", ГрафикРаботы);
        Запрос.УстановитьПараметр("Дата", РабочаяДата);
        РезультатЗапросаВыборка = Запрос.Выполнить().Выбрать();
        Если РезультатЗапросаВыборка.Следующий() Тогда
            Возврат ((РезультатЗапросаВыборка.ОсновноеВремя = Справочники.ВидыИспользованияРабочегоВремени.ВыходныеДни) ИЛИ (РезультатЗапросаВыборка.ОсновноеВремя = Справочники.ВидыИспользованияРабочегоВремени.Праздники));
        Иначе
            Возврат Ложь
        КонецЕсли;
    Иначе
        Возврат Ложь
    КонецЕсли;    
        
КонецФункции
   pavlika
 
8 - 03.12.18 - 14:35
Индивидуальные графики как учитываете?
   егаис
 
9 - 03.12.18 - 14:36
(8) угу, в курсе, буду допиливать, но пока их нет
решение на раз собственно

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует