Имя: Пароль:
1C
1С v8
Как написать запрос?
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
(0)

как тема связана с v8: Как найти?
?
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
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
"Убедись в консоли, а НЕ в своей копрообоработке или копромодуле".
2 + 2 = 3.9999999999999999999999999999999...