helpf.pro
Регистрация

v8: Отбор по Табличному полю

Ermak
02.09.2015 15:49Прочитано: 5347

Добрый день! Подскажите как сделать отбор по табличному полю. Например в ТП есть колонка ФИО, в поле отбора я набираю фамилию Петров нажимаю поиск или ENTER и мне в ТП выдаются строки где указана фамилия Петров

Yandex
Возможно, вас также заинтересует
Реклама на портале
IBReiter
02.09.2015 17:53Ответ № 1

Можно так:

Код 1C v 8.3
 

ПолеКомпоновкиОтбора = Новый ПолеКомпоновкиДанных(Имяколонки)

ЭлементОтбора                = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение  = ПолеКомпоновкиОтбора;
ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Подобно;
ЭлементОтбора.ПравоеЗначение = ЗначениеОтбора;


IBReiter
02.09.2015 17:59Ответ № 2

Либо

Код 1C v 8.3
 ВидСравненияКомпоновкиДанных.Содержит   

Но этот вид, по-моему, медленно работает

Ermak
07.09.2015 11:55Ответ № 3

Ошибка{Справочник.ЛицевыеСчетаАбонентов.Форма.ФормаСписка.Форма(235,33)}: Переменная не определена (Список)

ЭлементОтбора = <<?>>Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); (Проверка: Толстый клиент (обычное приложение))

{Справочник.ЛицевыеСчетаАбонентов.Форма.ФормаСписка.Форма(238,33)}: Переменная не определена (ЗначениеОтбора)

ЭлементОтбора.ПравоеЗначение = <<?>>ЗначениеОтбора; (Проверка: Толстый клиент (обычное приложение))

Код 1C v 8.х
 Ответсвтеный = ЭлементыФормы.СправочникСписок.Колонки.ОтветственныйКвартиросъемщик;   
Код 1C v 8.х
 ПолеКомпоновкиОтбора = Новый ПолеКомпоновкиДанных(Ответсвтеный);   
Код 1C v 8.х
 ЭлементОтбора                = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));   
Код 1C v 8.х
 ЭлементОтбора.ЛевоеЗначение  = ПолеКомпоновкиОтбора;   
Код 1C v 8.х
 ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Подобно;   
Код 1C v 8.х
 ЭлементОтбора.ПравоеЗначение = ЗначениеОтбора;   
IBReiter
07.09.2015 15:14Ответ № 4

Проверьте имя основного реквизита, у него скорее всего другое имя, не "Список"

IBReiter
07.09.2015 15:22Ответ № 5

Ответственный = путь к данным на форме

IBReiter
07.09.2015 15:44Ответ № 6

У вас наверное не erp.. контейнера ЭлементыФормы не бывает в УФ.

Он называется "Элементы"

Ermak
07.09.2015 17:13Ответ № 7

Значит я что то напутал. Программа самописнная на платформе 1С 8.2.

Ermak
07.09.2015 17:14Ответ № 8

Отбор делаем СправочникСписок

IBReiter
07.09.2015 17:30Ответ № 9

Элементы - это у вас ЭлементыФормы

Список - СправочникСписок

Ermak
08.09.2015 08:27Ответ № 10

а я стал уже так делать, только не могу понять как теперь найти строку в СправочникСписок

Код 1C v 8.х
 
ОтборСтрок = СправочникСписок.Отбор; ПостроительЗапроса = Новый ПостроительЗапроса; ПостроительЗапроса.ИсточникДанных = Новый ОписаниеИсточникаДанных(ЭлементыФормы.СправочникСписок.Значение); Для Каждого ЭлементОтбора Из ОтборСтрок Цикл Если ЭлементОтбора.Использование Тогда НовыйОтбор = ПостроительЗапроса.Отбор.Добавить(ЭлементОтбора.Имя); НовыйОтбор.Использование = Истина; НовыйОтбор.ВидСравнения = ЭлементОтбора.ВидСравнения; НовыйОтбор.ЗначениеС = ЭлементОтбора.ЗначениеС; НовыйОтбор.ЗначениеПо = ЭлементОтбора.ЗначениеПо; НовыйОтбор.Значение = ЭлементОтбора.Значение; КонецЕсли; КонецЦикла; Таблица = ПостроительЗапроса.Результат.Выгрузить(); МассивСтрок = Новый Массив; Для Каждого Стр ИЗ Таблица Цикл КАдрес=Стр.КороткийАдрес; СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("КороткийАдрес", КАдрес); КонецЦикла;
IBReiter
08.09.2015 08:40Ответ № 11

ЭлементыФормы.СправочникСписок.ТекущаяСтрока, если вы про это

Ermak
08.09.2015 08:41Ответ № 12

{Справочник.ЛицевыеСчетаАбонентов.Форма.ФормаСписка.Форма(262)}: Недостаточно фактических параметров

Спр = Справочники.ЛицевыеСчетаАбонентов.НайтиПоРеквизиту();

Код 1C v 8.2 УП
 Спр = Справочники.ЛицевыеСчетаАбонентов.НайтиПоРеквизиту();   
Код 1C v 8.2 УП
 Имяколонки = Спр.ОтветственныйКвартиросъемщик.Наименование;   
Код 1C v 8.2 УП
 ПолеКомпоновкиОтбора = Новый ПолеКомпоновкиДанных(Имяколонки);   
Код 1C v 8.2 УП
 ЭлементОтбора                = СправочникСписок.Отбор.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));   
Код 1C v 8.2 УП
 ЭлементОтбора.ЛевоеЗначение  = ПолеКомпоновкиОтбора;   
Код 1C v 8.2 УП
 ЭлементОтбора.ВидСравнения   = ВидСравненияКомпоновкиДанных.Подобно;   
Код 1C v 8.2 УП
 ЭлементОтбора.ПравоеЗначение = ТекстОтбора;   
IBReiter
08.09.2015 08:51Ответ № 13

НайтиПоРеквизиту(<ИмяРеквизита>, <ЗначениеРеквизита>, <Родитель>, <Владелец>)

Параметры:

<ИмяРеквизита> (обязательный)

Тип: Строка. Имя реквизита, как он задан в конфигураторе, по значению которого осуществляется поиск. Тип значения произвольный, кроме ХранилищеЗначения и строк произвольной длины.

<ЗначениеРеквизита> (обязательный)

Тип: Произвольный.

Значение реквизита, по которому должен выполняться поиск.

Имя и значение обязательны

IBReiter
08.09.2015 10:21Ответ № 14

Может вот этого достаточно будет

Код 1C v 8.х
 

Процедура ФИОПриИзменении(Элемент)

ИмяОтбораДанных = "Наименование";
ЗначениеОтбора  = Элемент.Значение;

Попытка
СправочникСписок.Отбор[ИмяОтбораДанных].Использование = ЗначениеЗаполнено(ЗначениеОтбора);
Исключение
Возврат;
КонецПопытки;

Если СправочникСписок.Отбор[ИмяОтбораДанных].Использование Тогда

СправочникСписок.Отбор[ИмяОтбораДанных].ВидСравнения  = ВидСравнения.Содержит;
СправочникСписок.Отбор[ИмяОтбораДанных].Значение = ЗначениеОтбора;

КонецЕсли;

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




Ermak
08.09.2015 11:48Ответ № 15

Выдает ошибку{Справочник.ЛицевыеСчетаАбонентов.Форма.ФормаСписка.Форма(290)}: Ошибка при установке значения атрибута контекста (ВидСравнения)

СправочникСписок.Отбор[ИмяОтбораДанных].ВидСравнения = ВидСравнения.Содержит;

по причине:

Недопустимый тип сравнения

IBReiter
08.09.2015 11:55Ответ № 16

Покажите текст модуля

IBReiter
08.09.2015 12:00Ответ № 17

И тип проверьте в отладчике у СправочникСписок.Отбор[ИмяОтбораДанных].ВидСравнения

Ermak
09.09.2015 09:33Ответ № 18

СправочникСписок.Отбор[ИмяОтбораДанных].ВидСравнения Тип = ВидСравнения

ВидСравнения Тип = ПеречислениеВидСравнения

IBReiter
09.09.2015 09:52Ответ № 19

Значит и присваивайте ему значение этого перечисления: Перечисления.ВидСравнения.ВашеЗначение

Ermak
09.09.2015 09:56Ответ № 20

В перечесления нет ВидСравнения , где еще можно посмотреть

