Имя: Пароль:
1C
1С v8
Помогите с условием запроса
0 егаис
 
05.07.13
13:11
Есть такой несложный запрос, который выводит на дату текущий процент СН и процент некой доплаты.
   Запрос.Текст =
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.ФизЛицо КАК ФизЛицо,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.ПорядокНачисленияСеверныхНадбавок КАК ПорядокНачисленияСеверныхНадбавок,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.НачальныйПроцентСевернойНадбавки КАК НачальныйПроцентСевернойНадбавки,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.СеверныйСтажМесяцев КАК СеверныйСтажМесяцев,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.СеверныйСтажДней КАК СеверныйСтажДней,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.Период КАК ДатаРегистрации,
       |    ЕстьNULL(ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Показатель1,0) КАК Показатель1
       |{ВЫБРАТЬ
       |    ФизЛицо,
       |    ПорядокНачисленияСеверныхНадбавок,
       |    НачальныйПроцентСевернойНадбавки,
       |    СеверныйСтажМесяцев,
       |    СеверныйСтажДней,
       |    ДатаРегистрации}
       |ИЗ
       |    РегистрСведений.СведенияОСтажеРаботыНаСевере.СрезПоследних(&Период {(&Период)}, {(ФизЛицо)}) КАК СведенияОСтажеРаботыНаСевереСрезПоследних
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(
       |                &Период,
       |                ВидРасчета = &ВидРасчета
       |                    И Показатель1 > 0) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних
       |        ПО СведенияОСтажеРаботыНаСевереСрезПоследних.ФизЛицо = ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник.Физлицо
       |{ГДЕ
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.ФизЛицо.*,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.ПорядокНачисленияСеверныхНадбавок.*,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.НачальныйПроцентСевернойНадбавки,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.СеверныйСтажМесяцев,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.СеверныйСтажДней,
       |    СведенияОСтажеРаботыНаСевереСрезПоследних.Период КАК ДатаРегистрации}";

   Запрос.УстановитьПараметр("Период", Период);
   Запрос.УстановитьПараметр("ВидРасчета", ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию("Персональная надбавка", Истина));

В РН ПлановыеНачисленияРаботниковОрганизаций есть ресурсы "Действие по окончании" м "Дата возврата"
Не соображу как в
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(
       |                &Период,
       |                ВидРасчета = &ВидРасчета
       |                    И Показатель1 > 0) КАК ПлановыеНачисленияРаботниковОрганизацийСрезПоследних
добавить условие типа
Если "Действие по окончании" = "Прекратить" и "Дата возврата" < Период
то записи не выводить,
ИНАЧЕ если действие пустое или дата возврата больше - выводить.
Спасибо
1 егаис
 
05.07.13
13:12
можно конечно их проверять на значения в выборке результата, но хочется красиво - в запросе :)
2 chelentano
 
05.07.13
13:14
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних ПО СведенияОСтажеРаботыНаСевереСрезПоследних.ФизЛицо = ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.Сотрудник.Физлицо И <Твое условие>
3 chelentano
 
05.07.13
13:15
ну или тупо в ГДЕ добавь условие
4 егаис
 
05.07.13
13:15
то там несколько условий. Я туплю?
5 егаис
 
05.07.13
13:17
Не заполнено "Действие по окончании" - выводить
Заполнено "Действие по окончании" и "Дата возврата" >= Период - выводить
Иначе - не выводить
6 chelentano
 
05.07.13
13:19
ГДЕ <Действие по окончании не заполнено>
  ИЛИ (<Действие по окончании не заполнено> И "Дата возврата" >= Период)
7 chelentano
 
05.07.13
13:20
точнее
ИЛИ (<Действие по окончании заполнено> И "Дата возврата" >= Период)
8 егаис
 
05.07.13
13:35
ГДЕ
       |    (ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ПериодЗавершения ЕСТЬ NULL
       |            ИЛИ ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ДействиеЗавершения = &ЗначениеПеречисления
       |                И ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ПериодЗавершения > &Период)

Так?
9 егаис
 
05.07.13
13:36
точнее
       |ГДЕ
       |    (ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ПериодЗавершения ЕСТЬ NULL
       |            ИЛИ (ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ДействиеЗавершения = &ЗначениеПеречисления
       |                И ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ПериодЗавершения > &Период))
10 chelentano
 
05.07.13
13:37
(9) насчёт "ЕСТЬ NULL" не уверен, значение не заполнено и ЕСТЬ NULL - немного разные вещи
11 егаис
 
05.07.13
13:37
разве не так проверяется пустая дата?
12 chelentano
 
05.07.13
13:39
(11) не так
13 егаис
 
05.07.13
13:43
|ГДЕ
       |    (ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ПериодЗавершения = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
       |            ИЛИ (ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ДействиеЗавершения = &ЗначениеПеречисления
       |                И ПлановыеНачисленияРаботниковОрганизацийСрезПоследних.ПериодЗавершения > &Период))
14 егаис
 
05.07.13
13:44
другой ньюанс
применение условия не меняет на правое соединение?!
не все записи попадают
15 viktor_vv
 
05.07.13
13:55
(13) Оно меняет на внутреннее, если в Где условия по присоединяемой таблице.
Ошибка? Это не ошибка, это системная функция.