8.х Подсчет строк в табличном поле.

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dm1triy, 9 мар 2009.

  1. TopicStarter Overlay
    Dm1triy
    Offline

    Dm1triy

    Регистрация:
    15 фев 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Народ, как подсчитать количество отображаемых строк в табличном поле?
  2. GY!BE
    Offline

    GY!BE

    Регистрация:
    25 янв 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    ТабличнаяЧасть.Количество()
  3. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    ПолеТабличногоДокумента или ТабличноеПоле?
  4. TopicStarter Overlay
    Dm1triy
    Offline

    Dm1triy

    Регистрация:
    15 фев 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Табличное поле, функция количество не определена. В этом вся и засада.
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Покажите свой код - такая функция там точно есть.
  6. TopicStarter Overlay
    Dm1triy
    Offline

    Dm1triy

    Регистрация:
    15 фев 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    А кода нет. Есть документы, они отображаются на форме списка через табличное поле, в этой форме играют с отбором и количество отображаемых документов меняется. Мне нужно на форму вывести количество отображаемых строк в табличном поле после манипуляций с отбором. По событию ОбновлениеОтображения мне нужно вставить код который бы подсчитывал количество отображаемых строк в табличном поле.
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Ха, так это СОВСЕМ другая задача!

    Смотри событие ПрВыводеСтроки для этого или ПриПолученииДанных.

    Нужно использовать переменную модуля формы для этого, а значение будет заполняться в указанной (одной из двух) процедуре.
  8. TopicStarter Overlay
    Dm1triy
    Offline

    Dm1triy

    Регистрация:
    15 фев 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Я не могу придумать какой либо способ с помощью которого можно было бы подсчитать количество отображаемых строк в табличном поле. Видимо таких средств нет. У меня есть ФормаСписка объекта Документы.БлаБла, на ней через Табличное поле отображаются данные объекта ДокументСписок.БлаБла. Вот каким образом можно подсчитать количество элементов которое содержит ДокуметСписок.БлаБла? Методы Количество() неопределены не у объекта ДокументСписок, не у Табличное поле. Можт как Циклом можно обойти элементы и в теле цикла счетчик?
  9. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Прочитай мой предыдущий пост - там есть ответ на твой вопрос. Делается за пару минут.
  10. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    прикольный метод, что называется в лоб :)

    А если в выборке 20000 строк? побыстрее ничего нет?
  11. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Причем тут выборка?????
    Учите матчасть!

    У вас ДИНАМИЧЕСКИЙ список - это раз!
    А два - вообще плевать, что у вас там!
  12. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    Выборка, т.к. автор темы хочет отбирать по неким фильтрам. Т.е. получить выборку. А то что звучит как результат выполения запроса, то это ограничение языка.

    ээээм. Давай по порядку. Код ПриВыводеСтроки выполняется для каждой строки выводимой в табличное поле, событие ПриПолученииДанных сразу после предыдущего события. Вполне логично предположить, что предлагается сделать глобальную переменную в форме списка и при наступления события увеличивать ее на 1? Или я слишком прямо думаю и подразумевается что-то более изощренное? Тока вот динамические списки отображения данных не выводятся все сразу... или опять же я чего-тол недогоняу?
  13. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
  14. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
  15. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    В этом случае нет никакой выборки - это просто видимые строки ИЗ выборки, причем выборка из динамического списка.

    Так что выборка здесь не причем.

    Решение очень простое - событие ПриВыводеСтроки, т.к. ПриПолученииДанных нужно будет хитро писать.
  16. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    ладно, а как тогда в этом случае решить проблему, что для большого количества документов не все строки сразу выводятся на экран и соответственно не для всех строк возникает событие ПриВыводеСтроки?
  17. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Не очень понял, что значит НЕ СРАЗУ...?
  18. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    ну насколько я помню теорию, то динамическоие списки как раз и создавались, чтобы ускорить работу пользователя за счет того, что в табличное поле из основного реквизита формы списка считываются не все строки скразу, а только те, которые попадают в видимую область + несколько строк до и после этой области (типа буфера). И, походу дела, событие При Выводе строки срабатывает именно для этих строк. Строки же которые не показываются (за исключением буферных) не вызовут это событие.

    Токо што промоделировал ситуацию - так и есть. Считаются только строки на экране+1, а все остальные не вызывают события ПриВыводеСтроки. Более того если просто написать счетчик (+1) в событие при выводе строки, то счетчик удваивается, т.к. похоже после открытия формы происходит обновление отображения строк. А при перемотке списка вниз/вверх прибавляет понемногу по мере отображения новых строк:)

    так что похоже "просто" не получается... недаром на мисте столько обсуждений было.

    Кстати тестил на 8.0.11.3...
  19. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Собственно, исходя из первого сообщения, я и предполагал, что требуется считать только видимые строки.
    Кстати, их будет не +1, а может быть и +2, а может и +0 :)

    Если требуется считать ВСЕ строки с учетом отбора - тут надо писать запрос с включением этого отбора. Сложного ничего нет.
  20. tunec
    Offline

    tunec Опытный в 1С

    Регистрация:
    2 июн 2008
    Сообщения:
    469
    Симпатии:
    0
    Баллы:
    26
    ну у меня всегда почему-то считает +1 :)

    А смысл считать только видимые строки? узнать сколько их на экран влезает?

Поделиться этой страницей