Имя: Пароль:
1C
1С v8
проверка выборки на содержимое
0 LivingStar
 
22.10.12
11:09
если выборка произведена следующим образом

Выборка = Запрос.Выполнить().Выбрать();

как можно проверить Выборка на содержимое, что бы не обрабатывать пустую выборку

в моем примере
Выборка.Следующий() не выполнилась, но ЗначениеЗаполнено(Выборка) выдает значение Истина
1 Cube
 
22.10.12
11:10
(0) Туповатые вопросы...
СП украли?
2 lxndr
 
22.10.12
11:11
РезультатЗапроса.Пустой()
3 Cube
 
22.10.12
11:11
Из СП:

ВыборкаИзРезультатаЗапроса.Количество (QueryResultSelection.Count)
ВыборкаИзРезультатаЗапроса (QueryResultSelection)
Количество (Count)

Синтаксис:
Количество()

Возвращаемое значение:
Тип: Число.

Описание:
Получает количество записей в выборке из результата запроса.

Доступность:
Сервер, толстый клиент, внешнее соединение.
4 rutony
 
22.10.12
11:12
(0)
РезультатЗапроса = Запрос.Выполнить();

Если РезультатЗапроса.Пустой() Тогда
  Сообщить("Дак нет же нифига!");
  Возврат;
КонецЕсли;
5 LivingStar
 
22.10.12
11:12
(4) это Результат, а Выборку как в (0) не проверить?
6 Cube
 
22.10.12
11:13
(5) Ещё и слепой?))) Смотри (3) до просветления.
7 LivingStar
 
22.10.12
11:14
(3) спасибо!!! Выборка.Количество() сработало
8 Fragster
 
гуру
22.10.12
11:14
(5) а зачем делать выборку, если результат пустой?
Да и пока выборка.Следующий() Цикл работает... если 1 строка то цикл заменяется на если и продолжаем танцы...
9 Shurjk
 
22.10.12
11:14
(5) Правильней сначала результат проверить а потом выборку делать.
10 LivingStar
 
22.10.12
11:14
(7+) думал неработает как и Пустой()

спасибо!
11 rutony
 
22.10.12
11:14
(5) А зачем тебе вообще выборку делать если там ничего  нет...
Ну а если хочется всеравно ------> (3) <-------
12 LivingStar
 
22.10.12
11:15
(9) а чем правильнее? что можно проверить?
13 rutony
 
22.10.12
11:15
(12) Правильнее проверить на Пустой()
14 LivingStar
 
22.10.12
11:15
не люблю лишние строки кода, в одну все умещать решил, и проверять Выборку(), выходит это совсем не оптимально?!
15 LivingStar
 
22.10.12
11:16
(13) на пустой() тогда нужно результат проверять, что в (0) для этого не подойдет
16 ssh2006
 
22.10.12
11:17
(0) > что бы не обрабатывать пустую выборку

Что там обрабатывать?
17 Wern
 
22.10.12
11:18
Смысла нет проверять результат если можно проверить выборку. на скорость выполнения это не повлияет, если выборка пустая то время выполнения незначительно, а если не пустая, то выборку все равно получать.
18 LivingStar
 
22.10.12
11:20
(17) тогда можно использовать
Если Выборка.Количество() <> 0 Тогда

для проверки
19 sidalexsandr
 
22.10.12
11:20
(0) Смотри (3),(4) правильно говорит.
20 Wern
 
22.10.12
11:20
Я вообще обычно через следующий проверяю, чтоб строчки не плодить. "Если Выборка.Следующий() Тогда ..." С количеством тоже лишняя строчка получается. смысла мало.
21 LivingStar
 
22.10.12
11:21
(20) со следующий это в цикле, а если так вот


   Если Не Выборка.Количество() <> 0 Тогда
       Пока Выборка.Следующий() Цикл
           Движение              = Движения.ОстаткиНоменклатуры.Добавить();
           Движение.ВидДвижения  = ВидДвиженияНакопления.Расход;
           Движение.Период       = Дата;
           Движение.Номенклатура = Выборка.Номенклатура;
           Движение.СрокГодности = Выборка.СрокГодности;
           Движение.Партия       = Выборка.Партия;
           Движение.Количество   = - Выборка.Количество;
           Движение.Сумма        = - Выборка.Сумма;
       КонецЦикла;
       Движения.ОстаткиНоменклатуры.Записать();
       // ФОРМИРОВАНИЕ НОВОГО СПИСАНИЯ
       ВычисленияНаСервере.СписаниеТоваров(ВТ, Движения, Ссылка, Отказ);            
   КонецЕсли;
22 LivingStar
 
22.10.12
11:21
Если Выборка.Количество() <> 0 Тогда
       Пока Выборка.Следующий() Цикл
           Движение              = Движения.ОстаткиНоменклатуры.Добавить();
           Движение.ВидДвижения  = ВидДвиженияНакопления.Расход;
           Движение.Период       = Дата;
           Движение.Номенклатура = Выборка.Номенклатура;
           Движение.СрокГодности = Выборка.СрокГодности;
           Движение.Партия       = Выборка.Партия;
           Движение.Количество   = - Выборка.Количество;
           Движение.Сумма        = - Выборка.Сумма;
       КонецЦикла;
       Движения.ОстаткиНоменклатуры.Записать();
       // ФОРМИРОВАНИЕ НОВОГО СПИСАНИЯ
       ВычисленияНаСервере.СписаниеТоваров(ВТ, Движения, Ссылка, Отказ);            
   КонецЕсли;
23 rutony
 
22.10.12
11:26
(17) Вот оно подрастающее поколение, если работает и так чего париться, ну купим компьютер помощнее если что...

А если будет несколько вложенных выборок, например, 5 для вывода сложного отчета... Уже наверное не так быстро будет...

(22) Как о стенку горох..
24 Cube
 
22.10.12
11:28
(23) А что, если результат пустой, то он будет отличаться в зависимости от количества вложенных выборок? Или я что-то не так понял?
25 hhhh
 
22.10.12
11:29
(23) сейчас новые времена. Пять выборок - это во времена динозавров было. Сейчас всегда только одна выборка.
26 tdm
 
22.10.12
11:30
(22)
Если Выборка.Количество() Тогда

тоже по идее работать будет (неявное преобразование) ...хот я в свете "ну купим компьютер помощнее если что..." ваш вариант кошернее))
27 Cube
 
22.10.12
11:30
(23) Давно известно, что разименовывание полей в запросах не оптимально по производительности, но ничего, все хавают, все довольны... А ты не пользуешься разименовыванием?
28 rutony
 
22.10.12
11:33
(24)(25) Не все и всегда можно решить универсальными средствами, либо одним циклом/выборкой, бывало что приходилось делать выборки по группам, и по деталям групп, либо по подгрупам и тд...
29 tdm
 
22.10.12
11:34
(21)(22) интересно а как быстрее ?

Не Выборка.Количество() = 0
или
Выборка.Количество() <> 0

прост знал одного колегу исключительно "Не Выборка.Количество() = 0" конструкцию использовал))
30 hhhh
 
22.10.12
11:36
(28) новое поколение использует СКД.
31 Cube
 
22.10.12
11:37
(29) А так: "Если Выборка.Количество() Тогда" =))
32 rutony
 
22.10.12
11:41
(30) Сделай мне отчет на СКД, с возможностью изменения данных прямо на табличном поле с пересчетом, и возможностью формирования документа на основе введенных данных. И давай, что б совсем просто небыло, давай еще добавим картинок =)
33 Cube
 
22.10.12
11:42
(32) Так это ж обработка, а не отчет... :)
34 Fragster
 
гуру
22.10.12
12:02
(25) кстати да, я тут недавно сделал ФИФО через итоги и обход.прямой, код понятнее, чем через ВыборкаУлюлю = ВыброкаТратата.Выбрать(), ВыборкаГыгыгы = ВыборкаУлюлю.Выбрать()...


Примерно так:

   Выборка = Построитель.Результат.Выбрать(ОбходРезультатаЗапроса.Прямой);
   Пока Выборка.Следующий() Цикл
       
       Если
           Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ИтогПоГруппировке
           И Выборка.Группировка() = "Количество"
       Тогда
           ОстатокКоличества = Выборка.Количество;
           Если ОстатокКоличества > Выборка.КоличествоОстаток Тогда
               Отказ = Истина;
           КонецЕсли;
       КонецЕсли;
       
       Если Не Отказ И Выборка.ТипЗаписи() = ТипЗаписиЗапроса.ДетальнаяЗапись Тогда
                   .........
       КонецЕсли;
       
   КонецЦикла;
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.