IBReiter
09.09.2015 10:03Ответ № 21

В отладчике и можно посмотреть

Сделайте скрин формы ее реквизиты, какая конфигурация, платформа, модуль или процедуру-обработчик

Я так не пойму что там у вас происходит

Ermak
09.09.2015 10:20Ответ № 22

http://zalil.su/674481 копия конфигурации, работаю над Справочник - ЛицевыеСчетаАбонентов, ФормаСписка

IBReiter
09.09.2015 10:52Ответ № 23

Ошибку не увидел

Ermak
09.09.2015 11:26Ответ № 24

Если ИмяОтбораДанных = "КороткийАдрес" и ИмяОтбораДанных = "Адрес" то все работает а если поставить отбор например по ИмяОтбораДанных = "ОтветственныйКвартиросъемщик" или по Код увидите ошибку

Ermak
09.09.2015 11:27Ответ № 25

где то прописано в коде что отбор только по "КороткийАдрес" или "Адрес" но я не могу понять где

IBReiter
09.09.2015 11:31Ответ № 26

В модуле формы списка "Процедура ПолеВвода1ПриИзменении(Элемент)" там и прописано

Ermak
09.09.2015 11:33Ответ № 27

эта я сделал попробуйте сменить ИмяОтбораДанных = "ОтветственныйКвартиросъемщик" в "Процедура ПолеВвода1ПриИзменении(Элемент)" и вы сразу увидите ошибку когда будите делать отбор

Ermak
09.09.2015 11:34Ответ № 28

Вот такая ошибка будет{Справочник.ЛицевыеСчетаАбонентов.Форма.ФормаСписка.Форма(290)}: Ошибка при установке значения атрибута контекста (ВидСравнения)

СправочникСписок.Отбор[ИмяОтбораДанных].ВидСравнения = ВидСравнения.Содержит;

по причине:

Недопустимый тип сравнения

IBReiter
09.09.2015 12:17Ответ № 29

ОтветственныйКвартиросъемщик - это Справочник ФизическиеЛица, поэтому вид сравнения и нельзя такой установить

Можно вот так

Код 1C v 8.х
 

ИмяОтбораДанных = "ОтветственныйКвартиросъемщик";
ЗначениеОтбора  = Элемент.Значение;

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ Ссылка
|
|ИЗ Справочник.ФизическиеЛица
|
|ГДЕ Наименование ПОДОБНОНаименование";
Запрос.УстановитьПараметр("Наименование", "%"+ЗначениеОтбора+"%");

Результат    = Запрос.Выполнить();
СписокОтбора = Новый СписокЗначений;

Если НЕ Результат.Пустой() Тогда

Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
СписокОтбора.Добавить(Выборка.Ссылка);
КонецЦикла;

КонецЕсли;;


Попытка
СправочникСписок.Отбор[ИмяОтбораДанных].Использование = ЗначениеЗаполнено(ЗначениеОтбора);
Исключение
Возврат;
КонецПопытки;  

Если СправочникСписок.Отбор[ИмяОтбораДанных].Использование Тогда
СправочникСписок.Отбор[ИмяОтбораДанных].ВидСравнения  = ВидСравнения.ВСписке;
СправочникСписок.Отбор[ИмяОтбораДанных].Значение      = СписокОтбора;
КонецЕсли;
Ermak
09.09.2015 14:26Ответ № 30

что то он долго думает, как добавить в вид сравнения? или есть какой нибудь способ чтобы быстрее и лишний список убирался, оставался только который ищем

Ermak
09.09.2015 14:29Ответ № 31

Можно же добавить в Вид Сравнения Справочник ФизическиеЛица, чтобы тоже работало для ОтветственныйКвартиросъемщик? Где это добавляется?

IBReiter
09.09.2015 14:41Ответ № 32

ВидСравнения - это системное перечисление, туда ничего нельзя добавить

Ermak
09.09.2015 14:52Ответ № 33

а как тогда сделать чтобы работало со справочником Справочник ФизическиеЛица, потому что как вы предложили выше не работает.

IBReiter
09.09.2015 14:58Ответ № 34

Все там работает)) 1Cv8.zip 

Ermak
09.09.2015 15:05Ответ № 35

Спасибо большое, все работает!

Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.