|
Помогите переделать запрос | ☑ | ||
---|---|---|---|---|
0
wladimir90
17.04.12
✎
14:10
|
Доброго дня! Помогите пожалуйста переделать запрос. Сейчас если выставить дату на которую нет записей в регистре НачисленияВыплаты - ничего не выводится. Надо что бы в любом случае выводились записи из регистров сведений УчетныеДанныеСотрудник (непереодич) и ДанныеСотрудников (переодич). Перестановка местами связей не помогает.
Условия ЕСТЬNULL пробовал ставить на все, тоже ничего не поменяло. ВЫБРАТЬ УчетныеДанныеСотрудников.Сотрудник, МАКСИМУМ(УчетныеДанныеСотрудников.ДатаУвольнения) КАК ДатаУвольнения, МАКСИМУМ(УчетныеДанныеСотрудников.ДатаПринятия) КАК ДатаПриема, ЕСТЬNULL(МАКСИМУМ(ДанныеСотрудниковСрезПоследних.Оклад), 0) КАК Оклад, ЕСТЬNULL(МАКСИМУМ(ДанныеСотрудниковСрезПоследних.ПодсобныйРабочий), 0) КАК ПодсобныйРабочий, ЕСТЬNULL(МАКСИМУМ(ДанныеСотрудниковСрезПоследних.Часов), 0) КАК Часов, ЕСТЬNULL(МАКСИМУМ(ДанныеСотрудниковСрезПоследних.Процент), 0) КАК Процент, СУММА(НачисленияВыплаты.Сумма) КАК Сумма, СУММА(НачисленияВыплаты.СуммаНачислениеМесяц) КАК СуммаНачислениеМесяц, СУММА(НачисленияВыплаты.СуммаФОТ) КАК СуммаФОТ, СУММА(НачисленияВыплаты.СуммаПрочие) КАК СуммаПрочие, СУММА(НачисленияВыплаты.СуммаПроизводственные) КАК СуммаПроизводственные, СУММА(НачисленияВыплаты.СуммаУдержано) КАК СуммаУдержано, СУММА(НачисленияВыплаты.СуммаАванс) КАК СуммаАванс, СУММА(НачисленияВыплаты.Сумма_ВтораяДолжность_ПоОсновной) КАК Сумма_ВтораяДолжность_ПоОсновной, СУММА(НачисленияВыплаты.Сумма_ВтораяДолжность_ПоВторой) КАК Сумма_ВтораяДолжность_ПоВторой, ЕСТЬNULL(МАКСИМУМ(ДанныеСотрудниковСрезПоследних.ЧасовПоОсновнойДолжности), 0) КАК ЧасовПоОсновнойДолжности, ЕСТЬNULL(МАКСИМУМ(ДанныеСотрудниковСрезПоследних.ЧасовПоВторойДолжности), 0) КАК ЧасовПоВторойДолжности, ЕСТЬNULL(МАКСИМУМ(ДанныеСотрудниковСрезПоследних.ОкладПоОсновной), 0) КАК ОкладПоОсновной, ЕСТЬNULL(МАКСИМУМ(ДанныеСотрудниковСрезПоследних.ОкладПоВторойДолжности), 0) КАК ОкладПоВторойДолжности, МАКСИМУМ(УчетныеДанныеСотрудников.РаботаетВременно) КАК РаботаетВременно, НачисленияВыплаты.Подразделение КАК Подразделение ИЗ РегистрНакопления.НачисленияВыплаты КАК НачисленияВыплаты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеСотрудников.СрезПоследних(&ДатаКон, ) КАК ДанныеСотрудниковСрезПоследних ПО НачисленияВыплаты.Сотрудник = ДанныеСотрудниковСрезПоследних.Сотрудник И НачисленияВыплаты.Сотрудник.Организация = ДанныеСотрудниковСрезПоследних.Организация ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетныеДанныеСотрудников КАК УчетныеДанныеСотрудников ПО НачисленияВыплаты.Сотрудник = УчетныеДанныеСотрудников.Сотрудник И НачисленияВыплаты.Сотрудник.Организация = УчетныеДанныеСотрудников.Организация ГДЕ НачисленияВыплаты.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций И НачисленияВыплаты.Период МЕЖДУ &ДатаНач И &ДатаКон СГРУППИРОВАТЬ ПО УчетныеДанныеСотрудников.Сотрудник, НачисленияВыплаты.Подразделение УПОРЯДОЧИТЬ ПО НачисленияВыплаты.Подразделение.Наименование, УчетныеДанныеСотрудников.Сотрудник.Наименование |
|||
1
Мыш
17.04.12
✎
14:12
|
Используй ПОЛНОЕ соединение
|
|||
2
Мыш
17.04.12
✎
14:14
|
И условие поменяй.
ГДЕ НачисленияВыплаты.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций И НачисленияВыплаты.Период МЕЖДУ &ДатаНач И &ДатаКон Это условие режет записи. |
|||
3
wladimir90
17.04.12
✎
14:16
|
(1) Все виды соединений пробовал.
(2) Да, верно. Но как его переделать? Нужны записи за конкретный месяц и по конкретному документу. Если нет таких, нужно выводить просто пустые строки. (ЕстьNull ставил везде, в (0) изначальный запрос). |
|||
4
wladimir90
17.04.12
✎
14:17
|
(4) вернее пустые колонки
|
|||
5
Мыш
17.04.12
✎
14:38
|
РегистрСведений.УчетныеДанныеСотрудников - это слева
РегистрНакопления.НачисленияВыплаты - это справа Левое соединение, все дела. |
|||
6
wladimir90
17.04.12
✎
14:44
|
(5) Ты имеешь ввиду так?:
(так не работает...) ВЫБРАТЬ УчетныеДанныеСотрудников.Сотрудник, МАКСИМУМ(ЕСТЬNULL(УчетныеДанныеСотрудников.ДатаУвольнения, 0)) КАК ДатаУвольнения, МАКСИМУМ(ЕСТЬNULL(УчетныеДанныеСотрудников.ДатаПринятия, 0)) КАК ДатаПриема, МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.Оклад, 0)) КАК Оклад, МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.ПодсобныйРабочий, 0)) КАК ПодсобныйРабочий, МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.Часов, 0)) КАК Часов, МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.Процент, 0)) КАК Процент, СУММА(ЕСТЬNULL(НачисленияВыплаты.Сумма, 0)) КАК Сумма, СУММА(ЕСТЬNULL(НачисленияВыплаты.СуммаНачислениеМесяц, 0)) КАК СуммаНачислениеМесяц, СУММА(ЕСТЬNULL(НачисленияВыплаты.СуммаФОТ, 0)) КАК СуммаФОТ, СУММА(ЕСТЬNULL(НачисленияВыплаты.СуммаПрочие, 0)) КАК СуммаПрочие, СУММА(ЕСТЬNULL(НачисленияВыплаты.СуммаПроизводственные, 0)) КАК СуммаПроизводственные, СУММА(ЕСТЬNULL(НачисленияВыплаты.СуммаУдержано, 0)) КАК СуммаУдержано, СУММА(ЕСТЬNULL(НачисленияВыплаты.СуммаАванс, 0)) КАК СуммаАванс, СУММА(ЕСТЬNULL(НачисленияВыплаты.Сумма_ВтораяДолжность_ПоОсновной, 0)) КАК Сумма_ВтораяДолжность_ПоОсновной, СУММА(ЕСТЬNULL(НачисленияВыплаты.Сумма_ВтораяДолжность_ПоВторой, 0)) КАК Сумма_ВтораяДолжность_ПоВторой, МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.ЧасовПоОсновнойДолжности, 0)) КАК ЧасовПоОсновнойДолжности, МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.ЧасовПоВторойДолжности, 0)) КАК ЧасовПоВторойДолжности, МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.ОкладПоОсновной, 0)) КАК ОкладПоОсновной, МАКСИМУМ(ЕСТЬNULL(ДанныеСотрудниковСрезПоследних.ОкладПоВторойДолжности, 0)) КАК ОкладПоВторойДолжности, МАКСИМУМ(ЕСТЬNULL(УчетныеДанныеСотрудников.РаботаетВременно, ЛОЖЬ)) КАК РаботаетВременно, ЕСТЬNULL(НачисленияВыплаты.Подразделение, УчетныеДанныеСотрудников.Подразделение) КАК Подразделение ИЗ РегистрСведений.УчетныеДанныеСотрудников КАК УчетныеДанныеСотрудников ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НачисленияВыплаты КАК НачисленияВыплаты ПО УчетныеДанныеСотрудников.Сотрудник = НачисленияВыплаты.Сотрудник И УчетныеДанныеСотрудников.Организация = НачисленияВыплаты.Сотрудник.Организация ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДанныеСотрудников.СрезПоследних(&ДатаКон, ) КАК ДанныеСотрудниковСрезПоследних ПО УчетныеДанныеСотрудников.Сотрудник = ДанныеСотрудниковСрезПоследних.Сотрудник И УчетныеДанныеСотрудников.Организация = ДанныеСотрудниковСрезПоследних.Сотрудник.Организация ГДЕ НачисленияВыплаты.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций И НачисленияВыплаты.Период МЕЖДУ &ДатаНач И &ДатаКон И УчетныеДанныеСотрудников.Организация = УчетныеДанныеСотрудников.Сотрудник.Организация СГРУППИРОВАТЬ ПО УчетныеДанныеСотрудников.Сотрудник, ЕСТЬNULL(НачисленияВыплаты.Подразделение, УчетныеДанныеСотрудников.Подразделение) |
|||
7
viktor_vv
17.04.12
✎
14:49
|
Выкинь из общего ГДЕ вот это, и вставь в ПО
НачисленияВыплаты.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций И НачисленияВыплаты.Период МЕЖДУ &ДатаНач И &ДатаКон и вот сюда ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НачисленияВыплаты КАК НачисленияВыплаты ПО УчетныеДанныеСотрудников.Сотрудник = НачисленияВыплаты.Сотрудник И УчетныеДанныеСотрудников.Организация = НачисленияВыплаты.Сотрудник.Организация И НачисленияВыплаты.Регистратор ССЫЛКА Документ.НачислениеЗарплатыРаботникамОрганизаций И НачисленияВыплаты.Период МЕЖДУ &ДатаНач И &ДатаКон |
|||
8
wladimir90
17.04.12
✎
15:11
|
Спасибо! Сам бы не догадался использовать условие в связях )))
Вроде работает. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |