Добрый день! Имеется задача раздельно посчитать количество элементов и вывести их в декорацию на форму. Моя табличная часть заполняется по условию в которое попадают элементы с долгом по А и с долгом по Б. Мне нужно вывести в каждую отдельную декорацию количество элементов с долгом А и количество элементов с долгом Б. Долгом А будет считаться, если в колонке дата выполнения А будет стоять пустота, а долгом Б, если в колонке дата выполнения Б будет стоять пустота. Надеюсь объяснил понятно
---
Получай массив через НайтиСтроки, по столбику А с пустыми строками, и в декорацию выводи .Количество()
и тоже самое по столбику Б
Вот собственно и все))
---
Получай массив через НайтиСтроки, по столбику А с пустыми строками, и в декорацию выводи .Количество()
и тоже самое по столбику Б
Вот собственно и все))
---
НайтиСтроки
Это всё на сервере получать? Дело в том, что у меня не запросом получаются эти столбцы, а заполняются в ТЧ по куче Если и проще из ТЧ собрать эти значения и обработать
---
НайтиСтроки() работает на сервере.
Так у вас ведь в итоге ТЧ заполнена, её и берите, не нужен запрос, ТЧ.НайтиСтроки(ПараметрыОтбора)

Ну и коль уж затронули тему Запросов, можете вообще эту ТЧ закинуть в Запрос и обработать там. Но я бы пошел через найти строки, для большей элегантности)
---
Ну и коль уж затронули тему Запросов, можете вообще эту ТЧ закинуть в Запрос и обработать там. Но я бы пошел через найти строки, для большей элегантности)

Правильно понимаю, что получаю текущие данные, передаю на сервер их и там уже через НайтиСтроки выполняю поиск нужных элементов? Или можно без этого обойтись?
---
Через НайтиСтроки получилось, но только если добавляю одно значение в отбор, почему-то когда в отборе 2 значения показывает левую цифру. Вот такой код, если нетрудно, подскажите, пожалуйста, где неправильно сделал

```1c
    Отбор = Новый Структура;
    Отбор.Вставить("ДатаГотовностиПирФакт",НС.ДатаГотовностиПирФакт);
    Отбор.Вставить("ДатаГотовностиСмрФакт",НС.ДатаГотовностиСмрФакт);
    Строки = Объект.ТЧ.НайтиСтроки(Отбор);

    Если Не ЗначениеЗаполнено(Строки[0].ДатаГотовностиПирФакт) Тогда
    Элементы.ДолгиПИР.Заголовок = "Кол-во долгов ПИР - " + Строки.Количество();
    КонецЕсли;
```

С ним выводит неверное количество, если закомментить ДатаГотовностиСмрФакт, тогда показывает правильно, но кажется всё равно где-то что-то неправильно сделал
---
Судя по коду:
У вас выполняется при поиске строк условия:
ДатаГотовностиПирФакт = НС.ДатаГотовностиПирФакт
ДатаГотовностиСмрФакт = НС.ДатаГотовностиСмрФакт

Находится n-ое количество строк в которых есть эти значения.
И тут вроде бы все хорошо, но вот что происходит в Условии мне не понятно:

Вы сначала проверяете заполнено ли значение в строке в реквизите "ДатаГотовностиПирФакт", и если заполнено то вы выводите строку ""Кол-во долгов ПИР - " + Строки.Количество()", но в Строки.Количество() у вас общее количество строк ТЧ соответствующих установленному отбору выше.
---
Проверял на заполнение, потому что в случае, если значение пустое, тогда будет считаться долгом и должно попасть в общее количество долгов в декорации
---
вам нет смысла проверять, вы в Строки получили только те значения в которых у вас заполнены И ДатаГотовностиПирФакт И ДатаГотовностиСмрФакт.
Иных строк в массиве нет(посмотрите отладкой).

Если нужно получить только одни или только другие делайте две переменные Строки1 и СТркои2 с разными параметрами отбора.
---
Всё, понял. Спасибо большое что разъяснили!
---
ну или, если данных действительно не много, то проходите циклом, как предложили ниже.
Вариант хороший, если объемы данных не большие будут.
---
Если НайтиСтроки для вас вызывает сложность можете просто в цикле обойти табличную часть и если строка подходит под условие, то считать ее.
---
А обходить ТЧ на сервере или на клиенте, где она заполняется?
---
Обходить ТЧ можно хоть на клиенте, хоть на сервере.
---
Теперь понял. Получается мне не нужны ТекущиеДанные, а можно сразу напрямую работать с ТЧ и из неё получать количество и прочее и в декорацию добавлять
---
здесь вам не нужно получать ТекДанные.

```1c
    Счет = 0;
    Для каждого Стр из ТЧ цикл
    Если Стр.Значение1 = ЗначениеОтбора1 и Стр.Значение2 = ЗначениеОтбора2 тогда
    Счет=Счет+1;
    КонецЕсли;
    КонецЦикла;
```

И после выполнения Цикла у вас в переменной счет будет количество которое покажет в каком количестве строк выполнилось условие
---
Для каждого Стр из ТЧ цикл
    Если Стр.Значение1 = ЗначениеОтбора1 и Стр.Значение2 = ЗначениеОтбора2 тогда
        Счет=Счет+1;

А если нужно только пустые значения получать, то пишу, что Если НЕ ЗначениеЗаполнено? А то тут получается все попадают

Вот такой код получился, но не всегда корректно считает почему-то. При разных условиях разные значения получаются, иногда правильно, иногда нет

```1c
    НС = Объект.ТЧ.Добавить();
    НС.Номер = Выб.НомерДоговора;
    НС.Заявитель = Выб.КонтрагентСсылка;
    НС.Объект = Выб.ОбъектСсылка;
    Если НЕ ЗначениеЗаполнено(Выб.ОбъектСсылка) Тогда
    НС.Адрес = ";
    Иначе
    НС.Адрес = Выб.ОбъектСсылка.Адрес;
    КонецЕсли;
    НС.ДатаДоговора = Выб.ДатаДоговора;
    НС.ДокументСсылка = Выб.Ссылка;
    НС.СрокТП = Выб.ДатаВыполненияРаботПоДоговору;
    НС.Сумма = Выб.СтоимостьДоговора;
    НС.Оплачено = Выб.Оплачено;
    НС.ПирПто = Выб.ДатаВыдачиЗаданияПТОнаПИР;
    НС.СмрПто = Выб.ДатаВыдачиЗаданияПТОнаСМР;
    НС.ДатаВыполнения = Выб.ДатаВыполненияПоЗаданиюСТПиРП;

    Если ЗначениеЗаполнено(КР) Тогда
    Если КР.ПИР.Количество() > 0 Тогда
    НС.ДатаГотовностиПирПлан = КР.ПИР[0].ДатаГотовностиПлан;
    КонецЕсли;
    Если КР.ПИР.Количество() > 0 Тогда
    НС.ДатаГотовностиПирФакт = КР.ПИР[0].ДатаГотовностиФакт;
    КонецЕсли;
    Если КР.СМР.Количество() > 0 Тогда
    НС.ДатаГотовностиСмрПлан = КР.СМР[0].ДатаСоставленияАктаПлан;
    КонецЕсли;
    Если КР.СМР.Количество() > 0 Тогда
    НС.ДатаГотовностиСмрФакт = КР.СМР[0].ДатаСоставленияАктаФакт;
    КонецЕсли;
    КонецЕсли;

    ОтборПИР = Новый Структура;
    ОтборПИР.Вставить("ДатаГотовностиПирФакт",Объект.ТЧ[0].ДатаГотовностиПирФакт);
    Строки = Объект.ТЧ.НайтиСтроки(ОтборПИР);
    Счет = 0;
    Для каждого Стр из Объект.ТЧ цикл
    Если Стр.ДатаГотовностиПирФакт = Строки[0].ДатаГотовностиПирФакт Тогда
    Счет=Счет+1;
    КонецЕсли;
    КонецЦикла;
    Элементы.ДолгиПИР.Заголовок = "Кол-во долгов ПИР - " + Счет;

    ОтборСМР = Новый Структура;
    ОтборСМР.Вставить("ДатаГотовностиСмрФакт",Объект.ТЧ[0].ДатаГотовностиСмрФакт);
    Строки = Объект.ТЧ.НайтиСтроки(ОтборСМР);
    Счет2 = 0;
    Для Каждого Стр из Объект.ТЧ Цикл
    Если Стр.ДатаГотовностиСмрФакт = Строки[0].ДатаГотовностиСмрФакт Тогда
    Счет2=Счет2+1;
    КонецЕсли;
    КонецЦикла;
    Элементы.ДолгиСМР.Заголовок = "Кол-во долгов СМР - " + Счет2;
```
---
Честно говоря ваще не понимаю что у вас тут происходит....
1. Вы находите Строки в которых ДатаГотовностиПирФакт = первой строке из ТЧ.
2. Идете циклом по ТЧ и если в строке ДатаГотовностиПирФакт = Первой строке из массива найденных то +1...

Я вообще запутался, что вы хотите и для чего вы это все нагородили....

В ТЗ было написано, что вам нужно получить количество строк в которых А - Дата"А" пустая, а долг Б - пустая дата"Б"...

МОжет быть проще делать перебор строк в цикле(если все же поиск делаете в цикле, а не через найти строки), так:

```1c
    СчетА = 0;
    СчетБ = 0;
    Для каждого стр из ТЧ цикл
    Если Стр.ДатаА = Дата(1,1,1,0,0,0) тогда
    СчетА = СчетА+1;
    ИначеЕсли Стр.ДатаБ = Дата(1,1,1,0,0,0) тогда
    СчетБ = СчетБ+1;
    КонецЕсли;
    КонецЦикла;
```

Проверяйте строку на пустую дату в нужном столбике и прибавляйте единицу куда нужно, и не делайте дважды обход циклом, не грузите сервер... Раз уже решили проходить циклом, проходите все проверки на каждой итерации.

А если делать поиск строк с пустой датой А через найти строки то делайте что-то такое(переписал ваш же код):

```1c
    ОтборПИР = Новый Структура;
    ОтборПИР.Вставить("ДатаГотовностиПирФакт",Дата(1,1,1,0,0,0));
    Строки = Объект.ТЧ.НайтиСтроки(ОтборПИР);
    Сообщить(Строки.Количество());
```
---
Проверяйте строку на пустую дату в нужном столбике и прибавляйте единицу куда нужно, и не делайте дважды обход циклом, не грузите сервер... Раз уже решили проходить циклом, проходите все проверки на каждой итерации.

Сделал по итогу циклом, да, с датой тоже разобрался пустой. Не знал просто, что в параметры отбора можно вставлять ещё и второе значение для фильтра. Теперь разобрался. Большое спасибо!