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

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 23 мар 2010.

  1. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Подскажите пожалуйста. Вот такая ситуация: надо в справочнике найти группу1 по определеному реквизиту документа, потом перейти в каталог этой группы1 и искать следующую группу2 по другому реквизиту документа, потом зайти в каталог группы2 и искать сам элемент. Так вот в чем вопрос: как осуществить переход в каталог сначала одной группы, а потом во внутренний ее каталог другой группы? Ну то есть как вообще открывать и переходить в каталог группы и внутри ее уже осуществлять поиск???
    Подскажите пожалуйста, очень нужно)
     
  2. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    а платформу указать не надо ?
    И поточнее сформулировать - группа2 находится внутри группы1 или нет ?
    Может, простой пример привести ?
     
  3. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    платформа 7.7
    Группа 2 внутри группы 1
     
  4. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    ИспользоватьРодителя посмотри
     
  5. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    можешь пример привести, такой, чтобы они создавались друг в друге?
    Я пробовала ИспользоватьРодителя, ноу меня ничего не получилось, возможно я что-то не так делала или не там писала.
     
  6. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    спр=создатьобъект("Справочник.ТвойСправочник");

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    ИспользоватьРодителя - для поиска внутри нужной группы,
    а при создании элемента
    Спр.Новый();
    Спр.Родитель = НайденнаяГруппа
     
  8. lira89

    lira89 Well-Known Member

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

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    это бессмысленно
    надо :
    Родитель = СпрОб.ТекущийЭлемент(); // пусть не смущает зарезервированное в языке слово - Родитель можно заменить ЛЮБЫМ идентификатором
    // к примеру НайденнаяГруппа = СпрОб.ТекущийЭлемент();
    СпрОб.Новый();
    СпрОб.Родитель= НайденнаяГруппа;
    СпрОб.Наименование = ФормированиеНаименования(ФизЛицо);
    СпрОб.Записать();
    Вот тогда и запишется в нужную группу
    СпрОб.НоваяГруппа();
    СпрОб.Родитель= НайденнаяГруппа;
    СпрОб.Записать();

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

    lira89 Well-Known Member

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

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


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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Опять не поняла
    вот здесь надо

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


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

    Это же справедливо и при создании новой группы
     
Загрузка...

Поделиться этой страницей