Текущее время: Вс, июл 20 2025, 15:12

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Google [Bot]


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

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