|
Как написать запрос? | ☑ | ||
---|---|---|---|---|
0
tumpalgin
08.07.12
✎
15:44
|
У меня есть регистр сведений, из которого я импортирую данные в таблицу значений "Коэффициент".
Таблица значений выглядит так: Индекс Значение элемента Тип элемента х у Коэффициент 0 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 1 1 10 1 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 1 2 1 2 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 1 3 1 3 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 2 1 2 4 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 2 2 10 5 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 2 3 1 6 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 3 1 2 7 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 3 2 2 8 СтрокаТаблицыЗначений СтрокаТаблицыЗначений 3 3 10 Как используя запрос выбрать коэффициент в строке, в которой х=у? Я пытался его написать: Запрос = Новый Запрос("Выбрать Коэффициенты.Коэффициент Из ТаблицаЗначений.Коэффициенты ГДЕ Коэффициенты.х = Коэффициенты.у"); ДиагональныйЭлемент = Запрос.Выполнить().Выбрать(); В итоге ругается на то, что не знает что такое ТаблицаЗначений.Коэффициенты. |
|||
1
okmail
08.07.12
✎
15:46
|
Таблицу значений "Коэффициент" в запрос надо передавать как параметр.
|
|||
2
МихаилМ
08.07.12
✎
15:48
|
||||
3
aleks-id
08.07.12
✎
15:48
|
шо? опять???
|
|||
4
tumpalgin
08.07.12
✎
15:50
|
(1)
Во-первых таблица значений - Коэффициенты. Во-вторых, как должен выглядеть запрос? |
|||
5
Живой Ископаемый
08.07.12
✎
15:51
|
||||
6
tumpalgin
08.07.12
✎
15:54
|
(2)
Поиск там производился с помощью метода Найти() |
|||
7
tumpalgin
08.07.12
✎
15:54
|
(5)
Не могли написать текст запроса... что-то я запутался |
|||
8
Живой Ископаемый
08.07.12
✎
15:55
|
в чем запутался.. текст запроса выделен желтым фоном
|
|||
9
Живой Ископаемый
08.07.12
✎
16:01
|
вот твой
http://screencast.com/t/0CipXLpBdNYi |
|||
10
Живой Ископаемый
08.07.12
✎
16:02
|
ладно, текст запроса:
ВЫБРАТЬ втТЗ.Индекс, втТЗ.Х, втТЗ1.У КАК У , втТЗ.Коэффициент ИЗ втТЗ КАК втТЗ ВНУТРЕННЕЕ СОЕДИНЕНИЕ втТЗ КАК втТЗ1 ПО втТЗ.Х = втТЗ1.У И втТЗ.Х = втТЗ1.Х И втТЗ.У = втТЗ1.У |
|||
11
tumpalgin
08.07.12
✎
16:34
|
(10)
можете пояснить пару строк: втТЗ.Индекс, втТЗ.Х, втТЗ1.У КАК У - что происходит здесь? создаётся таблица значений? втТЗ.Коэффициент ИЗ втТЗ КАК втТЗ Что происходит здесь? |
|||
12
Живой Ископаемый
08.07.12
✎
16:43
|
нет, не создается... здесь выбирается уже из
|
|||
13
tumpalgin
08.07.12
✎
16:48
|
втТЗ.Коэффициент
ИЗ втТЗ КАК втТЗ Что происходит здесь? |
|||
14
Живой Ископаемый
08.07.12
✎
16:49
|
(13)Я говорю какое поле из таблицы получать
|
|||
15
Живой Ископаемый
08.07.12
✎
16:51
|
ладно, разжую до субатомов...
У меня нет твоей ТЗ, поэтому я ее эмулирую... вот таким запросом: ВЫБРАТЬ 0 КАК Индекс, 1 КАК Х, 1 КАК У, 10 КАК Коэффициент ПОМЕСТИТЬ втТЗ ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 1 КАК Индекс, 1 КАК Х, 2 КАК У, 1 КАК Коэффициент ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 2 КАК Индекс, 1 КАК Х, 3 КАК У, 1 КАК Коэффициент ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 3 КАК Индекс, 2 КАК Х, 1 КАК У, 2 КАК Коэффициент ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 4 КАК Индекс, 2 КАК Х, 2 КАК У, 10 КАК Коэффициент ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 5 КАК Индекс, 2 КАК Х, 3 КАК У, 1 КАК Коэффициент ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 6 КАК Индекс, 3 КАК Х, 1 КАК У, 2 КАК Коэффициент ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 7 КАК Индекс, 3 КАК Х, 2 КАК У, 2 КАК Коэффициент ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ 8 КАК Индекс, 3 КАК Х, 3 КАК У, 10 КАК Коэффициент Если бы я его результат выгрузил в ТЗ, я бы получил то, что у тебя в (0) http://screencast.com/t/ojZzvgDZbvQ Единственная хитрость к которой я прибегаю, я сразу помещаю его результат в ВТ (временную таблицу) |
|||
16
Живой Ископаемый
08.07.12
✎
16:54
|
но правда строки в разброс получаются, вот как он выглядит, если упорядочить:
http://screencast.com/t/M81JHjzE То есть точь-вточь, как ТЗ из (0) ==== Все что я делаю потом - это соединяю ТЗ саму с собой по X и Y и получаю все поля результирующего набора (10) |
|||
17
tumpalgin
08.07.12
✎
16:56
|
ах, все, кажется понятнее стало...
|
|||
18
tumpalgin
08.07.12
✎
16:56
|
Такой вопрос:
я получаю тз из регистра сведений. Думаю, что проще (для меня ) будет найти коэффициент в строчке, в которой х=у используя запрос. хотелось бы знать - что быстрее - работать с РС или с ТЗ описанным Вами способом? |
|||
19
Живой Ископаемый
08.07.12
✎
16:56
|
тебе хочется спросить, чтобы я стал делать, если бы ТЗ у меня уже была?
|
|||
20
Живой Ископаемый
08.07.12
✎
16:57
|
безусловно с РС. зачем умножать сущности?
Ладно если бы этот РС был во внешнем источнике данных, тогда бы тебе пришлось возиться с ТЗ, потому что 1С не может в одном запросе использвать внешний и внутренниц источник данных... Но если у тебя уже есть внутренний - то зачем тЗ? |
|||
21
Живой Ископаемый
08.07.12
✎
16:59
|
И тогда весь запрос редуцируется до (10) только вместо ТЗ будет название твоего РС
|
|||
22
Живой Ископаемый
08.07.12
✎
16:59
|
и индекса не будет...
|
|||
23
Живой Ископаемый
08.07.12
✎
17:07
|
у тебя в (0) концептуальная ошибка - ты пытаешься решить сразу две проблемы (помещение ТЗ в параметры запроса и собственно написание запроса). при чем о первой ты только смутно догадываешься, а вторую видишь очень ясно....
на самом деле вторая решается на шаг раньше безо всяких выгрузок в ТЗ. и уже решив проблему выбора из РС записей где x=y, ты бы смог уделить свободное время на решение первой проблемы - как помещать ТЗ в параметры запроса, чтобы выбирать из нее интересующие строки. |
|||
24
tumpalgin
08.07.12
✎
17:18
|
можно сделать так, чтобы этот диагональный элемент (когда х=у) искался в цикле с помощью запроса к регистру сведений?
т.е. х=а и у=а - одно значение коэффициента, где а - переменная далее идет какие-либо преобразования с этим диагональным коэффициентом после чего чего ищется другой коэффициент (для следующего значения а) |
|||
25
Живой Ископаемый
08.07.12
✎
17:19
|
блин, зачем?
|
|||
26
Живой Ископаемый
08.07.12
✎
17:19
|
зачем циклом а не запросом?
|
|||
27
Живой Ископаемый
08.07.12
✎
17:20
|
почему бы сразу н е получить все строки в которых x=y и потом перебирать их в цикле делая преобразования со своим коэффциентоМ?
|
|||
28
tumpalgin
08.07.12
✎
17:26
|
Хотя да, Вы правы..
Тем не менее, написал вот такую вещь: Запрос = Новый Запрос(/"Выбрать СЛУ.х, СЛУ.Коэффициент ИЗ РегистрСведений.СЛУ КАК СЛУ ГДЕ СЛУ.х = СЛУ.у/"); ДиагональныйЭлемент = Запрос.Выполнить().Выбрать(); И, по идее в ДиагнонаяльныйЭлемент должна лежать выборка - массив всех строк с х=у, но там все элементы - не определены( |
|||
29
Живой Ископаемый
08.07.12
✎
17:32
|
капец... это невероятно....
ВЫБРАТЬ втТЗ.Х, втТЗ1.У КАК У , втТЗ.Коэффициент ИЗ РегистрСведений.СЛУ КАК СЛУ ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СЛУ КАК СЛУ1 ПО СЛУ.Х = СЛУ1.У И СЛУ.Х = СЛУ1.Х И СЛУ.У = СЛУ1.У |
|||
30
Живой Ископаемый
08.07.12
✎
17:34
|
И опять ты решаешь две проблемы с риском не решить ни одной...
ДиагональныйЭлемент = Запрос.Выполнить().Выбрать(); - избавься от этой парнухи.. убедись сначла что твой запрос возвращает то, что тебе нужно. Убедись в консоли, а в своей копрообоработке или копромодуле. |
|||
31
Живой Ископаемый
08.07.12
✎
17:37
|
"Убедись в консоли, а НЕ в своей копрообоработке или копромодуле".
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |