Содержание:
Для получения данных в ЗУП 3.1 лучше всего использовать стандартные механизмы заложенные в конфигурацию, такой подход позволяет не углубляться в структуру регистров, сохранить работоспособность кода после обновлений. При получении данных о времени, легко запутаться в двух похожих по названию, но отличающихся по конечному результату процедурах: 1) СоздатьВТДанныеУчетаВремениИСостоянийСотрудников и 2) СоздатьВТДанныеУчетаРабочегоВремениСотрудников. Первая процедура подходит для получения времени аналогичного “Табелю Т-13” с учетом отсутствий сотрудников, вторая процедура не учитывает отсутствия, т.е. больше подходит для получения планового времени с учетом работ в выходные, сверхурочных.
1. Получение данных о времени сотрудников за период через процедуру СоздатьВТДанныеУчетаВремениИСостоянийСотрудников
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | &Сотрудник Сотрудник, | &ДатаНачала КАК ДатаНачала, | &ДатаОкончания КАК ДатаОкончания |ПОМЕСТИТЬ ВТСотрудники"; Запрос.УстановитьПараметр("Сотрудник", Объект.Сотрудник); Запрос.УстановитьПараметр("ДатаНачала", Объект.Период.ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", Объект.Период.ДатаОкончания); Запрос.Выполнить(); ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыДляЗапросВТДанныеУчетаВремениИСостоянийСотрудников(); ПараметрыПолученияДанных.ДатаНачала = Объект.Период.ДатаНачала; ПараметрыПолученияДанных.ДатаОкончания = Объект.Период.ДатаОкончания; ПараметрыПолученияДанных.МесяцДатаНачала = Объект.МесяцДатаНачала; ПараметрыПолученияДанных.МесяцДатаОкончания = Объект.МесяцДатаОкончания; ПараметрыПолученияДанных.ДатаАктуальности = Объект.ДатаАктуальности; //ПараметрыПолученияДанных.Организация = Организация; // отбор по организации //ПараметрыПолученияДанных.Подразделение = Подразделение; // отбор по подразделениям //ПараметрыПолученияДанных.ПолучатьУсловияТрудаИТерритории = Ложь; //ПараметрыПолученияДанных.ВыделятьВыходныеВПериодыОтклонений = Истина; //ПараметрыПолученияДанных.УчитыватьТабельныеДанныеОТерриториях = Истина; //ПараметрыПолученияДанных.ОтноситьПереходящуюЧастьСменыКДнюНачала = Ложь; //ПараметрыПолученияДанных.РассчитыватьПлановоеВремя = Истина; //ПараметрыПолученияДанных.НеучитываемыеРегистраторы = Новый Массив; //ПараметрыПолученияДанных.ПолучатьУжеРассчитанныеДанные = Истина; //ПараметрыПолученияДанных.ПересчитыватьФактическоеВремя = Ложь; //ПараметрыПолученияДанных.ИмяВТСотрудники = "ВТСотрудники"; //ПараметрыПолученияДанных.ИмяВТРезультат = "ВТДанныеУчетаВремениИСостоянийСотрудников"; УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаВремениИСостоянийСотрудников(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных); ДанныеТабеляТ13 = Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТДанныеУчетаВремениИСостоянийСотрудников").ПолучитьДанные().Выгрузить(); |
2. Получение данных о времени сотрудников за период через процедуру СоздатьВТДанныеУчетаРабочегоВремениСотрудников
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | &Сотрудник КАК Сотрудник, | НАЧАЛОПЕРИОДА(&ДатаНачала, МЕСЯЦ) КАК Месяц, | &ДатаНачала КАК ДатаНачала, | &ДатаОкончания КАК ДатаОкончания, | &ДатаАктуальности КАК ДатаАктуальности |ПОМЕСТИТЬ ВТСотрудники"; Запрос.УстановитьПараметр("Сотрудник", Объект.Сотрудник); Запрос.УстановитьПараметр("ДатаНачала", Объект.Период.ДатаНачала); Запрос.УстановитьПараметр("ДатаОкончания", Объект.Период.ДатаОкончания); Запрос.УстановитьПараметр("ДатаАктуальности", Объект.ДатаАктуальности); Запрос.Выполнить(); ПараметрыПолученияДанных = УчетРабочегоВремениРасширенный.ПараметрыПолученияДанныхУчетаВремени(); ПараметрыПолученияДанных.ДатаНачала = Объект.Период.ДатаНачала; ПараметрыПолученияДанных.ДатаОкончания = Объект.Период.ДатаОкончания; //ПараметрыПолученияДанных.УчитыватьТолькоИндивидуальныеСведения = Ложь; //ПараметрыПолученияДанных.ПолучатьДанныеФакт = Истина; //ПараметрыПолученияДанных.ПолучатьДанныеПлан = Ложь; //ПараметрыПолученияДанных.ПолучатьДанныеНорма = Истина; //ПараметрыПолученияДанных.ИспользоватьУжеРассчитанныеДанные = Истина; //ПараметрыПолученияДанных.ФормироватьПриНаличииРассчитанныхДанных = Истина; //ПараметрыПолученияДанных.НеучитываемыеРегистраторы = Новый Массив; //ПараметрыПолученияДанных.ПолучатьУсловияТрудаИТерритории = Ложь; //ПараметрыПолученияДанных.УчитыватьТабельныеДанныеОТерриториях = Истина; //ПараметрыПолученияДанных.ПолучатьНормуВремениЗаПолныйМесяц = Ложь; //ПараметрыПолученияДанных.ИспользуемыеВидыДанных = Новый Массив; //ПараметрыПолученияДанных.ИмяВТСотрудники = "ВТСотрудники"; //ПараметрыПолученияДанных.ИмяВТРезультат = "ВТДанныеУчетаРабочегоВремениСотрудников"; //ПараметрыПолученияДанных.Индексировать = Ложь; //ПараметрыПолученияДанных.ОтноситьПереходящуюЧастьСменыКДнюНачала = Ложь; УчетРабочегоВремениРасширенный.СоздатьВТДанныеУчетаРабочегоВремениСотрудников(Запрос.МенеджерВременныхТаблиц, Истина, ПараметрыПолученияДанных); ДанныеТабеляТ13 = Запрос.МенеджерВременныхТаблиц.Таблицы.Найти("ВТДанныеУчетаРабочегоВремениСотрудников").ПолучитьДанные().Выгрузить(); |
Заключение
При использовании процедуры СоздатьВТДанныеУчетаВремениИСостоянийСотрудников можно получить время с учетом всех отклонений аналогичное табелю Т-13. В результате, получим таблицу со следующими полями: Сотрудник, Должность, Организация, Подразделение, ВидУчетаВремени, Смена, Дни, Часы, НормаЧасов, Отклонение, ПереходящаяЧастьТекущейСмены, ПереходящаяЧастьПредыдущейСмены, Территория, УсловияТруда. Для получения результата, данная процедура создаст 19 вспомогательных временных таблиц.
При использовании процедуры СоздатьВТДанныеУчетаРабочегоВремениСотрудников можно получить время без учета отклонений по сотрудникам, т.е. если сотрудник например был на больничном, то это не отразится в результате (в этот день будет выведена Явка). В результате, получим таблицу со следующими полями: Сотрудник, ПериодРегистрации, ВидУчетаВремени, ОсновноеВремя, Смена, Дней, Часов, ДнейПлан, ЧасовПлан, НормаЧасов, НормаДней, Отклонение, ВЦеломЗаПериод, План, ПереходящаяЧастьТекущейСмены, ПереходящаяЧастьПредыдущейСмены, Территория, УсловияТруда. Для получения результата, данная процедура создаст 10 вспомогательных временных таблиц.
Если необходимо получить данные о времени сотрудников через СКД, то можно использовать механизм представлений, более подробно тут – Представления «Данные о времени и состоянии сотрудников».