Фильтруем и выводим "ТаблицуЗначений"

0. WWWolfy 99 16.06.06 06:38 Сейчас в теме
Демонстрация возможностей фильтрации "ТаблицЗначений" без ВК (альтернатива - 1с++ )

Перейти к публикации

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Чум 16.06.06 06:38 Сейчас в теме
Тупой перебор строк таблицы значений с проверкой услвия?
А "метод рупора" уже отменили?
2. 26.06.06 22:52 Сейчас в теме
Тупой не тупой, но всегда удивляли авторы из нашей страны. На пальцах можно перебрать, кто писать умеет, а не пропускает через переводчик хелп программы, а после необработанный текст дает в тираж. Иностранцы пишут проще, въезжаешь сразу. Такие статьи необходимы, своего пользователя найдут. Поддержим автора.
3. support 4512 28.06.06 16:21 Сейчас в теме
Подсветка кода с помощью новых тэгов [ code ] [ /code ]
4. alexqc 29.08.06 10:44 Сейчас в теме
5. lov-kot 21.09.06 02:18 Сейчас в теме
Если ТЗ получили из Запрос.Выгрузить - то зачем все это?
Если иначе - все правильно, так и надо. +1
6. karat60 07.09.06 20:58 Сейчас в теме
7. WWWolfy 99 21.09.06 10:56 Сейчас в теме
2(lov-kot) Конечно же это предназначено для сложных случаев, например когда данные надо группировать в разных последовательностях и когда сами данные сливаются из нескольких (иногда разных) источников.
8. JohnyDeath 297 21.09.06 11:08 Сейчас в теме
Я примерно такими же способами у себя страдал. Представляете, если кол-во строк около 10000? И ещё один столбец или даже два... ;)
Потом я увидел в 1с++ ИндексированнуюТаблицу и сразу же влюбился... Посмотрите только на это: http://www.1cpp.ru/docum/IndexedTable.html
9. WWWolfy 99 21.09.06 13:42 Сейчас в теме
2(JohnyDeath) Представляю. Только читаться отчёт в 10000 строк будет очень плохо как с экрана так и на бумаге, да и сформировать таблицу (теми же БухИтогами) на 10000 строк выйдет в разы дольше чем выводить их вышеописанным способом. Так что проблемы не вижу.
Про "1с++ ИндексированнуюТаблицу" знаю давно, но не каждый клиент будет ставить себе 1с++, а тут всё стандартными средствами.
10. WWWolfy 99 21.09.06 14:17 Сейчас в теме
Кстати попробовал 10000 строк разнородной инфы на примере выше. Получилось примерно 3 сек.
11. JohnyDeath 297 22.09.06 10:56 Сейчас в теме
2(WWWolfy) Я нисколько не хотел оскорбить тебя или твой метод. Просто предложил альтернативу причём не дурную альтернативу.
А насчет чтения отчета в 10000 строк: дык не факт, что выводиться будут все 10000!
12. WWWolfy 99 22.09.06 14:45 Сейчас в теме
2(JohnyDeath) А я нисколько и не оскорбился. 1С++ сам применял ни раз (в основном прямые запросы) и высказывал респект его авторам. Но ТЗ предпочитаю фильтровать именно своим способом, потому он подходит везде.
13. 25.09.06 12:09 Сейчас в теме
Можно избавиться от цикла поиска конечной строки, если передавать в функцию ФильтрТабы не только ТЕКУЩЕЕ значФильтра, но и СЛЕДУЮЩЕЕ из тзнКонтрагенты..
тогда:

если тзнДанные.НайтиЗначение(значФильтраNEXT,КонСтрока,имяФильтра) = 1 Тогда
КонСтрока = КонСтрока - 1;
конецесли;

надо только предусмотреть ветвление для последней строки тзнКонтрагенты, когда КонСтрока = тзнДанные.КоличествоСтрок();

Думаю, будет работать еще быстрее..
14. WWWolfy 99 25.09.06 15:14 Сейчас в теме
Можно, но думаю не сильно повлияет на скорость. Мерять надо..
И универсальность функции потеряется.
15. tarasenkov 23.01.08 21:40 Сейчас в теме
Можно значительно ускорить работу при многократном вызове фильтра,
заменив создание таблицы на "ЗначениеИзСтрокиВнутр".

[code]Перем ШаблонТз; // Объявим в начале модуля

// Немного изменим код
Функция ФильтрТабы( тзнДанные, имяФильтра, значФильтра)
//тзнДанные.Сортировать(имяФильтра);//не нужно если уже отсортировано
//тзнРезульт =СоздатьОбъект("ТаблицаЗначений");
тзнРезульт = ЗначениеИзСтрокиВнутр(ШаблонТз);
...
// В теле модуля, в самом конце добавим
ШаблонТз = ЗначениеВСтрокуВнутр(СоздатьОбъект("ТаблицаЗначений"));[code/]

Тест на 38000 вызовов - различие в 15 раз.
СоздатьОбъект("ТаблицаЗначений") - 8.5 секунды
ЗначениеИзСтрокиВнутр(ШаблонТз) - 0.5 секунды

За счет такой оптимизации в реальной задаче удалось сократить время в два раза.
16. tarasenkov 23.01.08 21:41 Сейчас в теме
*Фикс
Можно значительно ускорить работу при многократном вызове фильтра,
заменив создание таблицы на "ЗначениеИзСтрокиВнутр".

Код
Перем ШаблонТз; // Объявим в начале модуля

// Немного изменим код 
Функция ФильтрТабы( тзнДанные, имяФильтра, значФильтра)
//тзнДанные.Сортировать(имяФильтра);//не нужно если уже отсортировано
//тзнРезульт =СоздатьОбъект("ТаблицаЗначений");
тзнРезульт = ЗначениеИзСтрокиВнутр(ШаблонТз);
...
// В теле модуля, в самом конце добавим
ШаблонТз = ЗначениеВСтрокуВнутр(СоздатьОбъект("ТаблицаЗначений"));
Показать полностью


Тест на 38000 вызовов - различие в 15 раз.
СоздатьОбъект("ТаблицаЗначений") - 8.5 секунды
ЗначениеИзСтрокиВнутр(ШаблонТз) - 0.5 секунды

За счет такой оптимизации в реальной задаче удалось сократить время в два раза.
17. JohnyDeath 297 24.01.08 09:57 Сейчас в теме
+(16) у замечательного человека Кости aka 33lab в его конфе "СКАТ-профессионал" подсмотрел такую вот маленькую глобальную процедуру:
Код
Функция _Новый(стрОбъект) Экспорт
   Если стрОбъект="СписокЗначений" Тогда Возврат ЗначениеИзСтрокиВнутр("{""VL"",{}}"); КонецЕсли;
   Если стрОбъект="ТаблицаЗначений" Тогда
      Возврат ЗначениеИзСтрокиВнутр("{""VT"",""1"",{""0"",{{"""",""0"",""0"",""0"","""",""2""}}}}");
   КонецЕсли;
КонецФункции
Показать полностью
tarasenkov; +1 Ответить
18. NoMax 232 19.09.08 11:12 Сейчас в теме
Огромное спасибо.
Сэкономило время и позволило выкинуть, лишний мусор
при группировке из тз.
И самое замечательное что все реализуется штатными 1С средствами
Оставьте свое сообщение
Вопросы с вознаграждением