Имя: Пароль:
1C
1С v8
поиск элементов справочника по заданным реквизитам
,
0 Max Street
 
05.02.14
18:07
Привет. Подскажите, пожалуйста, как составить запрос.
есть справочник. в справочнике имеются реквизиты(например, длина, толщина).
есть обработка. в табличной части вводятся реквизиты и их значения(например,
длина 10
цвет зеленый)

по кнопке "найти" требуется отыскать все элементы справочника, у которого совпадают реквизиты и значения реквизитов с теми, что указаны в табл части
1 shamannk
 
05.02.14
18:14
Конструктором!
2 Torquader
 
05.02.14
21:58
Поля-то индексированные или нет ?
А то полное сканирование таблицы будет, мне кажется, что это не есть хорошо.
3 mistеr
 
05.02.14
22:25
(1) Лучше построителем запроса
4 Max Street
 
05.02.14
23:23
(2) нет, поля не индексированные
5 Torquader
 
05.02.14
23:47
(4) Медленно будет работать, однако.
6 Max Street
 
05.02.14
23:54
(5) не столь важно. как, хоть примерно, должен выглядеть запрос?
7 grayshadow
 
06.02.14
01:18
выбрать ссылка из справочник.номенклатура.[табчасть]
где длина = 10 и цвет = "зеленый"
8 Max Street
 
06.02.14
01:32
не подойдет. есть справочник Характеристики. у него два реквизита табл части: свойства и значение этого свойства, причем свойства и его значения могут быть какими угодно(например, длина = 10, цвет = зеленый).
в табл части обработки я хочу ввести свойства и значения, которые меня интересуют, и найти соответствующие характеристики.

запрос вроде такого не работает:

        "ВЫБРАТЬ
        |    СправочникТаблЧасть.Ссылка
        |ИЗ
        |    Справочник.ИмяСправочника.ТаблЧасть КАК СправочникТаблЧасть
        |ГДЕ
        |    СправочникТаблЧасть.Значение В(&Значение)";

        Запрос.УстановитьПараметр("Значение", МассивЗначений);
9 catena
 
06.02.14
07:24
(8)Дезинформация, в (0) говорилось про реквизиты, а теперь характеристики появились. А ведь еще выяснится, что связаны они через регистр....
10 alexiv79
 
06.02.14
07:36
(8) Сначала из таб. части обработки в массив выгружаешь колонку с реквизитами. Потом по табличной части справочника делаешь запрос, в уловие запихиваешь массив реквизитов из обработки
11 alexiv79
 
06.02.14
07:37
+(10)  Только мне кажется, что там не табличная часть справочника - обычно такие вещи делаются через свойства - планы видов характеристик. Какая конфа хоть?
12 User_Agronom
 
06.02.14
08:20
(8) А тип СправочникТаблЧасть.Значение совпадает с типом элементов массива?
13 Max Street
 
06.02.14
12:40
(10) в (8) это уже сделано. выдает неправильный результат.
(11) конфа УТ 11
(12) да, типы совпадают
14 Tateossian
 
06.02.14
13:03
(0) НайтиПоРеквизиту() юзай:3
15 Max Street
 
06.02.14
13:16
(14) из синтакс-помощника: "Если существует несколько элементов с указанным значением реквизита, то будет найдет только один из них" а мне нужно найти все характеристики, у которых совпадают оба реквизита
16 Tateossian
 
06.02.14
13:26
(15) То есть, у тебя характеристики используются?

Выгрузи табличную часть запросом во временную таблицу, потом соедини эту таблицу с таблицей характеристик и оттуда выдергивай владельцев. Как-то так.
17 Max Street
 
06.02.14
13:35
(16) вопрос в том, как соединить две таблицы.
если во временной таблице табличной части у меня, к примеру, два свойства и два значения(цвет = зеленый, длина = 10), то после внутреннего соединения с таблицей характеристик, программа найдет сначала все записи, где "цвет = зеленый", а потом еще раз все записи, где "размер = 10". а мне нужно, чтобы программа нашла записи, где и "цвет = зеленый", и "размер = 10"
18 Tateossian
 
06.02.14
13:41
(17) Надо смотреть структуру хранения данных. Значит, не правильные таблицы используются. У меня нет УТешки 11, либо жди, кто из УТшников подскажет, либо как-нибудь опиши структуру хранения характеристик.
19 Max Street
 
06.02.14
13:51
(17) конфа ут 11. справочник ХарактеристикиНоменклатуры. два реквизита табличной части: Свойство(тип - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения)
и Значение(тип - Характеристика.ДополнительныеРеквизитыИСведения).
Элементы этого справочника и есть нужные характеристики
20 Max Street
 
06.02.14
14:15
(18) есть регистр сведений(непериодический, независимый) Измерения: Объект(тип - СправочникСсылка.ХарактиеристикиНоменклатуры) и Свойство(тип - ПланВидовХарактеристикСсылка.) и ресурс Значение(тип - Характиеристика.)
но регистр сведений не заполнен
21 Tateossian
 
06.02.14
14:17
(19) То есть, у тебя в табличной части обработки две колонки - свойство и значение, а в третью колонку тебе надо вывести номенклатуру? Скриншот обработки можешь сделать? Я поверхностно только понял вопрос.
22 Max Street
 
06.02.14
14:25
(21) обработка. две табличные части.
первая табличная часть состоит из двух реквизитов: Свойство(тип - ПланВидовХарактеристикСсылка.) и Значение(тип - Характеристика.)
вторая табличная часть - из одного реквизита: Характеристика(тип - СправочникСсылка.ХарактеристикаНоменклатуры)

В первую табличную часть я добавляю все свойства и их значения, которые меня интересуют. по кнопке "найти" вторая табличная часть должна заполниться характеристикой, реквизиты которой полностью совпадают с тем, что я добавил в первую табличную часть
23 Tateossian
 
06.02.14
14:39
(22) Это тривиальная задача, но в структуре запутался. Давай через Тимвьювер подключусь?
24 Max Street
 
06.02.14
14:44
(21) пробовал два варианта.
первый: задать условие ГДЕ, обратившись к справочнику ХарактеристикиНоменклатуры. и там через параметры передать массив или список значений(пробовал и массив, и список значений), выгрузив данные из первой табличной части
второй: соединить две таблицы(первая - временная таблица из первой табличной части, вторая - справочник ХарактеристикиНоменклатуры), но соединив их по свойству и значению, я получаю результат, в котором программа находит сначала все записи с первым свойством и его значением, потом все записи со следующим свойством и его значением. а нужно получить характеристику, у которой есть все заданные в первой табличной части свойства и, соответственно, все значения
25 Max Street
 
06.02.14
14:46
(23) не надо. лучше посоветуй как запрос составить. хоть примерно
26 Tateossian
 
06.02.14
15:08
(25) Попробуй так - сделай поле "КоличествоХарактеристик", туда отправь количество характеристик, во второй таблице посчитай количество вхождений и потом соединяй по количеству. То есть, если в первой таблице две характеристики, то из второй таблицы выбирай те вхождения, у которых равное количество характеристик.
27 Tateossian
 
06.02.14
15:34
(25) Вот образец, надеюсь, поможет.
ВЫБРАТЬ
    "Характеристика1" Характеристика
ПОМЕСТИТЬ ХарактеристикиТаб

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Характеристика2"

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    "Характеристика3"
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    КОЛИЧЕСТВО(ХарактеристикиТаб.Характеристика) КоличествоХарактеристик
ПОМЕСТИТЬ КоличествоХарактеристикТаб
ИЗ
    ХарактеристикиТаб ХарактеристикиТаб
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ХарактеристикиТаб.Характеристика,
    КоличествоХарактеристикТаб.КоличествоХарактеристик
ПОМЕСТИТЬ ТаблицаПоиска
ИЗ
    ХарактеристикиТаб ХарактеристикиТаб,
    КоличествоХарактеристикТаб КоличествоХарактеристикТаб
;
/////////////////////////////////////////////////////
ВЫБРАТЬ
    "Сапог" НаборХарактеристик
    ,"Характеристика1" Характеристика
ПОМЕСТИТЬ СправочникХарактеристик
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    "Карандаш"
    ,"Характеристика2"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    "Самолетик"
    ,"Характеристика1"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    "Самолетик"
    ,"Характеристика2"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    "Самолетик"
    ,"Характеристика3"
ОБЪЕДИНИТЬ ВСЕ
ВЫБРАТЬ
    "Дырокол"
    ,"Характеристика3"
;
////////////////////////////////////
ВЫБРАТЬ
    СправочникХарактеристик.НаборХарактеристик
    ,КОЛИЧЕСТВО(СправочникХарактеристик.НаборХарактеристик) КоличествоВНаборе
ПОМЕСТИТЬ КоличествоВНаборахХарактеристик
ИЗ
    СправочникХарактеристик
    
СГРУППИРОВАТЬ ПО
    НаборХарактеристик
;
//////////////////////////////////////
ВЫБРАТЬ
    СХ.НаборХарактеристик
    ,СХ.Характеристика
    ,СХ2.КоличествоВНаборе
ПОМЕСТИТЬ РезультирующаяТаблица
ИЗ СправочникХарактеристик СХ
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    КоличествоВНаборахХарактеристик СХ2 ПО
    СХ.НаборХарактеристик = СХ2.НаборХарактеристик
;
////////////////////////////////////////
ВЫБРАТЬ
    РезультирующаяТаблица.НаборХарактеристик
ИЗ
    РезультирующаяТаблица
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    ТаблицаПоиска ПО
    ТаблицаПоиска.Характеристика = РезультирующаяТаблица.Характеристика
    И ТаблицаПоиска.КоличествоХарактеристик = РезультирующаяТаблица.КоличествоВНаборе
СГРУППИРОВАТЬ ПО
    РезультирующаяТаблица.НаборХарактеристик
28 Max Street
 
06.02.14
15:40
(26) спасибо
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.