Имя: Пароль:
1C
1С v8
Параметры в запросе
,
0 Ira_19
 
01.02.12
00:47
Здравствуйте. Подскажите, пожалуйста, как правильно писать запрос с несколькими параметрами?
Пишу так:
1)
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ВременныйСправочник.Ссылка
|ИЗ
| Справочник.ВременныйСправочник КАК ВременныйСправочник
|ГДЕ
| (ВременныйСправочник.Ссылка.Наименование, ВременныйСправочник.Ссылка.ВедомостьТрудоемкости) В
| (ВЫБРАТЬ
| &Наименование,
| &ВедомостьТрудоемкости)";
Запрос.УстановитьПараметр("Наименование", Наименование);
Запрос.УстановитьПараметр("ВедомостьТрудоемкости",ВедомостьТрудоемкости);

2)
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| Трудоемкость.СпецификацияВспомМатериалов,
| Трудоемкость.Номенклатура,
| Трудоемкость.ТехнологическаяОперация
|ИЗ
| РегистрСведений.Трудоемкость КАК Трудоемкость
|ГДЕ
| Трудоемкость.Регистратор = &Регистратор"
| И Трудоемкость.Номенклатура = &Номенклатура;
Запрос.УстановитьПараметр("Регистратор", Регистратор)
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);

Ни один из вариантов не возвращает результата (пишу в 1) случае Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); аналогично во 2) случае нужную колонку).

Запросы с одним параметром работают хорошо.
1 Asmody
 
01.02.12
00:58
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| ВременныйСправочник.Ссылка
|ИЗ
| Справочник.ВременныйСправочник КАК ВременныйСправочник
|ГДЕ
| ВременныйСправочник.Ссылка.Наименование = &Наименование
| И ВременныйСправочник.Ссылка.ВедомостьТрудоемкости = &ВедомостьТрудоемкости";
Запрос.УстановитьПараметр("Наименование", Наименование);
Запрос.УстановитьПараметр("ВедомостьТрудоемкости",ВедомостьТрудоемкости);

осталось понять, что такое Наименование и ВедомостьТрудоемкости и какие у них типы.

на втором запросе синтаксическая ошибка вылетит
2 Ira_19
 
01.02.12
01:01
(1) Это реквизиты справочника, Наименование - стандартный реквизит, ВедомостьТрудоемкости имеет тип ДокументСсылка.

Какая ошибка должна вылететь? Не вылетает, просто результат пустой, как и в первом случае.
3 Asmody
 
01.02.12
01:06
(2) искать элемент справочника по наименованию — моветон, это раз. если Наименование и ВедомостьТрудоемкости реквизиты справочника ВременныйСправочник, то писать ВременныйСправочник.Ссылка.Наименование в запросе не надо, надо ВременныйСправочник.Наименование (с ВедомостьТрудоемкости также), это два. Тип ДокументСсылка имеет реквизит справочника ВедомостьТрудоемкости или переменная ВедомостьТрудоемкости?(это три)
А в четвёртых, во втором запросе не там стоит закрывающая кавычка. Если это копипаста, то выйдет синтаксическая ошибка.
4 Ira_19
 
01.02.12
01:12
(3) Насчет поиска по наименованию понимаю, что не хорошо. Просто нужно отобрать элементы справочника не только по наименованию (используя НайтиПоНаименованию), но и по реквизиту ВедомостьТрудоемкости (в справочнике данный реквизит имеет тип ДокументСсылка, передаваемый параметр имеет такой же тип).

Насчет кавычки - это не копипаст (точнее исправленный вручную копипаст, кавычка не в том месте осталась).
5 Ira_19
 
01.02.12
01:19
Этот запрос всё равно не работает, хотя записи, удовлетворяющие условиям поиска есть в справочнике.
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
|    ВременныйСправочник.Ссылка,
|    ВременныйСправочник.Наименование
|ИЗ
|    Справочник.ВременныйСправочник КАК ВременныйСправочник
|ГДЕ
|    ВременныйСправочник.ВедомостьТрудоемкости = &ВедомостьТрудоемкости
|    И ВременныйСправочник.Наименование = &Наименование";
   
Запрос.УстановитьПараметр("Наименование", Наименование);
Запрос.УстановитьПараметр("ВедомостьТрудоемкости",ВедомостьТрудоемкости);
6 Asmody
 
01.02.12
01:20
попробуй заменить на

ВременныйСправочник.Наименование ПОДОБНО &Наименование

и

Запрос.УстановитьПараметр("Наименование", Наименование+"%")
7 Ira_19
 
01.02.12
01:27
На строке
Запрос.УстановитьПараметр("Наименование", Наименование+"%");

происходит выход (!) из функции и переход к событию ПриАктивацииСтроки (Заполнение справочника идёт по ходу заполнения табличной части документа, в документе используется событие ПриАктивацииСтроки. Вообще какое-то странное событие, часто срабатывает, когда не ждёшь).
8 Asmody
 
01.02.12
01:30
(7) нормально оно срабатывает. А вот это [Заполнение справочника идёт по ходу заполнения табличной части документа, в документе используется событие ПриАктивацииСтроки] — это кто рассказал так делать?!
9 Asmody
 
01.02.12
01:34
для понимания рекомендую закомментировать весь код в обработчике события, оставить только Сообщить("ПриАктивацииСтроки"), а потом просто "побегать" по табличному полю. И посмотреть результат.
{это всё к параметрам запроса вообще не имеет никакого отношения}
10 Ira_19
 
01.02.12
01:35
никто не сказал, сама придумала. У меня временный справочник, из него данные удаляются при проводке документа, используется просто для временного хранения данных перед записью в регистр.
11 GROOVY
 
01.02.12
01:35
(10) Вы понимаете что сейчас полную ерунду говорите?!
12 Asmody
 
01.02.12
01:39
(11) тщщ,  не груби.  Просто девушка не на тех язфках программировать училась
13 GROOVY
 
01.02.12
01:40
Ок, я просто в шоке был, не сдержался.
14 Ira_19
 
01.02.12
01:41
Может, и ерунда, но по-другому не знаю, как сделать в моем случае.
Далее к теме не имеетотношения:
В документе есть 2 табличные части. При активации строки в одной из них, хочу, чтобы отображалась соответствующая информация в другой табличной части. Потом всё нужно записать в регистр. Для этого сделала временный справочник (можно было сделать что-то вроде массива, но справочником удобнее показалось). И так далее...

А что такого?
15 Asmody
 
01.02.12
01:43
(10) за изобретательность - 5, за идею - 2.
Нужно делать всё не так.  Чтобы понять, как делать правильно,  нужна задача, хотя бы кратко
16 Asmody
 
01.02.12
01:49
(14) есть простое правило: в БД должно быть только то,  что там должно быть. В 1С достаточно механизмов,  чтобы не соваться лишний раз в БД.
То,  что тебе нужно,  делается другими путями,  например,  через отборы.
17 Ira_19
 
01.02.12
01:52
Задача.
Нужно составить спецификацию, по которой мастер будет узнавать нужную информацию. Есть Номенклатура, состоящая из различных частей. Нужно описать, какие будут использоваться части (реквизит Ведомость норм расхода номенклатуры на номенклатуру), а также спецификации, по которым будут списываться материалы, указываться нормы времени и т.д.). Всё это - на рисунке
http://imglink.ru/show-image.php?id=8e96f68af2557eaddac2879d03bc64d8
18 Ira_19
 
01.02.12
02:04
Через отборы не представляю, как сделать в данном случае.
У меня, ещё раз повторю, при активации строки первой ТЧ, выводится информация во второй ТЧ (если это создание документа, то выводятся только первые 2 поля, третье заполняется вручную). Когда я активирую другую строку в первой ТЧ, то данные во второй изменятся => предыдущее значение потеряется. Как в этом случае запомнить то, что было введено? (если моя придумка плоха)
19 Ira_19
 
01.02.12
02:22
(9) сделала, работает, как я и понимала (срабатывает только при активации строки в первой ТЧ, для чего и описано это событие), если в запросе написать
|ГДЕ
|    ВременныйСправочник.Наименование = &Наименование
и
Запрос.УстановитьПараметр("Наименование", Наименование);

а если через ПОДОБНО, как в (6), то срабатывает также при окончании заполнения второй ТЧ (вот это не понятно).
20 Asmody
 
01.02.12
09:18
(17) еще и формы управляемые... случай тяжелый,  но поправимый.  Позже доберусь до стационарного компа, разберемся,  как сделать правильно
21 Ira_19
 
01.02.12
11:36
(20) хорошо, спасибо. Я вечером доберусь до компа (с инетом).
22 Ira_19
 
01.02.12
20:20
(20) Asmody, я готова решать проблему))
23 Asmody
 
01.02.12
20:32
(22) давай начинать "от печки": какая у тебя структура  данных и чего ты хочешь от неё добиться,  т.е. какая должна быть логика
24 Asmody
 
01.02.12
20:35
Второй вопрос: как всё это должно выглядеть со стороны пользователя
25 Ira_19
 
01.02.12
20:44
(23) этот документ начался создаваться для того, чтобы можно было построить отчёт, в который попадут только актуальные на данный момент данные, т.к. существует множество спецификаций отходов, норм времени для производства номенклатуры, спецификаций списания вспомогательных материалов и ведомостей, в которых указана "вложенность" номенклатуры (на рис. видно, что некоторая деталь состоит из других деталей. Это и есть "вложенность"), то нужно знать, по какой из них работать.
26 Ira_19
 
01.02.12
20:46
(24) как это будет выглядеть со стороны пользователя, думаю, не сильно важно. Главное, чтобы можно было указать всё, что я перечислила и чтобы это было всё-таки удобно для использования. Думаю, мой вариант документа вполне подходит, разве не так?