Имя: Пароль:
1C
1С v8
Помогите отфильтровать СправочникСписок.Номенклатура
0 Boudybuilder
 
13.10.12
23:10
Хочу переделать типовую форму номенклатуры "ФормаСписка". Кардинально что то менять не буду , тока одну кнопочку добавить надою.
Идея такова:

Научился я загружать Екселевские прайсы в док УстановкаЦенНоменклатурыКонтрагентов. Загрузил весь прайс сегодня например , и знаю что на сегодня у этого поставщика есть такое наличие с ценами. Но этого мало.

Хотелось бы в ФормеСписка номенклатуры установить отбор по наличию у контрагентов на дату. Тоесть кнопочка + поле дата.
Данные получу запросом из регистра.

Проблема в том  ,что я совсем не умею ставить отбор в поле Список с типом данных СправочникСписок.Номенклатура;
Как организовать?

Список.Отбор (  ....   А дальше че? )))
1 pumbaEO
 
13.10.12
23:15
жалко твою ут, смотри как используется при получении данных
2 Boudybuilder
 
13.10.12
23:17
Земляк , а че жалко то ? Я ей зла не желаю...
3 ОбычныйЧеловек
 
13.10.12
23:17
Список.Отбор.Ссылка.Значение=СписокТвоихКонтрагентовНаДата;
Список.Отбор.Использование=Истина;
Список.Отбор.ВидСравнения=ВидСравнения.Всписке;

За точность синтаксиса не ручаюсь - 1ски под рукой нету.
4 ОбычныйЧеловек
 
13.10.12
23:19
Если ты хочешь вывести колонку с ценами контрагентов то смотри (1)
5 Boudybuilder
 
13.10.12
23:19
СписокТвоихКонтрагентовНаДата тут По номенклатуре а не по контрагентам отбор.
Но все же СписокТвоихКонтрагентовНаДата это СписокЗначений?
6 ОбычныйЧеловек
 
13.10.12
23:20
(5) неправильно прочитал вопрос....
7 Boudybuilder
 
13.10.12
23:21
(4) Я по результату запроса просто отфильтровать хочу. Результатом будет Номенклатура . Там выгружать прийдется , или выборкой?
8 ОбычныйЧеловек
 
13.10.12
23:21
Да - это списокзначений
9 ОбычныйЧеловек
 
13.10.12
23:23
(7) выгрузкой у тебя будет либо ТЗ либо Массив а тебе надотсписок значений следовательно - выборкой его заполнишь...Правда понятия не имею на сколько большая у тебя номенклатура и как при этом будет работать твой отбор - может умрет все...
10 Boudybuilder
 
13.10.12
23:25
А что посоветуешь?
Я то думал не трогать форму, а новую обработку сделать с ТЗ. Но мне как то надо чтобы иерархично отображалось с группами...
Это возможно?
11 Boudybuilder
 
13.10.12
23:26
pumbaEO Все знает... А молчит... ))))))))
12 ОбычныйЧеловек
 
13.10.12
23:27
(10) нет ничего невозможного... просто эмулировать придется (иерархию) - если речь идет о ТЗ
13 Boudybuilder
 
13.10.12
23:27
(11) Это как?
14 ОбычныйЧеловек
 
13.10.12
23:28
(11) он же тебе предложил не мучаться с отбором а использовать ПриПолученииДанных.
15 ОбычныйЧеловек
 
13.10.12
23:29
(13) вот нету дома 1ски а то бы скинул пример...а на словах объяснять - застрелиться проще...
16 ОбычныйЧеловек
 
13.10.12
23:30
Самое простое и правильное было предложенио в (1)
17 Boudybuilder
 
13.10.12
23:37
(14) Эта процедура когда запускается? Не вижу ее в модулях
18 ОбычныйЧеловек
 
13.10.12
23:43
(17) это предопределенная процедура формы списка..что бы она появилась - отрой свойства формы списка и укажи ее там.
19 Boudybuilder
 
