Имя: Пароль:
1C
1С v8
Помогите переделать запрос
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
Спасибо! Сам бы не догадался использовать условие в связях )))
Вроде работает.