Имя: Пароль:
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
Интересно будет работать? Текст же разный может быть.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.