|
объединить два запроса | ☑ | ||
---|---|---|---|---|
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); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |