Имя: Пароль:
1C
Админ
Индексированная таблица, отобрать непустые строки, как ?
0 Холст
 
16.03.12
00:08
есть таблица,
колонки СпрСерий,Ячейка,КоличествоФакт
надо отобрать строки с непустым полем Ячейка
код:

   ПустойСпр = ПолучитьПустоеЗначение("Справочник.ЯчейкиСклада");
   ТЗнепустыеЯч = СоздатьОбъект("ИндексированнаяТаблица");
   лТЗтч.Выгрузить(ТЗнепустыеЯч);
   ТЗнепустыеЯч.ДобавитьИндекс("и1","*Ячейка");
   ТЗнепустыеЯч.УстановитьФильтр(ПустойСпр,ПустойСпр ,"и1" ,0,1);
   ТЗнепустыеЯч.Показать();

почему-то показывает ВСЮ таблицу, хотя там есть и с пустыми и не пустыми ячейками, а нужно только с непустыми
что не так ?
1 Попытка1С
 
16.03.12
00:15
Чем условие на поле не устраивает?
2 Попытка1С
 
16.03.12
00:16
И почему ты пустое значение типизируешь как справочник.
3 Холст
 
16.03.12
00:16
(1) как ?
... ищу метод "условие" или около того в описании
4 Попытка1С
 
16.03.12
00:18
(3) Я про условие на поле при переборе, или тебе зачем это все?
5 Холст
 
16.03.12
00:18
неужели ПолучитьПустоеЗначение("Справочник.ЯчейкиСклада") не возвращает пустой объект Справочник.ЯчейкиСклада ?
задача же говорю - отобрать непустые
6 Холст
 
16.03.12
00:19
лТЗтч получена выгрузкой из табличной части документа, где в ТЧ документа есть незаполненное поле Ячейка
7 Попытка1С
 
16.03.12
00:20
(5) Тебе нужна именно таблица полностью заполеная непустыми значениями? И что ты с ней будешь делать? Почему при переборе не вставить условие?
8 Холст
 
16.03.12
00:21
пустой справочник подставляю в фильтр и задаю в конце флаг инверсии, как еще то объяснить ?
9 Холст
 
16.03.12
00:22
(7) хочу получить быстрее, чем перебором
10 Холст
 
16.03.12
00:24
потом сверну по СпрСерий и получу таблицу с остатками по сериям с заполненными ячейками
зачем эти уточняющие вопросы, ответа на первоначальный вопрос нет ?
11 Попытка1С
 
16.03.12
00:35
Я бы запросом просто ТЧ выгрузил с условием на непустую ячейку.
12 Холст
 
16.03.12
00:37
(11) ты с 8.2 не путаешь ? какой запрос к ТЧ ?
13 Попытка1С
 
16.03.12
00:39
(12) О батенька... Раз уж индексированную таблицу юзаешь, должен и запрос к ТЧ сделать.
Можешь на голом 1с++ можешь на классе ПрямойЗапрос, будет быстрее чем ты тут будешь фильтры устанавливать.
14 Попытка1С
 
16.03.12
00:46
ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
   
ТекстЗапроса = "

|ВЫБРАТЬ
|    ДокСтроки.МестоХранения [СкладДокумент $Справочник.МестаХранения],
|    СУММА(ДокСтроки.Сумма) КАК Себестоимость,
|    СУММА(ДокСтроки.СуммаПродажи) КАК Продажа
|ИЗ
|    ДокументСтроки.РасходнаяНакладная КАК ДокСтроки
|    ВНУТРЕННЕЕ СОЕДИНЕНИЕ ЖурналДокументов КАК Журнал
|    ПО ($Журнал.ТекущийДокумент = $ДокСтроки.ТекущийДокумент
|    И $Журнал.ВидДокумента = :ВидДокумента.РасходнаяНакладная)
|    И $Журнал.ПозицияДокумента МЕЖДУ :НачДата И :КонДата~
|    И $Журнал.Проведен = 1
|ГДЕ
|
| тут твое условие на непустой реквизит
|
|СГРУППИРОВАТЬ
|    Док.МестоХранения
|";

ПрямойЗапрос.УстановитьТекстовыйПараметр("НачДата",ДатаНачала);
ПрямойЗапрос.УстановитьТекстовыйПараметр("КонДата",ДатаКонца);
индТз = ПрямойЗапрос.Выполнить("ИндексированнаяТаблица",ТекстЗапроса);

примерчик небольшой
15 Холст
 
16.03.12
00:46
(13)
понял, предлагаешь взять по iddoc таблицу табличных частей этого вида дока и найти ТЧ моего дока и отфильтровать...
документ, ТЧ которого анализируем, еще не сохранен в базе
16 Холст
 
16.03.12
00:47
спасибо за примерчик, пригодится для другого, но тут еще не сохранен док
17 Холст
 
16.03.12
00:48
мне бы именно индексированной таблицей получить и выходит ни фильтр, ни "антифильтр" по пустому значению не работает
18 Попытка1С
 
16.03.12
00:50
(17) Честно говоря установитьфильтр почти не юзал, всегда хватало обхода по созданным индексам. Попробуй на 1cpp спросить.
19 Холст
 
16.03.12
00:50
сейчас пробую .Подмножество, а потом сделать разность таблиц
20 Попытка1С
 
16.03.12
00:51
(15) Да именно так, просто фильтр по твоему iddoc, но раз записи нет тоды ой.
21 Попытка1С
 
16.03.12
00:52
(19) Ты потом замерь мне кажется быстрее перебрать, причем можешь тупо отсортировать, и как первое пустое значение появится прервать цикл.
22 Попытка1С
 
16.03.12
00:52
На создание индекса кстати тоже время тратится..
23 Холст
 
16.03.12
02:50
так и знал, что решение простое -
в коде надо было поставить индекс
ТЗнепустыеЯч.Показать("и1");
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс