Имя: Пароль:
1C
 
Быстрый подсчет общего количества документов
0 DANDAN
 
13.01.06
10:18
В 1с при выборе удаления помеченных документов. Осуществляется быстрый подсчет всех документов. Это видно в строке состояния. Как можно такое сделать ????
Процедура
ххх.выбратьДокуметы()
Пока ххх.ПолучитьДокумент()=1 Цикл
  занимает очень много времени..
КонецЦикла.
1 ВторНик
 
13.01.06
10:21
поиск рулит
2 DANDAN
 
13.01.06
10:23
т.е. ПОИСК? надо посчитать количество
3 Simod
 
13.01.06
10:24
4 lisss
 
13.01.06
10:27
(2)запросом.... вот пример для справочника, по аналогии можешь сделать для доков:

     Вид = "Номенклатура";
   Запрос = СоздатьОбъект("Запрос");
   
   ТекстЗапроса = "
   |Товар = Справочник." + Вид + ".ТекущийЭлемент;
   |Функция КолЗап = Счётчик(Товар);";
             
   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
       Сообщить("Нет, нах...")
   Иначе
       Сообщить(Запрос.КолЗап)    
   КонецЕсли;
5 1CPP
 
13.01.06
10:29
Лучше прямой 1С++ запрос

SELECT COUNT(*) FROM $Документ.ххх
6 Zmich
 
13.01.06
10:30
Инд = 1;
   Для Инд = 1 По Метаданные.Документ() Цикл
       Идент = Метаданные.Документ(Инд).Идентификатор;
       ДокИдент = "Документ." + Идент;
       Док = СоздатьОбъект(ДокИдент);    
       Кол = 0;
       Док.ВыбратьДокументы();
       Пока Док.ПолучитьДокумент() = 1 Цикл
           Кол = Кол + 1;
       КонецЦикла;
       Сообщить(Идент + " = " + Строка(Кол));
   КонецЦикла;
7 Zmich
 
13.01.06
10:30
Инд = 1;
   Для Инд = 1 По Метаданные.Документ() Цикл
       Идент = Метаданные.Документ(Инд).Идентификатор;
       ДокИдент = "Документ." + Идент;
       Док = СоздатьОбъект(ДокИдент);    
       Кол = 0;
       Док.ВыбратьДокументы();
       Пока Док.ПолучитьДокумент() = 1 Цикл
           Кол = Кол + 1;
       КонецЦикла;
       Сообщить(Идент + " = " + Строка(Кол));
   КонецЦикла;
8 Zmich
 
13.01.06
10:31
(+7) Если блок
       Док.ВыбратьДокументы();
       Пока Док.ПолучитьДокумент() = 1 Цикл
           Кол = Кол + 1;
       КонецЦикла;
работает долго, меняешь его на запрос, как советует (4)
9 1CPP
 
13.01.06
10:31
(7) - от этого уходили.

Прямые запросы рулят. Обычные (4) - тормозят
10 DANDAN
 
13.01.06
10:41
А если мне надо сделать подсчет доков для любой базы, тогда я же не знаю какие доки есть в этой базе.
и тогда
   ТекстЗапроса = "
   |Товар = Справочник." + Вид + ".ТекущийЭлемент;
   |Функция КолЗап = Счётчик(Товар);";

ВИД - неизвестен :-(
11 lisss
 
13.01.06
11:08
Вот тебе готовый, раз сам думать не хочешь...

   Кол = 0;
   Запрос = СоздатьОбъект("Запрос");    
   
   Для Инд = 1 По Метаданные.Документ() Цикл          
       
       Идент = Метаданные.Документ(Инд).Идентификатор;
   
       ТекстЗапроса = "
       |Товар = Документ." + Идент + ".ТекущийДокумент;
       |Функция КолЗап = Счётчик(Товар);";
       
       Если Запрос.Выполнить(ТекстЗапроса) = 1 Тогда
           Кол = Кол + Запрос.КолЗап;  
       КонецЕсли;        
       
   КонецЦикла;
12 DANDAN
 
13.01.06
11:25
Огромное спасибо.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой