Печать в нужном формате

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Печать в нужном формате

Сообщение Nikos »

Добрый день.
Возникла задача, с какой еще не сталкивался. Необходима печать акта сверки в определенном формате. Стандартный поток использовать не получается – совсем другой формат. Как можно решить данную проблему? У меня несколько теоретических вариантов решения, но какое из них в принципе реализуется? Итак:
1. Из потока взять только nrec акта сверки, дальше заполнить временную логическую таблицу данными, вывести их в нужном формате.
2. Перехватить событие cmPrintDoc у стандартного интерфейса и, используя тот же nrec акта сверки, сформировать отчет
3. Создать свой интерфейс, принимающий в качестве параметра опять акт сверки, подключить его через дополнительный пункт в контекстном меню
Подскажите, какой вариант можно использовать (или проще всего использовать, или правильнее), и, если можно, какие функции/механизмы при этом использовать. Возможно, нужно вообще по-другому делать.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

все зависит ...
для пользователя будет привычней 1.
2(вы про 8?) альтернатива, если стандартная печать не устраивает по быстродействию и фильтрам.
3 - пользователь редко любит нажимать правую кнопку - ему привычней иконку принтера нажать(левой). Инетерсно и как вы сие делаете?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

ИМХО первый проще всего, если в прототипе есть нрек акта.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Да, у нас Галактика 8.1. Стандартная печать вполне устраивает - фильтров нет, документов не много. Получается, что вариант 1 предпочтительнее? А в присоединенных формах я могу использовать все функции vip? Т.е. создать таблицу, заполнить ее, отфильтровать и вывести?
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

таблицу в проекте опишите
в фрм подключите
в цикле по актам наполните таблицу чем надо
дальше через
.{Table
выведите всё что надо.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Спасибо, буду пробовать. А то мысли разбегаются - не знаю за какой вариант браться. :)
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Что-то не очень получается...
Описал таблицу следующим образом:
table struct local tAktSver
(
dateDoc : date,
TypeDoc : string,
SumDoc : double
)
with index (byDate=dateDoc);
Добавил файл с описанием в проект, с заполнением и выводом проблем быть не должно, а вот как ее подключить в фрм не представляю.
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

Если действительно в проекте описал такблицу, то в форме

.create view t1 from taktsver

проблем быть не должно. Может только слово local на что то влияет
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Почти получилось. Таблица действительно появилась, после того, как правильно подключил в проект. В присоединенной форме до самого первого цикла пишу:
.create view t1 from taktsver;
.fields
taktsver.dateDoc
.endfields
.begin
_loop aktsver where((NRECАКТА == aktsver.nrec))
insert into tAktSver set tAktSver.dateDoc := aktsver.ddoc;
end.
.{table 't1' by taktsver.dateDoc
^
.}
Добавляется одна запись (проверял), а вот в отчет выводится около сотни. Где в этот раз ошибся?
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

В отчет выводятся абсолютно одинаковые значения
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение Den »

используй t1._loop....t1._insert
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Сообщение Алексей »

Nikos
У вас ограничение на таблицу - потому и выводится одна запись.

Надо при доабвлении запись использовать эту таблицу а для вывода значений сделать её синоним без ограничений
и цикл при выводе уже делать по СИНОНИМУ таблицы

и будет Вам счастье.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Den
_loop, _insert я вообще не нашел в документации, пишу t1._insert - говорит, что нет такой функции или метода

Алексей
ДОДЖНА выводиться одна запись, а выводится как раз очень много, в то время как в таблице tAktSver находится только одна (insert выполняется только один раз), следом вывожу t1 - записей уже очень много. Кроме того, я ограничения не использую: .create view t1 from taktsver;

Приведу текст формы:
.LinkForm 'AS2' Prototype is 'AKTSVER'
.NameInList 'Акт сверки 2'
.create view t1 as select * from taktsver;
.fields
taktsver.dateDoc
.endfields
.begin
_loop aktsver where((NRECАКТА == aktsver.nrec))
insert into tAktSver set tAktSver.dateDoc := aktsver.ddoc;
end.
.{table t1
^
.}

.{
ok
.{
.}
.{
.}
.{
.}
.{
.}
.{
.}
.{
.}
.}
.endform
Результат следующий:

12/04/2007
12/04/2007
12/04/2007
12/04/2007
12/04/2007
12/04/2007
.....очень много одинаковых строк

ok
В то время как акт сверки только один.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

.create view t1 as select * from taktsver,aktsver
where ((NRECАКТА == aktsver.nrec))
;
.fields
taktsver.dateDoc
.endfields
.begin
t1.delete all tAktSver ;
if t1.getfirst aktsver=0
t1.insert into tAktSver set tAktSver.dateDoc := aktsver.ddoc;
end.
ваш текст на 8 вызовет кучу предупреждений.
если запись не вставиться проверте местоположение данного блока.
Nikos
Местный житель
Сообщения: 577
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Томск

Сообщение Nikos »

Большое спасибо, заработало (жаль только, что не понятно, почему именно так, надеюсь со временем разберусь). Компилирую на 8.10, но никаких предупреждений не выдает.
Ответить