Имя: Пароль:
1C
1С v8
РезультатЗапроса.Пустой()
,
0 timgan
 
12.05.15
07:42
Что значит: без учета общих итогов?
1 vicof
 
12.05.15
07:58
Открываем СП и читаем, там русским по белому написано, зачем нужен метод пустой()
2 timgan
 
12.05.15
09:15
Спасибо, СП читал: "Определяет, есть ли в результате записи (без учета общих итогов).
Извини, если вопрос глупый, а что могут быть общие итоги без записей?
3 1Сергей
 
12.05.15
09:16
(2) общий итог есть всегда. не?
4 User_Agronom
 
12.05.15
09:17
(2) Да. Итого, 0 единиц!
5 timgan
 
12.05.15
09:26
User_Agronom, если можно пример Запроса: Итого, 0 единиц!
6 timgan
 
12.05.15
10:19
Может кто-нибудь объяснит?
7 1Сергей
 
12.05.15
10:31
(6) слушай, а тебе вот не всё-равно? Разве сказанное в скобках как-то кардинально меняет суть? Тебе нужно использовать где-то общие итоги, даже если не было строк в результате запроса? Или, может, ты не знаешь как правильно пользоваться функцией Пустой()?
8 timgan
 
12.05.15
10:44
Функция Пустой() понятная, я просто в голове не могу придумать пример где нет строк в результате запроса, а общий итог есть.
Да, ты прав вопрос, чисто теоретический.
9 fisher
 
12.05.15
11:24
Подозреваю - атавизм в справке. Вполне возможно, что когда-то пустой общий итог возвращался.
10 ViSo76
 
12.05.15
11:43
(9) Не атавизм. Итоги расчитываются на сервере предприятия. Никаких итогов нет в возврате данных из базы.

1С действует так: посылает запрос в базу по команде Выбрать(). По команде .Пустой() считывается информация сколько реально было выбрано записей и возвращается соответственно истина если записей = 0. Данные запроса на клиента не тащатся.
11 timgan
 
12.05.15
13:36
(10) Выполнить() (не Выбрать())
12 timgan
 
12.05.15
13:37
(9) атавизм - хорошая версия
13 ViSo76
 
12.05.15
13:43
(11) Да ошибся, конечно же Выполнить()
14 fisher
 
12.05.15
14:12
(10) Спасибо, кэп. А теперь еще раз - как в свете этого сакрального знания трактовать фразу "без учета общих итогов"?
15 b_ru
 
12.05.15
14:28
(5)
ВЫБРАТЬ 1 КАК Количество
ИЗ
ВЫБРАТЬ "А" КАК Поле1 КАК Запрос1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
ВЫБРАТЬ "Б" КАК Поле2 КАК Запрос2
ПО Запрос1.Поле1 = Запрос2.Поле2
ИТОГИ ПО Сумма(Количество) ОБЩИЕ.
16 fisher
 
12.05.15
15:08
(15) Судя по синтаксическим ошибкам, сам ты его не запускал, но почему-то свято уверен, что итоговая запись будет в результате.
17 timgan
 
12.05.15
15:32
(15) Уважаемый, не мог бы ты прокомментировать решение, я так понимаю что:

ИТОГИ
  СУММА(Количество)
ПО
  ОБЩИЕ

РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам)
Выборка.Следующий();
Выборка.Количество должно быть равно 1.
У меня Выборка.Количество равно Неопределено
18 timgan
 
12.05.15
16:00
(16) Нет запускал, я сделал свой:

    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    1 КАК Количество
        |ИЗ
        |    Документ.МножественныйВыбор.Товары КАК МножественныйВыборТовары
        |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
        |        ПО МножественныйВыборТовары.Номенклатура = Товары.Ссылка
        |ИТОГИ
        |    СУММА(Количество)
        |ПО
        |    ОБЩИЕ";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Выборка.Следующий();
    Сообщить(Выборка.Количество);
    Сообщить(ТипЗнч(Выборка.Количество));
19 timgan
 
12.05.15
16:12
fisher я думал это ты мне, ссори
20 sanja26
 
12.05.15
16:35
Если указаны Итоги в запросе, результат запроса будет не пустой, несмотря на то, что записей нет. Будет одна строка в результате с нулем.
21 fisher
 
12.05.15
16:45
Еще один писатель.
22 ViSo76
 
12.05.15
21:22
(14) Общие итоги в последствии добавляются в результат "возврата". Итоги добавляют в результат строки с рассчитанными итоговыми колонками и с системной информацией, типа строка является итоговой, уровень и т.д.
23 timgan
 
13.05.15
06:41
(22) Я так тебе понимаю:

В примере Запрос: выборка из ТабличнойЧасти "Товары" документа "РасходнаяНакладная".

В ТабличнойЧасти всех документов, попадающих в выборку, Реквизит Сумма = 0, тогда детальных записей нет и Функция Пустой() = Истина, т.е. в РезультатеЗапроса записей нет.

Тем не менее Итоги Общие - запись есть и к ней можно "обратиться" и вернет она Тип "Неопределено"

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|   РасходнаяНакладнаяТовары.Сумма КАК Сумма
|ИЗ
|   Документ.РасходнаяНакладная.Товары КАК РасходнаяНакладнаяТовары
|
|ИТОГИ ПО
|   ОБЩИЕ";
    
РезультатЗапроса = Запрос.Выполнить();

//Общий Итог    
ВыборкаОбщийИтог = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
ВыборкаОбщийИтог.Следующий();

Сообщить(ВыборкаОбщийИтог.Сумма);
Сообщить(ТипЗнч(ВыборкаОбщийИтог.Сумма));
Сообщить(РезультатЗапроса.Пустой());
    
//Выборка Детальных записей    
ВыборкаДетальныеЗаписи = ВыборкаОбщийИтог.Выбрать();
    
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
   Сообщить(ВыборкаДетальныеЗаписи.Сумма);
КонецЦикла;
24 timgan
 
13.05.15
06:51
Добавлю, если в Запросе указать:

|ИТОГИ ПО
|   ОБЩИЕ,
|   Сумма";

То записей по группировке "Сумма" - нет и "обратиться" к ним нельзя, тогда в описании СП: "без учета общих итогов" есть ИСТИНА.
25 ViSo76
 
13.05.15
08:14
(23) Ты не правильно меня понял вернет истину если записей нет вообще в табличной части, а итог будет построен на сервере предприятия и в результате будет 1 строка итоговая.
26 timgan
 
13.05.15
09:03
(25) ViSo76 спасибо за разъяснение, -я именно это и имел в виду в (23) и (24), что в результате будет 1 строка итоговая.

fisher, спасибо.

Всем спасибо.
27 fisher
 
13.05.15
09:22
(25)(26) Не будет итоговой строки. Она исключается из результата при отсутствии детальных записей. Об этом и речь. Формулировка "без учета общих итогов" сейчас не имеет смысла, т.к. общие итоги и так не учитываются при отсутствии детальных записей.
(26) Модифицируй свой пример из (18). Сделай
    Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока Выборка.Следующий() Цикл
         Сообщить(Выборка.Количество);
         Сообщить(ТипЗнч(Выборка.Количество));
    КонецЦикла;
28 fisher
 
13.05.15
09:32
Выборка.Следующий() на пустой выборке исключения не даёт. Хоть обвызывайся. Просто возвращает Ложь.
29 timgan
 
13.05.15
10:29
(28) Надо признать,что ты прав, метод Следующий(), - который позиционирует на запись выборки результата запроса, дает: ЛОЖЬ.

Значит: атавизм

Спасибо fisher, за науку