|
Поделитесь примером запроса в ТЗ | ☑ | ||
---|---|---|---|---|
0
extrim-style
13.10.11
✎
15:08
|
Не скд. Нужно сделать запрос в ТЗ.
|
|||
1
mr_K
13.10.11
✎
15:13
|
Запрос.Выполнить().Выгрузить().
Не? |
|||
2
Maxus43
13.10.11
✎
15:14
|
сделать запрос в ТЗ? что это значит вобще?
|
|||
3
Maxus43
13.10.11
✎
15:14
|
Если сделать запрос К ТЗ, то врем таблицы использовать надо
|
|||
4
izekia
13.10.11
✎
15:16
|
(1) видимо имелось в виду:
ВЫБРАТЬ тз.колонка1, тз.колонка2 Поместить времТЗ ИЗ &ТЗ как тз |
|||
5
mr_K
13.10.11
✎
15:16
|
Или продолжу телепатировать:
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("Таб", ТЗ); Запрос.Текст = "ВЫБРАТЬ Данные.* ПОМЕСТИТЬ ВремТаб ИЗ Таб КАК Данные"; Запрос.Выполнить(); |
|||
6
Рэйв
13.10.11
✎
15:16
|
сейчас встанет вопрос как типизировать колоноки....
|
|||
7
EvgeniuXP
13.10.11
✎
15:17
|
(0) создай ТЗ, а внутри создания сделай запрос - какие проблемы?
|
|||
8
EvgeniuXP
13.10.11
✎
15:17
|
(6) а их что надо разве типизировать? ;)
|
|||
9
extrim-style
13.10.11
✎
15:18
|
(5) спс
|
|||
10
Maxus43
13.10.11
✎
15:18
|
(7) >>а внутри создания сделай запрос
неосилил... (8) колонки ТЗ надо |
|||
11
izekia
13.10.11
✎
15:18
|
(8) можно и не типизировать
|
|||
12
EvgeniuXP
13.10.11
✎
15:19
|
(9) www.spec8.ru.
|
|||
13
Рэйв
13.10.11
✎
15:22
|
(11)Если не типизировать, запрос не съест и заматерится
|
|||
14
extrim-style
13.10.11
✎
15:23
|
Вообще задача такая: есть ТЗ. Необходимо разбить её на 2 ТЗ с такими же полями. Тип одной из колонок ТЗ - СправочникСсылка. Необходимо разбить по условию СправочникСсылка.Реквизит = (или <>) Значение. Как это лучше сделать?
|
|||
15
Maxus43
13.10.11
✎
15:24
|
(14) ТЗ2 = ТЗ.Скопировать(отбор)... ну СП короче
|
|||
16
izekia
13.10.11
✎
15:25
|
(15) отбор по реквизиту пройдет?
(13) ага, но сделать-то можно |
|||
17
Maxus43
13.10.11
✎
15:27
|
(16) по реквизиту нет, вариантов то масса в таком случае
|
|||
18
Maxus43
13.10.11
✎
15:27
|
(17) + всмысле путей решения
|
|||
19
extrim-style
13.10.11
✎
15:28
|
(18) меня интересует не масса путей, а наиболее оптимальный из них
|
|||
20
EvgeniuXP
13.10.11
✎
15:29
|
сделай два запроса и выгрузи в две тз.
сделай один запрос и выгрузи в две тз. |
|||
21
izekia
13.10.11
✎
15:30
|
(19) кажется пихать тз в запрос - это не совсем оптимально, проще уже переблором
смотря сколько раз этот отбор осуществляется |
|||
22
EvgeniuXP
13.10.11
✎
15:31
|
(19) 1-ый вариант: оптимальный для новичка.
2-ой вариант: оптимальный для платформы. а если хорошее решение: то вообще надо смотреть, что ты там вообще пытаешься сделать - всё решение выкинуть и сделать как нужно. |
|||
23
extrim-style
13.10.11
✎
15:34
|
ясно. значит запрос.
|
|||
24
Megas
13.10.11
✎
15:40
|
(5) Вообще проще можно.
пакетник: Запрос = новый Запрос(); Запрос.УстановитьПараметр("Тз", ТЗ); Запрос.Текст = "ВЫБРАТЬ | Тз.Поле1, | Тз.Поле2 |ПОМЕСТИТЬ ТаблТз |ИЗ | &Тз КАК Тз |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблТз.Поле1, | ТаблТз.Поле2 |ИЗ | ТаблТз КАК ТаблТз" |
|||
25
Maxus43
13.10.11
✎
15:42
|
(24) можно ещё 2 пакетных запроса, и по очерди их выполнить
|
|||
26
Megas
13.10.11
✎
15:43
|
(25) Это тогда с Менеджером временных таблиц. А тут как то проще.
|
|||
27
Maxus43
13.10.11
✎
15:45
|
(26) нет, это когда с "ВыполнитьПакет"
|
|||
28
Reset
13.10.11
✎
15:50
|
ТЗРавные=ТЗ.Скопировать(Новый Структура("Ссылка",Значение));
ТЗНеРавные=ТЗ.Скопировать(); Для каждого Удаляемая из ТЗРавные цикл ТЗНеРавные.Удалить(Удаляемая); КонецЦикла; |
|||
29
Reset
13.10.11
✎
15:51
|
(28) не, в третьей строке косяк.
Лень думать |
|||
30
Мимохожий Однако
13.10.11
✎
15:53
|
ТЗ тоже откуда-то появилась. Возможно надо идти от источника, из которого получилась ТЗ.
|
|||
31
EvgeniuXP
13.10.11
✎
15:54
|
(28) у-у-у, так не надо делать... удалить еще... вы что насилуете систему?
|
|||
32
extrim-style
13.10.11
✎
15:56
|
(24) да, вот это лучше. Я что-то не смог через конструктор параметр проставить. Поэтому спрашивал. Вот сейчас взял твой запрос, открываю конструктором, где там указывается &Тз в конструкторе?
(28) там обращение к реквизиту ссылки. |
|||
33
Санта
13.10.11
✎
15:56
|
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ * Поместить ВременнаяТаблица ИЗ &ТЗ КАК ВременнаяТаблица"; Запрос.УстановитьПараметр("ТЗ",ТЗ); Запрос.Выполнить(); Запрос.УстановитьПараметр("ВыбСчет",СчетУчета); Запрос.УстановитьПараметр("ГраницаОстатка",ГраницаКонтроляОстатка); Запрос.УстановитьПараметр("ВыбОрганизация",Организация); Запрос.Текст = "ВЫБРАТЬ | ПланируемыйПриход.Товар, | ПланируемыйПриход.Склад, | ПланируемыйПриход.КолПриход, | ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток |ИЗ | (ВЫБРАТЬ | Приход.Товар КАК Товар, | Приход.Склад КАК Склад, | СУММА(Приход.Количество) КАК КолПриход | ИЗ | ВременнаяТаблица КАК Приход | | СГРУППИРОВАТЬ ПО | Приход.Товар, | Приход.Склад) КАК ПланируемыйПриход | ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Остатки(&ГраницаОстатка, Счет = &ВыбСчет, , Организация = &ВыбОрганизация) КАК ХозрасчетныйОстатки | ПО ПланируемыйПриход.Товар = ХозрасчетныйОстатки.Субконто1 | И ПланируемыйПриход.Склад = ХозрасчетныйОстатки.Субконто2"; РезультатЗапроса = Запрос.Выполнить(); ТЗЗапроса = РезультатЗапроса.Выгрузить(); |
|||
34
EvgeniuXP
13.10.11
✎
15:56
|
(32) сам пишешь.
|
|||
35
Reset
13.10.11
✎
15:56
|
(32) Если к реквизиту - тогда да, однозначно запрос
|
|||
36
Санта
13.10.11
✎
15:57
|
(34) раскритикуй мой код в (33)
|
|||
37
Maxus43
13.10.11
✎
15:58
|
(36) даже не смотря всё - соединение с вложенным запросом - не по феншую
|
|||
38
extrim-style
13.10.11
✎
15:58
|
(34) т.е. через конструктор никак?
|
|||
39
Maxus43
13.10.11
✎
15:59
|
(38) там есть кнопка - создать ВТ, там её описываеш и дальше работаеш, только потом всё равно параметр руками прописываеш
|
|||
40
extrim-style
13.10.11
✎
15:59
|
+(38) В конструкторе даже параметр на таблице нарисован, странно, что это нельзя задать.
|
|||
41
EvgeniuXP
13.10.11
✎
15:59
|
(36) вложенный запрос не гуд.
|
|||
42
Санта
13.10.11
✎
16:00
|
(37) нету там соединения с вложенным запросом.
Сначала влож. запр. выполняется, где все суммируется, затем остатки прилипают к результату |
|||
43
EvgeniuXP
13.10.11
✎
16:00
|
(38) почему ни как, пишешь сам ручками.
|
|||
44
extrim-style
13.10.11
✎
16:01
|
(43) ясно. я имел ввиду именно через конструктор.
|
|||
45
Steelvan
13.10.11
✎
16:03
|
(0) Посмотри построитель запроса. И в УТ 10.3 примеры использования точно видел.
|
|||
46
extrim-style
13.10.11
✎
16:33
|
(24) не работает так. Не могу наложить условие на Поле1.Реквизит1.Код
|
|||
47
extrim-style
13.10.11
✎
16:33
|
+(46) пишет "поле не найдено"
|
|||
48
hhhh
13.10.11
✎
16:37
|
(46) так не надо через две точки писать. Делай соединение с таблицей где этот Реквизит1.
|
|||
49
Reset
13.10.11
✎
16:40
|
Нужно что-то вроде
Выбрать Выразить(Таб.Ссылка как ДокументСсылка.ИмяДокумента) Как Ссылка Поместить ВТ Из &Таб как Таб; Выбрать ВТ.Ссылка из ВТ как вт где ВТ.Ссылка.Реквизит=&Параметр // или <> или вместо вдвух точек левое соединение (по сути тоже самое, только явно) |
|||
50
extrim-style
13.10.11
✎
16:42
|
+(47) хотя нет, щас перепроверю
|
|||
51
Megas
13.10.11
✎
16:52
|
У меня работает
"ВЫБРАТЬ | ТабТЗ.Номенклатура, | ТабТЗ.Числа |ПОМЕСТИТЬ Тз |ИЗ | &ТЗ КАК ТабТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Тз.Числа, | Тз.Номенклатура |ИЗ | Тз КАК Тз |ГДЕ | Тз.Номенклатура.код=""Им-000612"""; Правда конструктором не открывает |
|||
52
Megas
13.10.11
✎
16:57
|
А вот так даже и с конструктором работает.
"ВЫБРАТЬ | ВЫРАЗИТЬ(ТабТЗ.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура, | ТабТЗ.Числа |ПОМЕСТИТЬ Тз |ИЗ | &ТЗ КАК ТабТЗ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Тз.Числа, | Тз.Номенклатура |ИЗ | Тз КАК Тз |ГДЕ | Тз.Номенклатура.Код = ""Им-000612"""; Правдо ВЫРАЗИТЬ должно немного затормаживать отчёт? Или я не прав? |
|||
53
Reset
13.10.11
✎
17:16
|
(52) (_имхо_) Нет, не должно затормаживать.
В данном(твоем) конкретном случае это просто уконкречивание конструктору, каким типом будет это поле и он начинает "понимать" конструкцию поле.Код Но, напротив, если, например Колонка в ТЗ будет иметь составной тип (номенклатура и склады скажем), "Выразить" приведет к ускорению выполнения запроса, тк. явно указанный вариант типа позволит установить одно (неявное) левое соединение(для получения .Кода), а не два с каждым справочником |
|||
54
extrim-style
14.10.11
✎
09:29
|
(30) ТЗ появилась из рекурсивной функции, а т.к. функция возвращает одно значение, то и получаю сначала целую ТЗ. Тем более, что в некоторых случаях ТЗ нужна полностью.
Что-то не получается запросом. Исходная ТЗ, передаваемая в качестве параметра, типизирована, в отладчике захожу в третий уровень. Но при попытке выполнить выдает ошибку "Поле не найдено "ТаблЦЗ.Реквизит1.Реквизит2.Код"". |
|||
55
Песец
14.10.11
✎
11:13
|
||||
56
extrim-style
14.10.11
✎
11:53
|
С запросом не получилось. В итоге вот:
ТЗ1 = Новый ТаблицаЗначений; ТЗ1.Колонки.Добавить("ЦентрЗатрат",,"ЦентрЗатрат"); *** ТЗ2 = ТЗ1.Скопировать(); Для Каждого Стр из ТЗ Цикл Если Условие Тогда ЗаполнитьЗначенияСвойств(ТЗ1.Добавить(), Стр); Иначе ЗаполнитьЗначенияСвойств(ТЗ2.Добавить(), Стр); КонецЕсли; КонецЦикла; |
|||
57
Песец
14.10.11
✎
13:19
|
(56)
тз=Новый ТаблицаЗначений; тз.колонки.Добавить("КолонкаДляДанных"); тз.Колонки.Добавить("КолонкаДляОтбора"); нс=тз.Добавить(); нс.колонкадляданных = 1; нс.колонкадляотбора = "а"; нс=тз.Добавить(); нс.колонкадляданных = 2; нс.колонкадляотбора = "б"; нс=тз.Добавить(); нс.колонкадляданных = 3; нс.колонкадляотбора = "а"; нс=тз.Добавить(); нс.колонкадляданных = 4; нс.колонкадляотбора = "б"; тз_а=тз.Скопировать(тз.НайтиСтроки(Новый Структура("КолонкаДляОтбора","а"))); тз_б=тз.Скопировать(тз.НайтиСтроки(Новый Структура("КолонкаДляОтбора","б"))); тз=Неопределено; тз_а.ВыбратьСтроку(); тз_б.ВыбратьСтроку(); |
|||
58
Песец
14.10.11
✎
13:57
|
(57)+
тз=Новый ТаблицаЗначений; тз.колонки.Добавить("КолонкаДляДанных", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(1,0)));//для запроса надо типизировать тз.Колонки.Добавить("КолонкаДляОтбора", Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(1))); нс=тз.Добавить(); нс.колонкадляданных = 1; нс.колонкадляотбора = "а"; нс=тз.Добавить(); нс.колонкадляданных = 2; нс.колонкадляотбора = "б"; нс=тз.Добавить(); нс.колонкадляданных = 3; нс.колонкадляотбора = "а"; нс=тз.Добавить(); нс.колонкадляданных = 4; нс.колонкадляотбора = "б"; //тз_а=тз.Скопировать(тз.НайтиСтроки(Новый Структура("КолонкаДляОтбора","а"))); //тз_б=тз.Скопировать(тз.НайтиСтроки(Новый Структура("КолонкаДляОтбора","б"))); Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ тз.КолонкаДляДанных, тз.КолонкаДляОтбора ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ"; Запрос.УстановитьПараметр("ТЗ", ТЗ); Запрос.Выполнить(); Запрос.Текст = " |ВЫБРАТЬ * |ИЗ | ТЗ | Где тз.КолонкаДляОтбора = &Отбор |"; Запрос.УстановитьПараметр("Отбор","а"); тз_а = Запрос.Выполнить().Выгрузить(); Запрос.УстановитьПараметр("Отбор","б"); тз_б = Запрос.Выполнить().Выгрузить(); тз=Неопределено; тз_а.ВыбратьСтроку(); тз_б.ВыбратьСтроку(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |