|
Таблица значений в дерево значений | ☑ | ||
---|---|---|---|---|
0
picom
26.06.17
✎
13:26
|
Есть таблица на форме во внешней обработке в УТ11.3 вида
документ1 Товар1 Колво1 документ1 Товар2 Колво2 документ2 Товар1 Колво1 Как молнеиносно и супербыстро это превратить в документ1 ----Товар1 Колво1 ----Товар2 Колво2 документ2 ----Товар1 Колво1 ? |
|||
1
catena
26.06.17
✎
13:32
|
Засунуть в запрос с итогами, выгрузить.
|
|||
2
МихаилМ
26.06.17
✎
15:59
|
не в запрос а в построитель запроса
//------------------------------------------------------------------------------------------------------------------------------ //http://www.odincplus.com/stati-programmistam/preobrazovanie-tablitsy-znacheniy-v-derevo-znacheniy.html // Функция возращает дерево значний из таблицы значений, с нужной группировкой Функция ТаблицаЗначенийВДеревоЗначений(ТЗ, ГруппировкаКолонка) Экспорт ПЗ = Новый ПостроительЗапроса; ПЗ.ИсточникДанных = Новый ОписаниеИсточникаДанных(ТЗ);//передаем ТЗ ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять; ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка].Измерение = Истина;//по этой колонке идет группировка ПЗ.ЗаполнитьНастройки(); ПЗ.Выполнить(); Дерево = ПЗ.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией); Возврат Дерево; КонецФункции // ТаблицаЗначенийВДеревоЗначений |
|||
3
vadim777
26.06.17
✎
16:26
|
||||
4
picom
28.06.17
✎
13:49
|
спасибо конечно, но на упр формах то как?
|
|||
5
pessok
28.06.17
✎
13:50
|
а какая разница - на каких формах?
|
|||
6
pessok
28.06.17
✎
13:52
|
хм, а чем (2) лучше (1)
я всегда юзал (1) |
|||
7
picom
28.06.17
✎
13:53
|
(5) Создал дерево на форме
как в него загрузить результат из (2) |
|||
8
pessok
28.06.17
✎
13:55
|
УправляемаяФорма.ЗначениеВРеквизитФормы (ManagedForm.ValueToFormAttribute)
УправляемаяФорма (ManagedForm) ЗначениеВРеквизитФормы (ValueToFormAttribute) Синтаксис: ЗначениеВРеквизитФормы(<Значение>, <ИмяРеквизита>) Параметры: <Значение> (обязательный) Тип: Произвольный. Значение прикладного типа, которое необходимо преобразовать в реквизит формы и для которого определено преобразование в данные формы. <ИмяРеквизита> (обязательный) Тип: Строка. Имя реквизита формы, в который необходимо поместить преобразованное значение. Описание: Преобразует объект прикладного типа в реквизит управляемой формы (данные формы) с указанным именем. Если реквизит является основным реквизитом формы объекта или записи регистра сведений, то осуществляется обновление параметра формы Ключ и автоматического заголовка формы. Если ключ старого объекта отличается от ключа нового и старый объект был заблокирован формой, то блокировка на старый объект освобождается. Обновление флага модифицированности при этом не производится. Доступность: Сервер, мобильное приложение(сервер). |
|||
9
picom
28.06.17
✎
13:56
|
ееее
всем спасибо ЗначениеВРеквизитФормы(ТаблицаЗначенийВДеревоЗначений(РеквизитФормыВЗначение("Табло"), "Документ"), "Реквизит1"); |
|||
10
Tateossian
28.06.17
✎
13:56
|
НаборыДанных = Новый Структура("ТвояТаблица", ТвояТаблица);
СКД = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); КомпМакета = новый КомпоновщикМакетаКомпоновкиДанных; макетКомп = КомпМакета.Выполнить(СКД, СКД.НастройкиПоУмолчанию); ПроцессорКомпДанных = новый ПроцессорКомпоновкиДанных; ПроцессорКомпДанных.Инициализировать(макетКомп, НаборыДанных); ДеревоЗначений = Новый деревозначений; ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; ДеревоЗначений = Новый ДеревоЗначений; ПроцессорВывода.УстановитьОбъект(ДеревоЗначений); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); |
|||
11
Tateossian
28.06.17
✎
13:57
|
(10) Имей ввиду - дерево - мутабельный тип:) Перегнать не получится, как пишут товрищи (8)
|
|||
12
Tateossian
28.06.17
✎
13:57
|
(11) Используй временное хранилище
|
|||
13
pessok
28.06.17
✎
13:58
|
(11) с чего бы это вдруг?
Процедура ПреобразоватьТаблицуВДерево(ТаблицаДанных) ДеревоДанных.ПолучитьЭлементы().Очистить(); Запрос = Новый Запрос(); Запрос.Текст = "ВЫБРАТЬ * ПОМЕСТИТЬ ВТ_ТаблицаДанных ИЗ &ТаблицаДанных КАК ТаблицаДанных; ВЫБРАТЬ * ИЗ ВТ_ТаблицаДанных | ГДЕ (ЗаказКлиента.Дата МЕЖДУ &НачалоПериода И &КонецПериода | ИЛИ &НеОтбиратьПоДатеЗаказа) |И (ЗаказКлиента.ДатаОтгрузки МЕЖДУ &НачалоПериода И &КонецПериода | ИЛИ &НеОтбиратьПоДатеОтгрузки) | ИТОГИ ПО Склад "; Запрос.УстановитьПараметр("ТаблицаДанных", ТаблицаДанных); Запрос.УстановитьПараметр("НеОтбиратьПоДатеЗаказа", Не ОтбиратьПоДатеЗаказа); Запрос.УстановитьПараметр("НеОтбиратьПоДатеОтгрузки", Не ОтбиратьПоДатеДоставки); Запрос.УстановитьПараметр("НачалоПериода", Период.ДатаНачала); Запрос.УстановитьПараметр("КонецПериода", Период.ДатаОкончания); ВыборкаСклад = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Дерево = РеквизитФормыВЗначение("ДеревоДанных"); Пока ВыборкаСклад.Следующий() Цикл НовСтрСклад = Дерево.Строки.Добавить(); ЗаполнитьЗначенияСвойств(НовСтрСклад, ВыборкаСклад); Детали = ВыборкаСклад.Выбрать(); Пока Детали.Следующий() Цикл НовСтрДетали = НовСтрСклад.Строки.Добавить(); ЗаполнитьЗначенияСвойств(НовСтрДетали, Детали); КонецЦикла; КонецЦикла; ЗначениеВРеквизитФормы(Дерево, "ДеревоДанных"); КонецПроцедуры УМВР |
|||
14
picom
28.06.17
✎
14:02
|
А как развернуть все группировки в УФ?
|
|||
15
pessok
28.06.17
✎
14:04
|
ТаблицаФормы.Развернуть (FormTable.Expand)
ТаблицаФормы (FormTable) Развернуть (Expand) Синтаксис: Развернуть(<ИдентификаторСтроки>, <СПодчиненными>) Параметры: <ИдентификаторСтроки> (обязательный) Тип: Произвольный. Идентификатор строки таблицы. <СПодчиненными> (необязательный) Тип: Булево. Определяет необходимость раскрытия подчиненных узлов. Истина - раскрывать подчиненные узлы, Ложь - не раскрывать подчиненные узлы. Значение по умолчанию: Ложь. Описание: Разворачивает узел в указанной строке дерева. Доступность: Тонкий клиент, веб-клиент, толстый клиент, мобильное приложение(клиент). -------------------------------------------------------------------------------- Методическая информация |
|||
16
Tateossian
28.06.17
✎
14:04
|
В люом случае, у тебя результаты будут непредсказуемые, ибо что ты ждешь от этой конструкции?
ГДЕ (ЗаказКлиента.Дата МЕЖДУ &НачалоПериода И &КонецПериода | ИЛИ &НеОтбиратьПоДатеЗаказа) У тебя она всегда работать будет, лол |
|||
17
Tateossian
28.06.17
✎
14:06
|
Вообще, не используй никогда конструкции-отрицания ("Справочник программиста (r)"). Юзай утвверждения и оператор И : &ИспользоватьПоДатеХ
|
|||
18
pessok
28.06.17
✎
14:07
|
(16) все у меня прекрасно и правильно работает уже не первый год.
Если у тебя проблемы с чтением сложных условий запрос, то следует подучиться :) |
|||
19
Tateossian
28.06.17
✎
14:12
|
(18) Возможно, но не факт, что корректно;) Так и быть, пойду подучусь.
Ну и напоследок, у тебя в любом случае неоптимальный запрос: или в где всегда стоит избегать. Пруфец тут: http://www.gilev.ru/optimquery/ |
|||
20
pessok
28.06.17
✎
14:13
|
(19) друг. ну если есть сомнения.
выполни два запроса ВЫБРАТЬ ПЕРВЫЕ 100 Т.Ссылка ИЗ Документ.ЗаказКлиента КАК Т ГДЕ Т.Дата МЕЖДУ &Дн И &До ИЛИ &НеОтбиратьПоДате ВЫБРАТЬ ПЕРВЫЕ 100 Т.Ссылка ИЗ Документ.ЗаказКлиента КАК Т ГДЕ Т.Дата МЕЖДУ &Дн И &До И &ОтбиратьПоДате и убедись наглядно :) |
|||
21
pessok
28.06.17
✎
14:13
|
+(20) будешь весьма удивлен, видимо
|
|||
22
pessok
28.06.17
✎
14:14
|
а ГДЕ тут избежать ну никак нельзя, потому что нет ни соединений, ни виртуальных таблиц :D
|
|||
23
Tateossian
28.06.17
✎
14:21
|
(20) Да, тут понятнее стало. Извиняюсь за поспешный вывод:) Проверь-ка, вот так быстрее будет (просто интересно):
ГДЕ ВЫБОР КОГДА &ОтбиратьПоДате ТОГДА Т.Дата МЕЖДУ &Дн И &До ИНАЧЕ ИСТИНА КОНЕЦ |
|||
24
pessok
28.06.17
✎
14:24
|
(23) на самом деле, я использую и твою конструкцию тоже. Просто, какая первая приходит в голову, такую и использую :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |