Имя: Пароль:
1C
1С v8
объединить два запроса
0 dron4ikkk
 
05.06.13
15:48
Как объединить два запроса правильно?

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

    Пока ВыборкаДетальнойЗаписи.Следующий() Цикл
         Если (ВыборкаДетальныеЗаписи.Сотрудник.ДатаУвольнения >= ДатаОтчета) ИЛИ (ВыборкаДетальныеЗаписи.Сотрудник.ДатаУвольнения = '00010101') Тогда
           Если ВыборкаДетальныеЗаписи.Поле1 = null Тогда
               Статус ="Работает";
           Иначе
               
           temp = ВыборкаДетальныеЗаписи.Поле1;    
               Статус =Строка(temp);
                   КонецЕсли;
       КонецЕсли;
1 viktor_vv
 
05.06.13
15:50
В певый добавить отсуствующие поля из второго, во второй отсутствующие из первого с пустыми значениями, порядок полей в обоих запросах должен совпадать.
2 dron4ikkk
 
05.06.13
15:52
а как поля добавить то эти? пример добавления может кто подскажет? вернее как это правильно пишеться
3 andreymongol82
 
05.06.13
15:56
NULL КАК Поле1,
NULL
4 palpetrovich
 
05.06.13
15:56
как-то так, не проверял

"ВЫБРАТЬ
   
   | РаботникиОрганизацийСрезПоследних.Должность.Наименование КАК Долж,
   | РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации.Наименование КАК Подразд,
   | РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование КАК ФИО
   |   ВЫБРАТЬ
   |      ВЫБОР
   |        КОГДА СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения >= &ДатаОтчета
   |                ИЛИ СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения = &НулеваяДата
   |            ТОГДА СостояниеРаботниковОрганизацийСрезПоследних.Состояние
   |        ИНАЧЕ СостояниеРаботниковОрганизацийСрезПоследних.СостояниеЗавершения
   |    КОНЕЦ КАК Поле1,
   |    РаботникиОрганизацийСрезПоследних.Сотрудник
   |
   |ИЗ
   |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаОтчета) КАК РаботникиОрганизацийСрезПоследних
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&ДатаОтчета) КАК СостояниеРаботниковОрганизацийСрезПоследних
   |        ПО (СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник)";
5 dron4ikkk
 
05.06.13
15:56
а вернее если то запрос такой.

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

   Пока Результат.Следующий() Цикл
       item = фабрикаXDTO.Создать(rowType);
       item.fio = Строка(Результат.ФИО);
       item.dolgnost = Строка(Результат.Долж);
       item.podrazdelenie = Строка(Результат.Подразд);
       item.sostoyanie = Строка(Результат.Подразд);
       data.items.Добавить(item);
       
   КонецЦикла;

возврат data
6 palpetrovich
 
05.06.13
15:57
блин

"ВЫБРАТЬ
   
   | РаботникиОрганизацийСрезПоследних.Должность.Наименование КАК Долж,
   | РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации.Наименование КАК Подразд,
   | РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование КАК ФИО,
   |      ВЫБОР
   |        КОГДА СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения >= &ДатаОтчета
   |                ИЛИ СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения = &НулеваяДата
   |            ТОГДА СостояниеРаботниковОрганизацийСрезПоследних.Состояние
   |        ИНАЧЕ СостояниеРаботниковОрганизацийСрезПоследних.СостояниеЗавершения
   |    КОНЕЦ КАК Поле1,
   |    РаботникиОрганизацийСрезПоследних.Сотрудник
   |
   |ИЗ
   |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаОтчета) КАК РаботникиОрганизацийСрезПоследних
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&ДатаОтчета) КАК СостояниеРаботниковОрганизацийСрезПоследних
   |        ПО (СостояниеРаботниковОрганизацийСрезПоследних.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник)";
7 dron4ikkk
 
05.06.13
15:59
palpetrovich, что-то помоему нето....
8 palpetrovich
 
05.06.13
16:01
(7) я не вижу зачем тебе в (0) 2 запроса, нужен один, с левым соединеним
9 dron4ikkk
 
05.06.13
16:02
palpetrovich, т.е. может и верно вы предложили даже..т.е. вы сделали запрос уже с левым соединением? как бе упростили?
10 hhhh
 
05.06.13
16:03
(8) даты там разные
11 palpetrovich
 
05.06.13
16:05
(10) если это действительно нужно автору, тогда  - да  :)
12 dron4ikkk
 
05.06.13
16:07
вот такой теперь запрос я сделал, изменил вернее. проверьте пожалуйста:

ДатаОтчета = ТекущаяДата();
   dataType = ФабрикаXDTO.Тип("http://www.sample-package.org", "Getalldata");    
   rowType = ФабрикаXDTO.Тип("http://www.sample-package.org", "Getallrow");    
   data = ФабрикаXDTO.Создать(dataType);
   
//списокСотрудников="<a>";
Запрос = Новый Запрос;
   Запрос.Текст =    
     "ВЫБРАТЬ
   |
   | РаботникиОрганизацийСрезПоследних.Должность.Наименование КАК Долж,
   | РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации.Наименование КАК Подразд,
   | РаботникиОрганизацийСрезПоследних.Сотрудник.Наименование КАК ФИО
   //|     ИЗ
   //| РегистрСведений.РаботникиОрганизаций.СрезПоследних КАК РаботникиОрганизацийСрезПоследних";
   
   |      ВЫБОР
   |        КОГДА СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения >= &ДатаОтчета
   |                ИЛИ СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения = &НулеваяДата
   |            ТОГДА СостояниеРаботниковОрганизацийСрезПоследних.Состояние
   |        ИНАЧЕ СостояниеРаботниковОрганизацийСрезПоследних.СостояниеЗавершения
   |    КОНЕЦ КАК Поле1,
   |    РаботникиОрганизацийСрезПоследних.Сотрудник
   |ИЗ
   |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаОтчета) КАК РаботникиОрганизацийСрезПоследних
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&ДатаОтчета) КАК Сост
   |        ПО (Сост.Сотрудник = РаботникиОрганизацийСрезПоследних.Сотрудник)";
   
   Запрос.УстановитьПараметр("ДатаОтчета", ДатаОтчета);
   Запрос.УстановитьПараметр("НулеваяДата", '00010101');
   Статус ="Не работает";
   
   Результат = Запрос.Выполнить().Выбрать();

   Пока Результат.Следующий() Цикл
       item = фабрикаXDTO.Создать(rowType);
       item.fio = Строка(Результат.ФИО);
       item.dolgnost = Строка(Результат.Долж);
       item.podrazdelenie = Строка(Результат.Подразд);
       item.sostoyanie = Строка(Результат.Подразд);
       data.items.Добавить(item);
       
   КонецЦикла;
13 palpetrovich
 
05.06.13
16:09
(12) замени  "Сост" на "СостояниеРаботниковОрганизацийСрезПоследних"
14 palpetrovich
 
05.06.13
16:09
+13 и вообще - проверять - тебе как-то сподручней ;)
15 dron4ikkk
 
05.06.13
16:11
palpetrovich, "замени  "Сост" на "СостояниеРаботниковОрганизацийСрезПоследних"" - зачем заменять? если в цикле придется тогда так писать:

Пока Результат.Следующий() Цикл
       item = фабрикаXDTO.Создать(rowType);
       item.fio = Строка(Результат.ФИО);
       item.dolgnost = Строка(Результат.Долж);
       item.podrazdelenie = Строка(Результат.Подразд);
       item.sostoyanie = Строка(Результат.СостояниеРаботниковОрганизацийСрезПоследних);
       data.items.Добавить(item);
16 palpetrovich
 
05.06.13
16:18
(15) в выборе у тебя "СостояниеРаботниковОрганизацийСрезПоследних"
( КОГДА СостояниеРаботниковОрганизацийСрезПоследних.ПериодЗавершения..)
а в соединении "Сост"
(ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СостояниеРаботниковОрганизаций.СрезПоследних(&ДатаОтчета) КАК Сост)

а это
item.sostoyanie = Строка(Результат.СостояниеРаботниковОрганизацийСрезПоследних);
вообще  должно выглядеть так:
item.sostoyanie = Строка(Результат.Поле1);