Товарищи. Столкнулся с такой проблемой, что при попытке посчитать кол-во строк в запросе, выдаёт ошибку.

Весь запрос такой.

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование КАК Наименование,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Номер КАК Код,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.ДатаОкончанияСрокаДействия КАК СрокСертификата,
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура КАК Номенклатура,
    | КОЛИЧЕСТВО(ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование) КАК КолВоСтр
    |ИЗ
    | РегистрСведений.ОбластиДействияСертификатовНоменклатуры КАК ОбластиДействияСертификатовНоменклатуры
    |ГДЕ
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура В (&НоменклатураМассив)
    |
    |УПОРЯДОЧИТЬ ПО
    | Номенклатура";
```
---
т.е.

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование КАК Наименование,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Номер КАК Код,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.ДатаОкончанияСрокаДействия КАК СрокСертификата,
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура КАК Номенклатура,
    | КОЛИЧЕСТВО(ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование) КАК КолВоСтр
    |ИЗ
    | РегистрСведений.ОбластиДействияСертификатовНоменклатуры КАК ОбластиДействияСертификатовНоменклатуры
    |ГДЕ
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура В (&НоменклатураМассив)
    |

    сгруппировать по

    ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование ,
    ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Номер ,
    ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.ДатаОкончанияСрокаДействия,
    ОбластиДействияСертификатовНоменклатуры.Номенклатура

    |УПОРЯДОЧИТЬ ПО
    | Номенклатура";
```
---
нет.

```1c
    КолВо = ВыборкаДетальныеЗаписи.Количество();
```
---
тут проблема в коде вывода. Нужно присоединение делать, или сразу выводить для строки обеих колонок.
Как вариант:

```1c
    КолВо = ВыборкаДетальныеЗаписи.Количество();
    Пока КолВо > 1 И ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОбластьТовар.параметры.СертификатыКод= КолВо;
    ОбластьТовар.параметры.СертификатыНаименование= ВыборкаДетальныеЗаписи.Номенклатура ;
    КолВо = КолВо - 1;
    ВыборкаДетальныеЗаписи.Следующий();
    ОбластьТовар.параметры.СертификатыКод2= КолВо;
    ОбластьТовар.параметры.СертификатыНаименование2= ВыборкаДетальныеЗаписи.Номенклатура ;
    ТабДок.Вывести(ОбластьТовар);
    КолВо = КолВо - 1;
    КонецЦикла;
    Если КолВо > 0 Тогда
    ВыборкаДетальныеЗаписи.Следующий();
    ОбластьТовар.параметры.СертификатыКод= КолВо;
    ОбластьТовар.параметры.СертификатыНаименование= ВыборкаДетальныеЗаписи.Номенклатура ;
    ОбластьТовар.параметры.СертификатыКод2= Неопределено;
    ОбластьТовар.параметры.СертификатыНаименование2= " ;
    ТабДок.Вывести(ОбластьТовар);
    КонецЕсли;
```

Делал на коленке, нужно проверить.
---
При использовании функций типа Количество() Сумма() Максимум(0 ит .п. нужно использовать оператор сгруппировать
---
т.е.

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование КАК Наименование,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Номер КАК Код,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.ДатаОкончанияСрокаДействия КАК СрокСертификата,
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура КАК Номенклатура,
    | КОЛИЧЕСТВО(ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование) КАК КолВоСтр
    |ИЗ
    | РегистрСведений.ОбластиДействияСертификатовНоменклатуры КАК ОбластиДействияСертификатовНоменклатуры
    |ГДЕ
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура В (&НоменклатураМассив)
    |

    сгруппировать по

    ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование ,
    ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Номер ,
    ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.ДатаОкончанияСрокаДействия,
    ОбластиДействияСертификатовНоменклатуры.Номенклатура

    |УПОРЯДОЧИТЬ ПО
    | Номенклатура";
```
---
Упустил из виду, спасибо.
---
ДОбавь по Условия ГДЕ

СГРУППИРОВАТЬ ПО

        | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование КАК Наименование,
        | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Номер КАК Код,
        | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.ДатаОкончанияСрокаДействия КАК СрокСертификата,
        | ОбластиДействияСертификатовНоменклатуры.Номенклатура КАК Номенклатура,
---
Правда теперь 1Ска выдаёт что количество, это типа, не число, как я понимаю:
Вот код после запроса. Ссылается на Если ВыборкаДетальныеЗаписи.КолВоСтр <= КолВо/2 Тогда

```1c
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    //ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
    ОбластьЗаголовок = Макет.ПолучитьОбласть("ЗаголовокСертификаты");
    ТабДок.Вывести(ОбластьЗаголовок);
    ОбластьШапка = Макет.ПолучитьОбласть("ШапкаСертификаты");
    ТабДок.Вывести(ОбластьШапка);
    ОбластьТовар = Макет.ПолучитьОбласть("СтрокаСертификаты");
    КолВо = ВыборкаДетальныеЗаписи.КолВоСтр;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Если ВыборкаДетальныеЗаписи.КолВоСтр <= КолВо/2 Тогда
    ОбластьТовар.параметры.СертификатыКод= ВыборкаДетальныеЗаписи.Код;
    ОбластьТовар.параметры.СертификатыНаименование= ВыборкаДетальныеЗаписи.Номенклатура ;
    //ОбластьТовар.параметры.СертификатыНомер= "№"+ВыборкаДетальныеЗаписи.Наименование;
    //ОбластьТовар.параметры.СертификатыСрок= ВыборкаДетальныеЗаписи.СрокСертификата;
    ТабДок.Вывести(ОбластьТовар);
    Иначе
    ОбластьТовар.параметры.СертификатыКод2= ВыборкаДетальныеЗаписи.Код;
    ОбластьТовар.параметры.СертификатыНаименование2= ВыборкаДетальныеЗаписи.Номенклатура ;
    ТабДок.Вывести(ОбластьТовар);
    КонецЕсли;
    КонецЦикла;
```

И пишет Преобразование значения к типу Число не может быть выполнено
---
КолВо = ВыборкаДетальныеЗаписи.КолВоСтр;
это что за набор символов?
---
посмотри выше sql запрос.

Как уже писал, мне нужно таблицу поделить на две части. Так чтобы вторая половина записалась в другую таблицу.
---
ты не понял. Для 1с это (то что цитировал) бессмысленный набор символов. Точнее КолВо будет равен Неопределено. Нельзя Неопределено поделить на 2.
---
а, вот как. А разве эта строка не задаёт КолВо значения?
```1c
    КолВо = ВыборкаДетальныеЗаписи.КолВоСтр;
```
---
нет.

```1c
    КолВо = ВыборкаДетальныеЗаписи.Количество();
```
---
Сделал проверку на пустое значение, но безрезультатно:
```1c
    Запрос.Текст =
    "ВЫБРАТЬ
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование КАК Наименование,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Номер КАК Код,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.ДатаОкончанияСрокаДействия КАК СрокСертификата,
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура КАК Номенклатура,
    | ВЫБОР
    | КОГДА КОЛИЧЕСТВО(ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование) ЕСТЬ NULL ТОГДА 0
    | ИНАЧЕ КОЛИЧЕСТВО(ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование) КОНЕЦ КАК КолВоСтр
    |ИЗ
    | РегистрСведений.ОбластиДействияСертификатовНоменклатуры КАК ОбластиДействияСертификатовНоменклатуры
    |ГДЕ
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура В (&НоменклатураМассив)
    |СГРУППИРОВАТЬ ПО
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Наименование ,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.Номер ,
    | ОбластиДействияСертификатовНоменклатуры.СертификатНоменклатуры.ДатаОкончанияСрокаДействия,
    | ОбластиДействияСертификатовНоменклатуры.Номенклатура
    |УПОРЯДОЧИТЬ ПО
    | Номенклатура";
```
---
КолВо = ВыборкаДетальныеЗаписи.КолВоСтр; - эта строка не задает количество, потому что в этот момент, когда вы пытаетесь достать "КолВоСтр" из выборки, сама выборка еще не определена. Поэтому "КолВо" после этой операции так и остается "Неопределено". Если напишете эту строку, после "ВыборкаДетальныеЗаписи.Следующий()", то получите ваше количество из запроса.
Как вы собрались делить таким способом таблицу на двое, уже другой вопрос.
Вы своим способом не достаете количество записей в выборке, а достаете количество сгруппированных записей. Как вам уже сказали выше, если вам нужно получить именно количество записей в выборке, используйте "ВыборкаДетальныеЗаписи.Количество()".
---
спасибо, теперь понятно.
---
Сижу немного в недоумении. Логика верная, но код выдаёт не совсем корректный результат.

```1c
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Если ВыборкаДетальныеЗаписи.Количество()/2 < КолВо Тогда
    ОбластьТовар.параметры.СертификатыКод= КолВо;
    ОбластьТовар.параметры.СертификатыНаименование= ВыборкаДетальныеЗаписи.Номенклатура ;
    ТабДок.Вывести(ОбластьТовар);
    ИначеЕсли ВыборкаДетальныеЗаписи.Количество()/2 >= КолВо Тогда
    ОбластьТовар.параметры.СертификатыКод2= КолВо;
    ОбластьТовар.параметры.СертификатыНаименование2= ВыборкаДетальныеЗаписи.Номенклатура ;
    ТабДок.Вывести(ОбластьТовар);
    КонецЕсли;
    КолВо = КолВо - 1;
    КонецЦикла;
```

Пробовал и через Иначе и через ИначеЕсли, результат одинаковый. Дублирует 2 раза третий элемент и в правой таблице вставляет пустые строки. А в идеале должно быть 2 таблицы 2х2
---
тут проблема в коде вывода. Нужно присоединение делать, или сразу выводить для строки обеих колонок.
Как вариант:

```1c
    КолВо = ВыборкаДетальныеЗаписи.Количество();
    Пока КолВо > 1 И ВыборкаДетальныеЗаписи.Следующий() Цикл
    ОбластьТовар.параметры.СертификатыКод= КолВо;
    ОбластьТовар.параметры.СертификатыНаименование= ВыборкаДетальныеЗаписи.Номенклатура ;
    КолВо = КолВо - 1;
    ВыборкаДетальныеЗаписи.Следующий();
    ОбластьТовар.параметры.СертификатыКод2= КолВо;
    ОбластьТовар.параметры.СертификатыНаименование2= ВыборкаДетальныеЗаписи.Номенклатура ;
    ТабДок.Вывести(ОбластьТовар);
    КолВо = КолВо - 1;
    КонецЦикла;
    Если КолВо > 0 Тогда
    ВыборкаДетальныеЗаписи.Следующий();
    ОбластьТовар.параметры.СертификатыКод= КолВо;
    ОбластьТовар.параметры.СертификатыНаименование= ВыборкаДетальныеЗаписи.Номенклатура ;
    ОбластьТовар.параметры.СертификатыКод2= Неопределено;
    ОбластьТовар.параметры.СертификатыНаименование2= " ;
    ТабДок.Вывести(ОбластьТовар);
    КонецЕсли;
```

Делал на коленке, нужно проверить.
---
Интересно, спасибо. Я тоже думал над присоединением. Синтаксических ошибок нет, правда завис при первом запуске =D Но это то что нужно. Благодарю за помощь.
---
Предлагаю после запроса, но до вывода сформировать ТаблицуЗначений на 4 колонки (алалогично печатной форме)
А уж потом выводить построчно эту ТаблицуЗначений