Имя: Пароль:
1C
1С v8
Проверка строк ТЗ
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
уже..
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.