×
×
+ Ответить в теме
Показано с 1 по 13 из 13
  1. #1
    Клерк
    Регистрация
    29.06.2006
    Сообщений
    211

    Двойное подчинение справочника в 77 как?

    Подскажите, где почитать, желательно с примерами кода?
    Задача:
    Есть подчиненный справочник, надо создать справочник подчиненный ему. При этом, часть реквизитов тащить из справочника "первого уровня" часть из "второго уровня".
    Примерно так:
    контрагенты
    |_договоры
    |_виды взаимодействия по договорам

    Причем, сидя в "нижнем" справочнике надо свободно получать данные из обоих уровней.

    То ли я торможу, то ли что то не понимаю, но чего-то не получается.
    Начиная с того, что я не могу нормально задать подчинение справочника.
    Поделиться с друзьями

  2. #2
    Клерк
    Регистрация
    01.06.2005
    Адрес
    Новочеркасск
    Сообщений
    8,185
    Элемент3уровня.Владелец.Владелец.НужныйРеквизит

  3. #3
    Клерк
    Регистрация
    29.06.2006
    Сообщений
    211
    Все равно не получается.
    Три справочника Справочник.Владелец1.Владелец0

    Пытаюсь инициализировать владельца справочника в процедуре "при открытии"
    Если ИспользоватьВладельца().Выбран()=0 Тогда
    ИспользоватьВладельца(Владелец1.Владелец0);
    КонецЕсли;
    Естественно не работает, как правильно это делают?

  4. #4
    Клерк
    Регистрация
    23.02.2008
    Сообщений
    96
    Можно по порядку? Из какой формы будет производиться ввод? Интерактивный ли он вообще будет? Вот отрывок модуля из справочника "Контрагенты":
    Процедура ОткрытьДоговоры()
    ......

    КонтекстФормы = "";
    ОткрытьФорму("Справочник.Договоры", КонтекстФормы);
    КонтекстФормы.ИспользоватьВладельца(ТекущийЭлемент());
    КонецПроцедуры // ОткрытьДоговоры
    Не годится сделать на подобии?

    ИспользоватьВладельца в вашем случае мне кажется должно работать. Что вы передаете туда в качестве параметра? И не стоит ли это записать в процедуру "ВводНового", чтобы справочник не переподчинялся каждый раз? Но вместо конструкции ИспользоватьВладельца().Выбран() написать ПустоеЗНАчение(Владелец).
    Последний раз редактировалось unknown181538; 25.12.2008 в 01:31.

  5. #5
    Клерк Аватар для Vladko
    Регистрация
    04.06.2007
    Адрес
    Ижевск
    Сообщений
    307
    "ИспользоватьВладельца(Владелец1.Владелец0);"
    откуда появились 1цы и 0ли?
    Создай в этом справочнике любой элемент, а затем в отладчике посмотри на владельцев этого записанного элемента 3го уровня.

  6. #6
    Клерк
    Регистрация
    29.06.2006
    Сообщений
    211
    Цитата Сообщение от Vladko Посмотреть сообщение
    "ИспользоватьВладельца(Владелец1.Владелец0);"
    откуда появились 1цы и 0ли?
    Создай в этом справочнике любой элемент, а затем в отладчике посмотри на владельцев этого записанного элемента 3го уровня.
    Наверное, я плохо могу объяснить в чем проблема.
    При каждой попытке создать новый элемент в справочнике третьего уровня в диалоге запрашивается значение из справочника первого уровня, потом только можно выбрать значение из справочника второго уровня.
    Я не могу принудительно назначить в справочнике третьего уровня, постоянного владельца справочника второго уровня.
    Как мне кажется, надо создать кнопку выбора, в которой раз и навсегда будет задано, к какому значению справочника первого уровня принадлежит справочник второго уровня, который является владельцем того, что мы сейчас редактируем. Сейчас же после открытия окна справочника в его заголовке написано "не задан элемент владелец". Его требуется задавать для каждой строки вручную выбирая в диалоге.

  7. #7
    хитрый и жадный фра Аватар для Пудель
    Регистрация
    09.09.2005
    Адрес
    Краснодар
    Сообщений
    639
    Почитайте ИспользоватьВладельца в синтакс-помощнике, внимательно, раза два-три.
    ИМХО, так будет работать:
    РеквизитНашегоСправочникаТретьегоУровня=ИспользоватьВладельца().Владелец.Владелец.РеквизитСправочникаПервогоУровня;

  8. #8
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    Gray_bird, в вашем случае подчинение третьего уровня от втроого по принципу организации ничем не отличается от подчинения справочника "Договоры" справочнику "Контрагенты". Я рекомендую посмотреть, как реализован этот механизм в программе и по аналогии сделать свое.

    Сразу хочу предупредить, что простое открытие формы списка подчиненного справочника выдаст вам именно "Не выбран справочник-владелец". Однако если вы открываете эту же форму из формы владельца - все нормально. Контекст владельца неявно наследуется открываемой формой. Можно и явно указать владельца, хоть через "Форма.Параметр", хоть передав значение процедуре ОткрытьФорму.

    Ну а когда все будет в порядке с наследованием, проблемы обращения к реквизитам вышестоящих владельцев отпадет.

  9. #9
    Клерк
    Регистрация
    29.06.2006
    Сообщений
    211
    Цитата Сообщение от Octopus Посмотреть сообщение
    Gray_bird, в вашем
    Сразу хочу предупредить, что простое открытие формы списка подчиненного справочника выдаст вам именно "Не выбран справочник-владелец". Однако если вы открываете эту же форму из формы владельца - все нормально. Контекст владельца неявно наследуется открываемой формой.
    Открытие справочника третьего уровня из справочника владельца хотелось бы избежать. Данные в нем используются для структурирования доступа к данным из справочника второго уровня специальной экранной формой.


    Цитата Сообщение от Octopus Посмотреть сообщение
    Gray_bird, Можно и явно указать владельца, хоть через "Форма.Параметр", хоть передав значение процедуре ОткрытьФорму.
    Я правильно понимаю, что через "Форма.Параметр" можно задать владельцев справочника обоих уровней раз и навсегда?

    Сделать одноуровневое подчинение, как это реализовано в "договоры.контрагенты" проблем нет. Оно в таком режиме работало, но потребовалось ввести третий уровень и случился затык.
    Последний раз редактировалось Gray_bird; 26.12.2008 в 21:01.

  10. #10
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    Gray_bird, что значит "задать владельцев справочника обоих уровней раз и навсегда"? Вообще на веки вечные что ли? Тогда зачем подчинение - реализуйте константами

    Цитата Сообщение от Gray_bird Посмотреть сообщение
    Открытие справочника третьего уровня из справочника владельца хотелось бы избежать
    Я правильно понял, что справочник третьего уровня будет использоваться напрямую, надо будет обеспечить работу с ним, как будто он и не подчинен никому? Если так, то рекомендую сделать простой справочник, без подчинения, создать в нем реквизит, ссылающийся на подчиненный второго уровня. У реквизита в обязательном порядке установить галочку "Сортировка", чтобы была возможность отбора по этому реквизиту. Будет гораздо меньше головных болей. Хотя задача нормально решается и в текущей постановке, вам бы поточнее ее сформулировать...

  11. #11
    Клерк
    Регистрация
    29.06.2006
    Сообщений
    211
    Рассказываю подробно.
    То что я сейчас ковыряю - торговая конфигурация ресторана.

    Значение справочника первого уровня задается константой привязанной к компьютеру на котором работает конфигурация. Это "ВидИспользуемого Меню".

    Справочник второго уровня "Меню", содержит текстовое поле "наименования блюд", данные из справочника "Номенклатура" и признак "вкл/выкл"(поле содержащее 1 или 0) .

    Справочник третьего уровня, который я пытаюсь городить это "СтруктураКомплексныхОбедов". В нем есть группы содержащие сгруппированные блюда, "СУПЫ" - все супы, которые можно вводить сегодня, "Салаты" - все салаты, которые можно вводить сегодня и т.п.

    Пока справочник был подчинен справочнику "номенклатура" - все работало, но за одним исключением - я не смог реализовать выдергивание реквизита "ВклВыкл" из справочника "Меню", по которому экранная форма решает отображать данный элемент или нет.

    Я решил переподчинить справочник "СтруктураКомплексныхОбедов" справочнику "Меню", названия в нем те же что и в "номенклатуре", и самое главное однозначно сопоставлен названию флаг "ВклВыкл". Увы, я увяз в том, что не получается задать в подчиненном справочнике третьего уровня, что
    владелец обоих уровней задан.
    владелец первого уровня - константа
    владелец второго уровня - строка с которой работаю.


    Важный момент, в справочнике "Меню" под тысячу записей, а система должна работать практически мгновенно. Поэтому "У реквизита в обязательном порядке установить галочку "Сортировка", чтобы была возможность отбора по этому реквизиту." не получится реализовать. Перебор будет занимать заметное время, пару секунд так точно.
    Последний раз редактировалось Gray_bird; 26.12.2008 в 21:53.

  12. #12
    Клерк
    Регистрация
    29.06.2006
    Сообщений
    211
    В догонку, чтоб было понятно окончательно.
    В справочнике "меню" есть строчка "комплексный обед большой", в подчиненном справочнике, этой строчке сопоставлена структура папок салат-суп-горячее в которых лежит состав этого обеда. При выборе строки, обработка по очереди открывает папки с их содержимым, отфильтровывая "выключенные" позиции. Поэтому подчинение справочников необходимо сделать. Чтоб у каждой выбранной строки была своя структура папок и строчек.

  13. #13
    Клерк-клерик Аватар для Octopus
    Регистрация
    04.12.2008
    Адрес
    Пермь
    Сообщений
    2,187
    Тогда еще вопрос: когда мы начинаем работу со справочником "СтруктураКомплексныхОбедов", где хранится текущее значение справочника "Меню"? Это переменная, константа?

    У себя сделал с нуля конфу, создал три справочника с цепочным подчинением... Значение второго уровня загнал в константу, а в форме списка справочника 3-го уровня вписал следующее:

    Процедура ПриОткрытии()
    ИспользоватьВладельца(Константа.Уровень2);
    КонецПроцедуры // ПриОткрытии()

    Как часы работает... Где у вас-то ломается, не пойму ?

+ Ответить в теме

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы можете создавать новые темы
  • Вы можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •