Имя: Пароль:
1C
 
Показывать только существующие позиции.... как?
0 forex
 
17.05.04
16:26
1с:21 cfg Т+С 934

Как сделать чтобы при подборе номенклатуры в справочнике показывались только товары остаток которых больше 0 (по кнопке).

С групповой обработкой номенклатуры, не удобно (количество элементов справочника > 10000) - приходится долго ждать.

Что можно сделать в данной ситуации? Заранее спасибо...

если возможно поконкретней...
1 iceTiger
 
17.05.04
17:21
Есть проц. "ИспользоватьСписокЭлементов(СписокЗначений)"
СписокЗначений - список показуемых элементов.

В принципе как альтернатива, чтобы не считать остатки:
Можно ввести новый реквизит спр. ТМЦ - "ЕстьНаСкладе" (1/0) и соответственно ставить/снимать при движениях.
Но если бухи балуются проведением задним числом данный вариант кривоват...
2 forex
 
17.05.04
17:40
С новым реквизитом явно не потянет....
ИспользоватьСписокЭлементов(СписокЗначений) - но ведь СписокЗначений тоже надо как-то получить.....

А можно сделать так?
сделать запрос по номенклатуре, где родитель=выбранный каталог, и чтобы запрос сразу же считал остатки
а потом, обработать запрос и по остатку менять флаг включения в прайс
ну и установитьотбор(...)

только вот как правильно сделать запрос?
3 iceTiger
 
17.05.04
18:00
Если использовать запрос тогда уж просто включать в спЗначений ТМЦ с ненулевыми остатками, но это будет та гр. обработка о которой ты говорил...
А по поводу  "установитьотбор(...)" еще медленней :(. Придется перезаписывать каждый найденный элемент.
4 427
 
17.05.04
18:12
(2) по второй части - это было реализовано в ТиС 8.7х .... Обзывалось "кеширование остатков"
5 forex
 
17.05.04
21:11
iceTiger: Придется перезаписывать каждый найденный элемент
перезаписывать каждый элемент только текущего каталога, а не всей номенклатуры... вроде как долго не должно быть (обычно не более 100 позиций в каталоге)....

ИспользоватьСписокЭлементов, я таким еще не пользовался... (не так давно пишу под 1с). Если есть какой примерчик, буду очень благодарен...
6 forex
 
17.05.04
21:13
427: это было реализовано в ТиС 8.7х .... Обзывалось "кеширование остатков"
посмотрел - не нашел :( может не там искал...

Как раз и делается переход с 8.7 на 9.2
7 427
 
17.05.04
21:26
Плохо смотрел
8 forex
 
18.05.04
00:14
427: Плохо смотрел
Дело ведь уже не в этом... в 934 видимо этого нет
9 SnarkHunter
 
18.05.04
06:05
Нельзя утверждать, что при многопользовательской работе эти остатки будут актуальны...
10 forex
 
18.05.04
10:26
2 SnarkHunter: а почему нельзя? все прекрасно работает же в подборе номенклатуры, ну а если товар уже будет списан со склада (пока действует фильтр), не так страшно...
11 SnarkHunter
 
18.05.04
10:32
Я же не сказал, что этим нельзя пользоваться, правда?..
12 GuineaPIg
 
18.05.04
12:55
Ещё раз для тупых (это я себя имею в виду). Где смотреть?
13 iceTiger
 
18.05.04
13:30
Пример из ЖКК:

Процедура УстановитьФильтр(ВыбПризнак)
  Список.СоздатьОбъект("СписокЗначений");
  Буфер = СоздатьОбъект("Справочник.Главн");
  // отбираем только те элементы, которые могут отображаться в текущем списке
  Буфер.ИспользоватьРодителя(ИспользоватьРодителя());
  Буфер.ВключатьПодчиненные(0);
  Буфер.ВыбратьЭлементы();
  Пока Буфер.ПолучитьЭлемент() = 1 Цикл
     // отбираем только те элементы, которые удовлетворяют заданному признаку
     Если (Буфер.Признак = ВыбПризнак) Тогда
        Список.ДобавитьЗначение(Буфер.ТекущийЭлемент());
     КонецЕсли;
  КонецЦикла;
  ИспользоватьСписокЭлементов(Список);
КонецПроцедуры
14 forex
 
18.05.04
14:07
2 iceTiger: это процедура собственного написания?
попробую, спасибо

Сделал скрытие отсут. товаров через запрос и обработкой номенклатуры, но запрос выполняется не очень быстро :( сек 5 (справочник 10000 позиций), может я что не так сделал?

родитель=ТекущийЭлемент().Родитель;
ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Номенклатура    = Справочник.Номенклатура.ТекущийЭлемент;      
   |Группировка Номенклатура Без Групп Без Упорядочивания;
   |Условие (Номенклатура.Родитель=родитель);";
   
Запрос = СоздатьОбъект("Запрос");
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
   Возврат;
КонецЕсли;    

ТМЦ        = СоздатьОбъект("Справочник.Номенклатура");

Пока Запрос.Группировка("Номенклатура") = 1 Цикл
Если ТМЦ.НайтиЭлемент(Запрос.Номенклатура) = 0 Тогда
   Сообщить("Не найден """ + СокрЛП(Запрос.Номенклатура) + """! Действие не выполнено!","!");
Продолжить;
КонецЕсли;    
ост=число(ОстатокТоваранаскладе(Запрос.Номенклатура));
Если ост>0 Тогда
   ТМЦ.НеНулевойОстаток = 1;
Иначе
   ТМЦ.НеНулевойОстаток = 0;
КонецЕсли;
ТМЦ.Записать();
КонецЦикла;    
УстановитьОтбор("НеНулевойОстаток", 1);
15 forex
 
18.05.04
14:52
2 iceTiger: твоя процедура работает просто песня :) спасибо. И скорость отличная...
16 ЛиКаН
 
06.12.04
12:29
(15) эт не песня (13) и нифига не работает.
почему? кто знает?
________________________
В реквизите  типа "Строка неограниченой длины" при помощи ВСтрокуСРазделителями() сохранил необходимый список.
в Процедуре ПриОткрытии() //восстанавливаю список
Список.ИзСтрокиСРазделителями(стрРекв);
ИспользоватьСписокЭлементов(Список);
КонецПроцедуры
и получаю пустую форму списка справочника
почему? есть какие тонкости, которые не учел?
17 Asmody
 
06.12.04
12:44
(16) где сохранил? т.е. в реквизите чего?
18 NS
 
06.12.04
12:45
сОМОЕ БЫСТРОЕ - ЕСНО ЧЕРЕЗ ВЫГРУЗИТЬиТОГИ(), нОВАЯсТРОКА(ЧТОБ ДОБАВИЬ НУЛЕВОЕ ЗНАЧЕНИЕ, НА СЛУЧАЙ, ЕСЛИ ЕГО НЕТ), СОРТИРОВАТЬ, ВЫГРУЗИТЬ(В сз)
19 ЛиКаН
 
06.12.04
12:47
(17) в реквизите другого справочника, не того, который хочу отфильтровать.
20 Asmody
 
06.12.04
12:49
(19) чему равен стрРекв? чему равен Список?
21 ЛиКаН
 
06.12.04
13:45
стрРекв = ""17","55","БК","БН""
Список нормально из него восстанавливается - проверял на элементе диалога.
22 ЛиКаН
 
06.12.04
13:51
(20) все Asmody спасибо)) заработало
вопрос в (20) помог решить проблему. Я забыл сделать ЗначениеВСтрокуВнут()
23 Asmody
 
06.12.04
15:05
(22) ага, буду теперь считать себя Remote Tester'ом... >;))
Ошибка? Это не ошибка, это системная функция.