нумерация страниц в отчете #486680


#0 by Koluchiy_2k
Всем привет! Такая простая с виду задача ) фиг решишь )) есть отчет (все как обычно ) шапка повторяется на каждой странице методом    Таб.ПовторятьПриПечатиСтроки(14, 15); далее выводится секция "строка" (может быть абсолютно произволной ширины) задача минимум выводить нумерацию страниц сверху (в повторяющейся шапке) задача максимум выводить нумерацию страниц снизу (как вариант выводить на каждую страницу в конце секцию с номером) вариант с колонтитулом не подходит (без объяснения причины) как вариант для задачи максимум надо считать высоту всех выводимых секций, и при достижении определенного значения выводить вместо секции "строка" секцию с "номером строки" и разрыв страницы. Главный вопрос тогда - "Как померить высоту текущей выводимой секции?" пробовал заюзать FormEx, но чет не врубился )) (помогите кто в теме) Сразу отметаем варианты: он же (кстати, что это за домен такой?) Вобщем жду )) Если кто-нибудь еще 7-ку помнит ))
#1 by ДенисЧ
Нормальные джедаи делают это через колонтитул.
#2 by Guk
>>вариант с колонтитулом не подходит (без объяснения причины) странные люди какие-то пошли...
#3 by Koluchiy_2k
рад вашему обществу ))
#4 by Гризли
#5 by Гризли
имхо, такая задача, если не использовать колонтитул без извратов не решается.
#6 by Koluchiy_2k
ну просто взрыв мозга )) хотя идея интересная... Однако, может, все же, кто то, курил FormEx на эту тему? я видел образец, но там вычисляют ирину строк уже после формирования всей таблицы (соответственно, как редактировать?) щас поищу... найду запощу ссылку ))
#7 by Koluchiy_2k
Замечание: Метод работает только для таблиц, которые уже выведены на экран методом Показать. Назначение: Возвращает высоту строки объекта Таблица в заданных единицах Параметры: <Таблица> - объект Таблица; <НомерСтроки> - номер строки, высоту которой необходимо вычислить. <ТипВозврата> - тип возвращаемого значения. Может принимать следующие значения: 1 - возвращается значение в миллиметрах, 2 - возвращается значение в экранных пикселах, 3 - возвращается значение во внутренних юнитах 1С. Пример:
#8 by Vladal
ширина строки = высота строки? т.е. где-то перенос длинного наименования, которое не поместилось в одну строку ширины ячейки? 1. Вычислим, сколько одинарных строк помещается в листе. 2. Вычислим среднее количество символов, помещающееся в ячейке без переносов, например, 30 символов. 3. По длине строки реквизита прогнозируем - делим на 30 и смотрим остаток, например, строка 67 символов теоретически вместится на 3 строки (30 + 30 + 7). 4. Счетчик оставшихся строк убавляем на 3 строки. Перед выводом последующей строки проверяем, вместится ли эта строка по высоте в оставшуюся свободную высоту. Например, осталось 2 строки до конца листа, а те же 67 символов, которые приразмещении займут 3 строки уже в одну ячейку без разрыва не вместятся. Делаем перенос строки. Разумеется, ведём счётчик строк. Выводим его где хотим. Под надпись "Страница такая-то" тоже можно зарезервировать строку и выводить её сразу под последней строкой таблицы. Можно ещё циклом перед этим пройтись не выводя таблицу и считая страницы. Тогда можно вывести надпись "страница така из стольких" Всё пишется без внешних компонент. А где эта задача применяется?
#9 by Vladal
Следующая задача - проверять уникальность сквозного номера иерархического справочника ;-) Хотя нет... Блокировка записи, когда кто-то захватил транзаккцию - но и это решаемо. Было дело: вайловая база, работа по сети, долго проводятся документы и прочие прелести. В виду бедности конторы, сервер покупати не хотят, сделал изврат - перед транзакцией считывал/заполнял константы, которые были семафорами.
#10 by ZDenis
Это если шрифт типа Courier, иначе количество символов строки различно
#11 by Арчибальд
КоличествоСтраниц Синтаксис: КоличествоСтраниц Назначение: Возвращает количество страниц, занимаемое таблицей при выводе на печать.
#12 by Koluchiy_2k
кстати... может его формировать, потом смотреть сколько страниц получилось. а потом формировать еще раз, но уже зная сколько страниц выводить на каждый листь шапку вручную и вбивать туда номер )) кривота конечно, но для задачи минимум пойдет )) буду пробовать и(или)
#13 by Арчибальд
Просто в заголовок вписать "Стр "+(Табл.КоличествоСтраниц+1)
#14 by Koluchiy_2k
см Сразу отметаем варианты: шапка повторяется на каждой странице методом очень похож, пробовать не буду - 99% что не проканает...
#15 by Vladal
*файловая база 7.7
#16 by Арчибальд
<задача максимум выводить нумерацию страниц снизу (как вариант выводить на каждую страницу в конце секцию с номером)> Есть готовое (хоть и корявое) решение.
#17 by Koluchiy_2k
можно полюбопытствовать?
#18 by Арчибальд
#19 by smaharbA
Колонтитул уже предлагали ? )
#20 by Арчибальд
Запрещено условием
#21 by Koluchiy_2k
сейчас заюзаю... там строки повторяются в начале (опечатка?)
#22 by Koluchiy_2k
вижу Таб и Таб1 туплю ))
#23 by Арчибальд
Ес-сно, в секции "Строчка|Ном" надо выводить НомСтрПред
#24 by Koluchiy_2k
ты крутой чувак Арчибальд + не врубился пока до конца, но в целом все работает. хотя я уже почти доделал вариант мозг взрывает, но очень прикольно )) хотя вариант намного интереснее (быстрее и проще)
#25 by Арчибальд
Цитирую тебя : <может его формировать, потом смотреть сколько страниц получилось. а потом формировать еще раз>, убираю "потом" и "еще раз", получаю алгоритм :)
#26 by smaharbA
Поле агрегатного объекта не обнаружено (КоличествоСтраниц)
#27 by Арчибальд
не работает на древних платформах
#28 by smaharbA
))
#29 by Koluchiy_2k
вобщем все сраслось по алгоритму появилась другая заморочка )) при сохранении получившегося добра в XLS 2 страницы превращаются в 3 и т.д. пните уж в нужном направлении - не то - еще кривее - все равно, что делать по новому может есть еще варианты? так чтоб оформление сохранить.
#31 by Koluchiy_2k
отличный вариант! все более менее ровно. правда все равно не так как при печати из 1с, но наверное тут ничего не поделаешь. или я не прав?
#32 by Ёпрст
Самое простое - определять высоту выводимой секции в пунктах/пикселях/милиметрах.. всё.
#33 by Koluchiy_2k
что все? ))
#34 by Ёпрст
не все, а всё.
#35 by Ёпрст
+32 если не догнал, то на пальцах: 1. получаешь секцию 2. определяешь её высоту 3. суммируешь, если выходит за границы листа - втыкаешь подвал/апдейтишь шапку 3. выводишь секцию.
#36 by Koluchiy_2k
Может и пример не трудно сделать )) а то что то я не врубаюсь, как узнать высоту секции? (если она АВТО) :) как насчет переменной высоты подвала? апдейтишь шапку - это как? вобщем могу признать свою никчемность, но нужны весомые аргументы ))
#37 by Ёпрст
где: ©Sadovnikov апдейтишь шапку - запоминать область выводимой шапки в переменной, потом устанавливать значение в этой олбласти
#38 by Koluchiy_2k
это FormEX наверное? ))
#39 by Koluchiy_2k
расскажи уж тогда про ВремТаб Секция ИмяФормы и самое главное - 1.03 вроде с виду должно сработать )) но в деталях ведь самое интересное ))
#40 by Ёпрст
да, это метод формекса.. идея до безобразия простая - выводишь секцию в "левую" таблицу, считаешь её высоту и всё, далее по условию выводишь эту секцию в основную Таблицу или делаешь  вывод подвала+НоваяСтраница + вывод шапки и потом уже эту секцию
#41 by Koluchiy_2k
вобщем все по алгоритму + считаем высоту строки с помощью Спасибо, вариант отличный! )) хоть в базу знаний ))
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С