Создание Групп В Справочнике

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

Статус темы:
Закрыта.
  1. Гость

    нужно создать группу и элементы в справочнике, владельцем которого явл. другой справочник
     
  2. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну так создай, проблема то в чем? Есть встроенный реквизит Владелец для подчиненных справочников. Заполнен - владелец есть, не заполнен - нетути.
     
  3. Гость

    ну вот смотри
    есть справочник ДисциплиныУчебногоПлана и его владелец УчебныеПланыСпециальностей
    получается я должен создать группу и элемент, чтобы это всё отобразилось во 2-м

    б = Справочники.ДисциплиныУчебногоПлана.СоздатьЭлемент();
    б.Владелец = Справочники.УчебныеПланыСпециальностей;
    б.Дисциплина = "111";
    б.Записать();
    (это мои предположения)
    помоги пожалуйста :blush:
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    тут должен быть не просто справочник, а ссылка на элемент справочника.

    б.Владелец = Справочники.УчебныеПланыСпециальностей.НайтиПоКоду("0001");
     
  5. Гость


    Спасибо, мысль понял, буду пытаться
     
  6. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    А не проще в конструкторе заполнить вкладку "Владельцы"? И указать, что владелец одного справочника - элементы другого.
     
  7. Гость


    Владельцем должен быть ссылка на элемент справочника и найти ее надо по коду...это понятно
    А как это сделать, если создается новый элемент, код которого мы еще не знаем

    В моем случае появляется форма Нового элемента, создается Код и мне тут уже нужно автоматом добавить группы
    Как мне обратиться к этому "новому" коду?
     
  8. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    С каждой темой вопросы все интереснее и интереснее... А ЖКК не читает уже ни кто...Я рад что есть такие люди, благодаря им у меня всегда есть работа :))))

    А теперь по теме:
    1. Создали элемент владелец.
    2. В модуле объекта объявили переменную "ЭтоНовый". Если элемент новый присвоили ей истину.
    3. При записи написали следующий код:
    Процедура ПриЗаписи(Отказ)
    Если ЭтоНовыйОбъект Тогда
    //Создали структуру подчиненых элементов
    КонецЕсли;
    КонецПроцедуры
     
  9. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    "2. В модуле объекта объявили переменную "ЭтоНовый". Если элемент новый присвоили ей истину."

    в обработчике "ПередЗаписью()" доступна функция "ЭтоНовый()" - опять же, если это 8.х
     
  10. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Перед записью на сколько я помню еще нет ссылки, а значит и в качестве владельца указать ссылку на этот элемент проблематично. Поэтому в переменной определяем новый ли это объект а при записи когда ссылка уже есть делаем обработку.
     
  11. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    Вот именно, функция "ЭтоНовый()" и возвращает Истина или ложь. я с обработчиком ошибся, "ПриОткрытии()" или "ПередОткрытием()" целесообразней использовать.

    Код ( (Unknown Language)):
    ЭтоНовый (IsNew)
    Синтаксис:
    ЭтоНовый()
    Возвращаемое значение:
    Тип: Булево. Истина - изменяется еще ни разу не записанный элемент; Ложь - элемент уже записан.
    Описание:
    Определяет, записан ли элемент в базу данных.
    Пример:
    Если Объект.ЭтоНовый() Тогда
    Объект.Наименование = "Новый элемент";
    КонецЕсли;
     
  12. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Ну так я и не спорю. И функцию эту я знаю. Перед записью определили новый это элемент или нет, присвоили значение переменной ЭТоНовый. При записи посмотрели новый это элемент или нет с помощью переменной ЭтоНовый и выполнили действие. Почему используем переменную ЭтоНовый вместо функции- потомочто при записи , когда для нового объекта появится ссылка, функция это новый будет выдавать ложь так как объект по факту уже не новый - он записан в базу и для него есть ссылка. Или я не прав?
     
  13. Darlock

    Darlock Well-Known Member
    1C Team

    Регистрация:
    4 янв 2008
    Сообщения:
    558
    Симпатии:
    0
    В целом, прав. Возникает пара вопросов:
    1 - как себя поведет платформа при появлении переменной по имени совпадающей с функцией?
    2 - почему не использовать метод "ПолучитьСсылкуНового()"?

    Отсюда следующий вариант развития -
    1) имеем ссылку на не записаный объект.
    2) в транзакции начинаем создавать все группы в дочернем справочнике и в случае косяка транзакцию отменяем (группы удаляются) и элемент не записан.
     
  14. Гость

    Да сложняк понять что вы тут понаписали... работаю в 1С давно а такого ещё не видел... в чём суть парни?
     
  15. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    1. Ни как не повлияет, да и имя переменной может быть любое.
    2. Вопрос, где получаем ссылку нового?В какой момент времени? Если до того как объект будет записан то как раз и будем "иметь ссылку на не записанный объект". Если после того как объект записан(например в теле процедуры ПриЗаписи()) то для нового объекта он выдаст ссылку, а для перезаписываемого объекта - ошибку. Конечно ошибку можно в попытку вставить но... не нравятся мне эти попытки и исключения.
    3. По поводу создания в транзакции и прочего, так транзакцию всегда можно откатить, да и вообще это не касается данного вопроса.

    Я предложил самый простой (на мой взгляд) вариант, который не является на 100% самым оптимальным и правильным, но я бы что бы не забивать себе голову сделал бы так. :)
     
  16. Гость

    Вот именно, что мне это нужно сделать в тот момент, когда объект еще не будет записан и ссылки на него еще нет
    Вой мой код, помогите конкретно с ним

    б = Справочники.ДисциплиныУчебногоПлана.СоздатьГруппу();
    р=Справочники.ДисциплиныУчебногоПлана.НайтиПоНаименованию("Дисциплины учебного плана"); // это корневая группа
    б.Наименование = "111";
    б.Владелец=Справочники.УчебныеПланыСпециальностей.НайтиПоКоду(); // ЧТО здесь писать???
    б.Родитель=р;
    б.Записать();


    Если элемент Справочника "УчебныеПланыСпециальностей" уже записан и я знаю его код, тогда я просто пишу

    б.Владелец=Справочники.УчебныеПланыСпециальностей.НайтиПоКоду("000001");


    а если я его еще не записал и хочу, чтобы у меня все группы сразы отобразились в появившейся форме элемента...что тогда?
     
  17. Allexei

    Allexei Well-Known Member

    Регистрация:
    2 май 2008
    Сообщения:
    322
    Симпатии:
    0
    Отлично, тогда вопрос. Форму открыли, создали группы, а потом форму закрыли без записи? что с группами?Остались? И вообще ежели не секрет а зачем все это? Почему нельзя создавать группы когда пользователь запишет элемент владелец.
     
  18. Гость

    да потому что мне все группы нужно программно добавить, а не ручками в уже открытой форме

    у меня есть кнопочка, нажимая на которую открывается форма нового элемента, там программно заполняются все поля и соответственно должны добавляться группы (тоже программно)...Вот в чем дело
     
  19. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    А может тогда лучше тебе создавать группу в процедуре ПередЗаписью для элемента? В тот момент у тебя всё заполнено, запускается запись, родитель у вновь созданного элемента имеется. Насчет создания этих папок до записи - не рекомендую, загадишь справочник пустыми папочками.
    Насчет кода
    Так как справочник подчиненный, то и корневой группы должен быть владелец, сколько владельцев есть, столько и таких папок(кстати, работать не будет, так как поиск в подчиненных требует указание владельца). так какую найти надо?
    а что писать? у тебя на открытой форме элемента справочника УчебныеПланыСпециальностей уже есть такая штука как ЭтотОбъект или ЭтаФорма. Посмотри отладчиком чему равен владелец этой штуки и радуйся.
    ну тут вопросов нет
     
  20. Дайнеко

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    А что, дело так и не сдвинулось?

    Я вот не лезу в обсуждение, потому как туповат на понимание вопросов. Особенно в такой лаконичной форме.
    Ну, то что создать программно, понял из обсуждения. А что программе известно про владельца?
    А какова внешняя картина, какое действие пользователя обрабатывается? Не хотите толком, с картинками, объяснить?
     
Загрузка...
Статус темы:
Закрыта.

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