Как лучше сделать?

SeverBap

Well-known member
18.09.2007
451
0
#1
Вообщем ситуация такая: имеется два справочника, первый двух уровневый, второй подчинен первому;
понадобилось нарисовать один отчет, суть которого в следующем: пользователь открывает отчет (по умолчанию там ставится дата отчета как рабочаяДата - эта дата условная, представлена как месяц год тоесть: Август 2008г.), исходя из этой даты (кторая может интерактивно менятся прямо в отчете) происходит выборка данных из этих двух справочников, - тоесть ДатаГод() возращает код группы в первом справочнике, датаМесяц() во втором ... как сделать правильно и разумную выборку которая довала нормальный результат за короткое время ....
я уже начал мыслить на эту тему пока к чему-то путному не дошел: делаем обход по всем элементам справочника второго и смотрим чтобы:
ТекущийЭлемент().Владелец.Родитель.Код=Число(ДатаГод(РодительОтбора)) И (ТекущийЭлемент().Код=Число(ДатаМесяц(РодительОтбора))) ....

это хорошо когда все хорошо всмысле их мало элементов в справочнике втором!!!

есть решение посложней но по скорости быстрей, с запросами свои заморочки ....
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#2
1С++ и прямые запросы спасут отца русской демократии!
 
K
#5
Спр //1 справочник
Спр1//второй

Спр.НайтиПоКоду(ДатаГод(РодительОтбора));
ТекРод = Спр.ТекущийЭлемент();
Спр.ИспользоватьРодителя(ТекРод.ТекущийЭлемент());
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл

Спр1.ИспользоватьВладельца(Спр.ТекущийЭлемент());//это если коды уникальны
Спр1.НайтиПоКоду(ДатаМесяц(РодительОтбора));

//если нет
ТекВладелец = Спр.ТекущийЭлемент();
ТекКод = ДатаМесяц(РодительОтбора);
ТекстЗапроса =
|Нужный = Справоник.ххх.ТекущийЭлемент;
|Владелец = Справочник.ххх.Владелец;
|Код = Справоник.ххх.код;
|Условие (Владелец в ТекВладелец);
|Условие (Код = ТекКод);

//и т.д.
КонецЦикла;

где-то так я ТАК думаю :unsure:
 

SeverBap

Well-known member
18.09.2007
451
0
#7
Я думаю будет работать очень долго!
Я пока в шоке и пользуюсь вот этим:
Код:
.........
ВиртуальныйСправочникОтчетныхПериодов=СоздатьОбъект("Справочник.ОтчетныйПериод");
Если ПустоеЗначение(РодительОтбора)=0 Тогда
ВиртуальныйСправочникОтчетныхПериодов.ИспользоватьДату(ТекущаяДата());
ВиртуальныйСправочникОтчетныхПериодов.ВыбратьЭлементы(0);
Пока ВиртуальныйСправочникОтчетныхПериодов.ПолучитьЭлемент()=1 Цикл
Если (Число(ВиртуальныйСправочникОтчетныхПериодов.Владелец.Родитель.Код)=Число(ДатаГод(РодительОтбора))) И (Число(ВиртуальныйСправочникОтчетныхПериодов.Код)=Число(ДатаМесяц(РодительОтбора))) Тогда
..........
КонецЕсли;
КонецЦикла;
КонецЕсли;
скорей всего я с ним и останусь ... нда ... теперь сижу ковыряюсь внутренним кодом убираю все циклы и пишу без циклов и запросов ...
:blink:
 
K
#8
и сколько это будет работать?
Я думаю если малость подправить код то будет работать нормально, кончно зависит от размера справочников.
Но при описаной необходимости нужно было справочники построить по дургому и пользоваться отбором по реквизиту
 

SeverBap

Well-known member
18.09.2007
451
0
#9
нужно было справочники построить по дургому и пользоваться отбором по реквизиту
как надо было построить справочники??? (я недавно спрашивал как лучше построить структуру никто не ответил!)
 
K
#10
Делать (подчиненный справочник) не подчиненым и добавить реквизит допустим Хозяин с типом первого справочника,с сортировкой и отбором тогда можно было бы воспользоваться ВыбратьЭлементыПоРеквизиту, а остальное надо смотреть по конкретной задаче
 

SeverBap

Well-known member
18.09.2007
451
0
#11
Нее такое тоже рассматривал, неподошло! Причин было куча сам не помню ... да и по логике должно быть!! Впринципе все реал могу наклипать и такое за пол часа и сравнить!!! И вывесить результат .... так же могу показать схемотично что у меня заложено может кто-то и даст совет по написанию!! :blink:

Структура схематично:
 

Вложения

SeverBap

Well-known member
18.09.2007
451
0
#15
vitfil ну показывай как прямые запросы делать!!!
или где можно посмотреть то!!!???
 

vitfil

IT-интегратор
02.04.2004
2 062
0
#16
vitfil ну показывай как прямые запросы делать!!!
или где можно посмотреть то!!!???
В очередной раз прощу ващу грубость... "У меня большое и доброе сердце. Как у теленка" (с) ну почти дословно "Золотой теленок".
най сайте 1cpp.ru есть и последняя версия компоненты, и подробнейшая документация. Ну а дальше - учебники по СУБД, SQL и вперед!
 

SeverBap

Well-known member
18.09.2007
451
0
#17
Счас посмотрим!!!! (у меня в моей конфигурке уже несколько компанент!!!!) :(
 

SeverBap

Well-known member
18.09.2007
451
0
#18
не то, вообщем опять отбор по новой для отчета - усложнение по бюджетам и отбор по дате!!!