Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
26 июн 2022, 07:51

Создание отчета по категориям (кадровые данные)

Автор Smiley, 11 июн 2018, 22:44

0 Пользователей и 1 гость просматривают эту тему.

Smiley

Помогите пожалуйста, подскажите, как сделать это задание?

1. Сгруппировать данные по категориям и по подразделениям с помощью ТабДок.НачатьГруппуСтрок("По подразделениям", Истина);
ТабДок.ЗакончитьГруппуСтрок();
2. Проверка штатности сотрудника;
3. Вывод данных по инженерам или по рабочим с помощью СтрНайти();


&НаСервере
Функция СформироватьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| КадроваяИсторияСотрудников.Сотрудник.Ссылка КАК Сотрудник,
| КадроваяИсторияСотрудников.ДолжностьПоШтатномуРасписанию.Ссылка КАК Должность,
| КадроваяИсторияСотрудников.Подразделение.Ссылка КАК Подразделение
|ИЗ
| РегистрСведений.КадроваяИсторияСотрудников КАК КадроваяИсторияСотрудников
|ГДЕ
| КадроваяИсторияСотрудников.Организация = &Организация
|И КадроваяИсторияСотрудников.ДолжностьПоШтатномуРасписанию.Наименование ПОДОБНО ""%категория%""";

Запрос.УстановитьПараметр("Организация",ЭтаФорма.Организация);
Запрос.УстановитьПараметр("Подразделение",ЭтаФорма.Подразделение);
ТЗ = Запрос.Выполнить().Выгрузить();
Сообщить(ТЗ.Количество());

Колонки = ТЗ.Колонки;
Колонки.Добавить("Категория");
Колонки.Добавить("Номер");
Колонки.Добавить("КоличествоСотрудников");
        // Цикл для определения категории
Для каждого Строка ИЗ ТЗ Цикл
ПозицияКатегории = СтрНайти(Строка.Должность,"категория");
Если ПозицияКатегории > 0 Тогда
ПозицияОткрывающейСкобки = СтрНайти(Строка.Должность,"(");
ПозицияЗакрывающейСкобки = СтрНайти(Строка.Должность,")");
КоличествоСимволов = ПозицияЗакрывающейСкобки - ПозицияОткрывающейСкобки + 1;
Строка.Категория = Сред(Строка.Должность, ПозицияОткрывающейСкобки, КоличествоСимволов);
КонецЕсли;
КонецЦикла;
    ТЗ.Сортировать("Подразделение,Категория");
Макет = ЭтотОбъект.РеквизитФормыВЗначение("Отчет").ПолучитьМакет("Макет");
ТабДок = Новый ТабличныйДокумент;
ОбластьПодразделения = Макет.ПолучитьОбласть("Подразделение");
ОбластьКатегории = Макет.ПолучитьОбласть("Категория");
ОбластьСотрудника = Макет.ПолучитьОбласть("Сотрудник");
ОбластьНомера = Макет.ПолучитьОбласть("Номер");
ОбластьКоличестваСотрудников = Макет.ПолучитьОбласть("КоличествоСотрудников");
Категория = "";
Подразделение = "";
Номер = "";
КоличествоСотрудников = "";
ПП = 0;
Для каждого СтрокаТЗ ИЗ ТЗ Цикл
ТабДок.НачатьГруппуСтрок("По подразделениям", Истина);
Если Подразделение <> СтрокаТЗ.Подразделение Тогда
  ОбластьПодразделения.Параметры.Подразделение = СтрокаТЗ.Подразделение;
ТабДок.Вывести(ОбластьПодразделения);
КонецЕсли;
ТабДок.ЗакончитьГруппуСтрок();
    Если Категория <> СтрокаТЗ.Категория Тогда
Если Категория <> "" Тогда
    ОбластьКоличестваСотрудников.Параметры.КоличествоСотрудников=ПП;
ТабДок.Вывести(ОбластьКоличестваСотрудников);
КонецЕсли;
ОбластьКатегории.Параметры.Категория = СтрокаТЗ.Категория;
ТабДок.Вывести(ОбластьКатегории);
ПП=0;
КонецЕсли;
ПП=ПП+1;
ОбластьСотрудника.Параметры.Номер=ПП;
ОбластьСотрудника.Параметры.Сотрудник = СтрокаТЗ.Сотрудник;
ТабДок.Вывести(ОбластьСотрудника);

Подразделение = СтрокаТЗ.Подразделение;
Категория = СтрокаТЗ.Категория;
ОбластьСотрудника.Параметры.Номер=ПП;
// ТабДок.Вывести(ОбластьНомера);
// Номер = СтрокаТЗ.Номер;
КоличествоСотрудников = СтрокаТЗ.КоличествоСотрудников;
КонецЦикла;
Возврат ТабДок;
КонецФункции

&НаКлиенте
Процедура Сформировать(Команда)
ТабличныйДокумент = СформироватьНаСервере();
ТабличныйДокумент.Показать();
КонецПроцедуры

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск