Имя: Пароль:
1C
1С v8
Как корректно работать с запросами не через "Конструктор запросов"
0 Падаван
 
17.11.15
10:56
Имеется большой запрос. Сделан не через "Конструктор запросов". Как правильно с ним работать? Может я что-то упускаю?
Стоит задача перенести 4 таких запроса на другую конфигурацию.


Запрос.Текст =
    "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ" + ?(НеОграничиватьСписокЗадач = Истина, "", " ПЕРВЫЕ "+мКоличествоЗадачВГруппе) + "
    |    ДОБАВИТЬКДАТЕ(РаботникиОрганизацийСрезПоследних.Физлицо.ДатаРождения, ГОД, ГОД(&ТекущаяДата) - ГОД(РаботникиОрганизацийСрезПоследних.Физлицо.ДатаРождения)) КАК Период,
    |    ГОД(&ТекущаяДата) - ГОД(РаботникиОрганизацийСрезПоследних.Физлицо.ДатаРождения) КАК Возраст,
    |    РаботникиОрганизацийСрезПоследних.Физлицо.Наименование КАК Наименование,
    |    РаботникиОрганизацийСрезПоследних.Физлицо КАК Ссылка,
    |    ВЫБОР
    |        КОГДА (ГОД(&ТекущаяДата) - ГОД(РаботникиОрганизацийСрезПоследних.Физлицо.ДатаРождения)) / 5 = (ВЫРАЗИТЬ((ГОД(&ТекущаяДата) - ГОД(РаботникиОрганизацийСрезПоследних.Физлицо.ДатаРождения)) / 5 КАК ЧИСЛО(4, 0)))
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ КАК ДополнительныеДанные
    |ИЗ
    |    РегистрСведений.РаботникиОрганизаций.СрезПоследних(
    |        ,
    |        ДОБАВИТЬКДАТЕ(Физлицо.ДатаРождения, ГОД, ГОД(&ТекущаяДата) - ГОД(Физлицо.ДатаРождения)) >= &ДатаОтсчетаДнейРождения
    |            И ДОБАВИТЬКДАТЕ(Физлицо.ДатаРождения, ГОД, ГОД(&ТекущаяДата) - ГОД(Физлицо.ДатаРождения)) <= ДОБАВИТЬКДАТЕ(&ДатаОтсчетаДнейРождения, ДЕНЬ, 10)";
    Если Не (СписокОрганизаций = Неопределено) Тогда
    Запрос.Текст = Запрос.Текст + "
    |            И Организация В (&СписокГоловныхОрганизаций)";
    КонецЕсли;
    Запрос.Текст = Запрос.Текст + "
    |            И (НЕ Физлицо В (&ЗакрытыеФизлица))) КАК РаботникиОрганизацийСрезПоследних
    |ГДЕ
    |    РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
    |    И РаботникиОрганизацийСрезПоследних.ОбособленноеПодразделение В (&СписокОрганизаций)
    |
    |ОБЪЕДИНИТЬ
    |
    |ВЫБРАТЬ" + ?(НеОграничиватьСписокЗадач = Истина, "", " ПЕРВЫЕ "+мКоличествоЗадачВГруппе) + "
    |    ДОБАВИТЬКДАТЕ(РаботникиСрезПоследних.ФизЛицо.ДатаРождения, ГОД, ГОД(&ТекущаяДата) - ГОД(РаботникиСрезПоследних.ФизЛицо.ДатаРождения)),
    |    ГОД(&ТекущаяДата) - ГОД(РаботникиСрезПоследних.Физлицо.ДатаРождения) КАК Возраст,
    |    РаботникиСрезПоследних.ФизЛицо.Наименование,
    |    РаботникиСрезПоследних.ФизЛицо,
    |    ВЫБОР
    |        КОГДА (ГОД(&ТекущаяДата) - ГОД(РаботникиСрезПоследних.Физлицо.ДатаРождения)) / 5 = (ВЫРАЗИТЬ((ГОД(&ТекущаяДата) - ГОД(РаботникиСрезПоследних.Физлицо.ДатаРождения)) / 5 КАК ЧИСЛО(4, 0)))
    |            ТОГДА ИСТИНА
    |        ИНАЧЕ ЛОЖЬ
    |    КОНЕЦ
    |ИЗ
    |    РегистрСведений.Работники.СрезПоследних(
    |        ,
    |        ДОБАВИТЬКДАТЕ(ФизЛицо.ДатаРождения, ГОД, ГОД(&ТекущаяДата) - ГОД(ФизЛицо.ДатаРождения)) >= &ДатаОтсчетаДнейРождения
    |            И ДОБАВИТЬКДАТЕ(ФизЛицо.ДатаРождения, ГОД, ГОД(&ТекущаяДата) - ГОД(ФизЛицо.ДатаРождения)) <= ДОБАВИТЬКДАТЕ(&ДатаОтсчетаДнейРождения, ДЕНЬ, 10)
    |            И (НЕ ФизЛицо В (&ЗакрытыеФизлица))) КАК РаботникиСрезПоследних
    |ГДЕ
    |    РаботникиСрезПоследних.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
    |
    |УПОРЯДОЧИТЬ ПО
    |    Период,
    |    Наименование";
    
    Запрос.УстановитьПараметр("ЗакрытыеФизлица",            ЗакрытыеФизлица);
    Запрос.УстановитьПараметр("ТекущаяДата",                ТекущаяДата);
    Запрос.УстановитьПараметр("ДатаОтсчетаДнейРождения",    ДатаОтсчетаДнейРождения);
1 butterbean
 
17.11.15
10:57
какая связь между конструктором и переносом в другую конфу??
2 Господин ПЖ
 
17.11.15
10:57
>Как правильно с ним работать?

позвать специалиста
3 cw014
 
17.11.15
10:57
Не такой уж он и большой
4 DDwe
 
17.11.15
10:59
(2) +100
5 Ненавижу 1С
 
гуру
17.11.15
11:00
там одна (первая) строка только без конструктора
6 Падаван
 
17.11.15
11:00
Объясняю, нужно корректно перенести. Чтобы все работало. Например регистра "Работник" у меня нет.
Неужели проще нельзя написать? к чему такие извращения.

Он непонятен. В "конструкторе" все ГОРАЗДО нагляднее.
7 DDwe
 
17.11.15
11:01
(6) Тогда может заново написать? Нет? Как ты его переносить собираешься?
8 13_Mult
 
17.11.15
11:01
(3) +1 совсем не большой.)
9 DDwe
 
17.11.15
11:02
(6) Ты понимаешь, что делает этот запрос?
10 Lama12
 
17.11.15
11:02
(6) В отладчике поставь точку останова на строке Запрос.Выполнить().
Посмотри текст запроса. Скопируй его в консоль. Анализируй сколько влезет.
11 Ненавижу 1С
 
гуру
17.11.15
11:02
Напиши

тупо
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 0
...

а ниже

Запрос.Текст = СтрЗаменить(Запрос.Текст,"ПЕРВЫЕ 0",?(НеОграничиватьСписокЗадач,"","ПЕРВЫЕ "+мКоличествоЗадачВГруппе));
12 Падаван
 
17.11.15
11:02
Спасибо. Так и попробую.
13 Vladal
 
17.11.15
11:03
(0) За такое: "?(НеОграничиватьСписокЗадач = Истина, "", " ПЕРВЫЕ "+мКоличествоЗадачВГруппе)"
надо бить ребром линейки по рукам.
Металлической.
14 ДенисЧ
 
17.11.15
11:04
За использование конструктора запросов - надо бить тяжёлым предметом по голове. До прояснения.
15 Vladal
 
17.11.15
11:06
В (11) дело говорит. Так у тебя и логика модуля сохранится (запрос будет выбирать в зависимости от настроек) и в конструкторе можно будет его открывать.

Я еще использую в условиях примерно такую конструкцию:
1 = 1 И 2 = 2
И <какое-то моё условие>

а потом в тексте модуля уже меняю 1 или 2 на нужное мне дополнение к условиям. Например, так:

ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "1 = 1", "1 = 1 И <моё условие>Э)

И т.д.
16 DDwe
 
17.11.15
11:08
(15) " Чтобы все работало. Например регистра "Работник" у меня нет. " Что он там в новой конфе открывать будет?
17 Vladal
 
17.11.15
11:09
(16) Адресуй вопрос автору. Например, вот так: "(16) к (0)"
18 Ненавижу 1С
 
гуру
17.11.15
11:10
(15) я делаю тупо как параметры, потом заменяю

ГДЕ
&УсловиеСклады И &УсловиеТовары

и не говорите мне про построители ))
19 Vladal
 
17.11.15
11:10
(18) как вариант.
20 Vladal
 
17.11.15
11:10
построители или конструкторы?
21 Ненавижу 1С
 
гуру
17.11.15
11:11
(20) построители
22 Lama12
 
17.11.15
11:24
(18) Хм... а вот с параметрами интересно. Тоже использовал вариант из (15). Хотя у него тоже есть свои преимущества, в виде готовой "Истины" в условиях. Но в тоже время, при количестве таких "заглушек" переваливающих за 100 начинаются чудеса с форматированием.