![]() |
![]() |
![]() |
|
Проверка строк ТЗ | ☑ | ||
---|---|---|---|---|
0
ladalk
03.10.12
✎
09:06
|
Добрый день,
есть таблица значений, включающая в себя столбец N, и есть список значений S, включающий в себя значения для N. Как можно проверить входит ли N из ТЗ в список S? (кроме перебора строк ТЗ и последующей проверки в цикле на предмет S). Может есть какой-нибудь более совершенный метод? |
|||
1
Godofsin
03.10.12
✎
09:06
|
запрос
|
|||
2
Maxus43
03.10.12
✎
09:07
|
имхо перебор надо
|
|||
3
ladalk
03.10.12
✎
09:07
|
(1) а как в запрос включить данные из ТЗ?
|
|||
4
Alex S D
03.10.12
✎
09:08
|
запрос.
|
|||
5
ladalk
03.10.12
✎
09:08
|
временная таблица?
|
|||
6
Alex S D
03.10.12
✎
09:08
|
передать во временную таблицу
|
|||
7
Godofsin
03.10.12
✎
09:08
|
(3) временная таблица
|
|||
8
Рэйв
03.10.12
✎
09:09
|
(5)Только поля должны быть типизированные, а то не пойдет в запрос.
|
|||
9
Maxus43
03.10.12
✎
09:12
|
пойду кофе пить, телепат сломался
|
|||
10
чувак
03.10.12
✎
09:13
|
если покажешь фотку, за тебя могут и запросы писать с временными таблицами :)
|
|||
11
Godofsin
03.10.12
✎
09:17
|
(10) не за каждую фотку )))
|
|||
12
kosts
03.10.12
✎
09:21
|
Не сказал бы что запросом это более совершенный способ. Просто другой.
|
|||
13
Рэйв
03.10.12
✎
09:22
|
(12) перебором тебе на каждую строку придется проыерять СЗ.НайтиЗначение()
А запросом одно условие ГДЕ ЧтоТо в (&сзПараметр) |
|||
14
ladalk
03.10.12
✎
09:25
|
(13) данные должны быть заранее описаны?
ТЗ - результат другого запроса с преобразованиями дополнительными. сейчас я просто пытаюсь сделать так: Запрос = Новый запрос; Запрос.Параметры.Вставить("Данные", ТЗ); Запрос = "ВЫБРАТЬ * ПОМЕСТИТЬ ВТ ИЗ &Данные КАК Таблица"; что-то не так. |
|||
15
чувак
03.10.12
✎
09:26
|
(14) там одну строку забыла.
Давай лучше фотки, так быстрее подйет процес :) |
|||
16
Рэйв
03.10.12
✎
09:27
|
Запрос.Текст = "ВЫБРАТЬ *
ПОМЕСТИТЬ ВТ ИЗ &Данные КАК Таблица ; Выбрать * Из ВТ ГДЕ ИмяПоля В (сзПар)"; Запрос.УстановитьПараметр("сзПар",СписокПроверка); Запрос.Выполнить().Выгрузить().Выбратьстроку(); |
|||
17
Рэйв
03.10.12
✎
09:28
|
ах да... параметр данные тоже надо установить
|
|||
18
чувак
03.10.12
✎
09:29
|
(17) Без менеджера временных таблиц катит?
|
|||
19
ladalk
03.10.12
✎
09:30
|
Запрос = "ВЫБРАТЬ
| Таблица.Результат |ПОМЕСТИТЬ ВТ |ИЗ | &Данные КАК Таблица |ГДЕ | Таблица.Должность В(&ПарамСписокДолжностей)"; Как параметр "Данные" установить? |
|||
20
Рэйв
03.10.12
✎
09:31
|
(18)Вроде автоматом создается, но я всегда создаю отдельно. Подразумевалось, что у ТС он уже есть
|
|||
21
ladalk
03.10.12
✎
09:31
|
(20) нет :(
|
|||
22
Рэйв
03.10.12
✎
09:32
|
(19)
Запрос.УстановитьПараметр("Данные",ТвояТЗ); Только повторяю, у ТЗ должны быть типизированные колонки |
|||
23
Рэйв
03.10.12
✎
09:33
|
(21)Тогда
Запрос.МенеджерВременныхТаблиц=новый МенеджерВременныхТаблиц; |
|||
24
Рэйв
03.10.12
✎
09:33
|
до выполнения
|
|||
25
ladalk
03.10.12
✎
09:33
|
(22) т.е. надо прописать тип для колонки? а если ТЗ является результатом выполнения другого запроса?
|
|||
26
чувак
03.10.12
✎
09:34
|
(25) тогда все в шоколаде
|
|||
27
Рэйв
03.10.12
✎
09:34
|
(25)Тогда создать ее копию с типизированными колонками и заполнить
|
|||
28
kosts
03.10.12
✎
09:35
|
(13) Сравните общий объем кода.
А затем и потестите на управляемых формах. Вполне может оказаться, что простой поиск в цикле будет и короче и быстрее чем запросом... |
|||
29
Рэйв
03.10.12
✎
09:35
|
(26)Нифига. Результат - все колонки составные .Там к каждой колонки тип NULL в состав добавляется
|
|||
30
ladalk
03.10.12
✎
09:35
|
(28) обычное приложение
|
|||
31
Рэйв
03.10.12
✎
09:36
|
(28)Ты еще объем асеблерного кода наверное не видел:-)..а это самый быстрый язык
|
|||
32
чувак
03.10.12
✎
09:37
|
(29) Т.е ТЗ из результата запроса не катит для временных таблиц?
Это перевернул мое сознание и мировоззрение |
|||
33
Рэйв
03.10.12
✎
09:38
|
(32)на 8.1 пробовал напрямую - не ел. На 8.2 не пробовал:-)
|
|||
34
ladalk
03.10.12
✎
09:38
|
(32) там еще в ручную добавляются колонки. и добавляю их:
ТЗ.Колонки.Добавить("Должность"); |
|||
35
ladalk
03.10.12
✎
09:38
|
без указания типа
|
|||
36
Alex S D
03.10.12
✎
09:39
|
правильно
|
|||
37
kosts
03.10.12
✎
09:39
|
(31) При чем здесь объем кода, и скорость языка.
С запросом вступает в действие обмен с сервером, а это затратная операция... |
|||
38
Рэйв
03.10.12
✎
09:39
|
(35)Надо с указанием
|
|||
39
ladalk
03.10.12
✎
09:39
|
хотя она потом эта колонка заполняется значением справочника
|
|||
40
Рэйв
03.10.12
✎
09:39
|
(37)Если не лень - сделай замер:-).. Мне тоже интересно
|
|||
41
чувак
03.10.12
✎
09:41
|
(39) Еслди есть в ТЗ хоть одно значение, тогда не надо типизировать
|
|||
42
чувак
03.10.12
✎
09:41
|
в этой колонке
|
|||
43
Alex S D
03.10.12
✎
09:42
|
(37) фонат блин, сколько микросекунд разница?
|
|||
44
hhhh
03.10.12
✎
09:42
|
(39) но тип-то у нее составной ты задал из 150-ти возможных.
|
|||
45
Alex S D
03.10.12
✎
09:45
|
тип надо указать в любом случае
|
|||
46
ladalk
03.10.12
✎
09:46
|
Запрос1 = Новый запрос;
Запрос1.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос1.Параметры.Вставить("Данные", ТЗ); Запрос1.Параметры.Вставить("ПарамСписокДолжностей", СписокДолжностей); Запрос1 = "ВЫБРАТЬ | Таблица.Результат |ПОМЕСТИТЬ ВТ |ИЗ | &Данные КАК Таблица |ГДЕ | Таблица.Должность В(&ПарамСписокДолжностей)"; результат1 = Запрос1.Выполнить(); ругается на выполнить |
|||
47
Alex S D
03.10.12
✎
09:47
|
ругается? все понятно
|
|||
48
Alex S D
03.10.12
✎
09:47
|
колонки таки все типизированы?
|
|||
49
ladalk
03.10.12
✎
09:48
|
Значение не является значением объектного типа (Выполнить)
результат1 = Запрос1.Выполнить(); |
|||
50
чувак
03.10.12
✎
09:50
|
(49) Ты поместила в ВТ, а из ВТ не получила поля.
Тебе надо пакет запросов построить. ИМХО |
|||
51
Alex S D
03.10.12
✎
09:51
|
Запрос1 = "ВЫБРАТЬ... хехе это че?)
|
|||
52
Alex S D
03.10.12
✎
09:51
|
запрос1 = НОВЫЙ ЗАПРОС *...
|
|||
53
чувак
03.10.12
✎
09:52
|
так
Запрос1.Текст = "ВЫБРАТЬ |
|||
54
ladalk
03.10.12
✎
09:54
|
да
|
|||
55
Рэйв
03.10.12
✎
09:55
|
(54)Сравни текст с (16)
|
|||
56
kosts
03.10.12
✎
09:57
|
(40) Пусть автор протестирует...
// простой вариант, но с использованием соответствия Соответствие = Новый Соответствие; Для каждого Элемент Из Список Цикл Соответствие.Вставить(Элемент.Значение, 0); КонецЦикла; Для каждого т Из Таблица Цикл Если Соответствие.Получить(т.Колонка1) <> Неопределено Тогда Сообщить(т.Колонка1 + " - входит", СтатусСообщения.Информация); КонецЕсли; КонецЦикла; Я не против запросов. Применяю везде где они к месту. Просто тут неоднозначный вариант. Может быть в этой задаче вообще можно обойтись без ТЗ, а сразу получить необходимый отчет ... |
|||
57
ladalk
03.10.12
✎
09:58
|
Запрос1.Текст = "ВЫБРАТЬ *
|ПОМЕСТИТЬ ВТ |ИЗ &Данные КАК Таблица |; |Выбрать * Из ВТ ГДЕ Таблица.Должность В(&ПарамСписокДолжностей)"; |
|||
58
Alex S D
03.10.12
✎
09:58
|
и?
|
|||
59
ladalk
03.10.12
✎
09:59
|
Тип не может быть выбран в запросе
ИЗ <<?>>&Данные КАК Таблица |
|||
60
ladalk
03.10.12
✎
10:00
|
хотя до этого:
Запрос1.Параметры.Вставить("Данные", ТЗ); Запрос1.Параметры.Вставить("ПарамСписокДолжностей", СписокДолжностей); |
|||
61
Alex S D
03.10.12
✎
10:01
|
блин, ты можешь по человечески в конструкторе сделать запрос
|
|||
62
Alex S D
03.10.12
✎
10:01
|
выбери все колонки таблицы
|
|||
63
чувак
03.10.12
✎
10:01
|
(59) Если там колонок не много, отладчиком проверб каждое поле. В каком-то из них тип составной.
|
|||
64
ladalk
03.10.12
✎
10:03
|
(63) получается, что в каждой колонке нужный тип и null
|
|||
65
kosts
03.10.12
✎
10:03
|
Нет смысла передавать все колонки на сервер в запрос. Выгрузите одну-две колонки.
|
|||
66
Alex S D
03.10.12
✎
10:05
|
короче.. делай перебором. не парься)
|
|||
67
ladalk
03.10.12
✎
10:12
|
уже..
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |