СКД против запроса с итогами

05.02.11

Разработка - Работа с интерфейсом

Или как эффективно выгрузить и отобразить результат запроса не в табличном документе, а в табличном поле ? В статье сравниваются два способа выгрузки в  "дерево" :
- при помощи запроса с итогами
- используя СКД

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
СравнениеСКДиЗапросаСИтогами.erf
.erf 10,83Kb
271
271 Скачать бесплатно

 В практических задачах часто возникает необходимость выгрузки  и отображения результата запроса в табличном поле формы. В статье сравниваются два способа выгрузки в  "дерево" :

- при помощи запроса с итогами
- используя СКД 

§ 1. Запрос с итогами. Или "всё в одном запросе". 

Вначале рассмотрим в "картинках" процесс создания текста запроса с заполнением итоговых полей в одной колонке. 

Исходный запрос :
Рис.1.

 

Исходный запрос с итогами . Отметим затратность :  применение итогов  привело к увеличению выходной таблицы в 4 раза.
Рис. 2.

 


Запрос с вычисляемым итоговым полем "Поле4 " : 
Рис 3.

 

Демонстрация вычисления  "Поле4"  первой строки итогов :
Рис.4.

Из рис.2-4 понятен механизм вычисления итоговых полей запроса :
вначале происходит заполнение итоговой строки по умолчанию (см. Рис2), затем заполняются поля указанные в тексте запроса между опциями  "Итоги" и "По".  

Приведем реальный пример использования такого подхода :

Процедура КнопкаВыполнитьНажатие(Кнопка)
Запрос  Новый Запрос;
Запрос.Текст  "ВЫБРАТЬ
                | ХозрасчетныйОбороты.Субконто1 КАК Подразделения,
                | ХозрасчетныйОбороты.Субконто2 КАК НоменклатурныеГруппы,
                | ХозрасчетныйОбороты.Субконто3 КАК СтатьиЗатрат,
                | ХозрасчетныйОбороты.СуммаОборотДт КАК СуммаОборот
                |ИЗ
                | РегистрБухгалтерии.Хозрасчетный.Обороты(, , , Счет = &Счет, , , , ) КАК ХозрасчетныйОбороты
                |ИТОГИ
                | ВЫБОР
                |  КОГДА НоменклатурныеГруппы ЕСТЬ NULL
                |   ТОГДА Подразделения
                |  ИНАЧЕ НоменклатурныеГруппы
                | КОНЕЦ КАК СтатьиЗатрат,
                | СУММА(СуммаОборот)
                |ПО
                | Подразделения,
                | НоменклатурныеГруппы" ;
Запрос.УстановитьПараметр( "Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.01"));
Дерево  =  Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);  
КонецПроцедуры
В демонстрационной конфигурациии БП 2.0 (1.6) результат такого запроса выглядит следующим образом :
Рис.5.

§ 2. Применение СКД 

А теперь покажем как использование более "громоздкого" подхода с применением СКД даёт многократный прирост производительности.
К теме прикреплена обработка СравнениеСКДиЗапросаСИтогами.epf , результаты  которой представлены на рисунке :
Рис.6.


 

При этом и запрос с итогами, и СКД выдают "дерево" одного и того же вида - с итогами в одной колонке :
Рис.7.

Особенностью используемых в СКД настроек является наличие единственного пользовательского поля "ПолеДерева" . Этот вариант , который представляется автору наиболее удачным из всех возможных , предложил  Alexk-is :
Рис.8. 

  

Специально подобранный пример таблицы в обработке СравнениеСКДиЗапросаСИтогами.epf   даёт  отчетливое представление об  ограниченности подхода "всё в одном запросе" и демонстрирует преимущества применения  СКД при выводе в "дерево".

§ 3. Заключение

Очевидное преимущество в быстродействии СКД при построении  "дерева" не исключает компактного приема с использованием  запроса с итогами , если объем выводимых данных не очень велик .

Автор благодарит автора Alexk-is за ценные замечания к статье. 

Тема первоначально задумывалась как  дополнение к статье  Заметочки про 1с Предприятие8  и содержала лишь описание подхода "всё в одном запросе" . Но по ходу обсуждения (см. комментарии) выяснилось , что гораздо интереснее сравнительный анализ двух подходов .  Тема изменила название и в текст были внесены существенные изменения . 

Для автора тема использования СКД для построения дерева и последующее обсуждение оказалось неожиданно полезным,  в смысле другого подхода к исследованию циклического графа  (см. тему Запрос против рекурсии..  - теперь построение графа ошибок возможно многократно ускорить , используя СКД)

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62984    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18853    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10224    7    7    

10

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

Это инструкция по дизайну форм в среде 1С. Гайд охватывает рекомендации и стандарты для оптимизации пользовательского интерфейса. В гайде содержатся указания по использованию элементов интерфейса, включая как основные, так и продвинутые аспекты. Предоставляются также примеры и антипримеры для наглядного понимания принципов дизайна

20.08.2024    16794    mrXoxot    43    

121

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

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

27.05.2024    7347    smielka    37    

100

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    14786    913    elcoan    47    

117

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Подходит для создания web-страниц для замены управляемых форм 1С, красивых отчетов, интерфейса мобильного приложения на платформе 1С и для простых страниц веб-сайтов.

2 стартмани

10.04.2023    11911    162    acces969    31    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. tango 545 07.01.11 19:01 Сейчас в теме
- потому что
http://infostart.ru/public/80055/

пс: извини, Игорь, но перестал бы ты парить людям моск
оно, конечно, объективно я заинтересован, что бы ты испортил как можно больше 1снегов, но, блин, ... за ИС обидно.

пс: недаром, ох не даром тебе понравился мой скетч до слова Ах! включительно :)
2. Ish_2 1112 07.01.11 23:13 Сейчас в теме
В (1)- набор слов и ссылка на пустышку.

Приведи свою готовую обработку, свой текст запроса с последующей вызгрузкой в дерево.
Или дай ссылку на публикацию , где решается подобная задача .

Пока говорить не о чём.
19. KapasMordorov 428 11.01.11 10:26 Сейчас в теме
(2)
С полгода назад тренировки ради (был вопрос на одинэссии).
Никакого отношения к итогам не имеет, а прием тот же - запихивание в одну колонку разнотипной билиберды.
Видимые колонки: КонтрагетОтчет и ДоговорКолонки. И еще сортировка в консоли отчетов КонтрагентКолонки, КонтрагентОтчет, ДоговорКолонки.
От вспомогательных полей можно избавиться еще одним уровнем вложенности.

ВЫБРАТЬ
	ЗапросКолонки.Контрагент КАК КонтрагентКолонки,
	ЗапросКолонки.Договор КАК ДоговорКолонки,
	КонтрагентыДоговорыМинимум.Контрагент,
	КонтрагентыДоговорыМинимум.Договор,
	ВЫБОР
		КОГДА ЗапросКолонки.Договор = КонтрагентыДоговорыМинимум.Договор
			ТОГДА ЗапросКолонки.Контрагент
		ИНАЧЕ 0
	КОНЕЦ КАК КонтрагентОтчет
ИЗ
	(ВЫБРАТЬ
		ДоговорыКонтрагентов.Ссылка КАК Договор,
		ДоговорыКонтрагентов.Владелец КАК Контрагент
	ИЗ
		Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
	
	СГРУППИРОВАТЬ ПО
		ДоговорыКонтрагентов.Владелец,
		ДоговорыКонтрагентов.Ссылка) КАК ЗапросКолонки
		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
			МАКСИМУМ(ДоговорыКонтрагентов.Ссылка) КАК Договор,
			Контрагенты.Ссылка КАК Контрагент
		ИЗ
			Справочник.Контрагенты КАК Контрагенты
				ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
				ПО Контрагенты.Ссылка = ДоговорыКонтрагентов.Владелец
		
		СГРУППИРОВАТЬ ПО
			Контрагенты.Ссылка) КАК КонтрагентыДоговорыМинимум
		ПО ЗапросКолонки.Контрагент = КонтрагентыДоговорыМинимум.Контрагент
Показать
20. Ish_2 1112 11.01.11 10:41 Сейчас в теме
(19) Вопрос :
(ВЫБРАТЬ 
      ДоговорыКонтрагентов.Ссылка КАК Договор, 
      ДоговорыКонтрагентов.Владелец КАК Контрагент 
   ИЗ 
      Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов 
    
   СГРУППИРОВАТЬ ПО 
      ДоговорыКонтрагентов.Владелец, 
      ДоговорыКонтрагентов.Ссылка) КАК ЗапросКолонки 
Показать


Для чего здесь "Сгруппировать ПО" ?
Разве в справочнике "ДоговорыКонтрагентов" есть неуникальные пары Договор, Владелец ?
Не проще ли написать равносильное :
(ВЫБРАТЬ 
      ДоговорыКонтрагентов.Ссылка КАК Договор, 
      ДоговорыКонтрагентов.Владелец КАК Контрагент 
   ИЗ 
      Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов ) КАК ЗапросКолонки 
KapasMordorov; +1 Ответить
21. KapasMordorov 428 11.01.11 11:10 Сейчас в теме
(20)
Это уже перестраховка в спешке.
С замечанием согласен.
3. tango 545 08.01.11 11:46 Сейчас в теме
Пустышка? у тебя, наверное, отключена загрузка изображений.
там есть два рисунка, на одном - запрос, безо всяких твоих выкрутасов, а на другом - сформированное из этого запроса дерево.

Игорь, помнишь, у тебя был такой сдвиг: СКД - рулез, кодинг - атстой?
Ну, так это и есть СКД, и именно здесь она - рулез, а вовсе не в рекурсиях.
Пишешь запрос и несколько параметрических движений мышкой, все остальное система делает сама.
И не надо застирывать моск извратами типа (0).

***

Игорь назвал мою публикацию пустышкой? С чего бы это? Вот, уважаемый коллега iov даже плюсанул.

Похоже, причина в том, что тема, поднятая Игорем, в очередной раз является преодолением им же самим созданных трудностей.

А моя публикация ему потому и кажется пустышкой , что проблем-то нет, никаких.

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

Это и отображено на картинках. Да, публикация получилась очень маленькая. Так ведь и проблемы-то для обсуждения - нет. Понимаешь, Игорь? Это твоя публикация была бы пустышкой, если бы реально не вредила мозгам коллег, по крайней мере, мозгам тех из них, которые тебе отплюсовались.

Ну, а уж чтобы совсем было все понятно каждому, прикладываю в своей публикации файлик с отчетом.

Первый скриншот вы сможете воспроизвести, открыв СКД отчета.

Второй скриншот - запустив отчет в демо-базе УПП 1.3
4. Ish_2 1112 08.01.11 12:45 Сейчас в теме
(3) Ок. Давай разбираться.
Изображение у меня выводятся.
И то, что ты использовал СКД - вытекает из текста запроса.
Почему же тогда в (2) использован термин "пустышка" ?
Потому что
1. Не приведена сама обработка.
2. Не приведены аргументы ( сранительный анализ и тестирование) -
почему и в каких случаях СКД лучше, чем решение в текущей теме ?

Без этих двух пунктов твоя заявка (1) на лучшее решение - это просто "пук".
Гаданием за тебя, что ты имел ввиду - заниматься не буду.

Теперь о текущей статье, весь смысл её в том , что экономнее обойтись без СКД и решить всё в одном запросе.
См. простейшие тексты обработок.
Применение же СКД связано с дополнительными затратами в виде хранения отдельного макета "СхемыКомпоновкиДанных", загрузки его в оперативную память и т.д.
это невсегда удобно при доработке существующей формы документа или справочника.
Если же не хранить такой макет, то тогда придется программно создавать "СхемуКомпоновкиДанных" и организовывать вывод,
но тогда теряется преимущество в простоте настройки.
Вообщем, прочитай тему "Заметочки.." Alex-is там приведены примеры использования вывода в дерево.
Из этих примеров ты поймёшь , что в данных конкретных случаях применение СКД - избыточно.
и проще , экономнее использовать простой запрос.
8. tango 545 08.01.11 13:27 Сейчас в теме
(4) сравни размер обработки с макетом и без макета
а про использование оперативки - это реальный пук, обратись в хот-лайн известной фирмы
5. tango 545 08.01.11 12:59 Сейчас в теме
Ты уж определись, агитатором и пропагандистом чего ты являешься, СКД или кодинга, а то в памяти всплывает термин шизофрения.
(3) - в (0) об СКД - ни слова, ты и не вспоминал о ней, пока я не ткнул.
6. iov 407 08.01.11 13:10 Сейчас в теме
Нашел применение вашему противостоянию!!! (добавил в тестовые задания для новых сотрудников так сказать найди 10 отличий.
Да а чего вы такие злые друг на друга?
9. Ish_2 1112 08.01.11 13:59 Сейчас в теме
(6) Это мы - по старой дружбе.
(8) Начнем сначала. В теме есть предложение , всё обясняющее :
Данную статью можно рассматривать как дополнение к теме Alex-is "Заметочки про 1с Предприятие 8"
http://infostart.ru/public/71130/


В этой статье автор привёл примеры как получить двухуровневые итоги в одной колонке результата запроса.
Простенько и со вкусом.
Но для трех- и более уровневых итогов этот приём был уже не применим.
Текущая же статья описывает как раз приём , позволящий выводить трех- и более уровневые итоги в одной колонке.
Разумеется , можно выводить в дерево при помощи СКД. Никто этого запретить не может.
Да, действительно , про СКД в статье ни слова, потому что такая возможность очевидна и неинтересна в контексте рассмотрения.

(5) Быть сторонником применения СКД - это не значит тыкать СКД куда ни попадя.
Еще раз говорю, в контексте целого класса задач (доработка сущ. форм , например) применение СКД для вывода в дерево избыточно,
если всё можно реализовать в одном простом запросе.
7. tango 545 08.01.11 13:25 Сейчас в теме
10. tango 545 08.01.11 14:06 Сейчас в теме
ты по-случаю - не какой-нибудь маленький начальник компьютерщиков?
больно соображения у тебя какие-то нереальные
избыточным может быть только одно - время, затраченное на получение необходимого результата
если быстрее на СКД - берем СКД
если из реляционных таблиц надо вытащить иерархию - кодинг с рекурсией
12. ILM 241 09.01.11 14:40 Сейчас в теме
(10) Должна быть свобода выбора. Иногда код с рекурсией работает медленнее, иногда наоборот. Не вижу ничего плохого в поисках Игоря решать задачи другими способами, например через запросы.
13. tango 545 09.01.11 21:57 Сейчас в теме
(12) Иногда код с рекурсией работает медленнее
Мы говорим об одном и том же, о из реляционных таблиц надо вытащить иерархию (априори количество уровней не знаем, пример - спецификация изделия) (10)?
Пожалуйста, приведите пример без рекурсии, не важно, быстрее он или медленнее.
Или вы настолько Иш_3, что спрячетесь, как Иш_2, за потоком "умных" слов?
14. Ish_2 1112 09.01.11 23:00 Сейчас в теме
(13)
априори количество уровней не знаем, пример - спецификация изделия
Пожалуйста, приведите пример без рекурсии, не важно, быстрее он или медленнее.


В практических задачах ( а мы с помощью 1с решаем именно такие задачи) важно не количество уровней в каждом
конкретном исследуемом объекте , а максимально возможное количество уровней.
В практических задачах оно всегда известно и берется с некоторым запасом.

Тем не менее теоретически вполне возможен следующий вариант ,
см. "Запрос против..." http://infostart.ru/public/78285/
В нижеприведенном примере лишь изменен вид цикла
ТекстЗапроса = "ВЫБРАТЬ
                   |    ЕСТЬNULL(Спец.Номенклатура, Исх.Номенклатура)                 КАК Номенклатура,
                   |    Исх.Количество * ЕСТЬNULL(Спец.Количество, 1)                    КАК Количество,
                   |    Исх.СтрокаКодов + ЕСТЬNULL(Спец.КодНоменклатуры, """")   КАК СтрокаКодов,
                   |    ВЫБОР
                   |        КОГДА Исх.ПризнакКонцаВетки > 0
                   |            ТОГДА Исх.ПризнакКонцаВетки
                   |        КОГДА Спец.КодНоменклатуры ЕСТЬ NULL
                   |            ТОГДА 1 // нормальное завершение ветки
                   |        КОГДА Исх.СтрокаКодов ПОДОБНО Спец.КодНоменклатуры
                   |            ТОГДА 2 // зацикливание
                   |        ИНАЧЕ 0     // ветка продолжается
                   |    КОНЕЦ                                                                                  КАК ПризнакКонцаВетки
                   |ПОМЕСТИТЬ Последующая
                   |ИЗ
                   |    Исходная КАК Исх
                   |     ЛЕВОЕ СОЕДИНЕНИЕ Спецификация КАК Спец
                   |     ПО (Исх.ПризнакКонцаВетки = 0) // соединяемся только тогда, когда ветка продолжается
                   |            И Исх.Номенклатура = Спец.Владелец
                   |;
                   |УНИЧТОЖИТЬ Исходная
                   |;
                   |ВЫБРАТЬ ПЕРВЫЕ 1 Посл.Номенклатура
                   |ИЗ  Последующая КАК Посл
                   |ГДЕ Посл.ПризнакКонцаВетки = 0";

    //Цикл получения выходной таблицы
    Счетчик =0;
    Пока Истина Цикл
         Запрос.Текст = СтрЗаменить(ТекстЗапроса,"Исходная","ВремТаблица"+ Счетчик);
         Запрос.Текст = СтрЗаменить(Запрос.Текст,"Последующая","ВремТаблица"+(Счетчик+1));
         РезультатЗапроса = Запрос.Выполнить();
         Счетчик = Счетчик +1
         Если РезультатЗапроса.Пустой() Тогда // Все ветки не имеют продолжения
              Прервать;
         КонецЕсли;
    КонецЦикла;
Показать


Итак , по твоему запросу приведен пример решения задачи разузлования без рекурсии для случая,
когда количество уровней в графе неизвестно.

Я привел ,Миша , для тебя пример : как нужно практически доказывать свои утверждения.
15. ILM 241 10.01.11 12:19 Сейчас в теме
(14) А зачем доказывать?
(13) Мне не попадались задачи с вложенностью в глубину более 67 уровней. Это было один раз за все мои 44 года.
Чаще всего количество уровней задано и не превышает 10.
Я не отрицаю рекурсии, но сожалею о том, что нет 1С рекурсивных запросов. Типа OVER BY, CONNECT BY, START WITH.
Почему доступно получение Иерархии из справочника (код-родитель) запросом, и почему нельзя получить дерево запросом из таблицы значений с полями (потомок-родитель)?
Если задача получения состава изделия, или получение дерева затрат, или получения иерархической структуры решается постоянно, то я скорее буду хранить иерархию в справочнике, чем постоянно использовать рекурсии и нагружать вычислениями базу.
Возможных решений много... И все они имеют право на жизнь.
16. Ish_2 1112 10.01.11 13:05 Сейчас в теме
(15)1.
А зачем доказывать?

Затем , чтобы "пуков" в этой теме было поменьше.
2.
Почему доступно получение Иерархии из справочника (код-родитель) запросом, и почему нельзя получить дерево запросом из таблицы значений с полями (потомок-родитель)?


Потому что на уровне записи элемента справочника реализован механизм , который исключает зацикливание ссылок - получаем "идеальное" дерево
(ациклический граф).

Если же таблица с колонками Родитель,Ребенок создана пользователем произвольно, то тогда встает проблема : возможно зацикливание (ошибка заполнения) . Применять готовые встроенные процедуры расчитанные на идеальное дерево - НЕЛЬЗЯ.
22. Ish_2 1112 11.01.11 11:26 Сейчас в теме
(15),(17),(19)
Жаль , что я не дождался аргументированного ответа о преимуществах СКД при выводе в дерево.
Придется самому защищать СКД и поставить под сомнение способ получения дерева из запроса с итогами.

Первый камень в текущую тему .
См. прикрепленный рисунок (второй из текущей темы).
Что имеем на рисунке ? Для того чтобы получить дерево мы используем в запросе ИТОГИ
и увеличиваем выходную таблицу в 4(!) раза.
Уже один этот факт рождает подозрение : а хорошо ли это ?
А в СКД ИТОГИ в запросе не используются совсем неслучайно.
Прикрепленные файлы:
17. tango 545 10.01.11 16:35 Сейчас в теме
(14) Игорь, если ты не видишь в своем коде чистейшей воды рекурсию, то дискуссия вырождается в спор о терминах, я это уже говорил.
(15) слово "доказывать" сказали вы - чистейшей воды Иш2-приемчик.
18. Ish_2 1112 10.01.11 17:19 Сейчас в теме
(17) Пустое, Миша. Всё уже ясно.
Теперь переключимся на твою тему http://infostart.ru/public/80055/ и
посмотрим вступится за твою честь WiseSnake или нет.
23. Ish_2 1112 11.01.11 14:29 Сейчас в теме
(17)
Если в (22) размышлизм , то здесь доказательство.
Вот каких аргументов я ждал от тебя ,Миша.
Специально подобран убойный, уникальный пример
для показа преимуществ СКД при формировании дерева.
С помщью СКД дерево было сформировано в 50(1) раз быстрее.
Прикрепленные файлы:
ОтчетСравнениеСКДиЗапроса.erf
24. alexk-is 6544 11.01.11 22:07 Сейчас в теме
25. Ish_2 1112 12.01.11 08:01 Сейчас в теме
(24)
Вопрос : как получить итоги в одну колонку при использовании СКД (без постобработки) ? - интересный.
Подождём публикаций. Насколько мне известно эту задачу к настоящему моменту никто не решил.

А в (23) продемонстрировано преимущество СКД при формировании "обычного" дерева (без итогов в одну колонку).
В указанном примере оно настолько велико , что постобработка для получения дерева нужного вида ненамного уменьшит это преимущество.
11. ILM 241 09.01.11 14:36 Сейчас в теме
Дополнительным плюсом статьи является возможность выводить дерево итогов с разнообразной многоуровневой группировкой.
Это могут быть и "склады, товары, контрагенты" и "контрагенты, склады, товары" и "товары, контрагенты, склады". Важно, что можно меняя запрос динамически получить практически миниOLAP на данных.
И выводить все эти данные на форме, а не в отчете.
26. alexk-is 6544 12.01.11 09:52 Сейчас в теме
(26) А я знаю кто это умеет делать... :)
27. Ish_2 1112 12.01.11 10:09 Сейчас в теме
(26) "Луч света", ну , расскажи нам. Просим.
28. alexk-is 6544 12.01.11 11:22 Сейчас в теме
29. Ish_2 1112 12.01.11 12:31 Сейчас в теме
(28) Ай ! Молодца !
На форуме "1с" человек страдает по этому поводу.
Я ему не помог. Теперь сошлюсь.
31. Ish_2 1112 12.01.11 16:59 Сейчас в теме
(28) Вы уж Алексей Викторович - извините ,
но без наездов в этой теме - никак.
Расматривается твоя обработка Пример8 из темы "Заметочки...":
http://infostart.ru/public/download.php?file=80200

Теперь наезд :
1. Нужно обязательно избавиться от создания лишних и никчёмных пользовательских полей Рекизит1,Реквизит2..
2. В табличное поле "Дерево" должно сразу выводиться только одно поле "Поле4".

Без этих двух требований серьезным людям показывать такую обработку нельзя.
Слабо доработать ?
32. alexk-is 6544 12.01.11 17:09 Сейчас в теме
(31) В компановке данных нужно просто удалить эти пользовательские поля и всё. Оставить только "Поле4". Работать будет быстрее.
33. Ish_2 1112 12.01.11 17:11 Сейчас в теме
(32) Не пойдет. Ты прикрепи обработку.
34. alexk-is 6544 12.01.11 17:34 Сейчас в теме
(33) Ну, ладно...
Тут обработка только с 1 колонкой Поле4
Прикрепленные файлы:
Пример8_1.erf
35. Ish_2 1112 12.01.11 19:08 Сейчас в теме
36. alexk-is 6544 12.01.11 20:56 Сейчас в теме
Добавил ещё один вариант реализации многоуровнего дерева в колонке "Поле4" с использованием СКД - "Пример 9" http://infostart.ru/public/71130/files/
37. Ish_2 1112 12.01.11 21:38 Сейчас в теме
(36) Мне придется переписывать и стыковать с текущей темой (Благодаря тебе - она тоже будет полностью переработана).

Вместо реквизитов "Реквизит1","Реквизит2" - "Поле1","Поле2","Поле3","Поле4".
Ты зачем- то никому не интересный цикл заполнения таблицы - сделал в одну строку.
Ввел зачем-то переменную "Счетчик","НовоеДерево".
Время с точностью до миллисекунды...
Мда..На вкус и цвет .
38. alexk-is 6544 12.01.11 21:54 Сейчас в теме
> Вместо реквизитов "Реквизит1","Реквизит2" - "Поле1","Поле2","Поле3","Поле4".
"Поле1","Поле2","Поле3","Поле4" - то вот отсюда http://infostart.ru/public/79992/

> Ты зачем- то никому не интересный цикл заполнения таблицы - сделал в одну строку.
Так быстрее работает

> Ввел зачем-то переменную "Счетчик","НовоеДерево".
"Счетчик" - так быстрее работает
"НовоеДерево" - так правильнее работает при повторном запуске

> Время с точностью до миллисекунды...
Точность - вежливость королей

Можно придумать множество оправданий, но мне не хочется, чтобы сделанную мной работу называли "поделками".
40. Ish_2 1112 13.01.11 06:51 Сейчас в теме
(38) В (37) были придирки.
(39)
"Чисто" поговорить ? или сможете представить свой вариант выгрузки в дерево ?
43. Ish_2 1112 19.01.11 19:09 Сейчас в теме
(38) Что скажешь на (41),(42) ? Ты что-то подобное тестировал ?
Для меня , честно говоря, это было настолько очевидно ,
что я даже не сравнивал по быстродействию.
39. PlatonStepan 38 13.01.11 03:43 Сейчас в теме
Способ вроде как известный :)
Использую иногда.
Для некоторых случаев, подходит. Но если порядок групп менять, то условие "ВЫБОР КОГДА Поле2 Есть NULL...." не работоспособно. расширять надо
41. romansun 194 19.01.11 17:45 Сейчас в теме
Интересная тема, спасибо. :)

Покурил чуть этот вопрос, скажу пару слов в сторону запросной половины статьи.

Главный затык идет на Выгрузить() в строках вида "Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)". Сам запрос выполняется так же быстро, как и СКД.

Но в строках вида "Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам)" никаких затыков нет.

В итоге, для программиста, в тех случаях, когда он собирается обходить кодом полученное быстро ДЗ (и, к примеру, не выводить её на форму) вполне можно использовать и Выборку, ибо обход и ДЗ и Выборки будет одинаково утомителен :).
42. Ish_2 1112 19.01.11 19:04 Сейчас в теме
(41)Можно ,конечно, провести еще опыты ,
но весь смысл такого использования итогов запроса именно в том , что получаем выигрыш в скорости.

Т.е. одно и тоже дерево получено
1. Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
2. Выборка = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам) ;
или Пока Выборка.Следующий() Цикл
... или рекурсивная процедура с получением "Дерево".

Так вот п.1 работает быстрее.
В частности это обсуждается

здесь http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=571765
44. alexk-is 6544 20.01.11 08:30 Сейчас в теме
Для двухуровнего дерева у меня есть вот такие данные. Запрос с итогами выгружается через РезультатЗапроса.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)

Заполнение запросом с итогами...
Время выполнения запроса : 0,266 сек.
Время выгрузки из результата запроса : 0,187 сек.
Общее время выполнения : 0,453 сек.

Заполнение СКД...
Время подготовки СКД : 0,016 сек.
Время выгрузки из СКД : 0,781 сек.
Общее время выполнения : 0,797 сек.
Прикрепленные файлы:
Пример9.erf
45. Ish_2 1112 20.01.11 08:38 Сейчас в теме
(44) Ты чего -то не о том . Вернее о чем-то своём.
Вопрос -то был о сравнении двух способов получения дерева (без СКД) :
- при помощи "кодинга" и выборки
- без кодинга выгрузить сразу в дерево.
Оставьте свое сообщение