7.7 Проблема при отборе в справочнике

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

  1. TopicStarter Overlay
    SER
    Offline

    SER

    Регистрация:
    24 июн 2009
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Есть справочник "номенклатура" хочу сделать отбор по значению реквизита (Реквизит общий для элемента и группы), Значение передается при смене закладки справочника ---есть два варианта:

    Общий код:
    Код:
    Процедура приОткрытии()
    Форма.ИспользоватьЗакладки(1);
    Форма.Закладки.ДобавитьЗначение("Все",);
    Спр= СоздатьОбъект("Справочник.Поставщики");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если Спр.ПометкаУдаления() = 1 Тогда
    Продолжить;
    КонецЕсли;
    Форма.Закладки.ДобавитьЗначение(Спр.ТекущийЭлемент(),);
    КонецЦикла;
    
    Форма.Закладки.ДобавитьЗначение("Без поставщика",);
    
    УстОтбор("Все");
    КонецПроцедуры
    
    Процедура ПриВыбореЗакладки(Ном,Зн);
    УстОтбор(Зн);
    КонецПроцедуры 
    
    Вариант №1:
    Код:
    Функция УстОтбор(ЗнОтб)
    Если ЗнОтб="Все" Тогда
    УстановитьОтбор("",);
    ИначеЕсли ЗнОтб="Без поставщика" Тогда
    УстановитьОтбор("",);
    УстановитьОтбор("Поставщик",ПолучитьПустоеЗначение("Справочник.Поставщики"));
    Иначе
    УстановитьОтбор("",);
    УстановитьОтбор("Поставщик",ЗнОтб);
    КонецЕсли;
    КонецФункции 
    
    Вариант №2:
    Код:
    Функция УстОтбор(ЗнОтб)
    Список = СоздатьОбъект("СписокЗначений");
    Список.УдалитьВсе();
    Если ЗнОтб="Все" Тогда
    ИспользоватьСписокЭлементов();
    ИначеЕсли ЗнОтб="Без поставщика" Тогда
    Иначе
    
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
    </span>
    |поставщик = Справочник.Номенклатура.поставщик;
    |Группировка ТекущийЭлемент все ВошедшиеВЗапрос;
    |Условие (Поставщик = ЗнОтб);
    
    |"//}}ЗАПРОС;
    // Если ошибка в запросе, то выход из процедуры
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/если')">Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Предупреждение("Не выполнен запрос по справочнику!!! Даные неправильные!!! Сообщите программисту!!!");
    КонецЕсли;
    Тз = СоздатьОбъект("ТаблицаЗначений");
    Запрос.Выгрузить(Тз,0,0);
    Список.УдалитьВсе();
    Если Тз.КоличествоСтрок() > 0 Тогда
    
    Тз.Выгрузить(Список,,,1);
    ИспользоватьСписокЭлементов(Список);
    Иначе
    Список.УдалитьВсе();
    Список.ДобавитьЗначение(ПолучитьПустоеЗначение("Справочник.Номенклатура"),ПолучитьПустоеЗначение("Справочник.Номенклатура"));
    ИспользоватьСписокЭлементов(Список);
    
    КонецЕсли;
    КонецЕсли;
    КонецФункции 
    
    Собственно и проблема:
    Первый вариант не устраевает потому что по реквизиту не отбирает группы(Элементы отбирает а групы остаються)

    А второй мне показывает вот такое Картинка

    Я немогу понять что это за элементы лишние с красными знаками вопроса.

    Как мне отсортировать элементы с группами? Что я делаю не так?
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Попробуй использовать
    Если ЗнОтб="Все" Тогда
    ИспользоватьСписокЭлементов(Список);
    .....

    и ВошедшиеВЗапрос исключи из запроса

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