7.7 УстановитьОтбор для справочника

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем bsa, 25 ноя 2010.

  1. TopicStarter Overlay
    bsa
    Offline

    bsa

    Регистрация:
    25 ноя 2010
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Доброго времени суток.

    Дано:

    Справочник1 (Код, Наименование, Тип(отбор по реквизиту=true))

    Справочник2(Код, Наименование,
    Тип1 (Справочник.Справочник1 (Тип=1)),
    Тип2 (Справочник.Справочник1 (Тип=2)) )


    Мне нужно чтоб из Справочник2, щелкая по реквизитам Тип1 или Тип2, вызывался Справочник1 соответствующе профильтрованным.

    Что делаю:

    Код:
    //В глобальном модуле:
    var Тип_объекта Экспорт;
    Тип_объекта = 0;
    
    //Справочник1 в ФормаСписка
    
    Procedure ПриОткрытии()
    if Тип_объекта = 0 then
    УстановитьОтбор("",); 		         // сбрасываем фильтр
    else 
    УстановитьОтбор("Тип",Тип_объекта); // устанавливаем фильтр
    endif; 
    EndProcedure
    
    
    Меняю в глобальном модуле значение Тип_объекта на 1, запускаю Справочник1 в заголовке [отбор 1], но справочник пустой.

    Код:
    // Добавил кнопочку в ФормаСписка Справочник1
    Procedure пр_ПолучитьОтбор()
    var Тип,Знч;
    БылОтбор = ПолучитьОтбор(Тип,Знч);
    if БылОтбор=1 then
    Message("Тип: "+Тип+"; Значение: "+Знч+";");
    else
    Message("Отбор не установлен");
    endif             	
    EndProcedure
    
    
    Выводит:
    Тип: Тип; Значение: 1;

    Делаю отбор стандартными средствами из формы, отбор получается, при нажатии на вышеописанную кнопочку выдает тоже самое
    Тип: Тип; Значение: 1;


    Что я делаю не так?

    Да и как Тип_объекта менять в Справочник2, как я понял процедура в «формула» выполняется после возращения из справочника?

    Спасибо
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    БылОтбор = ПолучитьОтбор("Тип",Знч);
    
    
    + в спр2 вы не получите просто так тип1 и тип2 - вы получите элемент справочника 2. Нужно еще определить в какой колонке вы находитесь, а потом уже получать значение реквизита для отбора в спр1
  3. TopicStarter Overlay
    bsa
    Offline

    bsa

    Регистрация:
    25 ноя 2010
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    данную процедуру

    Код:
    Procedure пр_ПолучитьОтбор()	
    var Тип,Знч;	
    БылОтбор = ПолучитьОтбор(Тип,Знч);	
    if БылОтбор=1 <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/then')">then		</span>
    Message("Тип: "+Тип+"; Значение: "+Знч+";");
    else
    Message("Отбор не установлен");
    endif             
    EndProcedure
    
    
    я написал просто для проверки, чтоб определить параметры выборки. Выборка вроде правильная (Тип: Тип; Значение: 1.), хотя записи не отображаются. Если выборку сделать непосредсвенно из формы справочника "Отбор по значению", то она получается, и нажатие накнопочку выдает тоже самое:

    Тип: Тип; Значение: 1.


    Может я вообще не в том направлении пошел, мне нужно чтоб при попытке выбора реквизита Тип1 или Тип2 из Справочник2 открывался Справочник1 соответсвенно профильтрованный, как это лучше реализовать?
  4. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Отображение спр1 должно происходить в форме списка самого спр2 или отдельном окне?
  5. TopicStarter Overlay
    bsa
    Offline

    bsa

    Регистрация:
    25 ноя 2010
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Желательно в отдельном.
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Используйте в спр2 процедуру ПриНачалеВыбораЗначения.

    В ней по ИД определяем тип1 или тип2 (что выбрали) затем:
    Код:
    Спр=СоздатьОбъект("Справлчник.Спр1");
    Спр.УстановитьОтбор("Тип",Зн);
    Спр.Выбрать("Выберите реквизит","ФормаСписка");
    
    
    
    И еще... Чтобы это сработало - редактирование д.б. в диалоге (или аналогично для формы диалога элемента)
  7. TopicStarter Overlay
    bsa
    Offline

    bsa

    Регистрация:
    25 ноя 2010
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Код:
    Procedure ПриНачалевыбораЗначения(Элемент, Флаг)
    
    Если ( (Элемент="Тип1") или (Элемент="Тип2)) Тогда 
    Тип_объекта = Элемент;        
    </span>
    Спр=СоздатьОбъект("Справочник.Справочник1");
    
    Спр.УстановитьОтбор("Тип",Тип_объекта); 
    // Спр.УстановитьОтбор("Тип",Тип_объекта);
    //{Документ.Справочник2.Форма.Модуль(36)}: Поле агрегатного объекта не обнаружено (УстановитьОтбор)
    
    Спр.Выбрать("Выберите реквизит","ФормаСписка");
    КонецЕсли               
    EndProcedure
    
    
    </FONT></FONT></pre>
    Если в этой процедуре УстановитьОтбор убрать то спавочник вызывается(естественно не отфильтрованный), но так как я вызов справочника делаю из объекта "Реквизиты", после справочник вызывается еще раз.
    .....


    Я вот что не пойму, почему при открытии справочника в заголовке написано что есть отбор и тот который нужен, а записи не отображаются?
  8. TopicStarter Overlay
    bsa
    Offline

    bsa

    Регистрация:
    25 ноя 2010
    Сообщения:
    12
    Симпатии:
    0
    Баллы:
    1
    Вот смоделировал описанную ранее ситуацию.
    Запускаем справочник «Справочник2» фильтр по «Тип2»(строковое поле «Справочник2») работает, а по «Тип»(поле ссылка на «Справочник1» - отбор пустой.
    Почему не работает отбор по полю Справочник.Справочник1?

    Вложения:

    • Test.zip
      Размер файла:
      25,9 КБ
      Просмотров:
      30

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