Вход | Регистрация


1С:Предприятие ::

Метки:Приемы программирования

Показывать только существующие позиции.... как?

Я
   forex
 
17.05.04 - 16:26
1с:21 cfg Т+С 934

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

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

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

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

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

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

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

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

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

Процедура УстановитьФильтр(ВыбПризнак)
   Список.СоздатьОбъект("СписокЗначений");
   Буфер = СоздатьОбъект("Справочник.Главн");
  // отбираем только те элементы, которые могут отображаться в текущем списке

   Буфер.ИспользоватьРодителя(ИспользоватьРодителя());
   Буфер.ВключатьПодчиненные(0);
   Буфер.ВыбратьЭлементы();
   Пока Буфер.ПолучитьЭлемент() = 1 Цикл
     // отбираем только те элементы, которые удовлетворяют заданному признаку

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

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

родитель=ТекущийЭлемент().Родитель;
ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)

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

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

Пока Запрос.Группировка("Номенклатура") = 1 Цикл
Если ТМЦ.НайтиЭлемент(Запрос.Номенклатура) = 0 Тогда
    Сообщить("Не найден """ + СокрЛП(Запрос.Номенклатура) + """! Действие не выполнено!","!");
Продолжить;
КонецЕсли;    
ост=число(ОстатокТоваранаскладе(Запрос.Номенклатура));
Если ост>0 Тогда
    ТМЦ.НеНулевойОстаток = 1;
Иначе
    ТМЦ.НеНулевойОстаток = 0;
КонецЕсли;
ТМЦ.Записать();
КонецЦикла;     
УстановитьОтбор("НеНулевойОстаток", 1);



Список тем форума
Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует