Имя: Пароль:
1C
1С v8
ЗУП Ред 3. Как выбрать сотрудников, отработавших полный месяц?
0 bvn-2005
 
25.11.21
08:32
Нужно вытащить список сотрудников заданного подразделения полностью отработавших заданный месяц, т.е. тех, у кого не было отгулов, прогулов, отпусков и т.д. Подскажите, как?
1 Фрэнки
 
25.11.21
08:45
Тебе вообще все равно как или хочешь как бы типовыми средствами конфигурации?

Есть ряд функций и процедур. Чтоб их сходу подсказать, надо полазить по коду и посмотреть.
Процедуры возвращают дни явки, так, как это попадает в документ Начисление ЗП
Отдельным обращением к таким же процедурам можно получить дни по норме. Если все работники приняты на одинаковых условиях, то хватит одного обращения.
2 Фрэнки
 
25.11.21
08:47
Хочешь ударить прямо в подсчет дней?

Обратись к документу регистрации Неявки и посмотри куда он пишет свой данные при проведении документа.

Можно запросом по этим же данным выбрать всех у кого какие-то неявки были. А остальные оставшиеся будут соответственно без неявок.
3 bvn-2005
 
25.11.21
09:03
Вижу, вот, регистр накопления ДанныеТабельногоУчетаРабочегоВремениСотрудников. В него пишутся данные табеля, по дням. Явка, выходной, отпуск, больничный... Выбрать сотрудников, у которых только Явка или Выходной и при этом количество строк равно количеству дней месяца?
4 Dmitrii
 
гуру
25.11.21
10:41
(0) Есть такой отчет в ЗУП. РегламентированныйОтчетСтатистикаФорма57Т. Статистика: Форма 57-Т.
При умении пользоваться отладчиком можно собрать все тексты многочисленных запросов, собирающие такую информацию.
Останется вкорячить туда нужные тебе отборы.
Отчет использует как минимум две схемы компановки с различных вариантов разных отчетов.

Финальная часть этого безобразия в ЗУП 3.1.18.276 выглядит примерно так.


УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(Запрос.МенеджерВременныхТаблиц, Ложь, ПараметрыЗаполнения);

Запрос.Текст =
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    ДанныеУчетаВремени.Сотрудник КАК Сотрудник,
    |    ДанныеУчетаВремени.ВидУчетаВремени КАК ВидУчетаВремени,
    |    СУММА(ДанныеУчетаВремени.Дни) КАК Дни
    |ПОМЕСТИТЬ ВТСотрудникиСОтклонениями
    |ИЗ
    |    ВТДанныеУчетаВремени КАК ДанныеУчетаВремени
    |ГДЕ
    |    ДанныеУчетаВремени.ВидУчетаВремени <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.РабочееВремя)
    |    И ДанныеУчетаВремени.ВидУчетаВремени <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.ВыходныеДни)
    |    И НЕ ДанныеУчетаВремени.ВидУчетаВремени.РабочееВремя
    |    И ДанныеУчетаВремени.ВидУчетаВремени <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.Командировка)
    |    И ДанныеУчетаВремени.ВидУчетаВремени <> ЗНАЧЕНИЕ(Справочник.ВидыИспользованияРабочегоВремени.ОплачиваемыеНерабочиеДни)
    |
    |СГРУППИРОВАТЬ ПО
    |    ДанныеУчетаВремени.Сотрудник,
    |    ДанныеУчетаВремени.ВидУчетаВремени
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ РАЗЛИЧНЫЕ
    |    Сотрудники.Сотрудник КАК Сотрудник,
    |    НАЧАЛОПЕРИОДА(Сотрудники.ДатаОкончания, ДЕНЬ) КАК Период
    |ПОМЕСТИТЬ ВТСотрудникиПериоды
    |ИЗ
    |    ВТСотрудники КАК Сотрудники
    |        ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудникиСОтклонениями КАК СотрудникиСОтклонениями
    |        ПО Сотрудники.Сотрудник = СотрудникиСОтклонениями.Сотрудник
    |ГДЕ
    |    СотрудникиСОтклонениями.Сотрудник ЕСТЬ NULL";

Запрос.Выполнить();

// Получение кадровых данных полностью отработавших сотрудников
ОписательВТ = КадровыйУчет.ОписательВременныхТаблицДляСоздатьВТКадровыеДанныеСотрудников(
    Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиПериоды");

КадровыйУчет.СоздатьВТКадровыеДанныеСотрудников(
        ОписательВТ,
        Ложь,
        "Пол,
        |ДатаРождения,
        |Организация,
        |Подразделение,
        |ДолжностьПоШтатномуРасписанию,
        |Должность,
        |Образование1ВидОбразования,
        |СтажРаботыНаПредприятииЛет,
        |СтажРаботыНаПредприятииМесяцев,
        |ДоляНеполногоРабочегоВремени,
        |ГрафикРаботы,
        |ДатаПриема,
        |ДатаУвольнения");
        
Запрос.УстановитьПараметр("ИспользоватьШтатноеРасписание", ПолучитьФункциональнуюОпцию("ИспользоватьШтатноеРасписание"));

Запрос.Текст =
    "ВЫБРАТЬ
    |    КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
    |    КадровыеДанныеСотрудников.Сотрудник.Наименование КАК Наименование,
    |    КадровыеДанныеСотрудников.Организация КАК Организация,
    |    КадровыеДанныеСотрудников.Подразделение КАК Подразделение,
    |    КадровыеДанныеСотрудников.Должность КАК Должность,
    |    КадровыеДанныеСотрудников.Пол КАК Пол,
    |    КадровыеДанныеСотрудников.ДатаРождения КАК ДатаРождения,
    |    КадровыеДанныеСотрудников.Образование1ВидОбразования КАК Образование1ВидОбразования,
    |    КадровыеДанныеСотрудников.СтажРаботыНаПредприятииЛет КАК СтажРаботыНаПредприятииЛет,
    |    КадровыеДанныеСотрудников.СтажРаботыНаПредприятииМесяцев КАК СтажРаботыНаПредприятииМесяцев,
    |    ВЫБОР
    |        КОГДА &ИспользоватьШтатноеРасписание
    |                И НЕ КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию.ТрудоваяФункция = ЗНАЧЕНИЕ(Справочник.ТрудовыеФункции.ПустаяСсылка)
    |            ТОГДА КадровыеДанныеСотрудников.ДолжностьПоШтатномуРасписанию.ТрудоваяФункция
    |        ИНАЧЕ КадровыеДанныеСотрудников.Должность.ТрудоваяФункция
    |    КОНЕЦ КАК ТрудоваяФункция
    |ПОМЕСТИТЬ ВТКадровыеДанныеСотрудниковСТрудовойФункцией
    |ИЗ
    |    ВТКадровыеДанныеСотрудников КАК КадровыеДанныеСотрудников
    |ГДЕ
    |    КадровыеДанныеСотрудников.ДоляНеполногоРабочегоВремени >= 1
    |    И КадровыеДанныеСотрудников.ДатаПриема > ДАТАВРЕМЯ(1, 1, 1)
    |    И КадровыеДанныеСотрудников.ДатаПриема <= &НачалоПериодаОтчета
    |    И (КадровыеДанныеСотрудников.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1)
    |            ИЛИ КОНЕЦПЕРИОДА(КадровыеДанныеСотрудников.ДатаУвольнения, ДЕНЬ) >= &КонецПериодаОтчета)
    |    И КадровыеДанныеСотрудников.ГрафикРаботы.НеполноеРабочееВремя = ЛОЖЬ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    КадровыеДанныеСотрудников.Сотрудник КАК Сотрудник,
    |    КадровыеДанныеСотрудников.Наименование КАК Наименование,
    |    КадровыеДанныеСотрудников.Организация КАК Организация,
    |    КадровыеДанныеСотрудников.Подразделение КАК Подразделение,
    |    КадровыеДанныеСотрудников.Должность КАК Должность,
    |    ТрудовыеФункции.ОКПДТРКод КАК КодПоОКПДТР,
    |    ВЫБОР
    |        КОГДА КадровыеДанныеСотрудников.Пол = ЗНАЧЕНИЕ(Перечисление.ПолФизическогоЛица.Мужской)
    |            ТОГДА 1
    |        ИНАЧЕ 2
    |    КОНЕЦ КАК Пол,
    |    ГОД(КадровыеДанныеСотрудников.ДатаРождения) КАК ГодРождения,
    |    ВЫБОР
    |        КОГДА КадровыеДанныеСотрудников.Образование1ВидОбразования В (ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.ВысшееОбразование), ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.ВысшееОбразованиеБакалавриат), ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.ВысшееОбразованиеСпециалитетМагистратура))
    |            ТОГДА 1
    |        КОГДА КадровыеДанныеСотрудников.Образование1ВидОбразования В (ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.СреднееПрофессиональноеОбразование))
    |            ТОГДА 2
    |        КОГДА КадровыеДанныеСотрудников.Образование1ВидОбразования В (ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.СреднееПолноеОбщееОбразование), ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.СреднееОбщееОбразование))
    |            ТОГДА 3
    |        КОГДА КадровыеДанныеСотрудников.Образование1ВидОбразования В (ЗНАЧЕНИЕ(Справочник.ВидыОбразованияФизическихЛиц.ОсновноеОбщееОбразование))
    |            ТОГДА 4
    |        ИНАЧЕ 5
    |    КОНЕЦ КАК Образование,
    |    КадровыеДанныеСотрудников.СтажРаботыНаПредприятииЛет + КадровыеДанныеСотрудников.СтажРаботыНаПредприятииМесяцев / 12 КАК Стаж,
    |    ТрудовыеФункции.ОКПДТРКатегория КАК КодКатегории
    |ИЗ
    |    ВТКадровыеДанныеСотрудниковСТрудовойФункцией КАК КадровыеДанныеСотрудников
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТрудовыеФункции КАК ТрудовыеФункции
    |        ПО КадровыеДанныеСотрудников.ТрудоваяФункция = ТрудовыеФункции.Ссылка
    |ГДЕ
    |    ТрудовыеФункции.ОКПДТРКатегория <> """"
    |
    |УПОРЯДОЧИТЬ ПО
    |    КадровыеДанныеСотрудников.Наименование";

Если Не ТолькоДолжностиСОКПДТРКатегорией Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "И ТрудовыеФункции.ОКПДТРКатегория <> """"", "");
КонецЕсли;

ВсеСотрудникиОрганизации = Запрос.Выполнить().Выгрузить();
5 Serg_1960
 
25.11.21
12:19
Можно проще - типовой кадровый отчет "Потери рабочего времени"
6 pavlika
 
25.11.21
12:20
А типовой отчет Потери рабочего времени не устроит?