Имя: Пароль:
1C
 
ЗУП 3.1 Правильно определить рабочий/праздничный день
0 егаис
 
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
строить запрос по "Графики работы по видам времени" с отбором по основному времени Выходные или Праздники.
Решение в лоб конечно, пока не вижу другого варианта
Может есть готовые функции в ОМ?
5 Cyberhawk
 
03.12.18
13:46
"Может есть готовые функции в ОМ?" // Там так сложно поискать по именам методов?
6 mikeA
 
03.12.18
14:29
(5) В программном интерфейсе календарных графиков нет метода, явно определяющего, рабочий день это или выходной. Зато есть метод, получающий календарь Российской федерации вот таким чудесным способом))

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

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

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

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

Получается несколько через #опу. Так что ты задачу полностью озвучь, может тогда по-человечески получится использовать интерфейс календарных графиков. Или таки да надо запросом.
7 егаис
 
03.12.18
14:31
(6) надо сейчас. На коленке накидал быстро

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