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

Публикация № 79992

Разработка - Практика программирования

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

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

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

§ 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  и содержала лишь описание подхода "всё в одном запросе" . Но по ходу обсуждения (см. комментарии) выяснилось , что гораздо интереснее сравнительный анализ двух подходов .  Тема изменила название и в текст были внесены существенные изменения . 

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

Скачать файлы

Наименование Файл Версия Размер
СравнениеСКДиЗапросаСИтогами.erf

.erf 10,83Kb
14.01.11
279
.erf 10,83Kb 279 Скачать бесплатно

Специальные предложения

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

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

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

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

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

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


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

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

***

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

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

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

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

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

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

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

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

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

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


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

(5) Быть сторонником применения СКД - это не значит тыкать СКД куда ни попадя.
Еще раз говорю, в контексте целого класса задач (доработка сущ. форм , например) применение СКД для вывода в дерево избыточно,
если всё можно реализовать в одном простом запросе.
7. tango 490 08.01.11 13:25 Сейчас в теме
10. tango 490 08.01.11 14:06 Сейчас в теме
ты по-случаю - не какой-нибудь маленький начальник компьютерщиков?
больно соображения у тебя какие-то нереальные
избыточным может быть только одно - время, затраченное на получение необходимого результата
если быстрее на СКД - берем СКД
если из реляционных таблиц надо вытащить иерархию - кодинг с рекурсией
12. ILM 238 09.01.11 14:40 Сейчас в теме
(10) Должна быть свобода выбора. Иногда код с рекурсией работает медленнее, иногда наоборот. Не вижу ничего плохого в поисках Игоря решать задачи другими способами, например через запросы.
13. tango 490 09.01.11 21:57 Сейчас в теме
(12) Иногда код с рекурсией работает медленнее
Мы говорим об одном и том же, о из реляционных таблиц надо вытащить иерархию (априори количество уровней не знаем, пример - спецификация изделия) (10)?
Пожалуйста, приведите пример без рекурсии, не важно, быстрее он или медленнее.
Или вы настолько Иш_3, что спрячетесь, как Иш_2, за потоком "умных" слов?
14. Ish_2 1054 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 238 10.01.11 12:19 Сейчас в теме
(14) А зачем доказывать?
(13) Мне не попадались задачи с вложенностью в глубину более 67 уровней. Это было один раз за все мои 44 года.
Чаще всего количество уровней задано и не превышает 10.
Я не отрицаю рекурсии, но сожалею о том, что нет 1С рекурсивных запросов. Типа OVER BY, CONNECT BY, START WITH.
Почему доступно получение Иерархии из справочника (код-родитель) запросом, и почему нельзя получить дерево запросом из таблицы значений с полями (потомок-родитель)?
Если задача получения состава изделия, или получение дерева затрат, или получения иерархической структуры решается постоянно, то я скорее буду хранить иерархию в справочнике, чем постоянно использовать рекурсии и нагружать вычислениями базу.
Возможных решений много... И все они имеют право на жизнь.
16. Ish_2 1054 10.01.11 13:05 Сейчас в теме
(15)1.
А зачем доказывать?

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

См. также

Использование программных перечислений, ч.1: строковые константы Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?

10.12.2016    37819    unichkin    74    

Установка нескольких фильтров/отбора СКД в табличной форме, хранение в табличной части для отправки push/email уведомлений (ОтборКомпоновкиДанных, КомпоновщикНастроек, ДинамическийСписок)

Работа с интерфейсом Практика программирования v8 v8::УФ v8::СКД Бесплатно (free)

Рассмотрим, как организовать установку фильтров/отбора СКД (динамического списка) на push/email уведомления в подсистеме EdiBot (WebApp) для 1С в табличной части "События уведомлений".

02.11.2020    643    SizovE    0    

Вычислить РАЗНОСТЬДАТ в рабочих днях

Практика программирования БСП (Библиотека стандартных подсистем) v8::Запросы v8::СКД ERP2 БП3.0 УТ11 ЗУП3.x Бесплатно (free)

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

20.10.2020    2305    antonivan    17    

Вывод дерева в табличный документ СКД

Практика программирования Универсальные функции v8 v8::СКД Бесплатно (free)

Вывод содержимого элемента формы "ДанныеФормыДерево" в табличный документ средствами СКД.

09.07.2020    2784    Yashazz    7    

Вспомогательные инструкции в коде 1С Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    31016    tormozit    100    

Роль "Остатки" поля набора данных СКД в отчете и в расшифровке

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

24.05.2020    3377    kasper076    16    

Макет оформления в отчете с несколькими СКД

Практика программирования v8::СКД Россия Бесплатно (free)

Как заставить работать макет оформления в отчёте с несколькими СКД.

14.05.2020    2663    vendim    1    

СКД. Использование Менеджера временных таблиц в системе компоновки

Практика программирования v8 v8::Запросы v8::СКД 1cv8.cf Бесплатно (free)

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

29.04.2020    6583    the1    29    

Оформление и рефакторинг сложных логических выражений Промо

Практика программирования v8 Россия Бесплатно (free)

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

20.09.2012    78525    tormozit    131    

Ограничения полей, или как обмануть СКД?

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Каждое из ограничений полей можно обойти. Рассмотрим варианты обхода и способы обезопасить свой отчет.

15.04.2020    8150    SeiOkami    38    

Работа с запросами в 1С СКД. Отладка СКД

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

В предыдущем разделе мы изучали с вами особенности работы с запросами в СКД. Для изучения (отладки) работы различных схем компоновки данных я использовал консоль компоновки данных.

15.04.2020    3587    ProfessionStore    3    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 3

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

Почему при отборе по контрагенту наш отчет работает неправильно. Посмотрим на примере другого отчета, в котором нам нужно выбрать данные из расходных накладных и связанные с номенклатурой данные по ВСЕМ заявкам.

13.04.2020    5971    ProfessionStore    4    

Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.

11.07.2007    49077    tormozit    42    

СКД: Прозрачная обработка результата

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

13.04.2020    4111    starik-2005    16    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 2

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

Все примеры разобраны с помощью консолей компоновки данных, речь о которых пойдет в предпоследнем разделе статьи.

12.04.2020    4776    ProfessionStore    11    

Работа с запросами в 1С СКД. Особенности работы запросов в СКД. Часть 1

Практика программирования v8::Запросы v8::СКД 1cv8.cf Россия Бесплатно (free)

Все примеры разобраны с помощью консолей компоновки данных, речь о которых пойдет в предпоследнем разделе статьи.

11.04.2020    6250    ProfessionStore    8    

Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо

Практика программирования v8 1cv8.cf Россия Бесплатно (free)

Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки

10.09.2017    45530    tormozit    74    

Работа с запросами в 1С СКД. Язык выражений СКД и подмена запросов

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

Хотя эта статья называется «Работа с запросами в 1С СКД», нельзя не упомянуть про язык выражений СКД. Да – у системы компоновки данных есть свой язык! Это не язык платформы 1С, это не язык запросов. Это еще один язык, который используется 1С в СКД для обработки полученного набора (ов) данных.

11.04.2020    6285    ProfessionStore    24    

Работа с запросами в 1С СКД. Примеры использования расширения языка запросов СКД

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

Все тонкости использования расширения языка запросов 1С для СКД вы можете изучить по ссылкам, которые приведены в предыдущей статье. Здесь мы рассмотрим конкретные кейсы применения данного расширения.

10.04.2020    6360    ProfessionStore    4    

Запросы 1С СКД. Возможности и ограничения

Практика программирования v8::Запросы v8::СКД Россия Бесплатно (free)

В этом цикле статей мы рассмотрим особенности работы системы компоновки данных с запросами в 1С.

10.04.2020    7817    ProfessionStore    14    

Выгрузка документа по условию Промо

Практика программирования Разработка v8 Бесплатно (free)

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    16206    m-rv    2    

Вложенные СКД

Практика программирования Конфигурирование 1С v8 v8::СКД Бесплатно (free)

Возможности, нюансы, заметки.

26.03.2020    6283    Yashazz    19    

СКД - одна из проблем связи Наборов данных

Практика программирования v8::СКД 1cv8.cf Россия Бесплатно (free)

Официальная информация: 1. В схеме компоновки данных нет указания типа связи. Все связи считаются ЛЕВЫМИ внешними соединениями. 2. Если для вложенного набора данных указано условие фильтра, тогда связь вложенного набора данных с родительским набором данных считается ВНУТРЕННЕЙ. Или как получить все результаты основного набора при отборе в зависимом.

03.03.2020    5306    BelikovSA    9    

Получение значений всех полей в иерархии структуры отчета

Практика программирования Математика и алгоритмы v8::СКД Россия Бесплатно (free)

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

28.02.2020    2218    real_MaxA    1    

Как прикрутить ГУИД к регистру сведений Промо

Практика программирования Перенос данных из 1C8 в 1C8 Разработка v8 Бесплатно (free)

... и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.

16.04.2019    20596    m-rv    17    

Для чего нужен флаг "Автозаполнение" в СКД и каких проблем без него можно избежать

Практика программирования v8 v8::СКД Бесплатно (free)

Речь пойдет о флаге «Автозаполнение» в наборе данных Запрос Системы компоновки данных (СКД). Сразу хочу отметить, что флаг «Автозаполнение» доступен только в наборе данных - Запрос.

26.02.2020    6830    Neti    41    

Программная работа с настройками СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.

27.01.2020    30892    ids79    26    

[СКД] Программное создание схемы компоновки данных

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

15.01.2020    26602    John_d    22    

Как сделать запрос на изменение данных Промо

Практика программирования v8 v8::Запросы 1cv8.cf Бесплатно (free)

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    31339    m-rv    21    

СКД. Шаг 3. Используем макеты для оформления отчета

Работа с интерфейсом v8 v8::СКД 1cv8.cf Бесплатно (free)

В данной публикации рассмотрим базовый подход к использованию собственных макетов в СКД на примере формирования небольшого отчета.

13.01.2020    17051    aximo    14    

[СКД] Вывод картинки в результат любого отчета на СКД

Работа с интерфейсом v8 v8::СКД 1cv8.cf Бесплатно (free)

Если у вас в справочнике Номенклатура (или другом справочнике) заполнена картинка, то ее можно легко вывести для наглядности отчета.

09.12.2019    9413    John_d    16    

СКД. Лайфхак №2. Собираем отчет еще удобнее

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

В этой публикации я хочу вам описать еще один интересный и относительно новый подход к одному из довольно тривиальных методов работы с СКД для построения отчетов.

20.11.2019    10280    aximo    17    

Метод формирования движений в типовых регистрах нетиповыми регистраторами Промо

Практика программирования v8 1cv8.cf Бесплатно (free)

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

05.12.2017    28512    itriot11    34    

Некоторые редко используемые возможности СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

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

11.11.2019    11772    kser87    40    

Лайфхак работы с СКД. Собираем отчет.

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

В этой статье я опишу небольшой "лайфхак" по сборке отчетов в СКД. Думаю, этот подход будет интересен тем, кто хочет быстро оформить отчет.

25.10.2019    22255    aximo    38    

Немного про СКД. Характеристики и проверка пустого отчета

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

Пример использования характеристик в СКД и программная работа с ними. А также описание проверки результата отчета на заполненность.

10.10.2019    12317    YPermitin    7    

Использование классов .Net в 1С для новичков Промо

Практика программирования Разработка внешних компонент Универсальные функции v7.7 v8 Бесплатно (free)

Руководство для новичков. Написав статью http://infostart.ru/public/238584/, я понял, что многие не понимают того, что написано. Поэтому в этой статье постараюсь более подробно остановиться на азах и без кода на вражеском языке (C#)

27.01.2016    77194    Serginio    110    

Полезняшки по СКД и построителям. Просто код

Практика программирования Универсальные функции v8 v8::СКД Бесплатно (free)

Полезные процедуры и функции для работы с построителями и СКД. Просто исходник.

10.10.2019    10252    Yashazz    45    

Две схемы СКД в одном отчете с пользовательскими параметрами

Практика программирования v8::СКД Россия Бесплатно (free)

Простая реализация разных по типу отчетов в одном. Применение нескольких схем компоновки с корректной передачей пользовательских параметров.

10.10.2019    9921    evgeni-red    8    

Три способа создания одного отчета на СКД

Практика программирования v8 v8::СКД ERP2 УТ11 КА2 Бесплатно (free)

СКД имеет столько возможностей, что часто приходится выбирать, каким образом строить отчет. Причем выбор не всегда очевидный. В статье рассмотрен пример построения отчета «Отрицательные остатки по товарам на момент проведения расходных документов» тремя разными способами. Приведены «За» и «Против» каждого варианта решения задачи.

08.10.2019    14604    ids79    26    

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    35735    ids79    40    

СКД. Отчеты с картинками

Практика программирования Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Решение популярных кейсов с картинками в отчетах на СКД.

25.09.2019    22656    YPermitin    40    

СКД не только для отчетов

Практика программирования v8::СКД 1cv8.cf Бесплатно (free)

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

18.09.2019    19758    YPermitin    36    

Агрегатные функции СКД, о которых мало кто знает

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    52760    ids79    54    

Тестер: частые вопросы Промо

Практика программирования v8 Бесплатно (free)

Ошибкам бой - тесты норма жизни!

25.07.2018    29602    grumagargler    28    

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    91825    ids79    56    

Форма отчета СКД

Работа с интерфейсом v8::СКД 1cv8.cf Бесплатно (free)

Описание объекта ОбщиеФормы – ФормаОтчета.

01.08.2019    12074    vasilev2015    5    

Разбираемся с параметрами редактирования СКД

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Связь по типу, Параметры выбора, Связи параметров выбора

31.07.2019    25814    json    15    

Ускоряем 1С: модули с повторным использованием возвращаемых значений Промо

Практика программирования v8 Бесплатно (free)

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

04.09.2017    53591    m-rv    61    

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты

Практика программирования v8 v8::СКД 1cv8.cf Бесплатно (free)

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    65825    ids79    12    

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ

Инструментарий разработчика Практика программирования v8 v8::СКД Бесплатно (free)

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    37434    ids79    27    

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

Практика программирования Работа с интерфейсом v8 v8::СКД 1cv8.cf Бесплатно (free)

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

09.07.2019    29053    ids79    2    

"Меньше копипаста!", или как Вася универсальную процедуру писал

Практика программирования Разработка v8 v8::СКД 1cv8.cf Бесплатно (free)

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    19976    SeiOkami    50