![]() |
![]() |
![]() |
|
Временные таблицы в запросе | ☑ | ||
---|---|---|---|---|
0
Merlin2006
04.12.07
✎
10:20
|
Привет.
Конфигурация 8.1 Никто не подскажет как именно работать со временной таблицей. Пример: МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; //создаем новый менеджер временных таблиц Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; //указываем запросу созданный менеджер временных таблиц Запрос.Текст= "ВЫБРАТЬ | ЖурналДляПользователей.Ссылка, | ЖурналДляПользователей.Номер, | ЖурналДляПользователей.Пользователь |ПОМЕСТИТЬ ВременнаяТаблица |ИЗ | ЖурналДокументов.ЖурналДляПользователей КАК ЖурналДляПользователей" ; Дальше Я допустим хочу получить, не ссылку на документ, а имя документа в конфигураторе. Т.е. перебрать временную таблицу и поставить её в другой запрос. Как это сделать?! |
|||
1
Merlin2006
04.12.07
✎
10:32
|
up
|
|||
2
Merlin2006
04.12.07
✎
11:20
|
никто не знает?!
|
|||
3
Ursus maritimus
04.12.07
✎
11:21
|
Непонятно чётенадо
|
|||
4
уродина
04.12.07
✎
11:23
|
в program files есть такой файл с именем v8adddoc81, там все написано....
|
|||
5
Merlin2006
04.12.07
✎
11:44
|
Перебрать временную таблицу. Со своими условиями, которые Я могу получить только через обход элементов. А потом вставить эту таблицу в новый запрос.
|
|||
6
Drx211
04.12.07
✎
13:52
|
(5) И чего, ну так и пиши дальше ВЫБРАТЬ .... ИЗ ВременнаяТаблица ГДЕ ... и все будет работать на ура
|
|||
7
Merlin2006
04.12.07
✎
14:08
|
|
|||
8
Merlin2006
04.12.07
✎
14:08
|
Да это то всё ясно! Не понятно как работать с этой "Временной Таблице", НЕ в Запросе.
Простой пример. Я хочу узнать наименование документа как он задан в конфигураторе. Через запрос Я этого сделать не могу. А через обход запроса можно. Т.е. получатеся такая конструкция Пока ВыборкаДетали.Следующий() Цикл СтрокаТЗ.Имя=(СокрЛП(ВыборкаДетали.МояСсылка.Метаданные().Имя)); КонецЦикла; И далее подставлять эту таблицу и сравнивать её с другим Запросом. т.е. написать типа Где ВторойЗапрос.Моёполе=ВременаяТаблица.ИзмененоеПоле; И всё. |
|||
9
almar
04.12.07
✎
14:15
|
>Не понятно как работать с этой "Временной Таблице", НЕ в Запросе
ИМХО, никак |
|||
10
Merlin2006
04.12.07
✎
14:16
|
А тогда какой от них толк?! Если Я в принципе всё могу описать в одном запросе?!
|
|||
11
Merlin2006
04.12.07
✎
14:17
|
Ведь "МенеджерВременныхТаблиц" написано, что у него существует чтение и запись?!
|
|||
12
Drx211
04.12.07
✎
14:47
|
(0) Да-а-а - умение доносить свою мысль до окружающих - искусство..
По порядку: 1. Выгружаешь в ТЗ 2. Меняешь значения в колонках 3. Загружаешь обратно в запрос 4. И там делаешь что угодно... :) |
|||
13
Merlin2006
04.12.07
✎
16:36
|
Можешь это продемонстрировать на простом примере?!
|
|||
14
Бубузяка
04.12.07
✎
23:22
|
Чисто учебный пример:
// 1. Создаем внешнюю таблицу МенеджерВТ = Новый МенеджерВременныхТаблиц; // 2. Создаем внешний источник данных. // ТЗ можно набрать руками, но в учебных целях - это выгрузка результата запроса Запрос1 = Новый Запрос; Запрос1.Текст = "ВЫБРАТЬ | РасходнаяНакладнаяСостав.Номенклатура, | СУММА(РасходнаяНакладнаяСостав.Количество) КАК Количество, | СУММА(РасходнаяНакладнаяСостав.Сумма) КАК Сумма |ИЗ | Документ.РасходнаяНакладная.Состав КАК РасходнаяНакладнаяСостав | |СГРУППИРОВАТЬ ПО | РасходнаяНакладнаяСостав.Номенклатура"; ВнешнийИСточник = Запрос1.Выполнить().Выгрузить(); // 3. Помещаем внешний источник данных в «менеджер временных таблиц» Запрос2 = Новый Запрос; Запрос2.МенеджерВременныхТаблиц = МенеджерВТ; Запрос2.Текст = "ВЫБРАТЬ | Номенклатура, | Количество, | Сумма |ПОМЕСТИТЬ Расходы |ИЗ | &ВнешнийИсточник"; Запрос2.УстановитьПараметр("ВнешнийИсточник",ВнешнийИСточник); Запрос2.Выполнить(); // 4. Получаем данные из справочника «Номенклатура», соединяя с данными внешнего источника Запрос3 = Новый Запрос; Запрос3.МенеджерВременныхТаблиц = МенеджерВТ; Запрос3.Текст = "ВЫБРАТЬ | Код КАК КодНоменклатуры, | Номенклатура, | Количество, | Сумма |ИЗ | Расходы | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура Как Товар | ПО Товар.Ссылка = Номенклатура"; РезультатЗапроса = Запрос3.Выполнить(); Понятно, что с ТЗ можно делать "что хочешь.." |
|||
15
Бубузяка
04.12.07
✎
23:27
|
В последнем запросе таблица "Расходы" - это одна из таблиц в Менеджере ВТ. Т.к. структуру полей этой таблицы знаем, то и обращаемся к ним по имени. Конструктор запроса с МВТ не работает, потому что не знает структуру ее данных (это же необъект метаданных).
|
|||
16
Merlin2006
05.12.07
✎
10:47
|
Спасибо большое за пример. Но это не совсем то что Я хотел.
// Возможно ли такой запрос написать с помощью "Временной таблицы" Запрос.УстановитьПараметр("НачДата",НачПериода); Запрос.УстановитьПараметр("КонДата",КонПериода); Для каждого Док из Метаданные.Документы Цикл Запрос.Текст= "ВЫБРАТЬ | Документ" + Док.Имя + ".Ссылка МойДокумент, | Документ" + Док.Имя + ".Дата МойДата |ИЗ | Документ." + Док.Имя + " КАК " + "Документ" + Док.Имя + " | Где Документ" + Док.Имя + ".Дата МЕЖДУ &НачДата И &КонДата "; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл НоваяСтрока=ТЗ.Добавить(); НоваяСтрока.ДокументССЫлкаМой=Выборка.МойДокумент; НоваяСтрока.ДокуИмя=Док.Имя; Для каждого ТабличнаяЧасть из Док.ТабличныеЧасти цикл НоваяСтрока.ИмяТч=ТабличнаяЧасть.имя; КонецЦикла; КонецЦикла; КонецЦикла; |
|||
17
Господин ПЖ
05.12.07
✎
10:52
|
Бред какой-то...
|
|||
18
Merlin2006
05.12.07
✎
14:18
|
Почему Бред?!
Если Я хочу узнать имя документа, как он задан в конфигураторе?! |
|||
19
KAO111
05.12.07
✎
14:49
|
Если только знать имя документа - может лучше сразу в запросе сделать
ТекстЗапроса = ""; Для каждого Док из Метаданные.Документы Цикл ТекстЗапроса = ТекстЗапроса+?(пустаястрока(ТекстЗапроса),"","объединить ")+"ВЫБРАТЬ | Ссылка КАК МойДокумент, | Дата КАК МойДата | " + Док.Имя + " КАК ДокуИмя |ИЗ | Документ." + Док.Имя + " КАК " + "Документ" + Док.Имя + " | Где Дата МЕЖДУ &НачДата И &КонДата "; КонецЦикла; |
|||
20
Господин ПЖ
05.12.07
✎
15:42
|
(18) А выгрузка ВСЕХ документов ВСЕХ типов в ТЗ с целью "узнать имена ТЧ" - это не бред?
|
|||
21
Merlin2006
06.12.07
✎
09:56
|
хорошо. Тогда как по твоему узнать имя табличной части?!
|
|||
22
Денежко
06.12.07
✎
10:01
|
Считаю, что топекСтаретр должен после (21) либо сменить НИК либо больше никада не писать....на 1С
|
|||
23
Merlin2006
06.12.07
✎
10:23
|
Это лично твоё мнение, но ответа до сих пор нету.....
|
|||
24
Merlin2006
06.12.07
✎
10:31
|
Вопрос то в том что можно конечно сделать и так
Для каждого Док из Метаданные.Документы Цикл ТекстЗапроса = ТекстЗапроса+"ВЫБРАТЬ | """+Док.Имя+""" КАК Наименование, | Документ" + Док.Имя + ".Ссылка |ИЗ | Документ." + Док.Имя + " КАК " + "Документ" + Док.Имя + " | Где Документ" + Док.Имя + ".Дата МЕЖДУ &ДатаНачала И &ДатаКонца |"; Для Каждого ТЧДокумента Из Док.ТабличныеЧасти Цикл ТекстЗапроса = ТекстЗапроса+"ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | """+Док.Имя+""" КАК Наименование, | Документ" + Док.Имя + ".Ссылка |ИЗ | Документ." + Док.Имя + "."+ТЧДокумента.Имя+" КАК " + "Документ" + Док.Имя + " | Где Документ" + Док.Имя + ".Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца |"; КонецЦикла; КонецЦикла; Но как этого избежать?! С помощью временных таблиц?! |
|||
25
Господин ПЖ
06.12.07
✎
10:47
|
Избежать можно, если пойти в лесники... Программирование не для вас.
|
|||
26
Merlin2006
06.12.07
✎
10:55
|
Ладно, где здесь ошибка?!
|
|||
27
Господин ПЖ
06.12.07
✎
10:56
|
(26) В ДНК наверное...
|
|||
28
Merlin2006
06.12.07
✎
11:00
|
Наверное да.
Только Я хотя бы что то пытаюсь делать. А не просто критикую........ И всё это уже превращается просто во флуд какой-то. Ведь задача проста. Как узнать имя табличной части документа так как он задан в конфигураторе?! С помощью временных таблиц или может возможен другой вариант. |
|||
29
Zlodeykin
06.12.07
✎
11:03
|
Буквально 3 мин назад с этим работал вот из типовой УПП
// Функция возвращает имя табличной части, к которой принадлежит переданная строка // // Параметры // СтрокаТабличнойЧасти - ссылка на строку табличной части // // Возвращаемое значение: // Строка - имя табличной части, как оно задано в конфигураторе // Функция ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти) Экспорт ИмяТабличнойЧасти = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Имя; Возврат ИмяТабличнойЧасти; КонецФункции // ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку() |
|||
30
Merlin2006
06.12.07
✎
11:09
|
Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |