Имя: Пароль:
1C
1С v8
Табличный документ - вывод картинки в нужном месте листа, если листов несколько
0 Михаил 1С
 
18.06.13
10:46
Здравствуйте! Столкнулся с тем, что в Табличный документ очень трудно вывести картинку в нужное место на листе.. вы будете смеяться, ведь можно точно задать координаты левого верхнего угла... но все осложняется тем, что листов много, а координаты единые для всей этой простыни. При этом, коорданаты второго листа зависят от того сколько строк выведено на первом листе... В общем положение картинки плывёт от листа к листу, и это меня не устраивает. Как можно задать жесткие координаты на каждом листе?
1 Михаил 1С
 
18.06.13
10:50
Я еще более-менее добился стабильного положения на всех листах, когда все строки в макете сделал фиксированной высоты. Но теперь пришлось сделать несколько строк с авто-высотой, чтобы хорошо выводилась многострочная строка. От этого трудно стабилизировать положение картирки на следующих листах.
2 Михаил 1С
 
18.06.13
10:51
Или каждый лист делать на отдельном ТабличномДокументе, а потом добавить их всех в первый? С надеждой, что таким макаром положение картинок будет как надо?
Попробую.
3 Cyberhawk
 
18.06.13
10:53
Вариант 1. Попробуй сделать масштабирование шрифта (программно) в многострочных строках, тогда координаты будут на каждом листе с одинаковым шагом.
Вариант 2. Запоминай координаты каждого листа в зависимости от кол-ва строк предыдущего.
Вариант 3. Выводи несколько табдоков в один с разделителями.
4 Cyberhawk
 
18.06.13
10:53
P.S. Картинка - это печать что ли?
5 НЕА123
 
18.06.13
10:54
(2)
наверно, это самое правильное решение.
6 Галахад
 
гуру
18.06.13
10:55
Может в колонтитул запихать?
7 Михаил 1С
 
18.06.13
10:58
(4) Картинка - это графический файл (изображение товара)
8 НЕА123
 
18.06.13
11:11
(6)
не впихнешь.
но можно повторять при печати строки.
9 Михаил 1С
 
18.06.13
11:14
(6) Картинка находится посередине листа и занимает половину всего листа, это Пуп мира :)
А вокруг находится текст - то есть сверху и снизу
10 Михаил 1С
 
18.06.13
11:27
(2), (5) - похоже, что ВзЛеТеЛо!
11 Михаил 1С
 
18.06.13
11:27
Ура! Сейчас дотестю.
12 Михаил 1С
 
18.06.13
11:36
Да, всё офигенно!
И очень красиво!

Не тот геморрой, что был, а человеческое изображение :)

Спасибо всем, кто помогал и всем, кто слушал!
13 Cyberhawk
 
18.06.13
20:21
Код сюда напиши
14 Михаил 1С
 
19.06.13
05:50
Держите:

       НомерСтраницы = 0;
   МТабДоки = Новый Массив;    
   Для каждого стр из ТаблСтраниц Цикл
       
       НомерСтраницы = НомерСтраницы + 1;
       МТабДоки.Добавить(Новый ТабличныйДокумент);
       ТекТабДок = МТабДоки[НомерСтраницы-1];
       
       //подготовка Областей - заголовок, середина, подвал:
       //...
       
       ТекТабДок.Вывести(ОблЗаголовок);
       ТекТабДок.Вывести(ОбластьСередина);
       ТекТабДок.Вывести(ОблПодвал);
       
       //Найдем изображение
       //...
       //ТекущаяКартинка = ХДИ.Хранилище.Получить();
       
       //Выведем изображение в Текущий ТабДок:
       Рис = ТекТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
       Рис.Картинка = ТекущаяКартинка;
       Рис.Имя = "План" + НомерСтраницы;
       Рис.верх = 43;
       Рис.лево = 2;
       Рис.высота = 140;
       Рис.ширина = 180;
       Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
               
   КонецЦикла;
   
   ТабДокСоставной = Новый ТабличныйДокумент;
   ПервыйРаз = Истина;
   Для каждого Эл из МТабДоки Цикл
       Если Не ПервыйРаз Тогда
           ТабДокСоставной.ВывестиГоризонтальныйРазделительСтраниц();
       Иначе
           ПервыйРаз = Ложь;
       КонецЕсли;
       ТабДокСоставной.Вывести(Эл);
   КонецЦикла;
   ТабДокСоставной.Показать();
15 Михаил 1С
 
19.06.13
05:53
В макете ОбластьСередина состоит из одной пустой строки, высотой 472,00. Она предназначена специально для картинки.
Перед ней - от 3 до 8 строк шрифтом 12пт.
16 kosts
 
19.06.13
06:16
(0) В начале каждого листа выводишь (сразу при первоначальном заполнении) невидимую картинку маркер. Далее дело техники прибавить смещение, получить нужную координату.
17 Михаил 1С
 
19.06.13
07:00
(16) В начале листа - это как задать?
Есть такая функция Вывести картинку в начало текущего листа?
Ты как это делал?
18 kosts
 
19.06.13
07:04
Развивая (17).
В начале каждого листа с первой верхней областью выводим свою картинку. После вывода всего документа выполняем:

Для каждого Рисунок Из ТабДокумент.Рисунки Цикл
   Рисунок.Верх = Рисунок.Верх + 150;
КонецЦикла;

В общем-то и всё...
19 kosts
 
19.06.13
07:07
(17) Что бы таблица была разбита на листы применять ПроверитьВывод() и горизонтальный разделитель.


Если ТабДокумент.ПроверитьВывод(Область) Тогда
   ТабДокумент.Вывести(Область);
Иначе
   ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
   ТабДокумент.Вывести(Шапка);
   ТабДокумент.Вывести(Область);
КонецЕсли;
20 Михаил 1С
 
19.06.13
07:08
(18) "В начале каждого листа с первой верхней областью выводим свою картинку"
Вот тут по-подробнее: как вывести картинку "с первой верхней областью" нужного листа?
21 kosts
 
19.06.13
07:10
(20) В макет, заранее в нужной области рисуешь картинку. В документ выводишь область, картинка тянется вместе с ней.
22 Михаил 1С
 
19.06.13
07:26
(21) Понятно. Возможно, что можно и так.
Я решил эту задачу другим способом.
23 kosts
 
19.06.13
07:30
(22) Хозяин барин.
24 Михаил 1С
 
19.06.13
07:43
(23) Я был-бы очень рад твоему решению, если бы не нашёл своё.
25 kosts
 
19.06.13
07:50
(24) "Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете".
— Martin Golding
26 Михаил 1С
 
19.06.13
07:57
На оборонных предприятиях есть такой девиз: "Человека нет - программа работает".

То есть - не важно, что программист заболел, или в отпуске, или геройски погиб за клавиатурой... Если он что-то написал и пустил в дело, то это должно работать, и так, чтобы с этим мог разобраться другой программист и не долго матерясь изменить программу при необходимости.
27 kosts
 
19.06.13
08:01
(26) Что сказать, согласен с этим...
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.