|
Вывод в таблицу составных областей. | ☑ | ||
---|---|---|---|---|
0
Креатив
31.08.20
✎
07:33
|
Ваяю расписание. В примитивном варианте выглядит так https://b.radikal.ru/b06/2008/cb/68bfd943072e.png
Соответственно мне сначала надо вывести Строка|Номер, затем присоединить справа название|интервалы и ниже времена|ИнтервалХ два раза. Причём вариации интервалов могут быть любые 1-2, 1-1, 2-1, 2-2. Ширина областей Интервал1 и Интервал2 одинаковая (по ячейкам и их ширине). Кто уже с этим сталкивался, подскажите, как проще это реализовать? |
|||
1
Креатив
31.08.20
✎
10:26
|
Заработало только так. Понятно, что вывод отдельной секции нужно будет оформить в процедуру.
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет2"); ТабДок = Новый ТабличныйДокумент; ТабДок2 = Новый ТабличныйДокумент; СтрокаТаблицы = Макет.ПолучитьОбласть("Строка|Номер"); СтрокаТаблицы.Параметры.Номер = 1; пНомер = ТабДок.Вывести(СтрокаТаблицы); Название = Макет.ПолучитьОбласть("Название|Интервалы"); Название.Параметры.Имя = "Туда-сюда"; ТабДок2.Вывести(Название); Название = ТабДок2; нВерх = пНомер.Верх; нНиз = нВерх; нЛево = пНомер.Право + 1; нПраво = нЛево + Название.ШиринаТаблицы - 1; тВставка = Название.Область("R1C1:R" + Название.ВысотаТаблицы + "C" + Название.ШиринаТаблицы); //тВставка.Значение = "Туда-сюда"; ТабДок.ВставитьОбласть(тВставка, ТабДок.Область("R" + нВерх + "C" + нЛево + ":R" + нНиз + "C" + нПраво)); Ин1 = Макет.ПолучитьОбласть("Времена|Интервал2"); Ин1.Параметры.Инт2 = "5-10"; Ин1.Параметры.Инт3 = "10-12"; ТабДок2.Очистить(); ТабДок2.Вывести(Ин1); Ин1 = ТабДок2; тВставка = Ин1.Область("R1C1:R" + Ин1.ВысотаТаблицы + "C" + Ин1.ШиринаТаблицы); нВерх = нВерх + 1; //Выводим строкой ниже нПраво = нЛево + Ин1.ШиринаТаблицы - 1; нНиз = нВерх + Ин1.ВысотаТаблицы - 1; ТабДок.ВставитьОбласть(тВставка, ТабДок.Область("R" + нВерх + "C" + нЛево + ":R" + нНиз + "C" + нПраво)); Ин2 = Макет.ПолучитьОбласть("Времена|Интервал1"); Ин2.Параметры.Инт1 = "6-10"; ТабДок2.Очистить(); ТабДок2.Вывести(Ин2); Ин2 = ТабДок2; тВставка = Ин2.Область("R1C1:R" + Ин2.ВысотаТаблицы + "C" + Ин2.ШиринаТаблицы); нВерх = нВерх; //в той же строче нЛево = нПраво + 1; // справа от предыдущей нПраво = нЛево + Ин2.ШиринаТаблицы - 1; //нНиз = нВерх + Ин2.ВысотаТаблицы - 1; ТабДок.ВставитьОбласть(тВставка, ТабДок.Область("R" + нВерх + "C" + нЛево + ":R" + нНиз + "C" + нПраво)); |
|||
2
RomanYS
31.08.20
✎
10:30
|
(1) Заработало и ладно. Правда почему нельзя было просто через присоединить сделать и что такое "1-2, 1-1, 2-1, 2-2" осталось не понятым
|
|||
3
Ёпрст
31.08.20
✎
10:40
|
(1) использовать RC формат адреса..нафига ? Когда и так есть Область(номерПервойСтроки,НомерПервойКолонки,НомерПоследнейСтроки,НомерПоследнейКолонки)
|
|||
4
sitex
naïve
31.08.20
✎
10:46
|
(1) Действительно почему не через "Присоединить" ?
|
|||
5
rudnitskij
31.08.20
✎
10:56
|
"Соответственно мне сначала надо вывести Строка|Номер, затем присоединить справа название|интервалы и ниже времена|ИнтервалХ два раза" - "присоединить" и "ниже" в одном предложении удивили. Присоединяете вы всегда в текущей строке. А если
ТабДокумент.Вывести(Область) то это с новой строки будет |
|||
6
rudnitskij
31.08.20
✎
10:56
|
Как вы код выделяете в тексте?
|
|||
7
Креатив
31.08.20
✎
11:22
|
(3)В примерах СП так.
(4)Бог знает. Описание показалось мутным. (5)Я указываю область, куда вставлять относительно первой ячейки. А со следующей строкой надо будет посмотреть. |
|||
8
rudnitskij
31.08.20
✎
11:25
|
(7) "Я указываю область, куда вставлять относительно первой ячейки" - первый раз такое слышу о формировании табличного документа. "Присоединить" присоединяет указанную область вплотную к выведенной ранее, никакого указанного места там нет
|
|||
9
Креатив
31.08.20
✎
11:25
|
(1)Могут быть две секции Интервал1, либо две секции Интервал2, либо та и другая, но в разном порядке следования.
|
|||
10
Креатив
31.08.20
✎
11:29
|
(8)ВставитьОбласть вставляет в любое место таблицы по абсолютному адресу. Так что работает.
Присоединить можно посмотреть, только придётся разбираться с уровнями. К первой ячейке мне нужно будет присоединять сначала длинный заголовок, а под ним короткие секции. |
|||
11
RomanYS
31.08.20
✎
11:30
|
(9) Никакой проблемы здесь нет, опреатор "Если" её решает.
(7) Присоединить более "стандартно" для подобных задач, ВставитьОбласть для точечных правок готового ТД, в типовых вообще ни разу не видел. |
|||
12
rudnitskij
31.08.20
✎
11:32
|
(10) тогда вы можете отрисовать в какую-то область длинный заголовок с короткими секциями и уже эту всю конструкцию присоединять в сборе
|
|||
13
rudnitskij
31.08.20
✎
11:34
|
(1) как вы пишете код в таком виде?
|
|||
14
Креатив
31.08.20
✎
11:38
|
(11)Описание метода очень мутное. Поэтому я и взялся за ВставитьОбласть.
(12)Тоже вариант. (13)Руками вроде. Для тестирования всё понятно. |
|||
15
RomanYS
31.08.20
✎
11:43
|
(14) Что там мутного? По сути тоже самое что и Вывести, только в ту же строку(точнее последнюю горизонтальную область выведенную с помощью Вывести) правее.
|
|||
16
Креатив
31.08.20
✎
12:02
|
(15)Допустим, присоединил я первую ячейку строка|номер, вывел название|интервалы. А куда присоединится времена|интервал1?
|
|||
17
RomanYS
31.08.20
✎
12:09
|
(16) Вывод идёт построчно
Или Вывести(строка|номер) Цикл Если Присоединить(строка|Интервал1) иначе Присоединить(строка|Интервал2) КонецЕсли; КонецЦикла; или Вывести(времена|номер) Цикл Если Присоединить(времена|Интервал1) иначе Присоединить(времена|Интервал2) КонецЕсли; КонецЦикла; Обычно выводят заголовки ("Название") потом в цикле строки ("Времена") |
|||
18
Креатив
31.08.20
✎
12:30
|
С одним табличным документом получается полная хрень.
|
|||
19
Креатив
31.08.20
✎
12:39
|
Вот так работает.
ТабДок = Новый ТабличныйДокумент; ТабДок2 = Новый ТабличныйДокумент; СтрокаТаблицы = Макет.ПолучитьОбласть("Строка|Номер"); СтрокаТаблицы.Параметры.Номер = 1; пНомер = ТабДок.Присоединить(СтрокаТаблицы); Название = Макет.ПолучитьОбласть("Название|Интервалы"); Название.Параметры.Имя = "Туда-сюда"; ТабДок2.Вывести(Название); Ин1 = Макет.ПолучитьОбласть("Времена|Интервал2"); Ин1.Параметры.Инт2 = "5-10"; Ин1.Параметры.Инт3 = "10-12"; ТабДок2.Вывести(Ин1); Ин2 = Макет.ПолучитьОбласть("Времена|Интервал1"); Ин2.Параметры.Инт1 = "6-10"; ТабДок2.Присоединить(Ин2); ТабДок.Присоединить(ТабДок2); |
|||
20
RomanYS
31.08.20
✎
12:48
|
(19) Похоже у меня не получается донести до тебя "построчно".
Строка в данном случае горизонтальная область ("Строка", "Название" или "Времена"). Присоединять нужно соответствующие области (к "Строка|Номер" - "Строка|Интервал1"). Зачем секция "Интервалы" вообще непонятно, интервалы парами у тебя ходят? Покажи пример результата |
|||
21
Креатив
31.08.20
✎
13:03
|
(20)Либо я чего-то не догоняю, либо ты не посмотрел картинку в (0).
Горизонтальная секция "строка" физически располагается на 3-х строчках таблицы. Номер также 3 строки в высоту. Название располагается на одной строке над всеми интервалами. Каждый интервал занимает одну ячейку в ширину и 2 в высоту. И в моём случае Строка|Интервал1 - не является самостоятельным элементом, так как захватывает объединённую область название|интервалы/ В рабочем варианте интервалов будет шесть. Результат. https://d.radikal.ru/d19/2008/6c/6c1578f1f6c8.png |
|||
22
RomanYS
31.08.20
✎
13:11
|
(21) теперь понятнее. Из (0) не очевидно, в первой колонке объединенные ячейки.
Тогда, да - выводить кусками как в (19). Альтернатива: выводить построчно (сначала "Название" потом "Времена"), а объединение в первой колонке делать постобработкой. |
|||
23
Креатив
31.08.20
✎
13:24
|
(22)С программным объединением тоже вариант.
|
|||
24
RomanYS
31.08.20
✎
13:27
|
(23) Да, ничего сложного. Кстати можно отказаться и от секции "интревал1" и получать её тупо объединением. Возможно получится проще.
|
|||
25
Креатив
31.08.20
✎
16:30
|
Всем спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |