7.7 Метод "ИспользоватьСписокЭлементов" и группировка

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

  1. TopicStarter Overlay
    yXaPb
    Offline

    yXaPb Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    77
    Симпатии:
    0
    Баллы:
    26
    Может кто сталкивался вот с такой задачей:
    в форме списка справочника Номенклатуры (для подбора) необходимо сделать фильтр/отбор по основному свойству так, чтобы была группировка.
    Неплохо работает при использовании метода УстановитьОтбор(), но если отключена иерархия. С включенной иерархией отображаются все группы номенклатуры, а требуется отображение только тех групп, в состав которых входят отобранные элементы.
    Попробовал метод ИспользоватьСписокЭлементов(): делаю запрос, отбираю по условию, формирую список, список передаю в метод ИспользоватьСписокЭлементов(). Тоже неплохое решение, даже происходит группировка, но появляются пустые элементы со знаками вопроса. Это как-то связано с несоответствием текущим значениям родителя...
    Интересно, возможно ли штатными средствами делать фильтрацию и группировку элементов в форме списка с включенной иерархией ?
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Штатно не получится. Пробовал. Вроде и работает, но в какой-то момент все равно могут появиться "???". Плюнул - сделал через FormEx - все пашет на ура
  3. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    Все очень даже получается. Регулярно этим пользуюсь.
    Просто нужно в списке передавать ТОЛЬКО те значения, которые реально могут быть выведены (пользуйся методом "Уровень()")
  4. TopicStarter Overlay
    yXaPb
    Offline

    yXaPb Опытный в 1С

    Регистрация:
    11 дек 2006
    Сообщения:
    77
    Симпатии:
    0
    Баллы:
    26
    Т.е. для первого вывода ограничить все первым уровнем, а потом список формировать в процедуре ПриВыбореРодителя в соответствии с уровнем ?
  5. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Да. Смотреть текущий уровень и выводить в список только соответствующие ему
  6. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    почему бы и не прописать родителя в условии запроса.. что-то вроде:
    Код:
    Если ТекущийЭлемент().ЭтоГруппа() = 1 Тогда
    pПеревозчики = ТекущийЭлемент();
    Иначе
    pПеревозчики = ТекущийЭлемент().Родитель;
    КонецЕсли;
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Без итогов;
    |Контр = Справочник.Контрагенты.ТекущийЭлемент; 
    |ОсновнойДоговор = Справочник.Контрагенты.ОсновнойДоговор;
    |Группировка Контр упорядочить по Контр.Код без групп все ВошедшиеВЗапрос;
    |Условие(Контр в pПеревозчики);
    |Условие(ПустоеЗначение(ОсновнойДоговор) = 0);
    |"//}}ЗАПРОС
    ;
    
    
    
  7. buktoru
    Offline

    buktoru

    Регистрация:
    12 май 2010
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    подскажите пожалуйста, как именно сделать, так, чтобы в справочнике отображалась только уровни или родители это я сделала:
    список = СоздатьОбъект("СписокЗначений");
    спр = создатьОбъект("Справочник.Контрагенты");
    спр.ВыбратьЭлементы(1);

    Пока спр.ПолучитьЭлемент(0) =1 Цикл

    список.ДобавитьЗначение(спр.ТекущийЭлемент());

    КонецЦикла;

    ИспользоватьСписокЭлементов(список);

    теперь не знаю как от вопросов избавится, которые показываются при выборе верхнего уровня списка.

    спасибо

    а после ИспользоватьСписокЭлементов(список); Не могу создать в группе элемент или добавить запись в справочник. как это можно сделать?
  8. dianofob
    Offline

    dianofob (-_-)y-.o0O

    Регистрация:
    3 июл 2009
    Сообщения:
    711
    Симпатии:
    0
    Баллы:
    26
    ну, какбэ, решение то есть в этой теме)
    поповоду создания новых - и не получится, пока отбор не снимешь.. включение фильтра на флаг вешай на форме, по другому никак
  9. Ната
    Offline

    Ната

    Регистрация:
    13 май 2010
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте. Очень стыдно отвлекать занятых людей "нубскими" вопросами, но обратиться больше не к кому... Надо отфильтровать элементы на форме списка справочника по значению одного из реквизитов. Т.е. по нажатию кнопки показывать только те элементы, у которых реквизит Тираж > 1000.
    Я попробовала так :

    Процедура Отфильтровать()
    СпрА = СоздатьОбъект("Справочник.Альбомы");
    УстановитьОтбор("Тираж",>1000);
    КонецПроцедуры

    Выдаёт ошибку: УстановитьОтбор("Тираж",<<?>>>1000);
    {Справочник.Альбомы.ФормаСписка.ФормаСписка.Модуль(4)}: Ожидается выражение

    Подскажите, пожалуйста, как в таком случае правильно указывать условие отбора :unsure:
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Так не получится... По числовому значению отбор не работает Нужно так:
    Код:
    Процедура Отфильтровать() 
    Спис = СоздатьОбъект("СписокЗначений");
    СпрА = СоздатьОбъект("Справочник.Альбомы");
    СпрА.ВыбратьЭлементы();
    Пока Спр.ПолучитьЭлемент()=1 Цикл
    Если СпрА.ЭтоГруппа()=1 Тогда
    Продолжить;
    КонецЕсли;
    Если СпрА.Тираж>1000 Тогда
    Спис.ДобавитьЗначение(СпрА.ТекущийЭлемент());
    КонецЕсли;
    КонецЦикла;
    ИспользоватьСписокЭлементов(Спис);
    КонецПроцедуры
    
    
  11. Ната
    Offline

    Ната

    Регистрация:
    13 май 2010
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Огромное Вам СПАСИБО! Так всё работает)))
  12. Ната
    Offline

    Ната

    Регистрация:
    13 май 2010
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Извините, что опять отвлекаю. Помогите, пожалуйста, решить такие проблемы.
    1. В справочнике Альбомы реквизит Группа имеет тип Справочник.МузГруппы, но при добавлении/редактировании элемента спр-ка Альбомы, при выборе группы открывается форма списка справочника МузГруппы, но не отображаются данные. Т.е. видно сколько записей в справочнике, но не видно значения реквизитов. Скажите, пожалуйста, как это исправить?
    2. Надо создать запрос, который выводит солиста конкретной группы. В спр. МузГруппы есть реквизит Солист. Я создала обработку, на форме разместила Реквизит диалога - фГруппа с типом Справочник.МузГруппы. (при выборе группы из справочника та же проблема - не видно какие данные выбирать, но если что-то выбрать наугад - в поде ввода на форме появляется Наименование). Мой запрос выглядит так:

    Код:
    Процедура НайтиСолиста() 
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = " 
    |НужныйСолист = Справочник.МузГруппы.ТекущийЭлемент;
    |НазвГрп = Справочник.МузГруппы.Наименование;
    |Группировка НужныйСолист упорядочить по НужныйСолист.Наименование; 
    |Условие (НазвГрп = фГруппа); 
    |"; 
    Запрос.Выполнить(ТекстЗапроса);
    Пока Запрос.Группировка("НазвГрп")=1 Цикл
    Сообщить(Запрос.НужныйСолист);
    КонецЦикла; 
    КонецПроцедуры
    
    Ошибка: Пока Запрос.Группировка("НазвГрп")=1 Цикл
    {Обработка.НайтиСолиста.Форма.Модуль(13)}: Неверное имя группы 'НазвГрп' в функции Группировка.
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Попробовать расширить окошко списка справочника)))) М.б. колонка просто там "прячется"
    Если не так гляньте в конфигураторе основное представление МузГруппы (код или наименование).
    Ну и как вариант - в конфигураторе посмотреть форму списка....

    2.)
    Код:
    Процедура НайтиСолиста() 
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = " 
    |НужныйСолист = Справочник.МузГруппы.Солист;
    |НазвГрп = Справочник.МузГруппы.Наименование;
    |Группировка НазвГрп; 
    |Условие (НужныйСолист В фГруппа); 
    |"; 
    Запрос.Выполнить(ТекстЗапроса);
    Пока Запрос.Группировка()=1 Цикл
    Сообщить(Запрос.НужныйСолист);
    КонецЦикла; 
    КонецПроцедуры
    
    
    
    
    
    фГруппа должна името тот же тип что и реквизит Солист (если это строка используй метод Найти)
  14. Ната
    Offline

    Ната

    Регистрация:
    13 май 2010
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое, что помогаете мне.
    1)Окошко широкое, данные не "прячутся" - это я уже пробовала)) Сначала основное представление было наименование, когда попробовала поствить код - результат не изменился((( Поэтому оставила, как было - наименование. В форме списка в конфикураторе есть все нужные колонки, да и сам справочник МузГруппы выглядит, как надо. Может быть есть и другие причины?
    2)Прочитала в Синтакс-Помошнике про метод Найти(). Попробовала воспользоваться. Если правильно поняла, мне надо передать в качестве ключа фГруппа, а режим - 0. Т.е. Найти(фГруппа,0)? А где же это написать? Мой последний вариант выглядит так:
    Процедура НайтиСолиста()
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |НужныйСолист = Справочник.МузГруппы.Солист;
    |НазвГрп = Справочник.МузГруппы.Наименование;
    |Группировка НазвГрп;
    |Условие (НужныйСолист В фГруппа);
    |";
    Запрос.Выполнить(ТекстЗапроса);
    Пока Запрос.Группировка()=1 Цикл
    Запрос.НужныйСолист.Найти(фГруппа,0);
    Сообщить(Запрос.НужныйСолист);
    КонецЦикла;
    КонецПроцедуры

    Так ничего не сообщается...
    И ещё не совсем понятно насчет соответствия типов. фГруппа имеет тип Справочник.МузГруппы, чтобы выбирать группу из справочника, а не вводит руками, а Солист - тип строка. Т.е. у них разные типы получается? или все-таки одинаковые - Наименование ведь типа строка... Не бросайте меня, пожалуйста...
  15. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) По поводу списка справочника - покажите скриншот
    2) Поскольку у вас исполнитель - строка условие должно выглядеть так:

    Условие (Найти(ВРег(НужныйСолист),СокрЛП(ВРег(фГруппа)))<>0)
  16. Ната
    Offline

    Ната

    Регистрация:
    13 май 2010
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    1. Скриншот прилагается. Точно так же происходит при выборе группы из обработки.
    Посмотреть вложение 4288
    2. Условие указала, как вы сказали, результатов по-прежнему нет... :unsure:

    Вложения:

  17. Ната2
    Offline

    Ната2

    Регистрация:
    13 май 2010
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Пришлось перерегистрироваться, забыла пароль... Буду ждать Вашей помощи...
  18. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    ты бы выложила сюда мд, разговор стал бы предметным
  19. Ната2
    Offline

    Ната2

    Регистрация:
    13 май 2010
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Что-то я совсем запуталась... ((((( Вот архив с МД... Проблема с двумя обработками (надо создать 2 запроса, первый - выводит солиста конкретной группы, второй - названия альбомов и групп, альбом которых вышел в последие 5 лет) Посмотреть вложение 4290

    Вложения:

    • 1Cv7.rar
      Размер файла:
      8,9 КБ
      Просмотров:
      29
  20. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Дааа.... Видно что весна. Студенты активизируются.... Уже 4й случай в моей практике за последню неделю.
    1) По поводу списка группы в альбоме - не стояло в свойствах для выбора
    2) Добавил вам интерфейс (меню и панель инструментов)
    3) В справочнике Альбомы фильтр после установки не снимается (нужно закрывать список) и жестко задано условие (>1000) задумайтесь над этим...
    4) Отчеты подправлены - смотрите что у вас было не так....

    Ни в коем случае не копируйте МДшник на место старого. Скопируйте в отдельную папку и разбирайтесь... Можете воспользоваться объединение конфигураций

    Вложения:

    • md.rar
      Размер файла:
      11,9 КБ
      Просмотров:
      37

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