Имя: Пароль:
1C
1С v8
Поделитесь примером запроса в ТЗ
, ,
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;
   нс.колонкадляотбора = "б";
   
   //тз_а=тз.Скопировать(тз.НайтиСтроки(Новый Структура("КолонкаДляОтбора","а")));
   //тз_б=тз.Скопировать(тз.НайтиСтроки(Новый Структура("КолонкаДляОтбора","б")));
   
   Запрос = Новый Запрос;
   Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
   Запрос.Текст = "ВЫБРАТЬ тз.КолонкаДляДанных, тз.КолонкаДляОтбора ПОМЕСТИТЬ ТЗ ИЗ &ТЗ КАК ТЗ";
   Запрос.УстановитьПараметр("ТЗ", ТЗ);
   Запрос.Выполнить();
   
   Запрос.Текст = "
   |ВЫБРАТЬ *
   |ИЗ
   |   ТЗ
   | Где тз.КолонкаДляОтбора = &Отбор
   |";
   Запрос.УстановитьПараметр("Отбор","а");
   тз_а = Запрос.Выполнить().Выгрузить();
   Запрос.УстановитьПараметр("Отбор","б");
   тз_б = Запрос.Выполнить().Выгрузить();

   тз=Неопределено;
   тз_а.ВыбратьСтроку();
   тз_б.ВыбратьСтроку();
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой