Имя: Пароль:
1C
1С v8
v8: Узнать количество элементов номенклатуры.
,
0 artprog
 
15.01.12
14:53
Добрый день.

Делаю перебор номенклатуры таким образом:
dynamic result = baza.Справочники.Номенклатура.Выбрать();
while ((bool)result.Следующий())
           {}

как перед этим узнать количество элементов номенклатуры, не помеченных на удаление?
1 aleks-id
 
15.01.12
14:58
запросом
2 aleks-id
 
15.01.12
14:59
выбрать
количество(1)
из справочник.номенклатура как товар
где не товар.пометкаудаление и не товар.этогруппа
3 Александр_
Тверь
 
15.01.12
15:00
ВЫБРАТЬ
   СУММА(1) КАК КоличествоЭлементов
ИЗ
   Справочник.Номенклатура КАК Номенклатура
ГДЕ
   (НЕ Номенклатура.ПометкаУдаления)
4 PR
 
15.01.12
15:00
(2), (3) КОЛИЧЕСТВО(*)
5 aleks-id
 
15.01.12
15:01
(4) да на коленке писал второпях ))
6 Александр_
Тверь
 
15.01.12
15:02
(4) ы?
7 artprog
 
16.01.12
13:47
Спасибо :) но если делать это запросом, то правильнее наверное запросом выбрать всю номенклатуру, а потом узнать количество элементов выборки? Не подскажите такой запрос?
я с составителем запросов не дружу)
8 evgen2011
 
16.01.12
13:49
(0) в армии 1с-ить завставляют?
9 Wobland
 
16.01.12
13:49
(7) бери (4), не мучайся
10 artprog
 
16.01.12
13:50
правда есть один нюанс. у меня на c# проходят только запросы к регистрам, а запросы к справочникам вылетают ошибкой. Почему это может происходить?
11 andrewks
 
16.01.12
13:50
(10) запрос, код и описание ошибки в студию
12 andrewks
 
16.01.12
13:51
(4) а (3) тут ни при чём
13 Ненавижу 1С
 
гуру
16.01.12
13:52
а цель конечная?
14 artprog
 
16.01.12
14:23
(11)          
zapros_nom.Текст = @"
                       |ВЫБРАТЬ
                       |    Номенклатура.Ссылка
                       |ИЗ
                       |    Справочник.Номенклатура КАК Номенклатура
                       |ГДЕ
                       |    Номенклатура.ПометкаУдаления = ЛОЖЬ";
dynamic result = zapros_nom.Выполнить().Выбрать();

вылетает Ссылка на объект не указывает на экземпляр объекта.
15 artprog
 
16.01.12
14:28
(13)конечная цель програмно выгрузить всю номенклатуру + цены + остаток в файл
16 Ненавижу 1С
 
гуру
16.01.12
14:30
(15) а зачем знать количество элементов выборки?
17 artprog
 
16.01.12
14:31
чтобы отображать прогрессбар
18 artprog
 
16.01.12
14:32
(16) а то человек прождав, пока выгрузится 65000 наименований решит что еще долго и остановит, а там может 500 их осталось.
19 Ненавижу 1С
 
гуру
16.01.12
14:33
(18) у выборки есть метод Количество()
20 artprog
 
16.01.12
14:34
(19)у выборки да, но у меня запрос к справочнику не проходит.

Ссылка на объект не указывает на экземпляр объекта.
21 Ненавижу 1С
 
гуру
16.01.12
14:35
(20) ошибка то на какой строке конкретно?
22 artprog
 
16.01.12
14:35
(21) dynamic result = zapros_nom.Выполнить()
23 GROOVY
 
16.01.12
14:36
(22) Пиши на православном языке, что за замашки дикие на латинице код составлять?
24 Ненавижу 1С
 
гуру
16.01.12
14:37
а так?

dynamic result = zapros_nom.Выполнить();
dynamic selection = result.Выполнить();
25 artprog
 
16.01.12
14:40
на первой строчке
26 Ненавижу 1С
 
гуру
16.01.12
14:41
(25) тогда больше текста, может ты объект запрос криво создаешь?
27 artprog
 
16.01.12
14:44
dynamic zapros_nom = baza.NewObject("Запрос");
           zapros_nom.Текст = @"
|ВЫБРАТЬ ПЕРВЫЕ 500
|    СпНоменклатура.Код
|ИЗ
|    Справочник.Номенклатура КАК СпНоменклатура
|ГДЕ
|    СпНоменклатура.ПометкаУдаления = ЛОЖЬ";
           dynamic result = zapros_nom.Выполнить().Выбрать();
28 artprog
 
16.01.12
14:45
например вот такой запрос работает нормально:
z_nom_ost = @"ВЫБРАТЬ
                         ОстаткиТоваров.Номенклатура КАК Tovar,
                         ОстаткиТоваров.КоличествоОстаток КАК Kolichestvo
                       ИЗ
                         РегистрНакопления.ТоварыНаСкладах.Остатки(, ) КАК ОстаткиТоваров
                       ГДЕ
                         ОстаткиТоваров.Склад.Код = &Склад";

ВСЕ запросы к регистрам работают, а к справочникам - нет.
29 Ненавижу 1С
 
гуру
16.01.12
14:46
ничего не нашел, кроме как синонимы полей сделать на латинице?
30 GROOVY
 
16.01.12
14:47
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 500 Код ИЗ Справочник.Номенклатура ГДЕ НЕ ПометкаУдаления";
Результат = Запрос.Выполнить();
31 GROOVY
 
16.01.12
14:48
(28) За такой запрос обычно принято расстреливать.
32 artprog
 
16.01.12
14:48
(31) почему?
33 Ненавижу 1С
 
гуру
16.01.12
14:49
(32) он намекает на параметры виртуальной таблицы
34 artprog
 
16.01.12
14:49
(31) это уже сотая модификация запроса. изначально был такой:
"
|ВЫБРАТЬ
|    Номенклатура.Ссылка
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|    Номенклатура.ПометкаУдаления = ЛОЖЬ";
35 GROOVY
 
16.01.12
14:49
(33) + на Код = &Склад
36 GROOVY
 
16.01.12
14:51
Моя рекомендация посмотреть мультики по основам запросов http://chistov.spb.ru/publ/free_webinar/6
37 Ненавижу 1С
 
гуру
16.01.12
14:51
(35) так я понял он из-вне параметры получает (не из базы)
38 Ненавижу 1С
 
гуру
16.01.12
14:52
и к чему (30), если автор пишет на C#?
39 artprog
 
16.01.12
14:52
(36) я запросы к 1ске вообще не пишу, мне нужно разобраться почему он не работает со справочниками, а с регистрами работает
40 Griffin
 
16.01.12
14:57
(34) Может, тоже надо псевдоним присвоить, как в запросе к регистру? И еще, по такому запросу в выборку попадут  группы справочника, если он иерархический
41 artprog
 
16.01.12
15:03
(40) мне как раз с группами нужно
42 artprog
 
16.01.12
15:04
пробовал так:

Запрос.Текст = "
|ВЫБРАТЬ
|    СпНоменклатура.Ссылка
|ИЗ
|    Справочник.Номенклатура КАК СпНоменклатура
|ГДЕ
|    СпНоменклатура.ПометкаУдаления = ЛОЖЬ";
43 Griffin
 
16.01.12
15:06
(42) А так:

Запрос.Текст = "
|ВЫБРАТЬ
|    СпНоменклатура.Ссылка как SprNom_ra
|ИЗ
|    Справочник.Номенклатура КАК СпНоменклатура
|ГДЕ
|    СпНоменклатура.ПометкаУдаления = ЛОЖЬ";
44 artprog
 
16.01.12
15:07
не работает. Ссылка на объект не указывает на экземпляр объекта.
45 artprog
 
16.01.12
19:39
Есть еще идеи?
46 hhhh
 
16.01.12
20:29
(44) а на какой строке выдает ошибку ссылка на объект? Пока у тебя таблица здесь, до объектов еще далеко.
47 artprog
 
16.01.12
21:00
(46) dynamic result = zapros_nom.Выполнить();
48 artprog
 
17.01.12
20:50
эгегей!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.