|
v7: Как запросом получить плоскую таблицу? | ☑ | ||
---|---|---|---|---|
0
Amiralnar
29.08.11
✎
15:43
|
Есть справочник "Цены". Реквизиты: Владелец, ТипЦен, Цена (периодический).
Мне нужно получить таблицу и обойти выборку. Получлось только через вот такой изврат... //******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Владелец = Справочник.Цены.Владелец; |ТипЦен = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |Группировка Владелец без групп; |Группировка ТипЦен без групп; |Группировка Цена без групп; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Владелец // Таб.ВывестиСекцию("Владелец"); Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей ТипЦен // Таб.ВывестиСекцию("ТипЦен"); Пока Запрос.Группировка(3) = 1 Цикл // Заполнение полей Цена Таб.ВывестиСекцию("Цена"); КонецЦикла; КонецЦикла; КонецЦикла; // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
1
andrewks
29.08.11
✎
15:45
|
а неплоская таблица - это как?
|
|||
2
Amiralnar
29.08.11
✎
15:47
|
Это как дерево. Итоги, по нашему.
|
|||
3
andrewks
29.08.11
✎
15:47
|
а зачем группировка по цене?
|
|||
4
Amiralnar
29.08.11
✎
15:48
|
Я не знаю, зачем здесь вообще что либо надо. Конструктор помог.
|
|||
5
andrewks
29.08.11
✎
15:49
|
ничонепонял
озвучь задачу |
|||
6
Amiralnar
29.08.11
✎
15:49
|
Просто не понятно, как перебирать записи в выборке запроса, как обращаться к полям.
|
|||
7
Amiralnar
29.08.11
✎
15:51
|
Есть справочник. В (0) написано. Надо запросить данные.
Кефир 0,5 л c 12.11 Базовая 6 Ряженка 0,5л 12.11 Базовая 6.5 Бифидок 1% 0,5 Базовая 7.7 Варенец 2,5% 0,5 Базовая 7.9 Варенец 2,5% стакан 300г. Базовая 5.4 |
|||
8
Amiralnar
29.08.11
✎
15:52
|
Я запросил конструктором. Но при этом строятся группировки по владельцу и типу цены. они не нужны. Но если не настраивать группировки, конструктор вообще не формирует вывод.
|
|||
9
__Se24
29.08.11
✎
15:53
|
выгрузи в ТЗ потом печатай его
|
|||
10
ParaWiz
29.08.11
✎
15:54
|
Самое простое для тебя будет ТЗ=СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку()=1 Цикл
сообщить(ТЗ.Владелец+" "+ТЗ.ТипЦен +" " ТЗ.Цена); |
|||
11
Amiralnar
29.08.11
✎
15:58
|
Спасибо. Это не по пацански. Как это сделать, обращаясь к полям вида Запрос.Владелец, Запрос.ТипЦен, Запрос.Цена?
|
|||
12
ParaWiz
29.08.11
✎
16:02
|
Интересный термин "по пацански" касательно кодинга, по-пацански сделать вставку на ассемблере ;) только вот зачем ?
|
|||
13
Amiralnar
29.08.11
✎
16:02
|
(10) Не вышло. Полей у ТЗ нет.. Есть только номер строки.
|
|||
14
Amiralnar
29.08.11
✎
16:04
|
Таблица.Цена = Ошибка в выражении!
Вот код: Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Владелец = Справочник.Цены.Владелец; |ТипЦен = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таблица = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(Таблица); Таблица.ВыбратьСтроки(); Пока Таблица.ПолучитьСтроку() = 1 Цикл Таб.ВывестиСекцию("Строка"); КонецЦикла; |
|||
15
ParaWiz
29.08.11
✎
16:05
|
а группировки кто делать будет ?
|
|||
16
ParaWiz
29.08.11
✎
16:05
|
(15) для простоты можешь считать что группировка = колонка тз
|
|||
17
Amiralnar
29.08.11
✎
16:07
|
Тоесть строить три группировки? Или только по владельцу?
Нет простого: ВЫБРАТЬ * ИЗ Цены Разве это так сложно?? |
|||
18
ParaWiz
29.08.11
✎
16:08
|
кури матчасть - подчиненные справочники и периодические реквизиты
|
|||
19
Фрид
29.08.11
✎
16:10
|
Запрос.Выгрузить(Таблица,1,0);
это вывод значений групп и функций, дополнительных переменных и итоги по группировкам не выводить. |
|||
20
andrewks
29.08.11
✎
16:11
|
пля, так и вынудит готовый код дать. опытный лентяй
ТекДата=ТекущаяДата(); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС |Период с ТекДата по ТекДата; |Номенклатура = Справочник.Цены.Владелец; |ТипЦен = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |Группировка Номенклатура без групп; |Группировка ТипЦен; //опционально |Условие(Номенклатура в ВыбНоменклатура); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; ТЗ=СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТЗ,1,0); ТЗ.ВыбратьСтроку(,"Выбор строки"); |
|||
21
ParaWiz
29.08.11
✎
16:15
|
но лучше кури матчасть чем пользоваться тем что за тебя пишут код, и имхо рано ты в запросы полез, начни с простой выборки
|
|||
22
МастерВопросов
29.08.11
✎
16:15
|
(17) ты с восьмерки что ли пришел?
|
|||
23
__Se24
29.08.11
✎
16:21
|
Когда у тебя количество полей в одной группировке отличается в зависимости от более верхней группировки , то без ТЗ никак ..
она придаст твоему безформенному отчету вид негого прямоугольника , с фиксированным количеством строк и колонок. иначе , выгружая на печатную форму напрямую из запроса ты рискуешь получить херь |
|||
24
viktor_vv
29.08.11
✎
16:28
|
(17)
ТекстЗапроса = "//{{ЗАПРОС |Период с ТекДата по ТекДата; |ТекЭлемент = Справочник.Цены.ТекущийЭлемент ; |Номенклатура = Справочник.Цены.Владелец; |ТипЦен = Справочник.Цены.ТипЦен; |Цена = Справочник.Цены.Цена; |Группировка ТекЭлемент без групп; //опционально |Условие(Номенклатура в ВыбНоменклатура); |"//}}ЗАПРОС Если плоская таблицан нужна, то делаешь одну группировку самой нижней ступени иерархии. |
|||
25
Amiralnar
29.08.11
✎
16:28
|
(20) Отлично. Просто великолепно. Благодарю. То, что нужно.
(21) Матчасть курю постоянно. Также иногда прошу помощи коллег, и помогаю коллегам. Что касается запросов, то клюшкины запросы меня вводят в уныние. Как и её бухитоги. Мне, к стати, с ними работать в следующую очередь. Если бы жизнь заставила постоянно страдать на 7.7, перешел бы на другую работу, где SQL это не пустой звук, а хотя бы и прозрачный намек (привет, снеговик). Что касается выборки - то меня очень печалит код семерочников на восьмерке, извлекающих данные выборкой, и еще одной выборкой по владельцу, и строчащих километровые условные операторы, вместо описания структуры метаданных как положено, и одного запроса. (22) С восьмерки, так и есть. (24) Спасибо, запомню. |
|||
26
andrewks
29.08.11
✎
16:36
|
(25) сразу на снеговике кодить стал? тогда да, сложновато сразу изменить мышление для 7-ки
|
|||
27
Amiralnar
29.08.11
✎
16:40
|
(26) Симметрично. Редко видел адекватного клюшковеда на восьмерке. Очень редко. Лично с такими не знаком. По форуму встречаются, изредка.
|
|||
28
Leksus
07.09.11
✎
13:17
|
подниму ветку, т.к. самому понадобилось...
вывести простую таблицу как в (24) без промежуточной выгрузки в таблицу значений возможно? если данный запрос подсунуть конструктору, то он нормально ее не отрисовывает :( |
|||
29
1Сергей
07.09.11
✎
13:20
|
(28) вывести куда?
|
|||
30
Leksus
07.09.11
✎
13:36
|
(29) в табличный документ
|
|||
31
viktor_vv
07.09.11
✎
13:42
|
(28) Запрос как в (24) с одной группировкой.
Пока Запрос.Группировка("ТекЭлемент") = 1 Цикл // Заполняем переменные для таблицы // ..... Таб.ВывестиСекцию("ИмяСекцииДляСтрокиЗапроса") ; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |