Цитата(Flexy @ 30.01.12, 18:42) необходимо зарегистрироваться для просмотра ссылки
Спасибо.
Обязательно попробую этот способ.Но Имхаеться мне, что он не оптимален.
Но все равно мне очень интересно, реально ли получить нужные мне данные с помощью одного только запроса, Без написания доп. функций и тупого перебора.
Либо в 7-ке язык запросов не позволяет выполнить столь не сложную задачу?
Тогда прямые запросы вам в руки. Очень быстро летает
Кстати вот что подумалось
1. первым запросом получаем список всех контрагентов у которых есть категории
2. вторым запросом получаем всех остальных (не вошедших в первый запрос)
Цитата(5_kopeek @ 30.01.12, 18:33) необходимо зарегистрироваться для просмотра ссылки
Если сходу, то можно так:
//*******************************************
Функция КвоКатегорий(ТекКонтрагент)
Перем Запрос, ТекстЗапроса, Таб;
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(ПроверкаКатегорий)
|КатегорииКонтрагентов = Справочник.КатегорииКонтрагентов.ТекущийЭлемент;
|Владелец = Справочник.КатегорииКонтрагентов.Владелец;
|Группировка КатегорииКонтрагентов;
|Условие(Владелец = ТекКонтрагент);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат -1;
КонецЕсли;
Если Запрос.Группировка(1) = 0 Тогда
Возврат 0;
КонецЕсли;
Возврат 1;
КонецФункции
//*******************************************
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Контрагент = Справочник.Контрагенты.ТекущийЭлемент;
|Группировка Контрагент Без групп;
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Пока Запрос.Группировка(1) = 1 Цикл
Если КвоКатегорий(Запрос.Контрагент)=0 Тогда
Таб.ВывестиСекцию("Контрагенты");
КонецЕсли; // КвоКатегорий(Запрос.Контрагент)=0
КонецЦикла;
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
Но будет ли быстрее?..
Запрос в цикле? За это убивать надо
Кстати, на заметку ВСЕМ (и автору темы в свете моего предложения из предыдущего поста)
Если у вас есть список значений (именно список элементов а не группа справочника) по которому надо поставить условие в запросе то конструкция
Условие (СписокУсловий.Принадлежит(РеквизитЗапроса)<>0);
работает на порядок быстрее чем стандартная
Условие (РеквизитЗапроса в СписокУсловий);