Имя: Пароль:
1C
1С v8
8.2 Объединение запросов
,
0 hawk1
 
11.05.13
18:47
Есть запрос
"ВЫБРАТЬ
                      |    НачислениеПремиальных.СуммаПремиальных,
                      |    NULL КАК СуммаВыслуги
                      |ИЗ
                      |    РегистрСведений.НачислениеПремиальных КАК НачислениеПремиальных
                      |ГДЕ
                      |    НачислениеПремиальных.Сотрудник = &Сотрудник
                      |    И НачислениеПремиальных.Период = &Период
                      |
                      |ОБЪЕДИНИТЬ ВСЕ
                      |
                      |ВЫБРАТЬ
                      |    NULL,
                      |    НачислениеВыслугиЛет.СуммаВыслуги
                      |ИЗ
                      |    РегистрСведений.НачислениеВыслугиЛет КАК НачислениеВыслугиЛет
                      |ГДЕ
                      |    НачислениеВыслугиЛет.Период = &Период
                      |    И НачислениеВыслугиЛет.Сотрудник = &Сотрудник";

Записи есть в обоих регистрах. Но почему-то сумма премиальных выбирается а сумма выслуги нет.
1 zavrik
 
11.05.13
18:49
Если условие по периоду или сотруднику убрать, то сумма выслуги выбирается?
2 shuhard
 
11.05.13
18:54
(0) раз не выбирается, значит не чему выбираться
3 hawk1
 
11.05.13
19:09
(1) Тоже ничего
4 hawk1
 
11.05.13
19:18
(2) Запись точно есть.
5 Любопытная
 
11.05.13
19:20
Либо период не тот, либо сотрудник. Третьего не дано
6 hawk1
 
11.05.13
19:28
(5) И как это проверить?
7 ИсчадиеADO
 
11.05.13
19:30
стаж 3,5 года, а слов отладчик и консоль запросов не слышал...
8 Любопытная
 
11.05.13
19:30
Второй запрос сделай таким, чтоб запись твоя им отбиралась. Тогда можно говорить об объединении.
Посмотри на запись, которая точно есть, и подумай - почему она в выборку по запросу не попадает
9 hawk1
 
11.05.13
20:29
По отдедьности все работает.
10 shuhard
 
11.05.13
20:30
(9) не верю (с)
11 ИсчадиеADO
 
11.05.13
20:33
(9) телепатирую... запрос выгружаешь в таблицу и берешь строку с индексом 0?
12 hawk1
 
11.05.13
20:34
&НаСервере
Процедура ЗаполнитьНачисления()
   Объект.РасчетОтчислений.Очистить();
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    НачислениеПоОкладу.Период,
                  |    НачислениеПоОкладу.СуммаНачислений
                  |ИЗ
                  |    РегистрСведений.НачислениеПоОкладу КАК НачислениеПоОкладу
                  |ГДЕ
                  |    НачислениеПоОкладу.Сотрудник = &Сотрудник
                  |    И НачислениеПоОкладу.Период МЕЖДУ &НачГода И &КонГода";
   Запрос.УстановитьПараметр("Сотрудник",Объект.Сотрудник);
   ПредыдущийГод = Год(ТекущаяДата()) - 1;
   Запрос.УстановитьПараметр("НачГода",Дата(ПредыдущийГод,1,1));
   Запрос.УстановитьПараметр("КонГода",Дата(ПредыдущийГод,12,31));
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
       Стр = Объект.РасчетОтчислений.Добавить();
       Стр.Период = Выборка.Период;
       Стр.Оклад = Выборка.СуммаНачислений;
       Запрос.Текст = "ВЫБРАТЬ
                      |    НачислениеПремиальных.СуммаПремиальных
                      |ИЗ
                      |    РегистрСведений.НачислениеПремиальных КАК НачислениеПремиальных
                      |ГДЕ
                      |    НачислениеПремиальных.Сотрудник = &Сотрудник
                      |    И НачислениеПремиальных.Период = &Период";              
       Запрос.УстановитьПараметр("Сотрудник",Объект.Сотрудник);
       Запрос.УстановитьПараметр("Период",Выборка.Период);
       Выборка1 = Запрос.Выполнить().Выбрать();
       Выборка1.Следующий();
       Стр.Премиальные = Выборка1.СуммаПремиальных;
       Запрос.Текст = "ВЫБРАТЬ
                      |    НачислениеВыслугиЛет.СуммаВыслуги
                      |ИЗ
                      |    РегистрСведений.НачислениеВыслугиЛет КАК НачислениеВыслугиЛет
                      |ГДЕ
                      |    НачислениеВыслугиЛет.Сотрудник = &Сотрудник
                      |    И НачислениеВыслугиЛет.Период = &Период";
       Запрос.УстановитьПараметр("Сотрудник",Объект.Сотрудник);
       Запрос.УстановитьПараметр("Период",Выборка.Период);
       Выборка1 = Запрос.Выполнить().Выбрать();
       Выборка1.Следующий();        
       Стр.Выслуга = Выборка1.СуммаВыслуги;
       Запрос.Текст = "ВЫБРАТЬ
                      |    НачислениеОтпусных.СуммаОтпускных
                      |ИЗ
                      |    РегистрСведений.НачислениеОтпусных КАК НачислениеОтпусных
                      |ГДЕ
                      |    НачислениеОтпусных.Сотрудник = &Сотрудник
                      |    И НачислениеОтпусных.Период = &Период";
       Запрос.УстановитьПараметр("Сотрудник",Объект.Сотрудник);
       Запрос.УстановитьПараметр("Период",Выборка.Период);
       Выборка1 = Запрос.Выполнить().Выбрать();
       Выборка1.Следующий();              
       Стр.Отпускные = Выборка1.СуммаОтпускных;
   КонецЦикла
КонецПроцедуры
13 Mitriy
 
11.05.13
20:35
гыгы... (11) телепат, однако...
14 ИсчадиеADO
 
11.05.13
20:36
(13) без доплаты, уйду, аднака
15 ИсчадиеADO
 
11.05.13
20:38
(13) спасибо, дорогой, за портянку. Где там твой составной запрос?
16 ИсчадиеADO
 
11.05.13
20:38
(15) к (12)
17 EugeniaK
 
11.05.13
20:42
(12) Жуть какая. 3 года в 1С...
Так как именно результат составного запроса обрабатываешь?
18 Любопытная
 
11.05.13
20:45
Это страшно
19 Mitriy
 
11.05.13
20:45
(17) не знать не стыдно... стыдно - не хотеть знать...
20 ИсчадиеADO
 
11.05.13
20:45
(12) ты сделай так
ВЫБРАТЬ
Т.Сотрудник,
СУММА(Т.Ресурс1) КАК Ресурс1,
СУММА(Т.Ресурс2) КАК Ресурс2
ИЗ
(ВЫБРАТЬ
 Р1.Сотрудник,
 Р1.Ресурс1,
 0 КАК Ресурс2
 ИЗ Регистр.Такойто КАК Р1
 ГДЕ
 Р1.Сотрудник В (&СписокМоихСотрудников)

 ОБЪЕДИНИТЬ ВСЕ

 ВЫБРАТЬ
 Р2.Сотрудник,
 0 КАК Ресурс1
 Р2.Ресурс2,
 ИЗ Регистр.Какойто2 КАК Р2
 ГДЕ
 Р2.Сотрудник В (&СписокМоихСотрудников)
 ) КАК Т2
СГРУППИРОВАТЬ ПО
Т.Сотрудник