Задача
такая. Имеем 6 колонок. В 3 из них строки должны иметь свою высоту
(которая определяется автоматически по содержимому ячеек), в других 3
строки имеют свою высоту (тоже определяется независимо по содержимому
своих ячеек). Кто-нибудь делал такое? Попробовал формировать разные наборы колонок в разных табличных
документах, а потом выводить в итоговый табл. док. сначала готовый
вариант из первого таб. дока, потом присоединять к нему готовый вариант
из второго таб дока. Ничего хорошего не вышло - 1С выравнивает всю
строку по содержимому ячеек во всех 6 колонках. Вот код:
я
делал этикетку, где надо было выводить в разных местах разными шрифтами
разные вещи, да чтобы еще и красиво было... разбиваешь табдок на мелкие
строки и стобцы, из расчета, например, 10 на обычную строку и
объединяешь как хочешь...
(4)
насколько я понимаю, так ты можешь получать области неправильной формы.
Но чем это поможет мне? Мне нужно, чтобы в зависимости от количества
инфы в ячейках срабатывала автовысота строк (у ячеек свойство
"размещение" ставлю "переносить"). Но нужно, чтобы эта автовысота
работала только в пределах определенных колонок. По другим колонкам
тоже работает автовысота, но в пределах этого другого набора колонок.
Т.е. подчеркивание строк в разных колонках идет на разном уровне...
(6)
ну не могут быть строки в табдоке быть разной высоты в разных
колонках... поэтому только извращаться... еще можно попробовать
выводить горизонтально ))
(10)
это только идея... реализации в динамике я не делал, у меня был готовый
макет с разными областями, в крайнем случае я что-то
объединял, но тоже в определенных пределах и все области были
поименованы, поэтому проще. А вот как выводить динамически,
рассчитывая, что объединять и как будет себя вести Присоединить и
вывести, это надо пытать...
(11)
херово. У меня именно динамический вариант. И количество строк, и объем
инфы в каждой ячейки может быть каким угодно. Разбивать содержимое
ячейки на строки вручную (чтоб переносы целых слов были правильными),
чтобы для каждой ячейки расчитать необходимую высоту - это закат солнца
вручную...
кстати, измерение высоты я сегодня уже где-то предлагал, может пригодится:
Область = ТабДок.Вывести(Область);
Надпись = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
//измерим высоту в миллиметрах
Надпись.Расположить(Область);
ВысотаОбластиМиллиметры = Надпись.Высота;
ТабДок.Рисунки.Удалить(Надпись);
(16)
Тут два момента. Во-первых, я не нашел свойств, из которых можно
считать получившуюся высоту строки. Второе - 1С все равно
перевыравнивает высоту, несмотря на попытки запрета этого:
(18)
строки используй одинаковой высоты, заданной в макете... или приводи их
к такой высоте перед выводом... будешь всегда знать, на какую высоту
сколько строк надо...
(22)
т.е. получается, что зная высоты всех строк в двух разных таб доках
(каждый таб. док со своим набором колонок), я могу конструировать
строку с единой высотой в результирующем документе, выводя где нужно
пустые места и т.д. Так?
(23)
в идеале можно иметь одну область в виде ячейки с высотой строки в один
миллиметр и шириной в одну колонку, и с помощью нее лепить все, что
угодно ))
И
все равно пока не догоняю. Если мне нужно провести подчеркивание строки
в одной колонке выше, чем в другой. В этом случае мне видимо придется
выводить 2 строки, искусственно разбив содержимое колонки с бОльшей
высотой на 2 строки. Как в этом случае текст разбивать? (24) фигасе О-0. А с текстом динамическим что делать?
(25)
можно собирать область каждой ячейки столбца из мелких областей, в
количестве, рассчитанном по нужной высоте, которую можно рассчитать
предварительным выводом в обычную строку с автовысотой, а потом
объединять и туда вставлять текст... где-то так ))
(26)
Из каких бы кусочков мы ни собирали ячейки, вывод всегда происходит с
единой высотой строки. Давай на примере. Вот предположим, у нас высота
строки по одному набору столбцов равна 15. По другому - 25. Какой
высоты строку мы будем собирать для вывода в результирующем таб доке?
Поскольку мне нужно отчеркнуть строку меньшей высоты, то наверное
придется выводить 2 строки, одну высотой 15, другую - 10. Как в этом
случае разбивать текст по этим строкам?
(28) пока теория и вкратце: 1.
Берем чистый макет - табдок. Чтобы не париться с границами, в первом
столбце выделяем подряд сверху n ячеек и указываем границу везде. 2.
Когда узнаем, какой высоты h должна быть ячейка, получаем Область(1, 1,
h/К, 1), где К - коэффициент = стандартной высоте строки (если стандарт
выбираем = 1мм, тогда и К = 1 мм) объединяем, присваиваем нужный текст,
устанавливаем стандартную высоту строки и выводим в формируемую
колонку... то бишь, строки всегда будут иметь одинаковую высоту, просто количество объединенных по вертикали ячеек будет отличаться...
(30)
все равно не понятно. Мы выводим целиком строку или только область в
одной колонке, к которой потом присоединяем области в других колонках?
Если второй вариант, то что будет если высота присоединяемой секции
будет больше высоты в прошлой колонке? Скорее всего в этом случае 1С
все равно приведет все области в разных колонках к одной высоте. А если
нет, то вообще неясно, как будет осуществляться вывод следующих строк...
(38)
как это одинаковой высоты? Ты ведь собираешь ячейку из строк одинаковой
высоты до вывода ее в таб док. А выводишь в таб док уже целиком область
с какой-то неизвестной заранее высотой. И какая тогда разница - как ты
собирал эту область? Высота выводимой области каждый раз разная...
Еще вопросик. А почему не работает вот такая конструкция
Область = мМакет.ПолучитьОбласть(1, 1, Низ, 1);
Область.Область().Объединить();
для объединения ячеек, в каждой из которых заполнен свой
параметр? Вроде как если делаешь то же самое в конфигураторе
интерактивно, ячейки объединяются, оставляя в качестве содержимого то,
что было в первой (верхней или левой) ячейке области...
(52)
не, не то. Область и Область() в данном случае имеют разный тип. Одно -
табличный документ, другое - облясть ячеек табличного документа. Тут
все правильно, это совершенно рабочая конструкция. Но работает почем-то
только объединяя с пустыми ячейками...
ОбластьИзмерения = ТД.Вывести(Ячейка);
Надпись = ТД.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
//измерим высоту в миллиметрах
Надпись.Расположить(ОбластьИзмерения);
Сообщить(Надпись.Высота);
ТД.Рисунки.Удалить(Надпись);
у меня на копии работает нормально. А на реальной базе выдает
для каждой области одинаковую высоту. При том, что объем текста у
разных ячеек разный. Соотвтетсвенно на копии высота разная. И структура
инфы, и сама инфа одинакова. В чем может быть трабла?