Имя: Пароль:
1C
1С v8
Как написать условие в запросе
0 SherifSP
 
26.07.12
13:06
Есть такой запрос, нужно  в нем поставить условие я пытался, но хз правильно ли

Запрос.Текст =
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    СтрокиНачисления.ВидРасчета,
       |    СтрокиНачисления.ВидРасчета.ЗачетОтработанногоВремени КАК ЗачетОтработанногоВремени,
       |    СтрокиНачисления.ВидРасчета.СпособРасчета КАК СпособРасчета,
       |    СтрокиНачисления.ДатаНачала КАК ПериодДействияНачало,
       |    ВЫБОР
       |        КОГДА СтрокиНачисления.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
       |            ТОГДА КОНЕЦПЕРИОДА(СтрокиНачисления.ДатаОкончания, ДЕНЬ)
       |        ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
       |    КОНЕЦ КАК ПериодДействияКонец,
       |    СтрокиНачисления.НомерСтроки КАК НомерСтроки,
       |    СтрокиНачисления.Подразделение,
       |    СтрокиНачисления.Результат,
       |    "+ Если Не ЗначениеЗаполнено(Сотр)Тогда
       |   СтрокиНачисления.Сотрудник,
       |Иначе
       |   Константы.СотрПодразделения КАК Сотрудник
       |КонецЕсли"
       |    СтрокиНачисления.Сотрудник.Физлицо КАК Физлицо,
       |    СтрокиНачисления.ОтработаноДней КАК ОтработаноДней,
       |    СтрокиНачисления.ОтработаноЧасов КАК ОтработаноЧасов,
       |    Работники.ГрафикРаботы,
1 Reset
 
26.07.12
13:07
Продолжай попытки
2 SherifSP
 
26.07.12
13:09
|    "+ Если Не ЗначениеЗаполнено(Сотр)Тогда+"

       |  СтрокиНачисления.Сотрудник,
       |"+Иначе+"
       |   Константы.СотрПодразделения КАК Сотрудник
       |"+КонецЕсли+"


или так нужно?
3 Kolls
 
26.07.12
13:09
ВЫБОР КОГДА Сотр<>ЗНАЧЕНИЕ(СПРАВОЧНИК.СОТРУДНИКИ.ПУСТАЯССЫЛКА)
ТОГДА ХХХХХ
ИНАЧЕ УУУУУ
Конец
4 SherifSP
 
26.07.12
13:12
У меня есть константа если она не заполнена я в запросе вытягиваю
СтрокиНачисления.Сотрудник,

Иначе

Константы.СотрПодразделения КАК Сотрудник

Мне сам синтаксис нужен
5 SherifSP
 
26.07.12
13:14
(3)То есть получается условие я не смогу так прилепить к запросу, нужно через условие запроса все делать?
6 SherifSP
 
26.07.12
14:15
ВЫБОР
   КОГДА Константы.СотрПодразделения <> ЗНАЧЕНИЕ(СПРАВОЧНИК.ФИЗИЧЕСКИЕЛИЦА.ПУСТАЯССЫЛКА)
       ТОГДА СУММА(СтрокиУдержания.Результат) > 0   Ругается не должно > стоять(
   ИНАЧЕ СтрокиУдержания.Результат
КОНЕЦ
7 МурЬка
 
26.07.12
14:17
Это. Тут все в шоке. Но сейчас кто-нибудь придет в себя и обязательно ответит по делу.
8 Wobland
 
26.07.12
14:18
(6) ну сам скажи, что, если сотрудник не пустой?
9 Dionis Sergeevich
 
26.07.12
14:18
Если Условие Тогда Текст = ТекстЗапросаНАчало + ТекстЗапросаСередина + ТекстЗапросаКонец
Иначе Текст = ТекстЗапросаНачало +ТекстЗапросаКонец
10 Dionis Sergeevich
 
26.07.12
14:20
разбей текст запроса на строчные переменные кусками и простыми условиями создавай свой динамический текст запроса
11 SherifSP
 
26.07.12
14:20
СУММА(СтрокиУдержания.Результат) > 0 В условии норм отрабатывало, но оно отрабатывало для всех сотрудников, а мне нужно только для сотрудника который в константе
12 Wobland
 
26.07.12
14:21
(11) тупо, не думая.
выбор когда не пустой тогда выбор когда...
13 SherifSP
 
26.07.12
14:22
(12) Почему не думая?
14 Wobland
 
26.07.12
14:22
(13) потому что тороплюсь уходить ;)
15 SherifSP
 
26.07.12
14:23
Мне бы пример более подробный))
16 Dionis Sergeevich
 
26.07.12
14:23
(13) чего не сделаешь как в (10) написано?
17 Шапокляк
 
26.07.12
14:23
Если Не ЗначениеЗаполнено(Сотр) Тогда
КусочекТекстаЗапроса="квакваква" Иначе
КусочекТекстаЗапроса="Мяумяумяу";
КонецЕсли;
Запрос.Текст=
.....+КусочекТекстаЗапроса+"
.......";
18 SherifSP
 
26.07.12
14:25
(17) - (6)А моим способом никак?
19 SherifSP
 
26.07.12
14:25
(17) Таким я сделал, надо оптимально сократить
20 Reset
 
26.07.12
14:26
(19) Ждем критерия оптимальности
21 SherifSP
 
26.07.12
14:27
(20)Все сделать в запросе без +КусочекЗапроса+, чтобы можно через компоновку зайти посмотреть
22 Dionis Sergeevich
 
26.07.12
14:28
Текст1 =  
       "ВЫБРАТЬ РАЗРЕШЕННЫЕ
       |    СтрокиНачисления.ВидРасчета,
       |    СтрокиНачисления.ВидРасчета.ЗачетОтработанногоВремени КАК ЗачетОтработанногоВремени,
       |    СтрокиНачисления.ВидРасчета.СпособРасчета КАК СпособРасчета,
       |    СтрокиНачисления.ДатаНачала КАК ПериодДействияНачало,
       |    ВЫБОР
       |        КОГДА СтрокиНачисления.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
       |            ТОГДА КОНЕЦПЕРИОДА(СтрокиНачисления.ДатаОкончания, ДЕНЬ)
       |        ИНАЧЕ ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
       |    КОНЕЦ КАК ПериодДействияКонец,
       |    СтрокиНачисления.НомерСтроки КАК НомерСтроки,
       |    СтрокиНачисления.Подразделение,
       |    СтрокиНачисления.Результат"

Текст2 = " ,СтрокиНачисления.Сотрудник,"
Текст3 = " , Константы.СотрПодразделения КАК Сотрудник"
Текст4 = " еще какая-то часть запроса"

Если Твое условие Тогда Текст = Текст1 + Текст2 +Текст4
Иначе Текст = Текст1 + Текст3 + Текст4

ЗАпрос.Текст = Текст

Все просто
23 Шапокляк
 
26.07.12
14:28
(19)
      |    СтрокиНачисления.Результат,

      |    "+ ?(ЗначениеЗаполнено(Сотр),"кваква","мяумяу")+"....
24 SherifSP
 
26.07.12
14:31
(23) Если я нахожусь в консоле запросов, как можно проверить код?
25 SherifSP
 
26.07.12
14:32
(23)Сейчас проверю не через консоль
26 SherifSP
 
26.07.12
14:50
|    "+ ?(ЗначениеЗаполнено(Сотр),"СУММА(СтрокиУдержания.Результат) > 0","СтрокиУдержания.Результат")+"....

Типа так?
27 МурЬка
 
26.07.12
15:45
СУММА(СтрокиУдержания.Результат) > 0 - не может быть полем.
28 jj369
 
26.07.12
15:57
| //Условие

Если ЗначениеЗаполнено(Сотрудник)=Истина Тогда
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "//Условие", СамТекст);
КонецЕсли;
29 SherifSP
 
27.07.12
09:43
Как синтаксически правильно оформить условие запроса.Вот запрос

"ВЫБРАТЬ РАЗРЕШЕННЫЕ
   |    &парамНачало КАК Период,
   |    ИСТИНА КАК Подходит,
   |    РаботникиОрганизацийСрезПоследних.ГрафикРаботы КАК ГрафикРаботы,
   |    РаботникиОрганизацийСрезПоследних.Должность КАК Должность,
   |    РаботникиОрганизацийСрезПоследних.Сотрудник,
   |    РаботникиОрганизацийСрезПоследних.Организация,
   |    СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение,
   |    РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо КАК Физлицо
   |ИЗ
   |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(&парамНачало, ) КАК РаботникиОрганизацийСрезПоследних
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответствиеПодразделенийИПодразделенийОрганизаций
   |        ПО РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации = СоответствиеПодразделенийИПодразделенийОрганизаций.ПодразделениеОрганизации
   |ГДЕ
   |    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
   |    И СоответствиеПодразделенийИПодразделенийОрганизаций.Подразделение = &Подразделение
   |
   |ОБЪЕДИНИТЬ ВСЕ
   |
   |ВЫБРАТЬ
   |    РаботникиОрганизаций.Организация,
   |    РаботникиОрганизаций.Период,
   |    РаботникиОрганизаций.Сотрудник,
   |    ВЫБОР
   |        КОГДА РаботникиОрганизаций.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
   |            ТОГДА ИСТИНА
   |        ИНАЧЕ ЛОЖЬ
   |    КОНЕЦ,
   |    РаботникиОрганизаций.ГрафикРаботы,
   |    РаботникиОрганизаций.Должность,
   |    NULL,
   |    РаботникиОрганизаций.Сотрудник.Физлицо
   |ИЗ
   |    РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
   |ГДЕ
   |    РаботникиОрганизаций.Период > &парамНачало
   |    И РаботникиОрганизаций.Период <= &парамКонец";

Если Объект = Документы.НачислениеЗарплатыРаботникам Тогда
  |ГДЕ
   |    РаботникиОрганизаций.Период > &парамНачало
   |    И РаботникиОрганизаций.Период <= &парамКонец"; - Тогда только это условие налаживается

КонецЕсли
30 hhhh
 
27.07.12
10:18
(29) текст запроса - это просто строка. Так и работайте с ним как со строкой. Например:

Если Объект = Документы.НачислениеЗарплатыРаботникам Тогда
  ТекстЗапроса = ТекстЗапроса + "ВАСЯ";
Иначе
  ТекстЗапроса = ТекстЗапроса + "ГРИША";
КонецЕсли;

Такая конструкция понятна?
31 Dionis Sergeevich
 
27.07.12
10:28
(30) я ему вон на его коде пример привел в (22)
Он стебется чтоле? Шутник =)