![]() |
![]() |
![]() |
|
Показывать только существующие позиции.... как? | ☑ | ||
---|---|---|---|---|
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'ом... >;))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |