Имя: Пароль:
1C
1C 7.7
v7: В чем ошибка в запросе ?
0 Ночной Эльф
 
27.11.12
09:37
Выбираю элементы справочника в запросе вот так

ТекущийКонтрагент = ЯКонтрагент.Наименование;
               ТекстЗапроса =
               "//{{ЗАПРОС(Сформировать)
               |Наименование = Справочник.я_Адреса.Наименование;
               |Хозяин = Справочник.я_Адреса.Хозяин;
               |ТекущийЭлемент = Справочник.я_Адреса.ТекущийЭлемент;
               |Группировка ТекущийЭлемент;
               |Условие(Наименование = ""Документы"");
               |Условие(Хозяин = ТекущийКонтрагент);                
               |"//}}ЗАПРОС
               ;
               
               // Если ошибка в запросе, то выход из процедуры
               Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
                   Возврат;
               КонецЕсли;

Выдает вот такую вот ошибку в чем причина?

Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
{D:\БАЗЫ\23.11\EXTFORMS\OTCH_VITALIY\СПЕЦИАЛЬНЫЕ.GRP\ОТЧЕТПОРЕГИСТРАЦИИДОКУМЕНТОВ.ERT(499)}: Значение не представляет агрегатный объект (Выполнить)
1 Морозов Александр
 
27.11.12
09:38
сам объект запрос то создан?
2 Ёпрст
 
гуру
27.11.12
09:38
Запрос = СоздатьОбъект("Запрос");
перед этим кодом воткни хоть
3 Ёпрст
 
гуру
27.11.12
09:39
>>>
|Условие(Наименование = ""Документы"");

вот из-за этого, как минимум, будет всегда пустая выборка.
4 Ёпрст
 
гуру
27.11.12
09:40
>>>ТекущийКонтрагент = ЯКонтрагент.Наименование;
>>> |Условие(Хозяин = ТекущийКонтрагент);

аналогично
5 Надсмотрщик
 
27.11.12
09:42
Ошибка в ДНК

ТекущийКонтрагент = ЯКонтрагент.Наименование;
               

               |Условие(Хозяин = ТекущийКонтрагент);
6 Ночной Эльф
 
27.11.12
09:44
А как тогда условие надо делать с |Условие(Наименование = ""Документы""); и |Условие(Хозяин = ТекущийКонтрагент);
7 Надсмотрщик
 
27.11.12
09:47
Пригласи спеца
8 Ёпрст
 
гуру
27.11.12
09:47
Реквизит Хозяин сделать как минимум, реквизитом агрегатного типа, в запрос пихать ссылку на элемент справочника, а не строку.

Условие на наименование делать хотя бы через Найти () или пересмотреть структуру хранения данных.
9 Voronve
 
27.11.12
09:48
Найти(Наименование, ""Документы"") > 0
Условие(Хозяин = ЯКонтрагент)
10 Ночной Эльф
 
27.11.12
09:59
сделал условие Условие(Хозяин = ЯКонтрагент)  и убрал с "Документы" все равно пустая вобще в чем проблема нужно выбрать из справочника не подчиненного справочнику ЯКонтрагент строку где Наименование = "Документы" а Хозяин равен ЯКонтрагент пробовал через

СпрАдрес=СоздатьОбъект("Справочник.я_Адреса");
СпрАдрес.ИспользоватьВладельца(ЯКонтрагент.ТекущийЭлемент());
               СпрАдрес.ВыбратьЭлементы();//Поиск Контактных лиц
               Пока СпрАдрес.ПолучитьЭлемент()=1 Цикл
                   Если СокрЛП(СпрАдрес.Хозяин) = СокрЛП(ЯКонтрагент.Наименование) Тогда
                       Если СпрАдрес.Наименование = "Документы" Тогда
                           тКонтактныеЛица = СпрАдрес.Адрес + тКонтактныеЛица;
                       КонецЕсли;
                   КонецЕсли;
               КонецЦикла;

Все работает ну уж очень долго. Перебирает все элементы справочника я_Адреса сами понимаете для каждого Контрагента сколько это время займет. Сейчас сделал запросом не чуть не лучше справочник я_Адреса находиться в табличной части справочника я_Контрагенты. Как можно на много быстрее выбрать строку нужно справочника ?
11 Шапокляк
 
27.11.12
10:04
(10) Ты используешь владельца - ЯКонтрагента для выборки элементов справочника я_Адреса. А там еще в справочнике есть текстовый реквизит Хозяин, который может быть заполнен наименованием владельца, а может и еще чем-то? И у каждого владельца таких адресов 100500? Какая жуткая нетленка!!!
12 Ночной Эльф
 
27.11.12
10:27
(11) Как можно выбрать из справочника я_Адреса элементы которые имеют одно значение Хозяин (оно сто процентов равно ЯКонтрагента.Наименование) ?
13 Ёпрст
 
гуру
27.11.12
10:30
Хозяин - реквизит какого типа у тебя в справочнике ?
14 Ночной Эльф
 
27.11.12
12:25
(13) просто справочник
15 Ночной Эльф
 
27.11.12
12:25
попробовал вот так

СпрАдрес.ВыбратьЭлементыПоРеквизиту("Хозяин",СокрЛП(ЯКонтрагент),0,0);//Поиск Контактных лиц
               Пока СпрАдрес.ПолучитьЭлемент()=1 Цикл

пустое выдает
16 Ёпрст
 
гуру
27.11.12
12:38
(14) тогда сравнивать в запросе нужно со ссылкой на справочник, а не с его наименованием (это строка, если чё)


(15) Хозяин - это не строка у тебя, сравнивать агрегатный объект  со строкой СокрЛП(ЯКонтрагент) тебе не кажется не логичным ?
17 Ёпрст
 
гуру
27.11.12
12:39
+ у реквизита хозяин, чтоб был поиск по реквизиту, должен стоять признак "сортировка" с свойствах реквизита.
18 Ночной Эльф
 
27.11.12
12:47
Стоит сортировка и отбор по реквизиту.

а если не в запросе а с помощью функции ВыбратьЭлементыПоРеквизиту какой параметр для поиска указывать? ЯКонтрагент или ЯКонтрагент.Наименование?
19 Ночной Эльф
 
27.11.12
12:49
Ух ты бл...... ь забыл что СокрЛП() преобразует в строку получалось что не ссылку а строку вводил для поиска убрал все заработало ))) спасибо всем