Имя: Пароль:
1C
1С v8
Обвести табличный документ в рамку
,
0 Rizhij_Nikitos
 
31.05.23
13:11
Задача предельно простая и если честно мне даже стыдно что я ничего не смог нагуглить и придумать ничего изящного за целый день работы над ней. У меня есть простая табличка, которая выводится в табличный документ.

ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
Область = Макет.ПолучитьОбласть("Область");

Для Каждого Строка Из ТЗ Цикл
ЗаполнитьЗначенияСвойство(Область, Строка);
ТабДок.Вывести(Область);
КонецЦикла;

ТабДок.Показать();

Теперь я хочу добавить рамку толщиной 2, так, чтобы рамка была вровень с полями документа. В более статичных документах я просто сверстал их по размеру, подобрал масштаб и прорисовал рамку по областям в макете. В документе, когда я не знаю сколько будет строк, будут ли они одинаковой толщины (зависит от того переносится наименование и сколько раз 1, 2, может даже 3?), мне довольно трудно это сделать.

Из решений я вижу сейчас подготовку нужного размера областей под разные размеры строк, ПроверитьВывод() для того чтобы отловить последнюю помещающуюся строку на странице, чтобы прорисовать рамку внизу и когда на последней странице остается свободное место добивать пустыми строками с рамкой слева/справа, пока опять же не увижу что не помещается и выводить "заключительную" область с границей снизу.

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

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

Прикладываю иллюстрацию, если не понятно чего я хочу :)
https://clip2net.com/s/4iEcKPJ
1 Garykom
 
гуру
31.05.23
13:14
(0) ПроверитьВывод()
2 Garykom
 
гуру
31.05.23
13:17
(0) У тебя легкое недопонимание что такое ТабДок и что такое принтер
Например при смене формата страницы с А4 на другой что происходит?

ЗЫ
Ты в курсе что разные принтеры (и даже с одни но с разными драйверами/ОС/софтом) выводят в целом по разному?
Т.е. попасть в миллиметры бывает нереально
3 Rizhij_Nikitos
 
31.05.23
13:19
(1) ага, а потом еще подбирать область нужной высоты, чтобы впихнуть ее в качестве последней на странице, чтобы рамка встала пиксель в пиксель в поля. Пока это в списке на оверинжиниринг - если тут никто не предложит чего-то изящного, пойду алгоритмизировать и изобретать.

(2) Я настраиваю заранее поля и масштаб, ориентацию страницы. На предпросмотре в остальных документах все выглядит отлично. Я попадаю в пиксель в поля. Я два дня для этого документы верстал и рисовал эти рамки. Но там документы статичные были.
4 НЕА123
 
31.05.23
13:21
Колонтитул с черточками
?
5 Rizhij_Nikitos
 
31.05.23
13:22
(4) интересно, пойду попробую пока)
6 Garykom
 
гуру
31.05.23
13:24
(3) ВысотаСтроки же
7 Garykom
 
гуру
31.05.23
13:26
(3) >чтобы рамка встала пиксель в пиксель в поля

Перечитай (2) и попробуй на другом принтере, да даже на том же самом принтере на другой бумаге более скользкой или шершавой запросто на пару миллиметров собьется
8 Garykom
 
гуру
31.05.23
13:28
(7)+ Принтер с протяжкой бумаги это тебе не плоттер где лист неподвижен а только головка сверху ездит
В любой случае есть механический зацеп силой трения и проскальзывание
9 Rizhij_Nikitos
 
31.05.23
13:32
(4) хотя как я настрою толщину черточек то... ну ладно, допустим в ASCII есть что-нибудь типа толстого подчеркивания

(7) да я понимаю что все это неидеально и вообще может развалиться. Но пока работает. И пока принтер только один и там все выглядит кошерно.
10 НЕА123
 
31.05.23
13:46
(9)
черточки - попробовать псевдографику. может и шрифт есть кошерный для псевдографики.
11 CepeLLlka
 
31.05.23
13:50
Закажите бумагу с рамками может сразу?
12 RomanYS
 
31.05.23
14:03
(9) Если принтер один и параметры печати постоянные можно использовать фоновую картинку, в т.ч. в формате SVG
13 Garykom
 
гуру
31.05.23
14:28
(12) Нафига так сложно?
Просто пустую строку в цикле с ПроверитьВывод()
Затем для последней строки программно установить нужную высоту
И взяв область всех ячеек (на странице) вокруг ни границу
14 RomanYS
 
31.05.23
14:34
(13) просто к сведению. По факту- да фоновая картинка не выводится после окончания документа, значит в любом случае придётся выводить пустые строки по твоей методе
15 Rizhij_Nikitos
 
31.05.23
15:20
(13) а как получить область всех ячеек на странице? У меня были мысли обвести область ячеек, но я не придумал как получить область всех ячеек.
16 RomanYS
 
31.05.23
15:32
(15) выводить всё через ПроверитьВывод() и запоминать границы страниц
17 Rizhij_Nikitos
 
31.05.23
15:48
(16) это еще одна боль, так как документ является составным, ПроверитьВывод() криво отрабатывает, еще одной его проблемой является то, что он опрашивает принтеры каждый раз при обращении к нему, в результате 90% времени формирования макета занимает этот метод. Ну раз уж простых решений нет, я велосипежу. Считаю количество символов в строке, если вижу что строка будет перенесена, увеличиваю вдвое строку данных, считаю количество строк данных на странице и в конце пририсовываю нужного размера строку с рамочкой внизу. Будем считать вопрос закрытым.