Текущее время: Сб, июл 19 2025, 04:04

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
 Заголовок сообщения: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Чт, июн 27 2013, 09:28 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, июл 12 2007, 12:18
Сообщения: 430
Отчет в смартформе заканчивается выводом подписей,вопрос такой:как сделать так,чтобы подписи не оказалсь одни на листе,т.е. как на предыдущей странице подставить пустую запись ,чтобы перед подписями на сл.странице была хоть одна запись


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Чт, июн 27 2013, 11:33 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 23 2006, 17:37
Сообщения: 197
Откуда: Москва
Пол: Мужской
Цикл по таблице сделать не по N записей (где N - общее число записей), по N-1.
N-ую запись таблицы вынести в нижний колонтитул вместе с подписями, данный блок целиком защитить от переноса.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Чт, июн 27 2013, 15:23 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, июл 12 2007, 12:18
Сообщения: 430
Не очень то мне это подходит,там куча разных итогов


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Чт, июн 27 2013, 16:39 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 23 2006, 17:37
Сообщения: 197
Откуда: Москва
Пол: Мужской
Тогда считать высоту каждой строки, кол-во строк, умещающихся на первой и последующей страницах, и вставлять Page-break руками.

ЗЫ: ВСЕ итоги можно располагать в нижнем колонтитуле без проблем, если использовать LOOP и Templates, а не Table.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе  Тема решена
СообщениеДобавлено: Пт, июн 28 2013, 07:45 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2013, 07:33
Сообщения: 10
Несколько месяцев назад тоже бился над одной печатной формой с кучей подытогов, аналогично надо было перенести подписантов вместе с последней строчкой.
Вынести последнюю строчку в отдельную таблицу и поместить ее в субформу с подписантами без переносов не получалось как раз из-за этих итогов.
Сделал в скрипте расчет высоты таблицы и укладывание ее в листы формы. Высоту таблицы получал как сумму высот строк. Пару недель такое решение прожило, потом начались проблемы с определением по числу символов ячейки того, на сколько строк текста разобьется эта ячейка (сиречь, какая будет ее высота). Всякие "подгоночные коэффициенты" из-за длинных непереносимых слов текста перестали работать, бросил эту затею.
К сожалению, не смог найти какой-то полезной информации ни здесь, ни на адобовском форуме. В итоге, когда меня задолбала куча заявок от пользователей в духе "Перенесите мне подписантов в этом документе", плюнул на все и сделал свой велосипед: в окне "Вывод выходного документа" есть кнопка "Опции печати", в которой можно указать параметры вывода на печать. В ней тупо использовал поле суффикса как галочку - переносить подписантов или нет. Если пользователь проставил там крестик (или вообще любой символ), делаю в форме условный перенос. Единожды указанную для документа галочку сохраняю в nast-e, чтобы при следующей печати все было сразу ок.
Решение, естессно, не претендует на какую бы то ни было элегантность, но его плюсы: 1) простое, 2) решает проблему переноса, отнимая у пользователя 5 секунд времени на документ, 3) снимает с тебя головную боль: как правильно рассчитать, переносить подписантов или нет, отдавая этот вопрос на откуп пользователю. За несколько месяцев существования такого костыля - ни одной заявки на тему переносов подписантов =)
Очевидный минус - существовавший ранее скрипт "угадывал" необходимость переноса процентов в 90 случаев, теперь его нет и вероятность "не угадать" - 50/50. Пользователю приходится чаще лезть в свойства и ставить галочку. Зато он это сделает за 5 секунд, а ты будешь дебажить документ, которого кроме продуктива нигде нет, хрен знает, сколько времени.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Пт, июн 28 2013, 08:34 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Добрый день.
Занимался аналогичной задачей.
Решение следующее: определяется сколько строк убирается на первой странице, затем определяется сколько строк умещается на второй, если там только таблица, и на третьей (на последней). Это определяется просто опытным путем. Заносится в настройки, отдельную табличку. Подитогов у меня нет, поэтому проще, но в принципе и это не проблема в подитогах необходимо считать сколько строк выведено там и сохранять.
Затем определяется количество знаков в поле наименование материала, и определяется сколько строк занимает наименование 1, 2 или более. Сохраняется в таблицу данных в отдельное поле. Затем пробегаем по таблице данных и смотрим сколько строк на первой странице, второй и так далее, если таблицы такие имеются, корректируем с учетом кол-во символов в наименовании товара.
Соответственно, работает. Единственная проблема при изменении формуляра меняется кол-во строк на странице, необходимо менять настройки, но учитывая что это настройки - занимает около 10 минут...


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Пт, июн 28 2013, 09:01 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июн 01 2005, 07:11
Сообщения: 223
Откуда: Нижневартовск->Москва
Пол: Женский
Если в форме после таблицы идут только итоги и блок подписей то можно попробовать такой вариант:
Делаем 2 тестовых запуска: запускаем форму без вывода с количеством строк N-1, потом тоже без вывода с количеством строк N.
Смотрим, сколько страниц получилось в первом и втором случаях (есть в выходных параметрах сгенеренного ФМ). Если количество страниц во втором стало больше, значит считаем что подписи уехали и в "продуктивном" запуске перед последней строкой делаем принудительных перенос.
С т.з. производительности такое решение весьма убогое, но если форма печатается не 500 раз в день, то можно попробовать, по крайней мере символы считать не придется.

_________________
Всегда открыта новым авантюрам!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Пт, июн 28 2013, 09:47 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, июл 12 2007, 12:18
Сообщения: 430
Да,неожиданно,может можно перед запуском формы проделать этот подсчет и как переменную передавать?Я уже подумала чтобы они знали под чем подписывались,в раздел с page поставить на равне с номером страницы нужные суммы


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Пт, июн 28 2013, 15:14 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2013, 07:33
Сообщения: 10
hub2002 написал(а):
Затем пробегаем по таблице данных и смотрим сколько строк на первой странице, второй и так далее, если таблицы такие имеются, корректируем с учетом кол-во символов в наименовании товара.
Соответственно, работает.

Делал так.
Но я не смог в макросе корректно рассчитать количество строк, на которое разобьется наименование. Мало того, что шрифт был не моноширинный, так еще и попадались наименования с длинными словами (какой-нибудь "суперсинхрофазотрон"), которые оказывались в середине одной из строк текста ячейки и переносились на следующую строку (оставляя текущую строку полузаполненной). В итоге получалось, что по количеству символов должно было быть, например, 2 строки, а по факту было три. А не попадания всего в одну строку уже достаточно для того, чтобы подписанты "поехали".
Настроечные коэффициенты очень быстро надоедает изменять, постоянно попадаются документы, у которых то не то и это не так.
На адобовском форуме мне не предложили решения, которое позволило бы определить, на сколько строк разбился текст ячейки до события layout:ready (если тут кто знает - для общего развития с удовольствием узнал бы).

Свои 5 копеек вставил к тому, что если товарищ gasjuk будет реализовывать такой подход - надо иметь в виду возможные нежданчики (которые в моем случае привели к тому, что в итоге пришлось использовать другой подход).


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Пт, июн 28 2013, 15:46 
Председатель
Председатель

Зарегистрирован:
Чт, май 10 2007, 09:15
Сообщения: 1558
Я делел это в smartform-ах.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Пт, июн 28 2013, 17:52 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, июл 12 2007, 12:18
Сообщения: 430
di5temper ! А можно узнать каким образом вы реагировали на галочку в программе?Что-то я не догоняю


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Пн, июл 01 2013, 07:44 
Начинающий
Начинающий

Зарегистрирован:
Чт, фев 28 2013, 07:33
Сообщения: 10
gasjuk написал(а):
di5temper ! А можно узнать каким образом вы реагировали на галочку в программе?Что-то я не догоняю

Повторюсь, что не претендую на самое лучшее решение, но промучавшись, как описывал выше, в итоге решил сделать максимально тупо и быстро (времени-то как обычно нет ни на что) =)
Когда пользователь отправляет свой документ на печать, заходит в "Опции печати" и ставит какой-нибудь знак в поле, на которое мы договорились (Суффикс1), я в программе печати вижу, что в передаваемой структуре nast-dsuf1 is not initial и делаю две вещи: апдейтю nast, чтобы эта галочка "запомнилась" для документа и передаю эту галочку в pdf-форму. А в форме стоит условный разрыв страницы: если галка - переносить подписантов.
P.S. Понимаю, что прямое обновление таблиц - это не путь самурая, может, кто подскажет цивильный способ для моего случая и таблички nast, буду благодарен.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Пн, июл 01 2013, 08:31 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, июл 12 2007, 12:18
Сообщения: 430
Спасибо


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: как сделать так,чтобы подписи не оказалсь одни на листе
СообщениеДобавлено: Ср, июл 03 2013, 05:55 
Начинающий
Начинающий

Зарегистрирован:
Ср, авг 17 2011, 07:41
Сообщения: 10
Тоже боролся с аналогичной проблемой в смартформе. Гугол не помог. В итоге сделал аналогичный формуляр на SapScript. Никаких текстовых элементов не использую - вся логика в коде ABAP-программы: длинные строки разбиваю на лексемы, абсолютно весь вывод в гл.окно формуляра заношу во внутр.таблицу. В конце вставляю в эту таблицу доп.строки с переводами страниц. Чтобы подписи были внизу последней страницы использую опцию bottom вывода в гл.окно.
Проблемы: так как для красивости при выводе в гл.окно используется пропорц.шрифт, то приходится оставлять запас по ширине строки и некоторые строки можно было бы делать длиннее.. т.е. не идеально заполняется поле документа. Всё в продуктиве, претензий нет.
К сожалению, на смартформе такой подход невозможен - функционал вывода форматированного текста из кода ABAP в окна формуляра практически отсутствует.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB