Вывод в макет в две колонки (как в ворде)
Получил задание на реализацию макета, но есть 2 "но": во-первых, я в макетах и так не силен, а во-вторых, макет тоже не простой. Сразу скажу что гуглил, но ничего путного так и не нашел.
Пример документа, которых должен сформировать макет, во вложении. Проблемы в следующем:
* Наименование программы может быть очень длинным и по идее должно перетекать на вторую страницу, при этом на первой странице подвал "Город год" должен быть всегда. На второй странице таблица тоже может быть с разным количеством строк. Если с первой страницей я путем ПроверитьВывод и дробления наименования программы еще могу все красиво оформить, то на второй странице не знаю как запихнуть все это наверх, так как присоединить выводит снизу справа. К тому же смущает дописка в СП, что не рекомендуется гонять между клиентом и сервером такие (в которых используется присоединить) макеты.
Короче, дайте идеи, поделитесь опытом, а то уже готов сделать весь лист одним полем и выводить путем обращения к ячейкам напрямую. ((
Пример документа, которых должен сформировать макет, во вложении. Проблемы в следующем:
* Наименование программы может быть очень длинным и по идее должно перетекать на вторую страницу, при этом на первой странице подвал "Город год" должен быть всегда. На второй странице таблица тоже может быть с разным количеством строк. Если с первой страницей я путем ПроверитьВывод и дробления наименования программы еще могу все красиво оформить, то на второй странице не знаю как запихнуть все это наверх, так как присоединить выводит снизу справа. К тому же смущает дописка в СП, что не рекомендуется гонять между клиентом и сервером такие (в которых используется присоединить) макеты.
Короче, дайте идеи, поделитесь опытом, а то уже готов сделать весь лист одним полем и выводить путем обращения к ячейкам напрямую. ((
Прикрепленные файлы:
Макет.docx
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(5)Ан нет. Все работает как надо
&НаСервере
Функция ПечатьНаСервере()
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
ПраваяЧасть = Макет.ПолучитьОбласть("ПраваяЧасть|Колонка");
ЛеваяЧасть = Макет.ПолучитьОбласть("ЛеваяЧасть|Колонка");
ТабДок = Новый ТабличныйДокумент;
ТабДокПраво = Новый ТабличныйДокумент;
ТабДок.Вывести(ЛеваяЧасть);
ТабДокПраво.Вывести(ПраваяЧасть);
ТабДокПраво.Вывести(ПраваяЧасть); //спецом вывел второй раз
ТабДок.Присоединить(ТабДокПраво);
Возврат ТабДок;
КонецФункции
ПоказатьПрикрепленные файлы:
(8) Блин, а у меня таки не получилось. Выводит справа снизу. У вас первый комментарий тоже о том что не работает. Что не так было и что поправили? Я делаю в сущности то же самое, только область задаю не пересечением, а обращаюсь по имени (именованный диапазон ячеек). Попробую сейчас пересечением её задать.
(11)У меня немножко не так
Я выделил строки по заголовкам строк и нажал cntr+shift+N, назначил имя горизонтальной секции макета
Выделил Колонку, нажал нажал cntr+shift+N, назначил имя вертикальной секции макета.
Нужные мне области получил пересечением горизонтальной и вертикальной секции
Я выделил строки по заголовкам строк и нажал cntr+shift+N, назначил имя горизонтальной секции макета
Выделил Колонку, нажал нажал cntr+shift+N, назначил имя вертикальной секции макета.
Нужные мне области получил пересечением горизонтальной и вертикальной секции
ПраваяЧасть = Макет.ПолучитьОбласть("ПраваяЧасть|Колонка");
ЛеваяЧасть = Макет.ПолучитьОбласть("ЛеваяЧасть|Колонка");
(11)На самом деле работает и так и так. У Вас наверное, какая то область все таки бесконечная
Прикрепленные файлы:
ПечатьМакетаВ2колонки.epf
(13) "Присоединяет табличный документ к результирующему табличному документу, помещая его в следующей колонке правее самой правой выведенной колонки, начиная со строки, с которой выводился предыдущий табличный документ."
Мне нужно внимательнее СП читать. У меня первый ТабДок выводился кусками. И следовательно присоединялось на его уровне.
Учитывая, что мне в любом случае придется выводить кусками первый лист, то думаю прокатит схема с 3мя ТабДоками. Один общий и 2 для каждой страницы. Заполню "страничные" а потом по очереди их в общий закину.
tusv, спасибо за изначальную идею!
Мне нужно внимательнее СП читать. У меня первый ТабДок выводился кусками. И следовательно присоединялось на его уровне.
Учитывая, что мне в любом случае придется выводить кусками первый лист, то думаю прокатит схема с 3мя ТабДоками. Один общий и 2 для каждой страницы. Заполню "страничные" а потом по очереди их в общий закину.
tusv, спасибо за изначальную идею!
(14) А все-таки что-то не везет мне сегодня.
Вот такой код теоретически должен был вывести по 2 области справа и слева. Но.. все гонится в один столбец.
Упросил себе задачу, договорился, что все что находится на первой странице будем выводить только на ней, перетекать на второй столбец оно не будет. Соотвественно вывести первую страницу можно будет одной областью. Тогда и присоединение правильно сработает. Но все же неприятное белое пятно осталось. Если кто в курсе как сделать - буду рад послушать.
&НаСервере
Функция ПечатьНаСервере()
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
ПраваяЧасть = Макет.ПолучитьОбласть("ПраваяЧасть|Колонка");
ЛеваяЧасть = Макет.ПолучитьОбласть("ЛеваяЧасть|Колонка");
//ПраваяЧасть = Макет.ПолучитьОбласть("Шапка");
//ЛеваяЧасть = Макет.ПолучитьОбласть("Таблица");
ТабДок = Новый ТабличныйДокумент;
ТабДокПраво = Новый ТабличныйДокумент;
ТакДокОбщ = Новый ТабличныйДокумент;
ТабДок.Вывести(ЛеваяЧасть);
ТабДок.Вывести(ЛеваяЧасть);
ТабДокПраво.Вывести(ПраваяЧасть);
ТабДокПраво.Вывести(ПраваяЧасть);
ТакДокОбщ.Вывести(ТабДок);
ТакДокОбщ.Присоединить(ТабДокПраво);
Возврат ТакДокОбщ;
КонецФункции
ПоказатьВот такой код теоретически должен был вывести по 2 области справа и слева. Но.. все гонится в один столбец.
Упросил себе задачу, договорился, что все что находится на первой странице будем выводить только на ней, перетекать на второй столбец оно не будет. Соотвественно вывести первую страницу можно будет одной областью. Тогда и присоединение правильно сработает. Но все же неприятное белое пятно осталось. Если кто в курсе как сделать - буду рад послушать.
Прикрепленные файлы:
(15)Надо Правый табличный документ очищать, чтобы не накапливался
Все работает
Все работает
&НаСервере
Функция ПечатьНаСервере()
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
//ПраваяЧасть = Макет.ПолучитьОбласть("ПраваяЧасть|Колонка");
//ЛеваяЧасть = Макет.ПолучитьОбласть("ЛеваяЧасть|Колонка");
ПраваяЧасть = Макет.ПолучитьОбласть("Таблица");
ЛеваяЧасть = Макет.ПолучитьОбласть("Шапка");
ТабДок = Новый ТабличныйДокумент;
ТабДокПраво = Новый ТабличныйДокумент;
ТабДок.Вывести(ЛеваяЧасть);
ТабДокПраво.Вывести(ПраваяЧасть);
ТабДок.Присоединить(ТабДокПраво);
// Вторая страница
ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
ТабДок.Вывести(ЛеваяЧасть);
ТабДокПраво.Очистить();
ТабДокПраво.Вывести(ПраваяЧасть);
ТабДок.Присоединить(ТабДокПраво);
Возврат ТабДок;
КонецФункции
ПоказатьПрикрепленные файлы:
(16) К сожалению, в моём случае, не прокатит. Левый ТабДок и правый ТабДок'и не равнозначные, как в вашем примере. Высота строк разная, по разному именованные блоки определены. Я к тому, что нельзя заполнять левый ТабДоки и одновременно с ним формировать аналогичный блок правого и сразу его присоединять и очищать. Мне сначала придется отдельно заполнить левый ТабДок из нескольких областей и отдельно правый. Логика их формирования не пересекается. А уже потом сложить их вместе. И тут уже присоединить не работает. Ни в случае 3 ТД, ни в случае 2х.
(17)Мой пример, основан на Вашем. И да строки разъезжаются. Но можно модернизировать совет Acanta, что в (18), Левая часть набор Картинок, тип Текст, заполнение Текст, Параметр (уместно, где ФИО) или Шаблон, там где указан период, Типа
ДатаНачала и ДатаОкончания будут параметры Левой части.
Разъезжаться особо не будет. Да и программно можно подправить положение, размеры картинок
с [ДатаНачала] по [ДатаОкончания]
ДатаНачала и ДатаОкончания будут параметры Левой части.
Разъезжаться особо не будет. Да и программно можно подправить положение, размеры картинок
(2) Это да. Рассматриваю как последний вариант. Просто там у документа в зависимости от значений реквизитов 21 разных печатных форм. И все остальные на обычных макетах. И один на ворде среди них будет смущать пользователей. Да и такие обработки работаю не очень быстро у нас, так как макет получаешь на сервере, сервер в другой подсети, гонишь макет в хранилище, потом оттуда получаешь на клиенте, потом в файл, потом СОМ-объект, а потом еще с клиента за значениями реквизитов идешь. Тоже муторно. Но да, согласен, это тоже решение. Просто хотелось скил макетами прокачать. Хотелось бы попробовать решить задачу не прибегая к active document.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот