![]() |
![]() |
![]() |
|
v8: Вывод логотипа фирмы при печати внизу каждой страницы. Эпизод 2. Универсальн | ☑ | ||
---|---|---|---|---|
0
RafaelRS
31.01.12
✎
12:41
|
Предыдущая ветка была тут:
v8: вывод логотипа фирмы при печати внизу каждой страницы Я вот чего задумал. Мне такой логотип надо выводить в нескольких печатных формах. Не хотелось бы в каждой форме городить один и тот же алгоритм, да еще логотип встраивать в каждую форму. Задумал сделать универсальный механизм. И даже сделал его. При этом логотип запихал в общий макет где две строки - одна с пустой строкой, другая с логотипом. Просто вызываешь при печати в трех участках алгоритма печати и все ок... Кроме кое чего. Как не крутился, так и не понял, как добиться того, чтобы логотип становился в ПРАВЫЙ угол печатной формы. Пробывал .ШиринаТаблицы, и потом выводить в соответствующей колонке, выходит полная ерунда. Более стабильный результат выходит тогда, когда используешь .Лево. Но тоже как то плавающе все - во первых не всегда выводится прямо в правый угол, во вторых при выводе на печать может думать что справа колонки дополнительные тоже надо выводить, хотя они пустые. Часть "глюков" удалось решить тем, что в донорском макете/шаблоне надо было поместить логотип строго в одну ячейку, чтобы он не вылезал в другие. Но проблемы все же остаются. Привожу текущий код: Функция ВывестиЛоготипВПечатнойФорме(Организация, тдОбластьВывода, булТолькоЛоготип = Ложь) Экспорт // Здесь получаем заготовки с логотипом и пустой строкой. В принципе на будущее можно выбирать разные // логотипы в зависимости от организации. Пока простой вариант без этого. Макет = ПолучитьОбщийМакет("МакетСЛоготипами"); ОбластьЛоготипа = Макет.ПолучитьОбласть("Капелька"); ОбластьПустойСтроки = Макет.ПолучитьОбласть("ПустаяСтрока"); РезультатирующаяОбласть = Новый ТабличныйДокумент; // Определим ширину страницы в зависимости от ориентации страницы Если тдОбластьВывода.ОриентацияСтраницы = ОриентацияСтраницы.Портрет Тогда чслШиринаСтраницы = тдОбластьВывода.ШиринаСтраницы - тдОбластьВывода.ПолеСправа - тдОбластьВывода.ПолеСнизу; Иначе чслШиринаСтраницы = тдОбластьВывода.ВысотаСтраницы - тдОбластьВывода.ПолеСнизу - тдОбластьВывода.ПолеСверху; КонецЕсли; МассивВыводимыхОбластей = Новый Массив; // Фукнция работает в двух режимах - либо возвращает просто логотип, либо осуществляет вывод логотипа // в печатную форму со всеми необходимыми механизмами Если Не булТолькоЛоготип Тогда МассивВыводимыхОбластей.Очистить(); МассивВыводимыхОбластей.Добавить(ОбластьЛоготипа); // Проверяем - помещается ли только один логотип (это важно для случая с ТОРГ-12, когда выводится только одна страница) Если ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(тдОбластьВывода, МассивВыводимыхОбластей) Тогда МассивВыводимыхОбластей.Добавить(ОбластьПустойСтроки); // Если страница заполнена не полностью, выводим дополнительные пустые строки, чтобы достигнуть ее конца Пока ФормированиеПечатныхФорм.ПроверитьВыводТабличногоДокумента(тдОбластьВывода, МассивВыводимыхОбластей) Цикл МассивВыводимыхОбластей.Добавить(ОбластьПустойСтроки); РезультатирующаяОбласть.Вывести(ОбластьПустойСтроки); КонецЦикла; РезультатирующаяОбласть.Вывести(ОбластьЛоготипа); тдОбластьВывода.Вывести(РезультатирующаяОбласть); чслПоследняяКартинка = тдОбластьВывода.Рисунки.Количество() - 1; Иначе // Если логотип не влез новой строкой, пытаемся запихать в существующую обктРисунок = тдОбластьВывода.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка); чслПоследняяКартинка = тдОбластьВывода.Рисунки.Количество() - 1; тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).Картинка = ОбластьЛоготипа.Рисунки.Получить(0).Картинка; тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).Расположить(тдОбластьВывода.Область(тдОбластьВывода.ВысотаТаблицы - 1, 1, тдОбластьВывода.ВысотаТаблицы - 1, 1)); тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).ГраницаСверху = Ложь; тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).ГраницаСнизу = Ложь; тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).ГраницаСправа = Ложь; тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).ГраницаСлева = Ложь; тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).Узор = ТипУзораТабличногоДокумента.БезУзора; КонецЕсли; // Корректируем положение и ширину логотипа (она меняется при вставке в новый документ) тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).Лево = чслШиринаСтраницы - ОбластьЛоготипа.Рисунки.Получить(0).Ширина - 1; тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).Ширина = ОбластьЛоготипа.Рисунки.Получить(0).Ширина; тдОбластьВывода.Рисунки.Получить(чслПоследняяКартинка).Высота = ОбластьЛоготипа.Рисунки.Получить(0).Высота; Иначе РезультатирующаяОбласть.Вывести(ОбластьЛоготипа); КонецЕсли; Возврат РезультатирующаяОбласть КонецФункции Для того, чтобы вывести логотип в Торг-12 например, достаточно добавить 3 строки: Первая: МассивВыводимыхОбластей.Очистить(); МассивВыводимыхОбластей.Добавить(ОбластьМакета); МассивВыводимыхОбластей.Добавить(ОбластьИтоговПоСтранице); // begin - RafaelRS mod - вывод логотипа снизу МассивВыводимыхОбластей.Добавить(ДополнительныеФункции.ВывестиЛоготипВПечатнойФорме(Шапка.Организация, ТабДокумент, Истина)); // end - RafaelRS mod - вывод логотипа снизу Если НомерСтроки = КоличествоСтрок Тогда МассивВыводимыхОбластей.Добавить(ОбластьПодвала); МассивВыводимыхОбластей.Добавить(ОбластьМакетаВсего); КонецЕсли; Вторая: ТабДокумент.Вывести(ОбластьИтоговПоСтранице); // begin - RafaelRS mod - вывод логотипа снизу ДополнительныеФункции.ВывестиЛоготипВПечатнойФорме(Шапка.Организация, ТабДокумент); // end - RafaelRS mod - вывод логотипа снизу Третья: // begin - RafaelRS mod - вывод логотипа снизу ДополнительныеФункции.ВывестиЛоготипВПечатнойФорме(Шапка.Организация, ТабДокумент); // end - RafaelRS mod - вывод логотипа снизу Возврат ТабДокумент; В других документах может быть посложнее, например в счет фактуре механизм автоматического вывода шапки таблицы на каждой странице, от него придется отказаться и выводить шапку вручную по аналогии с Торг-12. Счет из заказа несмотря на простоту потребовал еще большей переделки. Но там все некритично, и результатом я вообщем то доволен. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |