Список форумов Акцент Акцент
официальный форум разработчика программы Акцент
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Кол-во строк в RepWizard?
На страницу 1, 2, 3  След.
 
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.40
Предыдущая тема :: Следующая тема  
Автор Сообщение
Oleksandr
Гость





СообщениеДобавлено: Сб Сен 01, 2012 8:20 pm    Заголовок сообщения: Кол-во строк в RepWizard? Ответить с цитатой

Как лучше узнать кол-во строк в RepWizard после Build?
Вернуться к началу
treasurer



Зарегистрирован: 10.03.2005
Сообщения: 553

СообщениеДобавлено: Вс Сен 02, 2012 11:43 am    Заголовок сообщения: Ответить с цитатой

Никак, потому что в RepWizard нет строк. Там есть многоуровневая структура элементов. Корневой элемент - Root. В него вложено Children элементов. В свою очередь, если уровней больше одного, в элементы первого уровня вложены элементы второго уровня. И т.д. до уровня Levels.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Oleksandr
Гость





СообщениеДобавлено: Вс Сен 02, 2012 1:57 pm    Заголовок сообщения: Ответить с цитатой

Спасибо. Я так и подумал, но лучше уточнить. Вдруг есть какое-то свойство/метод, которое даст это значение.
Вернуться к началу
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Пн Сен 03, 2012 7:39 am    Заголовок сообщения: Ответить с цитатой

Oleksandr писал(а):
Спасибо. Я так и подумал, но лучше уточнить. Вдруг есть какое-то свойство/метод, которое даст это значение.

И что же вы хотели бы получить в результате? Как получить количество элементов в дереве? Ветки считать, или только листья? А если некоторые листья растут на 2 ветках сразу??? Какой ответ вас устраивает? Wink
Для каждой коллекции есть Count. Если вам нужно количество строк, которые получатся, если сделать из отчета Sheet - то таки MakeSheet и потом Rows. Но врядли вам именно это надо Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Oleksandr
Гость





СообщениеДобавлено: Пн Сен 03, 2012 8:57 am    Заголовок сообщения: Ответить с цитатой

kris писал(а):
Oleksandr писал(а):
Спасибо. Я так и подумал, но лучше уточнить. Вдруг есть какое-то свойство/метод, которое даст это значение.

И что же вы хотели бы получить в результате? Как получить количество элементов в дереве? Ветки считать, или только листья?

Только листья Wink кол-во элементов последнего левела.
kris писал(а):

А если некоторые листья растут на 2 ветках сразу???

Это как????

kris писал(а):
Если вам нужно количество строк, которые получатся, если сделать из отчета Sheet - то таки MakeSheet и потом Rows. Но врядли вам именно это надо Smile

Сойдет этот способ. Только нужно 7 отнять (или 8 (вроде), если есть доп. атрибуты)
Вернуться к началу
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Пн Сен 03, 2012 9:08 am    Заголовок сообщения: Ответить с цитатой

Oleksandr писал(а):
Это как????
....
Сойдет этот способ. Только нужно 7 отнять (или 8, если есть атрибуты. вроде так)

Всяко бывает Smile Один и тот же элемент в разных ветках (например, документ). Кто его знает, какой у вас отчет и с чем работает Laughing
Способ-то сойдет, но перебирать у вас все равно не получится. Идти надо по каждой вложенной коллекции отдельно. А таким образом количество можно использовать разве что для Meter'a, когда вначале перебора общее количество листьев еще не известно. Но MakeSheet работает дольше простого перебора для получения количества всех вложенных деревьев, потому это использование тоже сомнительно.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Oleksandr
Гость





СообщениеДобавлено: Пн Сен 03, 2012 10:45 am    Заголовок сообщения: Ответить с цитатой

kris писал(а):

Способ-то сойдет, но перебирать у вас все равно не получится. Идти надо по каждой вложенной коллекции отдельно. А таким образом количество можно использовать разве что для Meter'a, когда вначале перебора общее количество листьев еще не известно.

Смысл вообще в следующем. Есть процедуры/функции, работающие либо с двумерным массивом, полученным из рекордсет, либо с самим рекордсетом. Чтоб их использовать, нужно подготовить результат RepWizard.
Далее решение (поправьте, если есть способы получше):
1. Выясняем размерность массива (.MakeSheet (false); узнаем Rows; узнаем Columns)
2. ReDim Array (Columns, Rows)
3. Заполняем массив перебором всех веток. (Из построенного Sheet нельзя напрямую брать данные, если нужны ID элементов, а не их наименования, я правильно понимаю?)
Для получения размерности массива удобнее использовать MakeSheet, даже если он работает дольше (уверен, время построения в любом случае будет не критично, даже на больших результатах)

kris писал(а):

MakeSheet работает дольше простого перебора для получения количества всех вложенных деревьев

Этот вопрос меня тоже интересовал.
Вернуться к началу
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Пн Сен 03, 2012 1:08 pm    Заголовок сообщения: Ответить с цитатой

Строго говоря, вы не правы.
1. Размер шита может даже примерно не соответствовать количеству элементов во всех уровнях. Пример? Запросто: показывать обороты в столбик.
2. Можно использовать Redim Preserve. На него есть некоторые ограничения, но в вашем случае они не применимы. Да, работает чуток медленне - каждый раз в цикле добавляется выделение памяти.
3. С шитом работать - вообще гиблое дело. Только с Root.

В частном случае ваша схема применима. Но я же не знаю, откуда вы берете RepWizard и насколько этот случай частный?

З.Ы. На больших объемах RepWizard не работает Smile Ну, точнее, работает, но часы Smile Может имеет смысл написать запрос и вернуть готовый RS?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Oleksandr
Гость





СообщениеДобавлено: Пн Сен 03, 2012 1:44 pm    Заголовок сообщения: Ответить с цитатой

kris писал(а):

2. Можно использовать Redim Preserve. На него есть некоторые ограничения, но в вашем случае они не применимы. Да, работает чуток медленне

Чуток? Думаю не чуток. Лучше уже один раз пройти циклами чтоб узнать размер, а вторым заходом заполнить его.
kris писал(а):

В частном случае ваша схема применима. Но я же не знаю, откуда вы берете RepWizard и насколько этот случай частный?

RepWizard сам составляю в том виде какой мне надо.

kris писал(а):

З.Ы. На больших объемах RepWizard не работает Smile Ну, точнее, работает, но часы Smile Может имеет смысл написать запрос и вернуть готовый RS?

Может я и не прав, но стараюсь использовать ОМ там где позволяет сложность выборки. А с каких объемов "листьев" начинает тормозить RepWizard?
Вернуться к началу
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Вт Сен 04, 2012 8:01 am    Заголовок сообщения: Ответить с цитатой

Oleksandr писал(а):

Смысл вообще в следующем. Есть процедуры/функции, работающие либо с двумерным массивом, полученным из рекордсет, либо с самим рекордсетом. Чтоб их использовать, нужно подготовить результат RepWizard.

Чет я все равно не понял. Какая связь между RepWizad и Recordset ?

Есть данные. Они могут быть подготовлены либо мастером отчетов либо запросом. Мастер отчетов возвращает древовидную структуру repWizard, запрос - двумерный массив.

Есть лист электронной таблицы, который нужно заполнить этими данными, но не в стандартном виде (MakeSheet), а в произвольном.

Хочется написать универсальную процедуру, которая бы принимала оба варианта для автоматического заполнения шита ?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Вт Сен 04, 2012 8:08 am    Заголовок сообщения: Ответить с цитатой

Oleksandr писал(а):
Может я и не прав, но стараюсь использовать ОМ там где позволяет сложность выборки. А с каких объемов "листьев" начинает тормозить RepWizard?

Трудно дать какой-то конкретный ответ. Все зависит от сложности визарда и фазы луны Smile
Если в визарде аналитики, то даже на относительно небольшой базе могут быть проблемы. Аналогично - если много уровней. С другой стороны если визард по 311 счету в разрезе дат - скорее всего будет хорошо работать долго и счастливо.
Я в своей практике от визардов полностью отказался уже лет 5 назад. Пускай и тянется в базе пару сотен хранимок, да они пишутся за минуты, а хлеба не просят. И отрабатывают мгновенно. Главное - именовать их по-людски :)

З.Ы. Вот для теста попробовал отчет по платежам за год в базе около 2гб:
* корреспондент-документ: 2 мин (18000 строк)
* корреспондент-документ-аналитика: задолбался ждать, после 10 мин вырубил
* корреспондент-дата: 8 сек (3000 строк)
* корреспондент-дата-аналитика: 20 сек (9000 строк)

В базе объемом 25 гиг аналогичный отчет не строится. Вообще. Даже за 1 день.

З.З.Ы. Все зависит не от количества листьев. А от объема базы и сложности (количества уровней и их содержимого). Визард может работать полдня и вернуть в результате 3 строки. Я не ковырялся в механизме работы визарда, тут есть товарищи, которые истинно постигли принцип его работы, может скажут что-то в дополнение Smile


Последний раз редактировалось: kris (Вт Сен 04, 2012 8:13 am), всего редактировалось 1 раз
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
kris



Зарегистрирован: 12.01.2006
Сообщения: 371

СообщениеДобавлено: Вт Сен 04, 2012 8:10 am    Заголовок сообщения: Ответить с цитатой

olimp писал(а):
Хочется написать универсальную процедуру, которая бы принимала оба варианта для автоматического заполнения шита ?

Видимо, да Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Вт Сен 04, 2012 8:13 am    Заголовок сообщения: Ответить с цитатой

Oleksandr писал(а):

Может я и не прав, но стараюсь использовать ОМ там где позволяет сложность выборки. А с каких объемов "листьев" начинает тормозить RepWizard?

Все зависит от объема информации в базе, показателей их порядка в мастере отчета. Конкретный запрос, в отличии от запроса мастера отчетов, можно оптимизировать.

Например, база 150 тыс проводок и 50 тыс партий. Мастер строит отчет по 1 корр., ОУ в разрезе партий порядка 5 минут. Тот же отчет запрос строит за пару секунд.

Почему так медленно строит мастер, не разбирался. Быстрее было сделать отчет на запросе.
Очень может быть, что медленно работает именно процесс заполнения объекта RepWizard. Это сильно видно, когда меняешь местами показатели. Например, отчет ОУ+партия строится медленнее, чем партия + ОУ.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
olimp
Site Admin


Зарегистрирован: 10.03.2005
Сообщения: 2661

СообщениеДобавлено: Вт Сен 04, 2012 8:27 am    Заголовок сообщения: Ответить с цитатой

kris писал(а):
olimp писал(а):
Хочется написать универсальную процедуру, которая бы принимала оба варианта для автоматического заполнения шита ?

Видимо, да Smile

Если бы у Кухтина было бы время и желание, он бы целую диссертацию написал о попытках написания универсальных процедур для всего и всея :)

Написать универсальную процедуру можно, но для конкретного случая Smile (с) мой
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
Oleksandr
Гость





СообщениеДобавлено: Вт Сен 04, 2012 8:31 am    Заголовок сообщения: Ответить с цитатой

olimp писал(а):

Хочется написать универсальную процедуру, которая бы принимала оба варианта для автоматического заполнения шита ?

Это не обязательно Sheet. Это может быть что угодно, и диалог и форма и даже мессаж бокс или другая процедура не связанная с контролами. Если процедур работающих с двумерным массивом (типа рекордсета) много, то чтоб каждую не переписывать, нужно сделать другую процедуру, которая будет преобразовывать RepWizard в двумерный массив. Либо, если процедура хранится в каком-то модуле, а вызывается неизвестно откуда еще. Чтоб её не менять с риском что что-то перестанет работать в другом месте, проще подготовить для нее данные в том виде, который она понимает.
Вернуться к началу
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Акцент -> Акцент 7.40 Часовой пояс: GMT + 2
На страницу 1, 2, 3  След.
Страница 1 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group