Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Как и многие из вас, я столкнулся с необходимостью печатать две копии одного отчета на листе.
Порыскав по просторам инета, я понял, что в VFP задача не имеет однозначного, простого и красивого решения. А мне бы хотелось получить именно красивое и универсальное решение. Я нигде в коде не вызываю напрямую REPORT FORM, у меня есть процедура, в которую я передаю опции отчета (имя frx, условие for и т.п.) и там уже происходит вся канитель с подготовкой и вызовом REPORT FORM. Поэтому хотелось мне получить решение простое и унверсальное, реализованное на уровне этой функции организации просмотра/печати. Например, если пользователь, запуская отчет, держит нажатой Ctrl, то отрабатывает ветка, которая печатает две копии на листе, иначе запускается обычный отчет. Вариант с NOPAGEEJECT не работает, как уже многими здесь отмечалось. Суть данной опции проявляется, если отправить два подряд отчета, первый из которых снабжен этой опцией не на физический принтер, а на на виртуальный, например Adobe PDF. Без NOPAGEEJECT получаем два pdf-файла по одной странице А4 в каждом, а с NOPAGEEJECT - один pdf файл, в котором имеем два листа А4. В общем, как говорится, яйца те же. Используя NOPAGEEJECT просто получаем одно задание принтера, но рисуется отчет на канве формата, указанного в Page Settings отчета, и вторая копия не на эту канву добавляется, а рисуется на новой. Вариант с удвоением датасета меня не устраивает, ибо предполагает фиктивную модификацию данных, а это вряд ли можно сделать универсальным механизмом, учитывая, что отчет строится не по одной таблице, а порой по десятку-другому таблиц, увязанных релейшенами в замысловатое дерево. Кроме того, это предполагает модификацию уже готовых и работающих отчетных форм, а их много. А отдельного финансирования эта задача не имеет. Ну как объяснить клиенту, что если Вы не хотите подавать бумагу в принтер вручную и переворачивать вышедший лист и снова пускать его в принтер, то за это надо нормально заплатить? И кроме того, такой вариант предполагает заточенность каждого отчета под такой механизм, а это не универсально. В общем желание бороться и искать заставило меня пободаться с фоксом. Изобретать деревянный велосипед - это же интересно. В итоге родилось решение, суть которого состоит в следующем. Используя ReportListener можно выгрузить отчет в картинку. А картинку всегда можно скопировать и размножить. И уже потом распечатать. В предлагаемом на суд общественности решении ReportListener сохраняет отчет в BMP-файл. Растр в этом файле имеет размер листа бумаги, размер которого задан в настройках отчета (в данном случае А4 книжный). После этого верхняя половина растра копируется в нижнюю. Затем предварительный просмотр фиктивного репота, отображающего только нашу картинку и дальше печать. Вроде бы задача решена, хотя бы в первом приближении. Работает обычный отчет, происходит постобработка результата работы этого отчета. Если еще добавить обработку размера страницы и т.п., то получится вполне универсально и не надо будет перелопачивать код формирования каждого отчета. Однако есть и ряд проблем. Первое - результат рендеринга в картинку отличается от результата рендеринга в обычный превью. Это проявляется в частности в рендеринге прямоугольников. Вместо того, чтобы "наезжать друг на друга" и иметь одну общую сторону, кубасики соприкасаются друг с другом, создавая нежелаемый эффект жирной линии на месте стыка. Ну и второе и более печальное - мы получаем и печатаем растр. И на печати отчет выглядит так, как будто его печатали на матричнике. Убивает всю красоту, особенно в наклонных шрифтах и логотипах. Отдаю это решение на обсуждение общественности. Может opensource сообщество фоксоведов доведет это решение до ума, если оно вообще имеет право на жизнь? Какие будут мнения, предложения? Cкачать рабочий пример можно здесь: quest-m.com.ua Делал на VFP 9 sp2 Запускать форму main. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Мне кажется можно решить гораздо проще - программно создавая, когда возникает необходимость, временный файл отчета с двойным или одиночным содержанием.
Закономерность же в структуре всех отчетов в принципе можно довольно легко найти. Достаточно просто вспомнить, что любой файл отчета - это всего лишь таблица DBF. Вот чисто навскидку - открываю отчет, печатаемый только на половинке листа, через: USE myreport.frx И для сравнения - в соседнем алиасе открываю такой же отчет, но вручную уже дважды повторенный на одной странице. Смотрю через BROWSE оба. Самая первая запись у обоих абсолютно одинакова. Самые нижние, у которых поля UNIQUED и TIMESTAMP пустые - тоже абсолютно одинаковы. Кроме того есть почти одинаковые записи под самой первой, у которых TIMESTAMP тоже пустые или равны 0. Отличие только в одной из них - в поле HEIGHT. В одиночном отчете - это число в два раза меньше, чем в двойном. Все остальное опять один в один. Дальше смотрим поле VPOS у всех элементов отчета. Все они для каждого элемента нижней (продублированной) части отчета отличаются от таких же элементов у одиночного отчета на одно и то же число, равное видимо половине листа. Т.е. как бы визуально определились (чисто условно) понятия: шапки файла, его подвала и собственно тела отчета. Ну а дальше уже элементарно. И весь код помещается всего лишь в несколько строк - открываем через USE одиночный отчет, находим в нем все эти части - шапку, подвал и собственно само тело отчета, копируем найденное тело отчета и вставляем в то место, где начинается подвал, с помощью APPEND или INSERT, и опять закрываем USE. Ну еще конечно же меняем в той записи наверху, где пустой TIMESTAMP высоту отчета в поле HEIGHT и увеличиваем на одно и то же число VPOS у вставленного дубля тела отчета. Ну все это само собой общие принципы. И надо в принципе конкретно пробовать это дело с разными отчетами. Может что-то и уточнить. Но мне кажется - так все равно намного проще, чем с картинками, да и проблемы качества отображения никогда не возникнет. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) Исправлено 1 раз(а). Последнее : Crispy, 12.06.08 15:54 ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
Владимир Максимов Сообщений: 14146 Откуда: Москва Дата регистрации: 02.09.2000 |
Отчет в FoxPro - это всегда сканирование одной и только одной (главной) таблицы. Информация из других таблиц подтягивается постольку, поскольку эти таблицы связаны отношениями по SET RELATION с главной таблицей.
Это значит, что удваивать необходимо только и исключительно содержимое этой главной таблицы. Кроме того, строить отчет напрямую по исходным таблицам, конечно, можно. Но это означает существенно усложнить себе жизнь. Ряд проблем довольно трудно решаются при такой стратегии. А это значит, что более универсальным решением для построения отчета является формирование временной таблицы-источника (курсора). Как следствие, никаких проблем удвоить ее содержимое. Хотя, конечно, логичнее было бы работать с готовым результатом. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Такой вариант реализуется гораздо проще - создается сразу отчет, состоящий из двух одинаковых половинок, и на все контролы второй половинки вешается условие PrintWhen=<хочу 2 копии>. В runtime ничего городить не надо. Вопрос только в том, что скопировать получится только контролы, но не бэнды. Соответственно такой вариант будет работать только для отчета, все контролы которого лежат в Title. А это лишь редкий частный случай. Исправлено 1 раз(а). Последнее : mxprud, 13.06.08 12:13 ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Не вижу проблем печатать отчет по исходным таблицам. Например, я печатаю накладную. Зачем мне ее собирать во временный курсор, если документ уже открыт, т.е. все таблицы уже открыты и связаны релейшенами? Как раз повторное собирание датасета я считаю существенным усложением жизни, ведущим к удорожанию самого проекта и его дальнейшего сопровождения. А процедура в моем проекте, которая выполняет печать, понятия не имеет, что она печатает. Да ей это и не нужно. Нужно просто удвоить со смещением результат рендеринга обыкновенного отчета. Это добавит новый функционал проекту, ибо будет реализована фишка, работающая для всех отчетов, и никакие отчеты не надо будет затачивать под возможность печати двух копий. Кроме того, метод с удвоением датасета предполагает внесение в данные фиктивного поля "номер копии", а в report надо будет добавить фиктивный группинг по этому полю, а это не является сущностю самого отчета. Плохой стиль ИМХО. Работать будет, но не на том уровне абстракции, на котором хотелось бы мне. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Кажется решение нашлось, и гораздо ближе, чем казалось!
У ReportListener есть метод render, в который передаются координаты печатаемого элемента. Вызываем этот метод еще раз, где top увеличиваем на половину длины страницы. И все!
![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
Владимир Максимов Сообщений: 14146 Откуда: Москва Дата регистрации: 02.09.2000 |
Вы рассматриваете очень частный случай в очень простом случае. Не стоит делать поспешных выводов. Как правило, пользователи хотят от отчетов довольно сложного поведения. Например, нумерации строк внутри групп, промежуточных суммы по сложным условиям и т.д. и т.п. Все это можно реализовать средствами отчета, но уж больно муторно потом такой отчет отлаживать и модифицировать. Проще вынести всю эту "муть" в отдельную процедуру подготовки курсора. Это и отлаживать проще и модифицировать...
Насколько я понимаю, флаг This.ex нужен для предотвращения зацикливания. Однако зацикливание можно предотвратить путем сравнения нового значения Top с высотой страницы примерно так:
На самом деле - нужно. Иначе как Вы определите какой класс-наследник ReportListener (или какие его свойства) необходимо вызвать для повторной отрисовки? Т.е. Вам необходимо будет вызвать процедуру печати с вполне определнными параметрами. Ведь не все же отчеты надо удваивать? Значит, Ваша процедура заранее "знает" что именно она печатает. Точнее, каким способом. А уж какова реакция процедуры на переданный параметр - это уже детали: либо удвоение Render(), либо удвоение таблицы-источника. По большому счету - без разницы. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Несомненно, отчеты бывают разные. Бывают простые, бывают и сложные. Как отчет будет собираться и что будет выноситься в код, а что в сам отчет - решать программисту, который будет его писать. Но в итоге будет датасет или набор связанных датасетов и форма отчета. Именно поэтому я и искал решение, которое позволило бы мне абстрагироваться от сущности отчета. Конечно, приведенный мной код - это сделанный мной набросок для проверки работоспособности идеи. Теперь надо все причесать. Например, стоить добавить проверку, поместится ли вообще две копии на один лист. Ранее с ReportListener работать не приходилось. Будем изучать. Предлагаю желающим подключиться в процесс развития идеи. Собственно, как видно, процесс уже пошел ;) Не совсем так. Определение того, сколько копий надо напечатать происходит в самой процедуре. Если пользователь держит нажатой клавишу Ctrl, то печатается 2 копии, иначе одна. Таким образом, мне не только не надо переделывать отчеты и код подготовки датасета, но даже не надо ничего менять в вызовах отчетов. Пользователь видит как и раньше в меню набор отчетных форм. Выбирая соответствующий пункт меню, он может "заказать" 2 копии на листе, удерживая Ctrl.
Разница есть. Метод удвоения таблицы-источника требует как минимум наличия соответствующим образом заточенного frx. А если отчет строится по таблице с данными, а не по временному курсору, то надо еще и создать временный курсор и прописать все релейшены. Метод удвоения render() не требует ничего. Лично меня такое решение полностью устраивает. Это будет небольшим конкурентным преимуществом продукта, над которым я работаю ![]() Исправлено 2 раз(а). Последнее : mxprud, 13.06.08 23:41 ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
Владимир Максимов Сообщений: 14146 Откуда: Москва Дата регистрации: 02.09.2000 |
Оптимизм понятен. Только, любое решение имеет свои ограничения. Но, не будут Вас разубеждать. С моей точки зрения - разницы нет. Весь вопрос в принятой идеологии написания системы отчетов. Но найденное решение действительно удачное. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Мне больше нравятся решения с меньшим числом ограничений ![]() Не только отчетов, но печатных форм вообще. В фоксе два этих термина смешались. На самом деле потребность в печати двух копий на листе чаще всего возникает не при печати отчетов, а при печати документов (счета, накладные, платежки...). Спасибо ![]() ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
leonid Сообщений: 3227 Откуда: Рига Дата регистрации: 03.02.2006 |
Вот фраза, с которой, думаю, согласятся все. Только ... почему Вам кажется, что таким является Ваше решение. Владимир Максимов совершенно правильно сказал, что это зависит в первую очередь от стиля программирования. Очень многие просто не используют таблицы напрямую, а только через LV или CA. Да и вытаскивание данных в курсор перед распечаткой отчета давным дывно считается хорошим тоном. Удвоение (или утроение) курсора совсем нетрудно сделать на уровне класса, и тогда получится, что он тоже "не требует ничего". Но если Ваш метод Вам больше подходит, конечно же пользуйтесь им, тем более, что идея в самом деле интересная. А причина, по которой этот топик вызвал мало откликов, мне кажется кроется в следующем. Не так уж много отчетов (документов), которые помещаются на пол-страницы, и среди них не так уж много, которые нужно печатать более, чем в одном экземпляре. На память приходит только один, который мне приходилось делать - платежные поручения. А в заключение, хочу рассказать еще об одном способе решения данной проблемы, который придумали, насколько я знаю, даже не программисты, а обычные юзеры. В принтер, в трей для ручного ввода вставляется стопка формата А5 поперек (ее длина такая же, как ширина А4), и спокойно запускается печать нужного количества копий. У этого способа есть огромное преимущество перед описанными выше: не надо ничего разрезать ножницами. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Вот и ответ на ваш вопрос. При моем стиле программирования как раз такое решение считаю наиболее подходящим. А "заточенный" report? К сожалению, наибольшую трудность в нашем деле представляет реализация исключений, а не правил. Кстати, печать платежных поручений реализуется без detail, а значит контролы отчета можно просто продублировать, как предлагалось выше. А вот накладные, счета, акты выполненных работ detail имеют. И в крупных организациях вариантов печатных форм для этих документов может быть очень много. Это не всегда удобно. Зависит от принтера и места его размещения в офисе. Не всегда в принтере есть 2 лотка для автоматической подачи, а подавать бумагу вручную не интересно, если принтер стоит в другом конце кабинета или вообще за стенкой. Кроме того, это значит возложить решение проблемы на клиента, в частности, заботиться о наличии листов А5, а клиент хочет этого от программы. Вам никогда не задавали вопрос "А ваша программа это умеет?". В данном случае десяток строк кода снимают проблему и добавляют преимуществ и уважения к продукту. А для меня это важно, ведь продукт коммерческий, и такие мелочи могут повлиять на решение о его приобретении. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
leonid Сообщений: 3227 Откуда: Рига Дата регистрации: 03.02.2006 |
Вот как раз не так. Все контролы засовываются именно в detail. Если в курсоре одна запись - на странице напечатается один документ, если две - два. Все одним report-ом, никакой "заточки". ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Кроме того, что абсолютно верно заметил leonid, еще такой момент - о дублировании.
Вот только что посмотрел, создав на странице отчета два detail. Контролы, лежащие в первом detail точно так же отлично дублируются, при этом во втором, сдублированном, detail точно так же нормально работают и все связи. При этом в самой таблице файла отчета визуально появляется кроме третьей записи, где прописана высота первого detail, еще одна, четвертая, аналогичная запись, с характеристиками второго detail. И, как оказалось, что и вполне логично, при добавлении еще одного бенда detail, следом появляется еще одна такая же, пятая запись. Т.е. структура самого рипорта в принципе (как и следовало ожидать) вполне даже прозрачна. ![]() Что и допускает осуществлять все вышеописанное в отношении дублирования самой таблицы файла для любых произвольных отчетов. Позволяя например заодно и легко проверять, помещается ли отчет на страницу, ну и т.п. Кстати такое дублирование можно осуществлять и в предыдущих версиях фокспро, в отличие от способа с ReportListener, пригодного только для девятки. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Ок. Я имел в виду, что документ платежное поручение не имеет detail-части. Поэтому можно скопировать контролы, будь они реализованы в title или в detail и управлять видимостью второй половины, используя printwhen и remove line if blank, достигая тем самым желаемого эффекта без удвоения датасета. Теперь о том, что я имею в виду под словом "заточка". Если отчет реализован через title-detail-summary, то удвоение датасета не даст желаемого результата. Кстати, к вопросу об ограничениях. Исправлено 1 раз(а). Последнее : mxprud, 17.06.08 00:19 ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Интересно. В report designer создать два независимых detail? Научите. Мне до сих пор казалось, что дополнительные detail-бэнды можно создавать, но им надо указывать источник данных, и этот источник должен быть подчиненным к основному detail, по которому собственно и делается отчет? И опять же начиная с девятки. Или я не прав? Хотелось бы рабочий пример в студию. Будет интересно. Совместными усилиями перевернем представление об ущербности фоксовских отчетов ![]() Или давайте уточним постановку задачи, чтобы мы точно знали, что говорим об одом и том же. Имеется отчет. Он имеет title, detail и summary. Допустим, отчет заведомо помещается на пол листа. Требуется напечатать 2 копии отчета на одном листе. Я так понимаю, в предлагаемом Вами решении потребуется сгенерировать отчет, в котором бэндов будет 6 и идти они будут в таком порядке: title, detail, summary, title, detail, summary. И оба detail будут идти по одному датасету. И итоги в summary будут накапливаться независимо. И report variables будут считаться правильно. Боюсь, что в report designer это невозможно, а если и получится в runtime, то вряд ли фокс сможет корректно такой отчет отработать. Исправлено 2 раз(а). Последнее : mxprud, 17.06.08 00:23 ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
leonid Сообщений: 3227 Откуда: Рига Дата регистрации: 03.02.2006 |
Так и не понял, что Вы под этим имеете в виду. Цитата:Если отчет реализован через group header-detail-group footer, что для подобных отчетов значительно предпочтительней со многих точек зрения, то удвоение датасета вполне даст желаемый результат. Это к вопросу о стилях программирования. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Ну во-первых, в принципе я согласен с тем, что тот же графический отчет в целом более универсален, хотя бы в отношении сохранения и переносимости.
Но речь шла о другом. Если брать отчеты на половину листа, наверно имеет смысл сразу же отбросить многостраничные отчеты. Многостраничный фокс-отчет по полиста - теоретически такое представить конечно можно, но это скорее всего настолько редкое извращение, что едва ли часто встречается, как с точки зрения экономической, так и практического удобства. В одностраничных же (в тех же платежках хотя бы), title и summary как бы и вообще не имеют особого смысла - что в них суммировать-то, если оба отчета дублируют друг друга? Поэтому естественно порядок бэндов всегда такой - title, detail1, detail2, summary. О чем я в общем-то и говорил выше, если перечитать внимательнее. Причем все это настолько очевидно, достаточно всего лишь хотя бы самому набрать команды: USE myreport.frx и BROWSE и посмотреть. При этом, если все контролы обеих дублирующих частей лежат в одном общем detail, то в "шапке", наблюдаемой в BROWSE - видна всего лишь одна запись (третья), в которой и прописана высота этого detail. Если же в дизайнере разбить отчет на два detail, растащив все контролы на две дублирующих друг друга части, там же появляется и еще одна запись (четвертая), в которой прописаны характеристики уже второго detail. Вот об это собственно и говорил прошлый раз. И хотя можно было бы конечно в принципе и проверить, но думаю, нет никакой причины, чтобы каждый detail не мог бы вполне корректно обрабатывать всю свою информацию совершенно независимо, раз уж сама такая возможность (добавлять несколько detail) в отчете существует. Суммарная же информация, как и титульная, как уже и говорилось выше - для таких дублирующих отчетов абсолютно не нужна, да и была бы бессмысленна по сути. Какой общий титул и какая общая сумма могут быть у двух одинаковых отчетов? Хотя можно конечно засунуть оба отчета и в титул например, или в заголовок, или даже в суммарную часть, в принципе некоторые так вроде иногда и делают, но, если опять же открыть такой отчет как таблицу через BROWSE, то выяснится, что и тут почти ничего не меняется, разве что становятся непустыми другие дополнительные записи в "шапке". Вот, только что проверил эти варианты. Т.е. все действия по дублированию и во всех этих случаях опять же элементарны. Разумеется же такой способ применим не для всех поголовно отчетов, а только для тех, которые нужно продублировать на листе. И которые естественно поэтому и не могут быть какими угодно произвольными, хотя бы исходя из того, что они изначально по природе своей "пол-листовые", а не многостраничные. Хотя вообще говоря, всего лишь перемещая и корректируя записи в таблице frx, можно сделать почти что угодно. В смысле, можно без проблем "перекидывать" контролы из бэнда в бэнд. Для случая, если не нужно как-то менять внешние связи конечно. Ну в общем всем этим просто хотелось пояснить в двух словах возникшее некоторое непонимание. ![]() А вообще (при наличии офисных программ само собой), все равно наверно самый удобный вариант отчета - через вывод в виде файлов типа excel или word, ну или аналогов из того же OpenOffice. По сравнению с графическим у него даже есть некоторые преимущества. Хотя и у того тоже есть свои конечно. ![]() ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
Все правильно. А "заточка" заключается в том, что не все отчеты делаются через group header-detail-group footer. Например, Вам заказали простенький отчет - объем продаж по видам продукции за период. Номенклатура у Вас небольшая, состоит из десятка позиций. Вы сделали запрос к БД, в результате которого получили табличку с двумя полями - наименование продукции и сумма. Сделали печатную форму, где в title указали наименование отчета и период, в detail вывели содержимое таблички, в summary подбили итоги. Вроде ничего криминального, в том числе с точки зрения стилей программирования. Группинги не напрашиваются. Задача решена. Менеджер Маша каждое утро печатает отчет для начальника отдела продаж. Все довольны. Проходит время, приходит новый директор с неуемным желанием навести порядок. И просит он каждое утро тот же самый отчет давать и ему, чтобы можно было нагибать начальника отдела продаж. Менеджер Маша не дура, поэтому каждое утро печатает 2 копии отчета на двух листах бумаги. Все довольны. Но директор - он же за порядок. Он приказывает выкрутить в целях экономии в офисе каждую вторую лампочку (смешно, конечно, но с такими случаями я сталкивался) и прилюдно отругивает менеджера Машу за растрату бумаги (потому что этот отчетик умещается на половину листа), с обещанием вычесть у нее из зарплаты. Менеджер Маша звонит Вам и спрашивает: "Что делать?". Вы говорите: "ОК, Маша, просто переверни бумагу и вставь ее еще раз в принтер, чтобы напечатать вторую копию". Маша так и делает. Но бумага тонкая (экономим же) и при втором проходе через принтер частенько застревает. Менеджеру Маше приходится звать сисадмина и получать по шапке от него. Менеджер Маша звонит Вам и говорит: "Что мне делать, я уже заемучалась?". Вы говорите: "ОК, Маша, пойди к начальнику отдела снабжения, пусть он купит тебе А5". Через час Маша звонит Вам снова и сообщает, что начальник отдела снабжения послал ее матом, потому что директор денег не дает и он не то что А5, туалетную бумагу купить не может, и теперь, когда Машу снова кто-нибудь будет драть, она скажет все, что думает о вашей говеной программе, тем более ведь новый директор и так хочет перейти на 1С, потому что в ларьке, где он раньше продавал картошку, стояла 1С и проблем не было. Вот тут вам и придется в спешном порядке вылазить из джакузи и бежать переделывать ваш, казалось бы, уже готовый отчет под две копии на листе и еще нести Маше коробку конфет, чтобы успокоить психику молодой, незамужней, но симпатичной и ни в чем не повинной девочки. А я просто скажу: "ОК, Маша, просто держи Ctrl" ;) В общем я ничего не имею против Вашего метода печати и переубеждать никого не собираюсь. Просто я столкнулся с настойчивым пожеланием клиента, а решать проблему давно известным методом удвоения датасета меня по ряду причин не устраивало. Поэтому я и решил искать решение другое в корне. И я его нашел, чем и делюсь с общественностью. Может оно и не ново, но по крайней мере мне не попадалось. А какой метод выбирать - каждый решает сам. ![]() |
Re: Изыскания на тему печати двух копий отчета на одном листе. | |
---|---|
mxprud Автор Сообщений: 25 Откуда: Севастополь Дата регистрации: 02.06.2008 |
В общем идея ясна и интересна. Только у меня под вопросом ее работоспособность и ограничения на report. Я решение, которое мне хотелось, нашел и заниматься дальнейшими изысканиями сейчас не буду. Если Вас не затруднит и найдется свободная минутка, киньте рабочий примерчик, хотя бы простенький. Будет интересно посмотреть на будущее. Хотелось бы увидеть репорт, где есть 1 detail и какие-либо заголовки\подвалы. А в runtime хотелось бы увидеть удвоенный результат работы отчета без удвоения датасета. Думаю, полезно будет всем. Такой вариант очень полезный, но самый удобный - это спорно. Кстати, иногда приходится выдавать отчеты в html и открывать в IE. Тоже выручает. ![]() |
© 2000-2025 Fox Club  |