Имя: Пароль:
1C
1С v8
Запрос к регистру ШтатноеРасписание
0 capllary_
surgut
 
30.09.15
13:01
Господа, подскажите как допилить запрос, чтоб при получении данных с Рг ШтатноеРасписание, если КоличествоСтавок > количества фактических работающих сотрудников, запрос выдавал еще строки без поля Сотрудник до КоличествоСтавок.
Т.е. к примеру есть в Рг ШтатноеРасписание запись с измерением "Должность" и значением бухгалтер. У этой записи КоличествоСтавок = 5. Сотрудников, работающих в этой должности 3. В выборке этого запроса есть 3 строчки, у которых должность бухгалтер, а надо 5, эти 3 и еще 2 со значением в поле сотрудник "Нет сотрудника".

Вот собственно сам запрос:

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

ОБЪЕДИНИТЬ

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

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РаботникиОрганизацийСрезПоследних.Сотрудник,
    РаботникиОрганизацийСрезПоследних.Должность
ПОМЕСТИТЬ ДолжностиСотрудников
ИЗ
    Сотрудники КАК Сотрудники
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаКон, ) КАК РаботникиОрганизацийСрезПоследних
        ПО Сотрудники.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
    ШтатноеРасписаниеОрганизацийСрезПоследних.Должность КАК Должность,
    ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок КАК Количество,
    ЕСТЬNULL(ДолжностиСотрудников.Сотрудник, "Нет сотрудника") КАК Сотрудник,
    ШтатноеРасписаниеОрганизацийСрезПоследних.МаксимальнаяТарифнаяСтавка КАК ТарифнаяСтавка,
    ВЫБОР
        КОГДА ДолжностиСотрудников.Сотрудник В (&БезРК)
            ТОГДА 0
        ИНАЧЕ 70
    КОНЕЦ КАК РКПроцент,
    0 КАК ПремияКвартал
ИЗ
    РегистрСведений.ШтатноеРасписаниеОрганизаций.СрезПоследних(&ДатаКон, ) КАК ШтатноеРасписаниеОрганизацийСрезПоследних
        ЛЕВОЕ СОЕДИНЕНИЕ ДолжностиСотрудников КАК ДолжностиСотрудников
        ПО ШтатноеРасписаниеОрганизацийСрезПоследних.Должность = ДолжностиСотрудников.Должность

СГРУППИРОВАТЬ ПО
    ШтатноеРасписаниеОрганизацийСрезПоследних.ПодразделениеОрганизации,
    ШтатноеРасписаниеОрганизацийСрезПоследних.Должность,
    ШтатноеРасписаниеОрганизацийСрезПоследних.КоличествоСтавок,
    ШтатноеРасписаниеОрганизацийСрезПоследних.МаксимальнаяТарифнаяСтавка,
    ЕСТЬNULL(ДолжностиСотрудников.Сотрудник, "Нет сотрудника"),
    ВЫБОР
        КОГДА ДолжностиСотрудников.Сотрудник В (&БезРК)
            ТОГДА 0
        ИНАЧЕ 70
    КОНЕЦ

УПОРЯДОЧИТЬ ПО
    ПодразделениеОрганизации,
    Сотрудник
ИТОГИ ПО
    ПодразделениеОрганизации
АВТОУПОРЯДОЧИВАНИЕ
1 Nuobu
 
30.09.15
13:20
ВЫБРАТЬ
    ВложенныйЗапрос.НомерДняИзДиапазона
ПОМЕСТИТЬ ВТПорядковыеНомера
ИЗ
    (ВЫБРАТЬ
        cc.c * 10 + dd.d КАК НомерДняИзДиапазона
    ИЗ
        (ВЫБРАТЬ
            0 КАК c
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК cc,
        (ВЫБРАТЬ
            0 КАК d
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            1
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            2
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            3
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            4
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            5
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            6
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            7
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            8
        
        ОБЪЕДИНИТЬ
        
        ВЫБРАТЬ
            9) КАК dd) КАК ВложенныйЗапрос
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    АвансыРаботникамОрганизаций.Сотрудник,
    АвансыРаботникамОрганизаций.СуммаАванса,
    ВТПорядковыеНомера.НомерДняИзДиапазона
ИЗ
    РегистрСведений.АвансыРаботникамОрганизаций КАК АвансыРаботникамОрганизаций
        ЛЕВОЕ СОЕДИНЕНИЕ ВТПорядковыеНомера КАК ВТПорядковыеНомера
        ПО АвансыРаботникамОрганизаций.СуммаАванса >= ВТПорядковыеНомера.НомерДняИзДиапазона
2 capllary_
surgut
 
30.09.15
13:24
(1) Направление мысли интересное, спасибо, сейчас попробую.
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший