Имя: Пароль:
1C
 
Вопрос по операции "ВЫБОР" в языке запросов
, ,
0 булочник
 
24.02.15
10:16
1С:Предприятие 8.3 (8.3.5.1460)

Встроенная справка требует заключать выражение операции ВЫБОР языка запросов в одни двойные кавычки , а в действительности надо заключать в двое двойных кавычек,иначе ошибка и конструктор ругается
почему так ?

        |   ВЫБОР
    |   КОГДА Товары.ЭтоГруппа = ИСТИНА
    |   ТОГДА ""Это группа""
    |   ИНАЧЕ ""Это элемент""                
    |   КОНЕЦ КАК ПризнакГруппы
1 Wobland
 
24.02.15
10:18
потому что кавычка внутри строкового литерала экранируется кавычкой. и язык запросов тут ни при чём
2 Wobland
 
24.02.15
10:19
а выбрать Товары.ЭтоГруппа аллах запрещает?
3 D_E_S_131
 
24.02.15
10:30
Конструктором надо запросы писать и не будет таких вопросов.
4 булочник
 
24.02.15
10:45
(1)
а вот фрагмент справки:
Пример:
"

ВЫБРАТЬ
Справочник.Номенклатура.Наименование,
ВЫБОР
   КОГДА Справочник.Номенклатура.Этогруппа = ИСТИНА
      ТОГДА "Это Группа"
   КОГДА Справочник.Номенклатура.ЗакупочнаяЦена > 1000
      ТОГДА "1000 -"

"
5 Wobland
 
24.02.15
10:45
(4) я в курсе
6 булочник
 
24.02.15
10:47
(3)
так не все конструктор делает, а им только по ПКМ свой г&вн0код проверяешь
7 Ненавижу 1С
 
гуру
24.02.15
10:47
(4) ты заметил, что справка дана в контексте самой строки запроса?
например, там нет символов переноса строк |
8 Ненавижу 1С
 
гуру
24.02.15
10:48
(6) очень, очень мало чего не делает конструктор, да и то у конструктора есть возможность непосредственного редактирования кода в отдельном окне
9 D_E_S_131
 
24.02.15
10:48
(6) Что не делает конструктор?
10 булочник
 
24.02.15
10:49
(7)
дошло
11 D_E_S_131
 
24.02.15
10:49
(8) к (9)
12 Wobland
 
24.02.15
10:50
(9) имеющие только руками приходится
13 D_E_S_131
 
24.02.15
10:51
(12) Да ты что?! А если сделаю не руками?
14 D_E_S_131
 
24.02.15
10:52
Вообще нету ничего, что можно написать руками и нельзя сделать в Конструкторе.
15 Wobland
 
24.02.15
10:52
(13) откроешь для меня новость ;)
16 Wobland
 
24.02.15
10:54
(14) выбрать "да?"
17 D_E_S_131
 
24.02.15
10:54
(15) Просто ставишь условие на "ручное изменение" и там используешь любые агрегатные функции. Закроешь конструктор и "Имеющие" волшебным образом появится само собой.
18 Ненавижу 1С
 
гуру
24.02.15
10:55
(14) упорядочивание по произвольному выражению

ВЫБРАТЬ
    АвансовыйОтчет.Ссылка
ИЗ
    Документ.АвансовыйОтчет КАК АвансовыйОтчет

УПОРЯДОЧИТЬ ПО
    АвансовыйОтчет.КурсДокумента / АвансовыйОтчет.КратностьДокумента
19 Провинциальный 1сник
 
24.02.15
10:55
Храните запросы в макетах!
20 vhl
 
24.02.15
10:57
(0) просто делай в конструкторе запроса, а не в тексте.
21 D_E_S_131
 
24.02.15
11:00
(18) Пфф, сделай такое поле и упорядочивай.
22 patria0muerte
 
24.02.15
11:00
(18) Да тоже можно вроде, не?

ВЫБРАТЬ
    АвансовыйОтчет.Ссылка,    АвансовыйОтчет.КурсДокумента/АвансовыйОтчет.КратностьДокумента КАК ПолеУпорядочивания
ИЗ
    Документ.АвансовыйОтчет КАК АвансовыйОтчет

УПОРЯДОЧИТЬ ПО
    ПолеУпорядочивания
23 Ненавижу 1С
 
гуру
24.02.15
11:01
(21)(22) а мне само поле не нужно в запросе
24 D_E_S_131
 
24.02.15
11:02
(22) Конечно можно. Мозги парят. :)
25 D_E_S_131
 
24.02.15
11:02
(23) Нужно! Ты просто об этом не знаешь. :)
26 Ненавижу 1С
 
гуру
24.02.15
11:03
(25) слив засчитан
27 1976vas
 
24.02.15
11:03
(24) Нельзя конструктором добавить вложенный запрос в виртуальных параметрах.
28 Ненавижу 1С
 
гуру
24.02.15
11:04
(27) ну там можно в конструкторе произвольно написать
29 D_E_S_131
 
24.02.15
11:04
(27) Сама по себе эта конструкция в дрожь сразу бросает. Тут скорее даже не нужно так делать чем "не можно".
30 patria0muerte
 
24.02.15
11:06
(29) Чем не нравится?
31 patria0muerte
 
24.02.15
11:07
+(29) Вполне штатная ситуация, когда данные документа кидаешь в ВТ и по ней фильтруешь виртуальную таблицу регистра.
32 Wobland
 
24.02.15
11:08
1. <Условие упорядочивания> в общем случае может представлять собой некоторое выражение.
2. http://i.imgur.com/RHtN6cN.png
3. да и Ицик ещё говорил, что order by работает по алиасам
33 Wobland
 
24.02.15
11:08
+(32) меня п.1 смущает
34 1976vas
 
24.02.15
11:12
(29) http://www.youtube.com/watch?v=m0WSygat50o вот здесь автор встрял, при обучении запросам.
35 D_E_S_131
 
24.02.15
11:13
(30) Не нравится "медленностью". Не уверен, что подобное преобразуется в правильное соединение при конвертации в текст запроса. Я бы делал через выборку из реальной таблицы с соединением к этой ВТ.
36 Timon1405
 
24.02.15
11:14
(27) ой да шо вы нам рассказываете, все там можно) например
1) пишете в ВТ (номенклатура,склад) в ( )  <--(обязательно пробел оставить)
2) выделяете пробел мышкой
3) ПКМ --> (Внезапно!) конструктор запроса
4) выбираем поля из прошлый ВТ
37 ssh2006
 
24.02.15
11:15
(27) можно вызвать еще один конструктор, находясь в поле условия вирт таблицы, и написать нужный запрос, причем в открывшемся конструкторе будут видны временные таблицы основного запроса
38 Drac0
 
24.02.15
11:15
(35) ИМХО, лучше через подзапрос. Например, у тебя в ВТ собран 10 товаров или документов и надо получить по ним данные из виртуальной таблицы. Рациональнее их передать как параметр через (ВЫБРАТЬ Док ИЗ ВТ), чем получать таблицу на лям доков, а потом ее фильтровать соединением.
39 D_E_S_131
 
24.02.15
11:18
(38) Хочешь сказать, что Внутреннее соединение таблицы "МлнДок" и "ВТ_10тов" будет выбирать все данные?
40 1976vas
 
24.02.15
11:18
(36) На записи у автора внезапно не получилось, но я не проверял.
41 Ненавижу 1С
 
гуру
24.02.15
11:19
вот еще код, вполне работает:


    ТекстЗапроса =
    "ВЫБРАТЬ
    |    ТЗ.Номенклатура
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗ КАК ТЗ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ТЗ.Номенклатура,
    |    ТЗ.Номенклатура.Артикул
    |ИЗ
    |    ТЗ КАК ТЗ";
    
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("ТЗ",ТЗ);
    ТЗ = Запрос.Выполнить().Выгрузить();
    ЭлементыФормы.ТЗ.СоздатьКолонки();


однако в конструктор зайти нельзя
42 D_E_S_131
 
24.02.15
11:21
(41) Речь не про то, что бы можно было зайти конструктором, а про возможность создать такой же текст. Временные таблицы вполне себе создаются конструктором, ставь только в имени таблицы & в начале.
43 ssh2006
 
24.02.15
11:22
(41) да, приходится явное соединение со справочником делать, чтобы открывалось
44 D_E_S_131
 
24.02.15
11:23
(43) Чё?
45 rsv
 
24.02.15
11:23
(0) И причем здесь ВЫБОР ?  Любое явное строковое значение в запросе будете заворачивать в 4 е кавычки
46 D_E_S_131
 
24.02.15
11:24
(43) "Выразить()" придумано для чего?
47 ssh2006
 
24.02.15
11:25
(44) ты просто не сталкивался с таким
48 Ненавижу 1С
 
гуру
24.02.15
11:26
(42) он уже при сохранении начинает ругаться
49 D_E_S_131
 
24.02.15
11:26
(47) Не спасет тебя (46)?
50 ssh2006
 
24.02.15
11:28
Можно сохранить, в описании таблицы указать тип поля в конструкторе, тогда сохранится.

(49) никто не говорит, что это нерешаемая проблема)
51 D_E_S_131
 
24.02.15
11:29

"ВЫБРАТЬ
    |    ВнешнийИсточник.Номенклатура
    |ПОМЕСТИТЬ ВТ_Данные
    |ИЗ
    |    &ИсточникДанных КАК ВнешнийИсточник
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ_Данные.Номенклатура,
    |    ВЫРАЗИТЬ(ВТ_Данные.Номенклатура КАК Справочник.Номенклатура).Артикул КАК Поле1
    |ИЗ
    |    ВТ_Данные КАК ВТ_Данные"
