7.7 Фильтр в справочнике

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

  1. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Всем доброго времени суток! Проблема в следующем, есть справочник номенклутура, и при указании на форме контрагента = "***" в справочнике должны убираться некоторые позиции. Делал фильтр как показано на офф сайте 1с, чёт не фильтрует он эти позиции. думаю что-то не так в выводе списка параметров подбора. В чём косяк? выручайте.
    Код:
    Процедура Подбор()
    
    Если ((Контрагент.ЭтоГруппа()=1) Или (ПустоеЗначение(Контрагент)=1) ) Тогда   
    Предупреждение("Необходимо выбрать Котрагента!!",5);
    Возврат ;
    КонецЕсли; 
    
    Если ДокументГуд(1)=0 Тогда
    Таб.Удалитьстроки();
    Возврат;
    КонецЕсли; 
    
    
    СписокПараметровПодбора = СоздатьОбъект("СписокЗначений");
    СписокПараметровПодбора.Установить("МестоХранения", МестоХранения);
    СписокПараметровПодбора.Установить("ТипЦен", ТипЦен);		   
    
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
    Если НЕ (Спр.Код = "889039") ИЛИ  
    (Спр.Код = "888891") ИЛИ	
    (Спр.Код = "889032") ИЛИ	
    (Спр.Код = "888813") ИЛИ	
    (Спр.Код = "110210") ИЛИ	
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") Тогда
    СписокПараметровПодбора.ДобавитьЗначение(Спр.ТекущийЭлемент());   // список с отфильтрованными записями
    КонецЕсли; 
    КонецЦикла;
    
    Если ТипХозОперации = 3 Тогда // Реализация отгруженной продукции
    СписокПараметровПодбора.Установить("Владелец", Контрагент);
    СписокПараметровПодбора.Установить("СтатусПартииОтданные", Перечисление.СтатусыПартийОтданных.Отгруженные);
    Иначе
    СписокПараметровПодбора.Установить("Владелец", "<не выбран - собственные МПЗ>");
    КонецЕсли;
    
    ОткрытьПодбор("Справочник.Номенклатура", "ДляПодбора", СписокПараметровПодбора);
    //
    КонецПроцедуры // Подбор
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    А в списке хоть один элемент присутствует? Вы проверяли?
  3. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Код:
    СписокПараметровПодбора.ДобавитьЗначение(Спр.ТекущийЭлемент());
    если вы про эту строку, то не могу проверить в отладчике.
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    СписокПараметровПодбора.ВыбратьЗнчение(1)
  5. Vlan
    Offline

    Vlan Гость Гость

    Указанные коды должны быть исключены?
  6. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    чтобы проверить отсортированный список поступил следующим образом:
    Код:
    Процедура Подбор()
    
    Если ((Контрагент.ЭтоГруппа()=1) Или (ПустоеЗначение(Контрагент)=1) ) Тогда   
    Предупреждение("Необходимо выбрать Котрагента!!",5);
    Возврат ;
    КонецЕсли;
    Если ДокументГуд(1)=0 Тогда
    Таб.Удалитьстроки();
    Возврат;
    КонецЕсли;
    СписокПараметровПодбора = СоздатьОбъект("СписокЗначений");
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1   Цикл
    Если НЕ (Спр.Код = "889039") ИЛИ  
    (Спр.Код = "888891") ИЛИ	
    (Спр.Код = "889032") ИЛИ	
    (Спр.Код = "888813") ИЛИ	
    (Спр.Код = "110210") ИЛИ	
    (Спр.Код = "1269")  ИЛИ
    (Спр.Код = "1269")  ИЛИ
    (Спр.Код = "1269")  ИЛИ
    (Спр.Код = "1269")  ИЛИ
    (Спр.Код = "1269")  ИЛИ
    (Спр.Код = "1269")  Тогда
    СписокПараметровПодбора.ДобавитьЗначение(Спр.ТекущийЭлемент());   // список с отфильтрованными записями
    КонецЕсли; 
    КонецЦикла;
    ИспользоватьСписокЭлементов(СписокПараметровПодбора); // - ругается на эту строку
    КонецПроцедуры;

    ИспользоватьСписокЭлементов<<?>>(СписокПараметровПодбора); Процедура не обнаружена (ИспользоватьСписокЭлементов).

    в чём косяк?
  7. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Цитата СП: Метод доступен только в контексте Модуля формы списка справочника и относится ко всему текущему справочнику.
  8. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    так что получается, только в модуле справочника такой фильтр можно применить?!!! тогда в модуле делать этот фильтр с условием, а потом в Процедура Подбор() вставлять Процедуру ПриОткрытии?
  9. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    значения фильтра можно передавать в качестве параметра формы
  10. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    Код в модуле формы "ДляПодбора":
    Код:
    Процедура Поиск()
    ОткрытьФорму("Обработка.Подбор",Контекст); 
    КонецПроцедуры
    В обработке:
    Код:
    Процедура Подбор()
    Если ((Контрагент.ЭтоГруппа()=1) Или (ПустоеЗначение(Контрагент)=1) ) Тогда   
    Предупреждение("Необходимо выбрать Котрагента!!",5);
    Возврат ;
    КонецЕсли;
    Если ДокументГуд(1)=0 Тогда
    Таб.Удалитьстроки();
    Возврат;
    КонецЕсли;
    Если Строка(Контрагент) = "Регата ООО" Тогда
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент() = 1  Цикл
    Если НЕ (Спр.Код = "889039") ИЛИ  
    (Спр.Код = "888891") ИЛИ	
    (Спр.Код = "889032") ИЛИ	
    (Спр.Код = "888813") ИЛИ	
    (Спр.Код = "110210") ИЛИ	
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") ИЛИ
    (Спр.Код = "1269") Тогда
    СписокПараметровПодбора.ДобавитьЗначение(Спр.ТекущийЭлемент());   // список с отфильтрованными записями
    КонецЕсли; 
    КонецЦикла;
    Форма.Параметр.ИспользоватьСписокЭлементов(СписокПараметровПодбора);
    Форма.Параметр.Форма.Обновить();
    КонецЕсли;
    КонецПроцедуры


    не пашет(
  11. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    попробуйте модально
  12. TopicStarter Overlay
    ProfforG
    Offline

    ProfforG Опытный в 1С

    Регистрация:
    31 окт 2011
    Сообщения:
    139
    Симпатии:
    1
    Баллы:
    29
    стесняюсь спросить, это как?

    Код:
    Форма.ОткрытьМодально();
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Код:
    Процедура Поиск()
    ОткрытьФормуМодально("Обработка.Подбор",Контекст);
    КонецПроцедуры

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