Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Отбор списка справочника по табличной части элемента.          
valleha Подменю пользователя
сообщение 13.04.16, 19:58
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 16
Спасибо сказали: 0 раз
Рейтинг: 0

Платформа: 8.3
Приложение: управляемое
Конфигурация: самописная

Добрый день!
Помогите, пожалуйста, решить проблему.
Возникла проблема, при реализации отбора списка справочника по ТЧ элементов, используя несколько табличных полей на обычной форме списка.


Более-менее вышел на результат, используя следующий код:
Процедура ОтборСправочникСписок()

        //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
        // Данный фрагмент построен конструктором.
        // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ
        |    СистемыОкраски.Ссылка КАК Ссылка
        |ИЗ
        |    Справочник.СистемыОкраски КАК СистемыОкраски
        |ГДЕ
        |    СистемыОкраски.СферыПрименения.Сфера В(&Сфера)
        |    И СистемыОкраски.ХарактеристикаТовара.Характеристика В(&Характеристика)";
        
        Запрос.УстановитьПараметр("Сфера", СферыПримененияОтбор);                    //ТП на форме
        Запрос.УстановитьПараметр("Характеристика", ТоварХарактеристикаОтбор);     //ТП на форме
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        СписокДляОтбора=Новый СписокЗначений;
        //Сообщить(ВыборкаДетальныеЗаписи.Количество());
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            СписокДляОтбора.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
        КонецЦикла;
        
        //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА        
    
    
    СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
    СправочникСписок.Отбор.Ссылка.Значение = СписокДляОтбора;
    СправочникСписок.Отбор.Ссылка.Использование = Истина;

КонецПроцедуры




Но данный алгоритм:
-не удаляет из отбора элементы, в которых нет элемента списка из ТП ("Поры открытые" на скриншоте).
-при СферыПримененияОтбор.Количество()=0 и ТоварХарактеристикаОтбор.Количество()=0, удаляет из отбора все элементы и не отображает их в СправочникСписк.

Возможно есть способ попроще, натолкните на мысль, пожалуйста.


pablo Подменю пользователя
сообщение 14.04.16, 8:19
Сообщение #2

Старейшина
********
Группа: Команда (модераторы)
Сообщений: 1116
Из: Одесса-Луганск
Спасибо сказали: 192 раз
Рейтинг: 0

Здесь проблема в первую очередь в противоречивой постановке задачи, потому как у элемента справочника А в ТЧ могут содержаться как строки, удовлетворяющие отбору, так и не удовлетворяющие. Но при этом Вы не описываете, какой результат желаете получить.
В вашем запросе вы отбираете элементы справочника, удовлетворяющие любой комбинации из значений отборов. Вероятно, Вы хотите получить те элементы, которые соответствуют всем возможным комбинациям из списков отбора?


Signature
Правильно поставленный вопрос содержит до 90% ответа.

valleha Подменю пользователя
сообщение 14.04.16, 19:41
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 16
Спасибо сказали: 0 раз
Рейтинг: 0

Дело в том, что мне трудно сформулировать саму задачу....
Хотя, действительно: "у элемента справочника А в ТЧ НЕ могут содержаться как строки, удовлетворяющие отбору, так и не удовлетворяющие".

Результат, который мне нужно (пример):
у элемента справочника
значения в ТЧ1:
-ЗНЧ1
-ЗНЧ2
значения в ТЧ2:
-знч1

и при выборе значений табличных полей на форме:
ТП1(ЗНЧ1, ЗНЧ2) и ТП2(знч1) = элемент справочника показан.
ТП1(ЗНЧ1, ЗНЧ2, ЗНЧ3) и ТП2(знч1) = элемент справочника скрыт.
ТП1(ЗНЧ1, ЗНЧ2) и ТП2() = элемент справочника показан.
ТП1(ЗНЧ2) и ТП2(знч1) = элемент справочника показан.

Пока данный функционал работает через задний проход:

//...........................
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        СписокДляОтбора=Новый СписокЗначений;
        //Сообщить(ВыборкаДетальныеЗаписи.Количество());
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            СписокДляОтбора.Добавить(ВыборкаДетальныеЗаписи.Ссылка);
        КонецЦикла;
        
//////////////////////////////////////////////////////////////////////////////////////////
        Для Каждого СтрокаСферы Из СферыПримененияОтбор Цикл
            Счетчик = СписокДляОтбора.Количество() - 1;
            Пока Счетчик >= 0 Цикл
                ОбъектСпр=СписокДляОтбора[Счетчик].Значение.ПолучитьОбъект();
                Если ОбъектСпр.СферыПрименения.Найти(СтрокаСферы.Значение, "Сфера")=Неопределено Тогда
                    СписокДляОтбора.Удалить(Счетчик);
                КонецЕсли;
                Счетчик = Счетчик - 1;
            КонецЦикла;
        КонецЦикла;
        
        Для Каждого СтрокаХарактеристики Из ТоварХарактеристикаОтбор Цикл
            Счетчик = СписокДляОтбора.Количество() - 1;
            Пока Счетчик >= 0 Цикл
                ОбъектСпр=СписокДляОтбора[Счетчик].Значение.ПолучитьОбъект();
                Если ОбъектСпр.ХарактеристикаТовара.Найти(СтрокаХарактеристики.Значение, "Характеристика")=Неопределено Тогда
                    СписокДляОтбора.Удалить(Счетчик);
                КонецЕсли;
                Счетчик = Счетчик - 1;
            КонецЦикла;    
        КонецЦикла;        
        
////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    
    
    СправочникСписок.Отбор.Ссылка.ВидСравнения = ВидСравнения.ВСписке;
    СправочникСписок.Отбор.Ссылка.Значение = СписокДляОтбора;
    СправочникСписок.Отбор.Ссылка.Использование = Истина;


вопрос открыт

Zaval Подменю пользователя
сообщение 14.04.16, 20:28
Сообщение #4

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

valleha, оставьте в покое СправочникСписок. Он не подходит для решения Вашей задачи.
Уже и сами понимаете, что "через задний проход"...

valleha Подменю пользователя
сообщение 14.04.16, 20:47
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 16
Спасибо сказали: 0 раз
Рейтинг: 0

Zaval @ Сегодня, 21:28 *,
Ув. Завал, спасибо за ответ. Но в моём вопросе также звучала просьба о помощи подсказать альтернативное решение данной задачи, если кто знает.

Zaval Подменю пользователя
сообщение 14.04.16, 21:20
Сообщение #6

Крутой
Иконка группы
Группа: Местный
Сообщений: 1994
Из: Киева и окрестностей
Спасибо сказали: 406 раз
Рейтинг: 0

Цитата(valleha @ 13.04.16, 20:58) *
Возможно есть способ попроще, натолкните на мысль, пожалуйста.

Вот что Вы просили, ув. valleha, а не альтернативное решение.
Беда в том, что Вы уже выбрали "проще некуда".
Пишите обработку с запросом, результат выводите в простое табличное поле, из него и выбирайте. Так понятно?

valleha Подменю пользователя
сообщение 14.04.16, 21:45
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 16
Спасибо сказали: 0 раз
Рейтинг: 0

да уж...

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 19.04.24, 23:21
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!