Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) Предложение по улучшению функционала ИТ (число прочтений - 7587 )
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Предложение по улучшению функционала ИТ
04. Октября 2006 :: 15:04
Печать  
Метод "Группировать". Хотелось бы добавить возможность скрывать отдельные колонки таблицы на разных уровнях группировки, т.к. не на каждом уровне нужна информация из всех колонок. Это приведёт к экономии памяти и ускорению работы.

Пример:
В SQL запросе я получаю следующую информацию, сохраняю в ИТ:
Товар - объект БД для расшифровки ячейки,
Товар_Родитель - объект БД для быстрой группировки по группам справочника,
Товар_Артикул - строка, артикул товара,
Товар_Представление - строка, название товара,
Товар_Единица_Представление - строка, название единицы измерения,
Склад -  объект БД для расшифровки ячейки,
Склад_Родитель - объект БД для быстрой группировки по группам справочника,
Склад_Представление - строка, название склада,
ОстатокТовараПриход,
ОстатокТовараРасход.

Далее я группирую ИТ:
Группировать("Товар: &Товар;Склад: &Склад","ОстатокТовараПриход,ОстатокТовараРасход");
При этом в каждой строке каждой таблицы есть все колонки, как и до группировки. Хотя когда я вывожу, например, группировку "Склад", меня не интересует информация о названии, артикуле и ед. изм. товара. Также мне в отчете не нужны колонки "Склад_Родитель","Товар_Родитель".
Я смотрел расход памяти при большом количестве строк, возвращаемых запросом. Так при 60к строк и объёмом возвращаемых данных ~15Мб после группировки 1С начала использовать ~1.4 Гб оперативной памяти.
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Предложение по улучшению функционала ИТ
Ответ #1 - 05. Октября 2006 :: 05:11
Печать  
Ты хоть сам то подумал что сказал?
  
Наверх
 
IP записан
 
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Re: Предложение по улучшению функционала ИТ
Ответ #2 - 05. Октября 2006 :: 08:48
Печать  
varelchik писал(а) 05. Октября 2006 :: 05:11:
Ты хоть сам то подумал что сказал?

Я то подумал. Я говорю про экономию памяти. У меня в отчете пользователь может выбрать группировки по 3-м измерениям регистра + по документу. Измерения регистра - справочники, у одного уровень вложенности 10, у другого 6, у третьего 5.
А теперь подумай, сколько будет использоваться памяти если юзер захочет вывести отчет по всем группировкам и в каждой группировке захочет видеть итоги по группе.
  
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Предложение по улучшению функционала ИТ
Ответ #3 - 05. Октября 2006 :: 12:35
Печать  
Ты скажи, как ты это решение видишь?
Какой код хочешь писать в таком случае?
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
jbond
Full Member
***
Отсутствует


1С++ Programmer

Сообщений: 140
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Предложение по улучшению функционала ИТ
Ответ #4 - 05. Октября 2006 :: 12:51
Печать  
А XML-сериализацию ИТ с вложенными ИТ и составными типами (элемент справочника, документ) хорошы бы иметь (мечты, мечты....)  Очень довольный
  
Наверх
 
IP записан
 
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Re: Предложение по улучшению функционала ИТ
Ответ #5 - 05. Октября 2006 :: 13:20
Печать  
artbear писал(а) 05. Октября 2006 :: 12:35:
Ты скажи, как ты это решение видишь?
Какой код хочешь писать в таком случае?


Допустим так.
Шаблон:
Код
Выбрать все
Группировать(<ИмяИндекса>[<стрКолонки>]: <ИндексноеВыражение> [; ... ], <стрКолонкиСумм>, [чРасшифровкаПоследнегоУровня = 0])

<стрКолонки> = (<стрКолонкиДляЭлементов>[;<стрКолонкиДляГрупп>])

Если <стрКолонки> не заданы, то создаются все колонки в таблице.
Если <стрКолонкиДляГрупп> не задано, то для групп создаются все колонки.
Если группировка не по справочнику, то <стрКолонкиДляГрупп> игнорируются либо выдавать сообщение об ошибке.
Если в одну таблицу попали и группы и элементы, то создаются колонки указанные как в <стрКолонкиДляЭлементов> так и в <стрКолонкиДляГрупп>
Наверно нужно придумать еще кучу правил :) 



Пример:
Код
Выбрать все
е;Товар): &Товар;Склад(Склад_Представление;Склад): &Склад","ОстатокТовараПриход,ОстатокТовараРасход"); 




В таком случае в таблицы с группами товаров попадает только колонка "Товар" + колонки с суммами и служебные, в таблицу с элементами товаров попадают колонки "Товар_Артикул,Товар_Представление,Товар_Единица_Представление" + колонки с суммами и служебные и т.д.
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Предложение по улучшению функционала ИТ
Ответ #6 - 06. Октября 2006 :: 03:48
Печать  
Ни к чему это всё. По трём причинам.
1) Метод Группировать() - отстойный метод. Слишком медленный. Я лично им не пользуюсь, и никому не рекомендую.
2) Если ты данные получаешь прямым запросом, то сам бог велел сделать всё там.
3) Реализация данной фичи только запутает синтаксис метода, а реальной выгоды на самом деле практически не будет, потому как в процессе группировки память всё равно сожрётся, потому что все колонки нужно держать в памяти до последнего, и только после завершения группировки их можно удалять.
  
Наверх
 
IP записан
 
jbond
Full Member
***
Отсутствует


1С++ Programmer

Сообщений: 140
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Предложение по улучшению функционала ИТ
Ответ #7 - 06. Октября 2006 :: 04:12
Печать  
Цитата:
Метод Группировать() - отстойный метод

Альтернативы?

Метод принципиально не подлежит улучшениям?
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Предложение по улучшению функционала ИТ
Ответ #8 - 06. Октября 2006 :: 04:39
Печать  
Самая правильная альтернатива - считать всё в запросе.
Ещё вариант - считать итоги при выводе на печать.

Ускорить группировку в рамках ИТ по видимому принципиально невозможно, потому как основное время уходит на построение индексов. И как ни ускоряй этот процесс, в итоге всё равно получается неэффективно.
  
Наверх
 
IP записан
 
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Re: Предложение по улучшению функционала ИТ
Ответ #9 - 06. Октября 2006 :: 07:28
Печать  
ADirks писал(а) 06. Октября 2006 :: 04:39:
Самая правильная альтернатива - считать всё в запросе.
Ещё вариант - считать итоги при выводе на печать.

Ускорить группировку в рамках ИТ по видимому принципиально невозможно, потому как основное время уходит на построение индексов. И как ни ускоряй этот процесс, в итоге всё равно получается неэффективно.


Он вроде и так довольно быстро работает. Можно просто оптимизировать результирующие таблицы чтобы меньше памяти жрало.
Я применил метод группировать с единственной целью - посчитать итоги по группам справочника. Как это посчитать в SQL запросе я так и не додумался. Может и можно, просветите пожалуйста Улыбка
  
Наверх
 
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Предложение по улучшению функционала ИТ
Ответ #10 - 06. Октября 2006 :: 07:42
Печать  
Посмотри пример, там есть и получение групп в SQL запросе и подсчет итогов при выводе отчета
  

1_001.zip ( 15 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Re: Предложение по улучшению функционала ИТ
Ответ #11 - 06. Октября 2006 :: 07:43
Печать  
Кто-то знаком с проектом http://www.sqlite.org/? Очень простой движок SQL, реализован в одной DLL-ке, быстрый отлаженный код. Если прикрутить его к 1cpp, будет хорошей альтернативной ИТ.
  
Наверх
 
IP записан
 
Valar
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 30
Зарегистрирован: 04. Сентября 2006
Re: Предложение по улучшению функционала ИТ
Ответ #12 - 06. Октября 2006 :: 08:00
Печать  
tav13 писал(а) 06. Октября 2006 :: 07:42:
Посмотри пример, там есть и получение групп в SQL запросе и подсчет итогов при выводе отчета


Спасибо, но я бы хотел чтобы итоги по группам посчитал SQL сервер оператором WITH ROLLUP. Есть идеи?
  
Наверх
 
IP записан
 
jbond
Full Member
***
Отсутствует


1С++ Programmer

Сообщений: 140
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Предложение по улучшению функционала ИТ
Ответ #13 - 06. Октября 2006 :: 08:07
Печать  
Цитата:
Кто-то знаком с проектом http://www.sqlite.org/?


А я вот интересуюсь возможностью юзанья его с Delphi...
На сайте только С++
  
Наверх
 
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Предложение по улучшению функционала ИТ
Ответ #14 - 06. Октября 2006 :: 08:08
Печать  
Valar писал(а) 06. Октября 2006 :: 08:00:
tav13 писал(а) 06. Октября 2006 :: 07:42:
Посмотри пример, там есть и получение групп в SQL запросе и подсчет итогов при выводе отчета


Спасибо, но я бы хотел чтобы итоги по группам посчитал SQL сервер оператором WITH ROLLUP. Есть идеи?

Есть...Используй ROLLUP Смех
Хороший совет: Есть внешняя обработка для 1С под названием QA (см. вложение). Пойди от простого к сложному, напиши в ней запрос с получением нужных остатков, потом добавь ROLLUP, посмотри что будет получатся....и т.д. и т.п.
P.S.
Спасибо за QA - DmitrO
  

1CQA_2.zip ( 14 KB | Загрузки )
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать