Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

ЗУП Ред 3. Как выбрать сотрудников, отработавших полный месяц?

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

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

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

Можно запросом по этим же данным выбрать всех у кого какие-то неявки были. А остальные оставшиеся будут соответственно без неявок.
   bvn-2005
 
3 - 25.11.21 - 09:03
Вижу, вот, регистр накопления ДанныеТабельногоУчетаРабочегоВремениСотрудников. В него пишутся данные табеля, по дням. Явка, выходной, отпуск, больничный... Выбрать сотрудников, у которых только Явка или Выходной и при этом количество строк равно количеству дней месяца?
   Dmitrii
 
4 - 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 КАК Стаж,
    |    ТрудовыеФункции.ОКПДТРКатегория КАК КодКатегории
    |ИЗ
    |    ВТКадровыеДанныеСотрудниковСТрудовойФункцией КАК КадровыеДанныеСотрудников
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ТрудовыеФункции КАК ТрудовыеФункции
    |        ПО КадровыеДанныеСотрудников.ТрудоваяФункция = ТрудовыеФункции.Ссылка
    |ГДЕ
    |    ТрудовыеФункции.ОКПДТРКатегория <> """"
    |
    |УПОРЯДОЧИТЬ ПО
    |    КадровыеДанныеСотрудников.Наименование";

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

ВсеСотрудникиОрганизации = Запрос.Выполнить().Выгрузить();

   Serg_1960
 
5 - 25.11.21 - 12:19
Можно проще - типовой кадровый отчет "Потери рабочего времени"
   pavlika
 
6 - 25.11.21 - 12:20
А типовой отчет Потери рабочего времени не устроит?

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