13.10.12
23:51
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
   // Вставить содержимое обработчика.
КонецПроцедуры


И как тут отфильтровать?
20 Boudybuilder
 
13.10.12
23:52
Мне же надо чтоб сначала весь список показывало , и только при  нажатии кнопки на форме отфильтровало по СпискуЗначений из запроса.
21 ОбычныйЧеловек
 
13.10.12
23:57
(20) еще раз - отфильтровать в этой процедуре разумеется никак нельзя (т.к. она не для этого предназначена). В этой процедуре тебе предлагается выводить (в отдельную колонку в форме списка) цену контрагента.
22 Boudybuilder
 
14.10.12
00:05
Блин , так мне же отфильтровать надо. Я ж хочу видеть только номенклатуру которая есть в результате запроса. Зачем мне всю видеть если какой то у поставщика нету?
23 ОбычныйЧеловек
 
14.10.12
00:11
(22) ну вот получится у тебя в резльтате запроса 5тыс.позиций - думаешь быстро "фильтр" твой отработает?! Может таки лучше все видеть? )
24 Boudybuilder
 
14.10.12
00:13
Позиций около 10 000 планируется , а то и больше. Что  долго может это дело просчитываться?
25 ОбычныйЧеловек
 
14.10.12
00:15
(24) попробуй )
26 Азат
 
14.10.12
00:17
(24) пока ты тут спрашиваешь - уже 10 раз бы на реальных условиях попробовал
27 Noroving
 
14.10.12
00:17
УстановитьЭлементОтбора(Список.Отбор, "Ссылка", СписокНоменклатуры, , ВидСравненияКомпоновкиДанных.ВСписке, Истина);

Процедура УстановитьЭлементОтбора(ОбластьПоискаДобавления,
                               знач ИмяПоля,
                               знач ПравоеЗначение = Неопределено,
                               знач ВидСравнения = Неопределено,
                               знач Представление = Неопределено,
                               знач Использование = Неопределено) Экспорт
   
   ЧислоИзмененных = ИзменитьЭлементыОтбора(ОбластьПоискаДобавления, ИмяПоля, Представление,
                           ПравоеЗначение, ВидСравнения, Использование);
   
   Если ЧислоИзмененных = 0 Тогда
       Если ВидСравнения = Неопределено Тогда
           ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
       КонецЕсли;
       ДобавитьЭлементКомпоновки(ОбластьПоискаДобавления, ИмяПоля, ВидСравнения,
                               ПравоеЗначение, Представление, Использование);
   КонецЕсли;
   
КонецПроцедуры
28 Noroving
 
14.10.12
00:20
УстановитьЭлементОтбора в Модуле ОбщегоНазначенияКлиентСервер У меня, у Вас донт ноу))
29 pumbaEO
 
14.10.12
00:22
(27) выпендрился? Теперь то же самое на толстых формах.

(0) научить пользоватся глобальным поиском?
30 Noroving
 
14.10.12
00:23
(29) Сори, таким уже давно не пользуюсь )
31 Noroving
 
14.10.12
00:25
(29) А вот кто выпендривается, так это ты... за чем кидать умные фрасы типа я все знаю но тебе не скажу, лучше бы ничего совсем не писал... или скидывай какойто пример или молчи себе. а?
32 pumbaEO
 
14.10.12
00:42
(31) я иногда пытаюсь использовать поиск, еще в (1) я дал направление, код за него писать можешь ты, я не буду.
33 Boudybuilder
 
14.10.12
00:43
Для експеримента , пока что сотворил следующее

Процедура ДействияФормыНаличиеУПоставщиков(Кнопка)//Фан

Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
              |    ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
              |ИЗ
              |    РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних" ;
              Рез = Запрос.Выполнить();
              Выб = Рез.Выбрать();
              СЗ = Новый СписокЗначений;
              Пока Выб.Следующий() Цикл
              СЗ.Добавить(Выб.Номенклатура);
              КонецЦикла;

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



Но чтото не фурычет.
34 Noroving
 
14.10.12
00:46
поставь использование истина
35 ОбычныйЧеловек
 
14.10.12
00:47
(33) а (3) посмотреть повинимательнее )
36 Boudybuilder
 
14.10.12
00:55
Процедура ДействияФормыНаличиеУПоставщиков(Кнопка)//Фан

Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
              |    ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура
              |ИЗ
              |    РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних" ;
              Рез = Запрос.Выполнить();
              Выб = Рез.Выбрать();
              СЗ = Новый СписокЗначений;
              Пока Выб.Следующий() Цикл
              СЗ.Добавить(Выб.Номенклатура);
              КонецЦикла;

Список.Отбор.Ссылка.Значение=СЗ;
Список.Отбор.ВидСравнения=ВидСравнения.ВСписке;
Список.Отбор.Использование=Истина;


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




{Справочник.Номенклатура.Форма.ФормаСписка.Форма(919)}: Ошибка при установке значения атрибута контекста (Значение)
Список.Отбор.Ссылка.Значение=СЗ;
по причине:
Неверный тип значения
37 Лефмихалыч
 
14.10.12
00:56
(36) строчки 919 и 918 местами поменяй
38 Лефмихалыч
 
14.10.12
00:57
точней 919 и 920
39 Boudybuilder
 
14.10.12
01:02
Список.Отбор.ВидСравнения=ВидСравнения.ВСписке;
Список.Отбор.Ссылка.Значение=СЗ;
Список.Отбор.Использование=Истина;


{Справочник.Номенклатура.Форма.ФормаСписка.Форма(919)}: Поле объекта не обнаружено (ВидСравнения)
Список.Отбор.ВидСравнения=ВидСравнения.ВСписке;
40 Лефмихалыч
 
14.10.12
01:06
(39) задумайся, что ты делаешь. Тебе надо:
1. Получить ЭЛЕМЕНТ отбора
2. этому элементу присвоить вид сравнения
3. этому же елементу присвоить значение отбора

ты первый пункт не выполнил - вместо элемента юзаешь сам отбор, а у него этого всего нет ни фига
41 Noroving
 
14.10.12
01:07
Список.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВСписке;
Список.Отбор.Ссылка.Значение=СЗ;
Список.Отбор.Ссылка.Использование=Истина;
42 Boudybuilder
 
14.10.12
01:10
Процедура ДействияФормыНаличиеУПоставщиков(Кнопка)//Фан

Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
            |    ЦеныНоменклатурыКонтрагентовСрезПоследних.Номенклатура.Ссылка КАК Ссылка
            |ИЗ
            |    РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(, ) КАК ЦеныНоменклатурыКонтрагентовСрезПоследних" ;
              Рез = Запрос.Выполнить();
              Выб = Рез.Выбрать();
              СЗ = Новый СписокЗначений;
              Пока Выб.Следующий() Цикл
              СЗ.Добавить(Выб.Ссылка);
              КонецЦикла;

Список.Отбор.Ссылка.ВидСравнения=ВидСравнения.ВСписке;
Список.Отбор.Ссылка.Значение=СЗ;
Список.Отбор.Ссылка.Использование=Истина;


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



Но список остался без изменений
43 Лефмихалыч
 
14.10.12
01:12
(42) а кнопку-то нажал?
44 Boudybuilder
 
14.10.12
01:12
а то!
45 Boudybuilder
 
14.10.12
01:14
Все ок
46 Boudybuilder
 
14.10.12
01:15
и быстро работает . Кто тут говорил , что долго оно все?
47 Boudybuilder
 
14.10.12
01:15
А можно чтобы и группы убирало в которых нету элементов после отбора?
48 hhhh
 
14.10.12
09:42
(47) нет, нельзя
49 Boudybuilder
 
14.10.12
12:36
(49) Плохо что нельзя... Для того ведь и делалось чтобы лишнюю инфу не выводить...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn