Имя: Пароль:
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
нашел в чем косяк


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


грубо говоря если во втором запросе по данным критериям записей нет, то подставляется запись, которая была найдена до этого
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn