|
НачатьАвтогруппировкуСтрок() метод ТабличногоДокумента | ☑ | ||
---|---|---|---|---|
0
mirina313
22.07.19
✎
14:43
|
Скажите, пожалуйста. Почему не получается сгруппировать строки?
Тип значения параметра группировки "Дата". ТабДок.НачатьАвтогруппировкуСтрок(); Для каждого Строка Из ТЗ Цикл ОбластьЗаголовок.Параметры.Период = Строка.Период; ТабДок.Вывести(ОбластьЗаголовок, 1); ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, Строка); ТабДок.Вывести(ОбластьСтрока, 2); КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); |
|||
1
Greeen
22.07.19
✎
14:47
|
1) Плюсики группировки есть в табличном документе?
2) В отчет выведены данные? |
|||
2
mirina313
22.07.19
✎
14:49
|
(1) Плюсиков нет, данные выведены без изменения.
Может проблема в том, что параметры разбиты на две области? |
|||
3
lodger
22.07.19
✎
14:49
|
попробуй выводить не 1\2, а 0\1
|
|||
4
mirina313
22.07.19
✎
14:56
|
(1) (3) Есть плюсики и вывод данных, но данные не сгруппированы по ОбластьЗаголовок
|
|||
5
ДенисЧ
22.07.19
✎
14:57
|
А если попробовать НачатьГруппуСтрок() ?
|
|||
6
lodger
22.07.19
✎
14:57
|
нулевой уровень не группируется. выведи 0 перед циклом.
|
|||
7
mirina313
22.07.19
✎
15:21
|
В общем, чтобы была понятна картина
https://ibb.co/NKddvy7 Нужно чтобы по "одинаковым" датам срабатывала группировка, а она не срабатывает |
|||
8
lodger
22.07.19
✎
15:22
|
(7) так работает же. 1 дата - 1 группа.
|
|||
9
lodger
22.07.19
✎
15:23
|
или делай
вывести уровень 1 вывести уровень 2 вывести уровень 2 вывести уровень 2 вывести уровень 1 вывести уровень 2 вывести уровень 2 |
|||
10
mirina313
22.07.19
✎
15:23
|
(8) ну после 31 числа идет 1 дата еще раз, но с другими данными
|
|||
11
lodger
22.07.19
✎
15:24
|
(10) ну так это правильно. 1 июля <> 1 августа. структуру данных поменяй, используй ДеньМесяца() обходи группы по этим дням.
|
|||
12
mirina313
22.07.19
✎
15:26
|
(11) Имею ввиду идет еще раз 1 августа
|
|||
13
mirina313
22.07.19
✎
15:27
|
(11) Просто мне построчно вывалил как в исходнике и все, без группировки
|
|||
14
mirina313
22.07.19
✎
15:36
|
(11) А я хочу чтобы, если дата1 = дата2, допустим 1августа и еще раз "выводится" 1августа.
В этом случае, происходит склейка дат (1 уровня), становится одна запись 1августа, а строка которая идет на (2 уровне), под дата2 (1августа) попадает в подчинение к этой склейке... |
|||
15
pasha_d
22.07.19
✎
15:48
|
Может я чего не догоняю, синтаксис не проверял - но как-то так может быть?
ТабДок.НачатьАвтогруппировкуСтрок(); ТЗ_Периоды = ТЗ.Скопировать(); ТЗ_Периоды.Свернуть("Период"); ТЗ_Периоды.Сортировать("Период"); Для каждого Строка Из ТЗ_Периоды Цикл ОбластьЗаголовок.Параметры.Период = Строка.Период; ТабДок.Вывести(ОбластьЗаголовок, 1); ТаблицаСтроки = ТЗ.Скопировать(ТЗ.НайтиСтроки(Новый Структура("Период", Строка.Период))); Для каждого СтрокаТаблицы Из ТаблицаСтроки Цикл ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, СтрокаТаблицы); ТабДок.Вывести(ОбластьСтрока, 2); КонецЦикла; КонецЦикла; ТабДок.ЗакончитьАвтогруппировкуСтрок(); |
|||
16
mirina313
22.07.19
✎
15:56
|
(15) Если свернуть периоды, то данные других колонок исчезнут.
Структура ТЗ такая: Период1,значение1,значение2,значение3 Период2,значение1,значение2,значение3 И, если склеить период1 и период2, то значения период1 и период2 исчезнут, т.к. это не числа, верно ведь? И это не сработает, так как данных нет, чтобы копировать. Только склейка периодов. ТаблицаСтроки = ТЗ.Скопировать(ТЗ.НайтиСтроки(Новый Структура("Период", Строка.Период))); |
|||
17
mirina313
22.07.19
✎
16:01
|
А я хочу чтобы в случае Период1 = Период2
Период1,значение1,значение2,значение3 Период2,значение1,значение2,значение3 Происходило следующее Период1+Период2, Значение1,значение2,значение3 значение1,значение2,значение3 |
|||
18
pasha_d
22.07.19
✎
16:18
|
Тип значения у колонки "Период" какой?
|
|||
19
mirina313
22.07.19
✎
16:26
|
(18) Сработало по вашему алгоритму, спасибо!
Но, хотелось бы как-то проще поступить |
|||
20
lodger
22.07.19
✎
16:35
|
(19) какая вводная - такое решение.
можно подняться на шаг выше по коду и ТЗ сменить на выборку с итогами по периоду. |
|||
21
lodger
22.07.19
✎
16:36
|
или отсортировать существующую ТЗ по периоду (без свертвывания), потом "Вывести(ОбластьЗаголовок" только если период сменился относительно предыдущего. но это еще более "грязный код".
|
|||
22
mirina313
22.07.19
✎
17:05
|
(20) Можно во временную таблицу, я же могу ВТ передать как объект в СКД?
|
|||
23
dezss
22.07.19
✎
17:19
|
(21) Почему "грязный"?
|
|||
24
pasha_d
22.07.19
✎
17:28
|
(22) изначально-то откуда ТЗ формируется у вас?
|
|||
25
mirina313
23.07.19
✎
09:50
|
(24) Берутся данные из выборки, на каждом шаге итерации проверяется строка выборки на определенное условие, и если определенное условие = истина,
тогда добавляется строка в ТЗ, если нет- то следующая пропуск. |
|||
26
pasha_d
23.07.19
✎
10:07
|
то есть не из запроса?
|
|||
27
mirina313
23.07.19
✎
10:12
|
(26) Ну как сказать, запрос то есть. Но данные не напрямую из запроса берутся, а через выборку(обход всех строк запроса) проверяются на условия, и только в случае истины условия добавляются в ТЗ
|
|||
28
mirina313
23.07.19
✎
10:13
|
(26) И эти условия могут изменятся динамически
|
|||
29
pasha_d
23.07.19
✎
10:54
|
есть ощущение что ваш функционал можно легко реализовать на СКД.
|
|||
30
mirina313
23.07.19
✎
11:01
|
(29) Ну так, у меня берутся данные из выборки > проверяются на условия > помещаются в ТЗ, а ТЗ передается в СКД как внешний объект.
|
|||
31
lodger
23.07.19
✎
12:42
|
(30) лишь бы запрос не писать...
|
|||
32
mirina313
23.07.19
✎
14:25
|
(31) А как написать такой запрос?
Запрос > Выборка > В каждой строке есть данные периодичности(разные) > Каждую строку проверить на кратность каждому дню из определенного периода, по этим данным периодичности > В случае кратности строку из выборки вывести в результат запроса Это не возможно реализовать одним запросом в СКД |
|||
33
lodger
23.07.19
✎
15:12
|
(32) смотря что значит "кратность каждому дню".
обычно условие можно формализовать, упростить и привести к работающему в запросе виду. |
|||
34
pasha_d
23.07.19
✎
15:13
|
(33) я тоже думаю, что проще 1 грамотный запрос нарисовать..
|
|||
35
mirina313
23.07.19
✎
15:55
|
(33) Ну выборка из регистра и в ней цикл по дням, а эти дни берут из периода который указываю я.
В выборке есть строки содержащие, допустим имяживотного, датарождения, сколько ест, сколько пьет и периодичность(через) сколько его нужно кормить и поить. Допустим, я хочу знать на следующей неделе в какой день и кого кормить и поить и в каком объеме. Вот мне нужно перебрать всех животных, а на следующей неделе перебрать каждый день и узнать в какой день кормить/поить какое животное с расчетом от датырождения. Слегка глупо сформулировано, но это чисто в целях примера)) |
|||
36
lodger
23.07.19
✎
17:59
|
(35) это решаемо в пределах запроса через фокусы вроде генерации цифр и чисел, а уже от них переходить к датам.
вот попробуй такое упражнение для консоли запросов: параметры: ДатаСтарта1 12.06.2019 0:00:00 ДатаСтарта2 15.06.2019 0:00:00 Периодичность1 2 Периодичность2 3 ПериодОтбор1 01.07.2019 0:00:00 ПериодОтбор2 31.07.2019 23:59:59 текст запроса ВЫБРАТЬ 0 КАК Цифра ПОМЕСТИТЬ Цифры ОБЪЕДИНИТЬ ВЫБРАТЬ 1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Десятки.Цифра * 10 + Единицы.Цифра КАК Дней, ВЫБОР КОГДА (ВЫРАЗИТЬ((Десятки.Цифра * 10 + Единицы.Цифра) / 2 КАК ЧИСЛО(3, 0))) = (Десятки.Цифра * 10 + Единицы.Цифра) / 2 ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК кратно2, ВЫБОР КОГДА (ВЫРАЗИТЬ((Десятки.Цифра * 10 + Единицы.Цифра) / 3 КАК ЧИСЛО(3, 0))) = (Десятки.Цифра * 10 + Единицы.Цифра) / 3 ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК кратно3, ВЫБОР КОГДА (ВЫРАЗИТЬ((Десятки.Цифра * 10 + Единицы.Цифра) / 4 КАК ЧИСЛО(3, 0))) = (Десятки.Цифра * 10 + Единицы.Цифра) / 4 ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК кратно4 ПОМЕСТИТЬ кратные ИЗ Цифры КАК Десятки, Цифры КАК Единицы ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ &ДатаСтарта1, &Периодичность1 ПОМЕСТИТЬ Вводная ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ &ДатаСтарта2, &Периодичность2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Вводная.ДатаСтарта1, Вводная.Периодичность1, ВЫБОР КОГДА Вводная.Периодичность1 = 2 И кратные.кратно2 ТОГДА ДОБАВИТЬКДАТЕ(Вводная.ДатаСтарта1, ДЕНЬ, кратные.Дней) ИНАЧЕ Вводная.ДатаСтарта1 КОНЕЦ КАК ДатаОбслуживания ПОМЕСТИТЬ ОтСтартаПлюс ИЗ Вводная КАК Вводная ВНУТРЕННЕЕ СОЕДИНЕНИЕ кратные КАК кратные ПО (Вводная.Периодичность1 = 2) И (кратные.кратно2) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ Вводная.ДатаСтарта1, Вводная.Периодичность1, ВЫБОР КОГДА Вводная.Периодичность1 = 3 И кратные.кратно3 ТОГДА ДОБАВИТЬКДАТЕ(Вводная.ДатаСтарта1, ДЕНЬ, кратные.Дней) ИНАЧЕ Вводная.ДатаСтарта1 КОНЕЦ ИЗ Вводная КАК Вводная ВНУТРЕННЕЕ СОЕДИНЕНИЕ кратные КАК кратные ПО (Вводная.Периодичность1 = 3) И (кратные.кратно3) ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОтСтартаПлюс.ДатаОбслуживания КАК ДатаОбслуживания, ОтСтартаПлюс.ДатаСтарта1 КАК ДатаСтарта1, ОтСтартаПлюс.Периодичность1 ИЗ ОтСтартаПлюс КАК ОтСтартаПлюс ГДЕ ОтСтартаПлюс.ДатаОбслуживания МЕЖДУ &ПериодОтбор1 И &ПериодОтбор2 УПОРЯДОЧИТЬ ПО ДатаОбслуживания, ДатаСтарта1 ИТОГИ ПО ДатаОбслуживания |
|||
37
mirina313
23.07.19
✎
19:36
|
(36) До вашего уровня мне пока что далеко)
Выглядит все очень сложно |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |