Группы справочника

lira89

Well-known member
12.03.2010
154
0
#1
Подскажите пожалуйста. Вот такая ситуация: надо в справочнике найти группу1 по определеному реквизиту документа, потом перейти в каталог этой группы1 и искать следующую группу2 по другому реквизиту документа, потом зайти в каталог группы2 и искать сам элемент. Так вот в чем вопрос: как осуществить переход в каталог сначала одной группы, а потом во внутренний ее каталог другой группы? Ну то есть как вообще открывать и переходить в каталог группы и внутри ее уже осуществлять поиск???
Подскажите пожалуйста, очень нужно)
 

vbs

Well-known member
18.02.2007
1 708
1
#2
а платформу указать не надо ?
И поточнее сформулировать - группа2 находится внутри группы1 или нет ?
Может, простой пример привести ?
 

lira89

Well-known member
12.03.2010
154
0
#5
можешь пример привести, такой, чтобы они создавались друг в друге?
Я пробовала ИспользоватьРодителя, ноу меня ничего не получилось, возможно я что-то не так делала или не там писала.
 
T

TimeDontWait

#6
спр=создатьобъект("Справочник.ТвойСправочник");

спр.использоватьродителя(<Родитель>);
спр.НайтиПоРеквизиту(<ИмяРеквизита>,<Значение>,<ФлагГлобальногоПоиска>)
 

vbs

Well-known member
18.02.2007
1 708
1
#7
ИспользоватьРодителя - для поиска внутри нужной группы,
а при создании элемента
Спр.Новый();
Спр.Родитель = НайденнаяГруппа
 

lira89

Well-known member
12.03.2010
154
0
#8
Код:
 СпрОб = СоздатьОбъект("Справочник.Обучение");
СпрФакультет = СоздатьОбъект("Справочник.Обучение");
СпрОб.ВыбратьЭлементы(); 
Флаг=0;
Пока СпрОб.ПолучитьЭлемент()=1 Цикл
Если (СпрОб.ТекущийЭлемент().ЭтоГруппа()=1) и (СпрОб.Наименование=СокрЛП(Факультет)) и (СпрОб.ТекущийЭлемент().ПометкаУдаления()=0) Тогда
Сообщить("Группа существует");
Флаг=1;
//выбираем родителя
СпрОб.ИспользоватьРодителя(СпрОб.ТекущийЭлемент());
//cоздаем новый элемент для проверки того, что запишется в группу Факультет
СпрОб.Новый();
СпрОб.Наименование = ФормированиеНаименования(ФизЛицо); 
СпрОб.Записать();
КонецЕсли; 
КонецЦикла;		 
//если такой группы не найдено, то создаем новую
Если Флаг=0 Тогда		
Сообщить("добавление новой группы Факультетов");
СпрОб.НоваяГруппа();
СпрОб.Наименование = СокрЛП(Факультет);
СпрОб.Записать(); 								
// должны переходить в каталог группы, но наверное это неправильно
СпрОб.ИспользоватьРодителя(СпрОб.ТекущийЭлемент());
//cоздаем новый элемент для проверки того, что запишется в группу Факультет
СпрОб.Новый();
СпрОб.Наименование = ФормированиеНаименования(ФизЛицо); 
СпрОб.Записать();
КонецЕсли;
СокрЛП(Факультет) это реквизит документа, по которому мы осуществляем поиск в справочнике Обучение и если находим, то заходим в группу, если не находим, то создаем и снова заходим в группу. На практике будет еще вложенная группа, но пока не работает даже добавление простого элемента в группу. И еще выдает ошибку:
Группа существует
Пока СпрОб.ПолучитьЭлемент()=1 Цикл
{Документ.Зачисление.Модуль Документа(17)}: Не выбран элемент!
Вобщем не знаю что даже делать. Подскажите пожалуйста
И если рассмотреть добавление еще одной группы в данную группу, то надо ли создавать новую переменную с помощью СоздатьОбъект. Если да, то подскажите как это будет выглядеть) :(

Добавлено: И если можно, то вопрос по теории:
когда(в каких функциях или случаях) надо использовать реквизиты справочника или документа, а когда нужно использовать ссылку на справочник (ну созданную методом СоздатьОбъект)?
Я так понимаю, что когда надо изменить данные, то надо использовать ссылку, а когда надо просмтореть данные, найти данные, то используют реквизиты, т.е. реквизиты только для просмотра данных?

PS: В предыдущем вопросе конфигурация 7.7
 

vbs

Well-known member
18.02.2007
1 708
1
#9
СпрОб.ИспользоватьРодителя(СпрОб.ТекущийЭлемент());
//cоздаем новый элемент для проверки того, что запишется в группу Факультет
СпрОб.Новый();
СпрОб.Наименование = ФормированиеНаименования(ФизЛицо);
СпрОб.Записать();
это бессмысленно
надо :
Родитель = СпрОб.ТекущийЭлемент(); // пусть не смущает зарезервированное в языке слово - Родитель можно заменить ЛЮБЫМ идентификатором
// к примеру НайденнаяГруппа = СпрОб.ТекущийЭлемент();
СпрОб.Новый();
СпрОб.Родитель= НайденнаяГруппа;
СпрОб.Наименование = ФормированиеНаименования(ФизЛицо);
СпрОб.Записать();
Вот тогда и запишется в нужную группу
И если рассмотреть добавление еще одной группы в данную группу, то надо ли создавать новую переменную с помощью СоздатьОбъект. Если да, то подскажите как это будет выглядеть)
СпрОб.НоваяГруппа();
СпрОб.Родитель= НайденнаяГруппа;
СпрОб.Записать();

Еще раз напоминаю :
ИспользоватьРодителя - для поиска или выборки внутри нужной группы,
а при создании элемента (или при его программном переносе в другую группу)
Спр.Родитель = НайденнаяГруппа
 

lira89

Well-known member
12.03.2010
154
0
#10
Код:
 СпрОб = СоздатьОбъект("Справочник.Обучение");
СпрФакультет = СоздатьОбъект("Справочник.Обучение");
СпрУчГр = СоздатьОбъект("Справочник.Обучение");
СпрОб.ВыбратьЭлементы(); 
Флаг=0;
Пока СпрОб.ПолучитьЭлемент()=1 Цикл
Если (СпрОб.ТекущийЭлемент().ЭтоГруппа()=1) и (СпрОб.Наименование=СокрЛП(Факультет)) и (СпрОб.ТекущийЭлемент().ПометкаУдаления()=0) Тогда
Сообщить("Группа с факультетами существует");
Флаг=1;
//выбираем родителя
//СпрФакультет.Родитель(СокрЛП(Факультет));
//СпрОб.ИспользоватьРодителя(СпрОб.ТекущийЭлемент());
НайденнаяГруппа = СпрОб.ТекущийЭлемент(); 

СпрОб.Родитель= НайденнаяГруппа; 
СпрОб.ВыбратьЭлементы(); 
Флаг2=0;
//!!!!!!!!!!!!!!!!!!!!!!!!!!! В ЭТОЙ СТРОКЕ ПРОБЛЕМА
Пока СпрОб.ПолучитьЭлемент()=1 Цикл
Если (СпрОб.ТекущийЭлемент().ЭтоГруппа()=1) и (СпрОб.Наименование=СокрЛП(УчГруппа)) и (СпрОб.ТекущийЭлемент().ПометкаУдаления()=0) Тогда
Сообщить("Группа с Группами существует");
Флаг2=1;
НайденнаяГруппа2 = СпрОб.ТекущийЭлемент();
//cоздаем новый элемент для проверки того, что запишется в группу Факультет
СпрОб.Новый(); 
СпрОб.Родитель= НайденнаяГруппа2; 
СпрОб.Наименование = ФормированиеНаименования(ФизЛицо); 
СпрОб.Записать();	
КонецЕсли;
КонецЦикла;
Если Флаг2=0 Тогда
Сообщить("добавление новой группы Факультетов");
СпрОб.НоваяГруппа();
СпрОб.Наименование = СокрЛП(УчГруппа);
СпрОб.Записать(); 
НайденнаяГруппа2 = СпрОб.ТекущийЭлемент(); 
//cоздаем новый элемент для проверки того, что запишется в группу Факультет
СпрОб.Новый();	
СпрОб.Родитель= НайденнаяГруппа2;
СпрОб.Наименование = ФормированиеНаименования(ФизЛицо); 
СпрОб.Записать(); 
КонецЕсли;


КонецЕсли; 
КонецЦикла;
Здесь при условии что группы уже созданы.
Вылазит ошибка:
Группа с факультетами существует(это сообщение говорит о том, что есть такая группа)
Группа с Группами существует(это сообщение говорит о том, что есть такая группа)
Пока СпрОб.ПолучитьЭлемент()=1 Цикл
{Документ.Зачисление.Модуль Документа(30)}: Не выбран элемент!

В ЧЕМ ПРОБЛЕМА И КАК ЕЕ УБРАТЬ?
 

vbs

Well-known member
18.02.2007
1 708
1
#11
СпрОб.Родитель= НайденнаяГруппа;
СпрОб.ВыбратьЭлементы();
Флаг2=0;
//!!!!!!!!!!!!!!!!!!!!!!!!!!! В ЭТОЙ СТРОКЕ ПРОБЛЕМА
Пока СпрОб.ПолучитьЭлемент()=1 Цикл
Опять не поняла
вот здесь надо

СпрОб.ИспользоватьРодителя(НайденнаяГруппа);
СпрОб.ВыбратьЭлементы();


Добавлено:
Если Флаг2=0 Тогда
Сообщить("добавление новой группы Факультетов");
СпрОб.НоваяГруппа();
СпрОб.Наименование = СокрЛП(УчГруппа);
СпрОб.Записать();
НайденнаяГруппа2 = СпрОб.ТекущийЭлемент();
//cоздаем новый элемент для проверки того, что запишется в группу Факультет
СпрОб.Новый();
СпрОб.Родитель= НайденнаяГруппа2;
СпрОб.Наименование = ФормированиеНаименования(ФизЛицо);
СпрОб.Записать();
И еще
Если Флаг2=0 Тогда
Сообщить("добавление новой группы Факультетов");
СпрОб.НоваяГруппа();
СпрОб.Родитель = НайденнаяГруппа;
СпрОб.Наименование = СокрЛП(УчГруппа);
СпрОб.Записать();
НайденнаяГруппа2 = СпрОб.ТекущийЭлемент();
//cоздаем новый элемент для проверки того, что запишется в группу Факультет
СпрОб.Новый();
СпрОб.Родитель= НайденнаяГруппа2;
СпрОб.Наименование = ФормированиеНаименования(ФизЛицо);
СпрОб.Записать();

Еще раз напоминаю :
ИспользоватьРодителя - для поиска или выборки внутри нужной группы,
а при создании элемента (или при его программном переносе в другую группу)
Спр.Родитель = НайденнаяГруппа
Это же справедливо и при создании новой группы