Имя: Пароль:
1C
1С v8
Выборка по совпадениям
0 Rphoenix
 
05.12.16
07:27
Коды должностей и подразделений должны совпадать:
3=6 столбцу 4=7,
а они не совпадают

https://i.gyazo.com/d35d81180c5beeba6af7fb0a18736f7f.png



ЗапросШт = новый Запрос;
    ЗапросШт.Текст = "ВЫБРАТЬ
                     |    ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Наименование КАК Подразделение,
                     |    ШтатноеРасписаниеОрганизаций.Должность.Наименование КАК Должность,
                     |    ШтатноеРасписаниеОрганизаций.а_ПроцентВредность,
                     |    ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Код КАК кодПодр,
                     |    ШтатноеРасписаниеОрганизаций.Должность.Код КАК кодДолжн
                     |ИЗ
                     |    РегистрСведений.ШтатноеРасписаниеОрганизаций КАК ШтатноеРасписаниеОрганизаций
                     |
                     |СГРУППИРОВАТЬ ПО
                     |    ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Наименование,
                     |    ШтатноеРасписаниеОрганизаций.Должность.Наименование,
                     |    ШтатноеРасписаниеОрганизаций.а_ПроцентВредность,
                     |    ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Код,
                     |    ШтатноеРасписаниеОрганизаций.Должность.Код
                     |
                     |УПОРЯДОЧИТЬ ПО
                     |    Подразделение,
                     |    ШтатноеРасписаниеОрганизаций.Должность.Код";             
    
    Выборка = ЗапросШт.Выполнить().Выбрать(ОбходРезультатаЗапроса.Прямой);
     Podr=выборка.Подразделение;

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

             ВыборкаСотр = ЗапросСотр.Выполнить().Выбрать(ОбходРезультатаЗапроса.Прямой);

             Пока  ВыборкаСотр.Следующий() Цикл
                    
                       ЗаполнитьЗначенияСвойств(Областьданные.Параметры,ВыборкаСотр);
                
                  конеццикла;
                    если  Podr<>выборка.Подразделение тогда
            ТабДок.Вывести(ОбластьПодразделение,1);
            podr=выборка.Подразделение        конецЕсли;
        
        ТабДок.Вывести(ОбластьДанные,1);    
        
    КонецЦикла;
1 SeraFim
 
05.12.16
07:33
Если не смотреть на запросы в цикле и прочие вопросы оптимизации - проблема в данном случае со знанием типовой.
У сотрудника есть "ПодразделениеОрганизации" и "Должность" - это данные трудового договора (куда изначально человек принимался).
И есть "ТекущееПодразделениеОрганизации" и "ТекущаяДолжностьОрганизации" - это данные, где работает сотрудник сейчас :)
2 Rphoenix
 
05.12.16
07:38
СотрудникиОрганизаций.ТекущееПодразделениеОрганизации.Код = &кодПодразд
                     | И СотрудникиОрганизаций.ТекущаяДолжностьОрганизации.Код = &кодДолжност


в штатном
ШтатноеРасписаниеОрганизаций.ПодразделениеОрганизации.Код КАК кодПодр,
                  | ШтатноеРасписаниеОрганизаций.Должность.Код КАК кодДолжн
3 Rphoenix
 
05.12.16
07:39
Сотрудник и должность не совпадают почему-то (1 и 2).
4 SeraFim
 
05.12.16
07:41
Не туда смотришь. Сюда смотри:

                           |    СотрудникиОрганизаций.Должность.Код как Дкод,
                           |    СотрудникиОрганизаций.ПодразделениеОрганизации.Код как Пкод
                           |ИЗ
                           |    Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
                           |ГДЕ
                           |    СотрудникиОрганизаций.ТекущееПодразделениеОрганизации.Код = &кодПодразд
                           |    И СотрудникиОрганизаций.ТекущаяДолжностьОрганизации.Код = &кодДолжност
5 Rphoenix
 
05.12.16
07:44
Необходимо поменять  "ПодразделениеОрганизации" и "Должность" на  "ТекущееПодразделениеОрганизации" и "ТекущаяДолжностьОрганизации" и все?
6 Rphoenix
 
05.12.16
07:46
| СотрудникиОрганизаций.ТекущееПодразделениеОрганизации.Код как Пкод,
                     | СотрудникиОрганизаций.ТекущаяДолжностьОрганизации.Код как Дкод
                     |ИЗ
                     | Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
                     |ГДЕ
                     | СотрудникиОрганизаций.ТекущееПодразделениеОрганизации.Код = &кодПодразд
                     | И СотрудникиОрганизаций.ТекущаяДолжностьОрганизации.Код = &кодДолжност
7 DrZombi
 
гуру
05.12.16
07:48
(5) Это самое простое. Но сотрудник может быть и совместителем :)
8 Rphoenix
 
05.12.16
07:54
вместо текущего сотрудника встал уволенный, но это потому что запросом не предусмотрено. А не соответсвие кодов как было так и есть
9 Rphoenix
 
05.12.16
08:37
нашел в чем косяк


если второй запрос пустой, то подставляется предыдущая запись


грубо говоря если во втором запросе по данным критериям записей нет, то подставляется запись, которая была найдена до этого