Имя: Пароль:
1C
1С v8
типовой отчет ШтатнаяРасстановка
,
0 Ar-Bus
 
08.12.13
21:42
Привет всем. конфигурация ЗиК бюджетного учреждения. Есть типовой отчет: "ОтчетПоШтатнойРасстановке". Используется СКД. Группировки: учреждение, подразделение, должность
Поля: кол-во ставок по штатному расписканию, кол-во ставок по основному месту работы, кол-во ставок по внутреннему совместительству, кол-во ставок по внешнему совместительству.
Так вот, кол-ва ставок по осн, внутр. и внешн. совместительству я сделал для каждого работника...
Но ведь кол-во ставок в штатном расписании относится к должности... как сделать, чтобы кол-во ставок в отчет выходило только для группировки Должность, а для работников это поле оставалось пустым...

Вот единственное, чего я смог добиться:
для каждого работника проставляется общее кол-во штатный единиц в должности... но это неудобно. Ниже приведена ссыла на принт-скрин отчета

http://forum.infostart.ru/bitrix/components/bitrix/forum.interface/show_file.php?fid=364839
1 Ar-Bus
 
09.12.13
18:15
Ну что у меня в коде вывода результата запроса не так написано? почему выводит в табличныйДокумент только первую одну строку с подразделением, затем одну строку с должностью - и на этом все, обходы группировок заканчиваются...

        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    Работники.Организация,
        |    Работники.ПодразделениеОрганизации КАК Подразделение,
        |    Работники.Должность КАК Должность,
        |    Работники.Сотрудник,
        |    СУММА(Штатное.КоличествоСтавок) КАК КоличествоСтавок,
        |    КОЛИЧЕСТВО(Штатное.Должность) КАК КоличествоДолжностей,
        |    СУММА(ВЫБОР
        |            КОГДА Работники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
        |                ТОГДА ВЫБОР
        |                        КОГДА Работники.ПериодЗавершения <= &Период
        |                                И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
        |                            ТОГДА Работники.ЗанимаемыхСтавокЗавершения
        |                        ИНАЧЕ Работники.ЗанимаемыхСтавок
        |                    КОНЕЦ
        |        КОНЕЦ) КАК ОСН,
        |    СУММА(ВЫБОР
        |            КОГДА Работники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
        |                ТОГДА ВЫБОР
        |                        КОГДА Работники.ПериодЗавершения <= &Период
        |                                И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
        |                            ТОГДА Работники.ЗанимаемыхСтавокЗавершения
        |                        ИНАЧЕ Работники.ЗанимаемыхСтавок
        |                    КОНЕЦ
        |        КОНЕЦ) КАК ВНУТР,
        |    СУММА(ВЫБОР
        |            КОГДА Работники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
        |                ТОГДА ВЫБОР
        |                        КОГДА Работники.ПериодЗавершения <= &Период
        |                                И Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
        |                            ТОГДА Работники.ЗанимаемыхСтавокЗавершения
        |                        ИНАЧЕ Работники.ЗанимаемыхСтавок
        |                    КОНЕЦ
        |        КОНЕЦ) КАК ВНЕШ
        |ИЗ
        |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период) КАК Работники
        |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних(&Период) КАК Штатное
        |        ПО Работники.Должность = Штатное.Должность
        |            И Работники.ПодразделениеОрганизации = Штатное.ПодразделениеОрганизации
        |ГДЕ
        |    Работники.Сотрудник.ДатаУвольнения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
        |
        |СГРУППИРОВАТЬ ПО
        |    Работники.Организация,
        |    Работники.ПодразделениеОрганизации,
        |    Работники.Должность,
        |    Работники.Сотрудник
        |
        |УПОРЯДОЧИТЬ ПО
        |    Работники.Организация,
        |    Работники.ПодразделениеОрганизации.Наименование,
        |    Работники.Должность.Наименование,
        |    Работники.Сотрудник.Наименование
        |ИТОГИ
        |    СУММА(КоличествоСтавок),
        |    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ КоличествоДолжностей)
        |ПО
        |    Подразделение,
        |    Должность";
        
        Запрос.УстановитьПараметр("Период", ДатаОтчета);
        
        Результат = Запрос.Выполнить();
        ТабДок.НачатьАвтогруппировкуСтрок();
        ВыборкаОбщийИтог = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
        ВыборкаОбщийИтог.Следующий();        // Общий итог
        
        ВыборкаПоПодразделениям = ВыборкаОбщийИтог.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Подразделение", "ВСЕ"); //Ал ОбходРезультатаЗапроса.ПоГруппировкамСИерархией
        
        Пока ВыборкаПоПодразделениям.Следующий() Цикл
            Если ВыборкаПоПодразделениям.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
                Область = ОбластьПодразделениеИерархия;
            ИначеЕсли ВыборкаПоПодразделениям.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
                Область = ОбластьПодразделениеГруппировка;
            Иначе
                Область = ОбластьПодразделение;
            КонецЕсли;
            
            Область.Параметры.Заполнить(ВыборкаПоПодразделениям);
            
            ТабДок.Вывести(Область, ВыборкаПоПодразделениям.Уровень());
            
            ВыборкаПоДолжностям=ВыборкаПоПодразделениям.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Должность");
            Пока ВыборкаПоДолжностям.Следующий() Цикл
                Если ВыборкаПоДолжностям.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоИерархии Тогда
                    Область = ОбластьДолжностьИерархия;
                ИначеЕсли ВыборкаПоДолжностям.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке Тогда
                    Область = ОбластьДолжностьГруппировка;
                Иначе
                    Область = ОбластьДолжность;
                КонецЕсли;
                
                Область.Параметры.Заполнить(ВыборкаПоДолжностям);
                
                ТабДок.Вывести(Область, ВыборкаПоДолжностям.Уровень());
            КонецЦикла;
        КонецЦикла;
        
        ТабДок.ЗакончитьАвтогруппировкуСтрок();
        ТабДок.ЗакончитьАвтогруппировкуКолонок();
    КонецПроцедуры
2 grayshadow
 
09.12.13
18:33
омфг... должность СидороваОльгаЕвгеньевна10...
3 Ar-Bus
 
09.12.13
18:46
(2) это не должность, а сотрудник
4 Ar-Bus
 
09.12.13
20:44
а я буду писать дальше... Где косяк в тексте запроса? Подразделения мне нужно выводить с учетом иерархии. В выборке видит, что это иерархия, но выводит общую строку, без вложенных группировок по должностям и работникам. Хотя показывает общие суммы ставок по иерархии. В тексте запроса все правильно написано? Значит косяк в выборке из результата запроса?

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