1с при печати обрезает страницу
Поясняю сабж.
Формирую макет внешней печатной формы. Вывожу область шапки (примерно 5 см от листа), и большой текст. Текст помещаю в 1 ячейку (с параметром "переносить").
Если текст не лезет на 1-й лист целиком то он весь выкидывется на второй и не разрывается как в word.
Единственный вариант пришедший в голову - бить программно текст по абзацам. И каждый абзац выводить в отдельную строку макета. Но это полумеры. Если на границу листа попадет круаный абзац это тоже будет некрасиво.
Текст не статичный, в каждом документе разный.
Итоговый макет не сохраняется в файлы вне 1с, только для печати.
Есть какие-либо ещё идеи как решить эту проблему?
(1) SuhoffGV, решал подобную задачу. Придумал одно решение, возможно, неуклюжее, но работало. Схема такая:
1. В результирующий макет выводил абзац построчно.
2. Создал временный табличный документ, в который выводил только одну строку (перенос строки разрешён). Высоту страницы устанавливал таким образом, чтобы на страницу входила одна строка без переноса).
3. Абзац читал "пословно", то есть последовательно выбирал из абзаца слова (разделители - пробелы, переводы строки и т.д). Получал временную строку, в которую добавлял по слову, и эту строку выводил во временный табличный документ. После каждого вывода строки контролировал количество страниц временного табличного документа. Как только количество страниц становилась > 1, это означало, что строка "перенеслась". Начало строки до последнего добавленного слова ещё умещалось в одну строку, а добавление этого слова "заворачивало" строку. Вот это начало очередной строки и выводил в результирующий документ.
Там ещё много всяких нюансов, но работало железно. Текст переносился, как в word. Алгоритм совершенствовать не стал, так как задача была разовая. Не было смысла сильно напрягаться.
В (8) дело говорят.
Есть еще вариант с картинками. Текст выводится во временный табличный документ "пословесно" в виде области-картинки:
Как только высота картинки превысит рассчитанную величину (можно линейкой измерить), значит перенос совершен. Однако, работать будет медленнее, чем вариант из (8). Сам использую "картиночный" вариант, когда нужно знать количество строк в ячейке.
Есть еще вариант с картинками. Текст выводится во временный табличный документ "пословесно" в виде области-картинки:
пТабДок.Вывести(нОбласть);
Надпись = пТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Текст);
Надпись.Расположить(пОбласть);
Высота = Надпись.Высота;
Как только высота картинки превысит рассчитанную величину (можно линейкой измерить), значит перенос совершен. Однако, работать будет медленнее, чем вариант из (8). Сам использую "картиночный" вариант, когда нужно знать количество строк в ячейке.
Можно поподробнее? За счет чего будет изменяться высота картинки?
Точно такой код у меня не сработал.
На выходе эта картинка - нулевой высоты и не видна.
Что Я Делаю Не Так?
(8) mikr, Не прокатило на стадии тестов.
1. Создал временный массив МассивСтрок для хранения строк текста которые будут помещаться в 1 строку без переноса.
Обрезал страницу полями: Верх -0, Низ - 292 мм. В конфигураторе выглядит нормально. 1 строка=1 лист.
3. Абзац читал "пословно", то есть последовательно выбирал из абзаца слова (разделители - пробелы, переводы строки и т.д). Получал временную строку, в которую добавлял по слову, и эту строку выводил во временный табличный документ. После каждого вывода строки контролировал количество страниц временного табличного документа. Как только количество страниц становилась > 1, это означало, что строка "перенеслась". Начало строки до последнего добавленного слова ещё умещалось в одну строку, а добавление этого слова "заворачивало" строку. Вот это начало очередной строки и выводил в результирующий документ.
Добавлял получившуюся строку в МассивСтрок (естественно БЕЗ последнего, не влезающего, слова). Т.е. там должны быть строки помещающиеся на в строку без переносов.
Для теста вывел в цикле все строки массива в области из п.2. В итоге в каждой области 3-5 строк текста вместо 1-й как задумывалось.
Читайте также: