Имя: Пароль:
1C
1C 7.7
v7: Как быстро посчитать число элементов справочника?
0 Новый участник
 
20.10.14
11:29
Файловая БД,

ВсегоЭлементов = 0;
Спр = СоздатьОбъект("Справочник.Контрагенты");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл  
    ВсегоЭлементов=ВсегоЭлементов+1;
КонецЦикла;

База УРБДшная, поэтому код не гарантированно равен числу элементов.
1 Grekos2
 
20.10.14
11:31
Может так ?

ВЫБРАТЬ
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Номенклатура.Ссылка) КАК Ссылка
ИЗ
    Справочник.Номенклатура КАК Номенклатура
2 Krolik Bezobraznik
 
20.10.14
11:35
(1) В условии только исключи из отбора группы и помеченные на удаление, если необходимо =)
3 Looser-1c
 
20.10.14
11:37
select count (ID) from $Спраовчник.Контрагеныты
4 73с
 
20.10.14
11:38
(1) а как это в 7.7 работать будет ?
5 Chai Nic
 
20.10.14
11:40
(4) см. (3) - ODBCRecordSet из 1с++.
6 Новый участник
 
20.10.14
11:44
О, наконец-то появилась возможность применить 1С++

Спасибо!
7 DCKiller
 
20.10.14
12:25
(6) Бгггг
8 vcv
 
20.10.14
12:37
Если база DBF, взять размер файла вычесть размер заголовка и поделить на размер записи. Быстрее просто не придумаешь :)
9 Ненавижу 1С
 
гуру
20.10.14
12:40
(8) не забыть про помеченные удаленными записи DBF
10 mg-samara
 
20.10.14
12:59
ТекущийЭлемент = Справочник.Контрагенты.ТекущийЭлемент;
Функция Счётчик = Счётчик()
11 Масянька
 
20.10.14
13:04
Функция получения "свободных" кодов.
    ТекКод = 1;
    
    Спр = СоздатьОбъект("Справочник.Номенклатура");
    Спр.ПорядокКодов();
    
    Спр.ВыбратьЭлементы(0);
    
    Пока Спр.ПолучитьЭлемент() = 1 Цикл
        
        СправКод = Число(Спр.Код);
        
        Пока ТекКод <> СправКод Цикл
            ТекКод = ТекКод + 1;
        КонецЦикла;
        
    КонецЦикла;

В справочнике - сортировка по коду. От последнего кода отнять полученное функцией число.
Как вариант :)
12 1dvd
 
20.10.14
13:06
(11) девушка, Вы в Индии не бывали?
13 mg-samara
 
20.10.14
13:18
(12) Может она там и родилась?
14 Масянька
 
20.10.14
13:24
(12) А что?
(13) Нет.
15 1dvd
 
20.10.14
13:25
(14) Код очень индусский
16 Масянька
 
20.10.14
13:26
(15) Каков вопрос, таков и ответ :)
17 1dvd
 
20.10.14
13:33
(16) раз уж используете цикл, то не проще ли просто посчитать количество простым счётчиком (а = а + 1;) ?
18 Масянька
 
20.10.14
13:35
(17) Нет. Мне были нужны именно "свободные" коды.
19 1dvd
 
20.10.14
13:45
(18) а, ну если Вам были нужны, то да. Пусть (0) тоже спервая считает пропуски, а потом отнимает их от самого большого кода.
20 Simod
 
20.10.14
14:09
Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |ТекущийЭлемент = Справочник.Номенклатура.ТекущийЭлемент;
    |Функция Счётчик = Счётчик();
    |Группировка ТекущийЭлемент без упорядочивания;
    |"
    ;
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;
    Сообщить(Запрос.Счётчик);
21 mg-samara
 
20.10.14
15:31
(20) я уже тут (10) написал.
Но похоже тут никто не читает. :-)
22 МихаилМ
 
20.10.14
15:34
все зависит от варианта хранения данных:

в кс быстрее запрос. в фс - перебор.