[\1C]
52 rsv
 
24.02.15
11:30
Так Выбор тут причем из темы в (0) ?
53 D_E_S_131
 
24.02.15
11:30
(51) + Вот так не ругается и открывается всегда.
54 D_E_S_131
 
24.02.15
11:32

"ВЫБРАТЬ
    |    ВнешнийИсточник.Номенклатура
    |ПОМЕСТИТЬ ВТ_Данные
    |ИЗ
    |    &ИсточникДанных КАК ВнешнийИсточник
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    ВТ_Данные.Номенклатура,
    |    ВЫРАЗИТЬ(ВТ_Данные.Номенклатура КАК Справочник.Номенклатура).Артикул КАК Артикул
    |ИЗ
    |    ВТ_Данные КАК ВТ_Данные"
55 Ненавижу 1С
 
гуру
24.02.15
11:33
(54) как костыль пойдет
56 ssh2006
 
24.02.15
11:34
(51) мне это известно
57 ssh2006
 
24.02.15
11:35
такой же "финт" можно делать когда нужно получить реквизит от параметра запроса ссылочного типа
58 D_E_S_131
 
24.02.15
11:36
(55) Это не "костыль", а реально необходимая конструкция для получения данных из полей составного ссылочного типа, сильно влияет на производительность.
59 Ненавижу 1С
 
гуру
24.02.15
11:38
(58) я в курсе, но здесь не тот случай
60 1976vas
 
24.02.15
11:39
(58) А как быть, если текст составной? Отлавливать в отладчике и перекидывать в конструктор?
61 D_E_S_131
 
24.02.15
11:46
(60) Да обычно исходный текст все равно создается в конструкторе, а потом уже все "динамическое формирование" "допиливается".
(26) Подобный текст так же можно реализовать не закрывая форму конструктора, не особо чем будет отличаться от написания выражения в параметрах виртуальной таблицы. В итоге - создано конструктором.
62 D_E_S_131
 
24.02.15
11:47
(60) + даже этот "динамизм" вроде бы в 8.3.15 хотят превратить в "божий вид".
63 Ненавижу 1С
 
гуру
24.02.15
11:47
(61) только ты им больше не откроешь
а сопровождение наше все
64 D_E_S_131
 
24.02.15
11:51
(63) "Отлавливать в отладчике и перекидывать в конструктор?" - тут только так. Стараюсь вообще избегать таких текстов, если это не обусловлено универсальностью конструкции, либо же условие такое хитрое, что очень сложно его описать конструкциями языка запроса.
65 Drac0
 
24.02.15
12:16
(39) Обращение к виртуальной таблице - это подзапрос. Если ты не передашь туда параметр, то он получит таблицу из млн строк, а потом уже соединить ее. А если передашь, то получит таблицу только из десятка нужных, т.к. внутреннее соединение уже будет внутри этого подзапроса.
66 Широкий
 
24.02.15
12:32
Вообще то так:

  ТекстЗапроса =
    "ВЫБРАТЬ
    |    Выразить(ТЗ.Номенклатура Как Справочник.Номенклатура) Как НОменклатура
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗ КАК ТЗ
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////

    |ВЫБРАТЬ
    |    ТЗ.Номенклатура,
    |    ТЗ.Номенклатура.Артикул
    |ИЗ
    |    ТЗ КАК ТЗ";
67 ejikbeznojek
 
24.02.15
12:39
(64) Я обычно пишу

"ВЫБРАТЬ ПЕРВЫЕ 1
|    ШКЛистаНабора.НомерШК
|ИЗ
|    РегистрСведений.ШКЛистаНабора КАК ШКЛистаНабора
|ГДЕ
|//мутим что-то

если ТутЧтотоМутим тогда
запрос.текст=стрзаменить(запрос.текст,"//мутим что-то",какое то условие)
68 D_E_S_131
 
24.02.15
13:16
(67) Но можно же использовать в ГДЕ
Выбор Когда &ТутЧтотоМутим Тогда <текст условия>
Иначе Истина
Конец
69 Ненавижу 1С
 
гуру
24.02.15
13:22
(67) комменты конструктор затрет

а так норм будет:

"ВЫБРАТЬ ПЕРВЫЕ 1
|    ШКЛистаНабора.НомерШК
|ИЗ
|    РегистрСведений.ШКЛистаНабора КАК ШКЛистаНабора
|ГДЕ
|&УсловиеМутим


запрос.текст=стрзаменить(запрос.текст,"&УсловиеМутим",?(УсловиеМутим,"какое то условие","ИСТИНА"));
70 1976vas
 
24.02.15
13:26
(68) Круто!
71 1976vas
 
24.02.15
13:28
Интересно будет работать? Текст же разный может быть.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший