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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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