Страница 1 из 1

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

Добавлено: 24 май 2007, 09:40
Nikos
Добрый день.
Возникла задача, с какой еще не сталкивался. Необходима печать акта сверки в определенном формате. Стандартный поток использовать не получается – совсем другой формат. Как можно решить данную проблему? У меня несколько теоретических вариантов решения, но какое из них в принципе реализуется? Итак:
1. Из потока взять только nrec акта сверки, дальше заполнить временную логическую таблицу данными, вывести их в нужном формате.
2. Перехватить событие cmPrintDoc у стандартного интерфейса и, используя тот же nrec акта сверки, сформировать отчет
3. Создать свой интерфейс, принимающий в качестве параметра опять акт сверки, подключить его через дополнительный пункт в контекстном меню
Подскажите, какой вариант можно использовать (или проще всего использовать, или правильнее), и, если можно, какие функции/механизмы при этом использовать. Возможно, нужно вообще по-другому делать.

Добавлено: 24 май 2007, 10:04
edward_K
все зависит ...
для пользователя будет привычней 1.
2(вы про 8?) альтернатива, если стандартная печать не устраивает по быстродействию и фильтрам.
3 - пользователь редко любит нажимать правую кнопку - ему привычней иконку принтера нажать(левой). Инетерсно и как вы сие делаете?

Добавлено: 24 май 2007, 10:04
Алексей
ИМХО первый проще всего, если в прототипе есть нрек акта.

Добавлено: 24 май 2007, 10:08
Nikos
Да, у нас Галактика 8.1. Стандартная печать вполне устраивает - фильтров нет, документов не много. Получается, что вариант 1 предпочтительнее? А в присоединенных формах я могу использовать все функции vip? Т.е. создать таблицу, заполнить ее, отфильтровать и вывести?

Добавлено: 24 май 2007, 10:14
Алексей
таблицу в проекте опишите
в фрм подключите
в цикле по актам наполните таблицу чем надо
дальше через
.{Table
выведите всё что надо.

Добавлено: 24 май 2007, 10:16
Nikos
Спасибо, буду пробовать. А то мысли разбегаются - не знаю за какой вариант браться. :)

Добавлено: 24 май 2007, 14:47
Nikos
Что-то не очень получается...
Описал таблицу следующим образом:
table struct local tAktSver
(
dateDoc : date,
TypeDoc : string,
SumDoc : double
)
with index (byDate=dateDoc);
Добавил файл с описанием в проект, с заполнением и выводом проблем быть не должно, а вот как ее подключить в фрм не представляю.

Добавлено: 24 май 2007, 15:51
Den
Если действительно в проекте описал такблицу, то в форме

.create view t1 from taktsver

проблем быть не должно. Может только слово local на что то влияет

Добавлено: 24 май 2007, 16:26
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
^
.}
Добавляется одна запись (проверял), а вот в отчет выводится около сотни. Где в этот раз ошибся?

Добавлено: 24 май 2007, 16:27
Nikos
В отчет выводятся абсолютно одинаковые значения

Добавлено: 24 май 2007, 17:30
Den
используй t1._loop....t1._insert

Добавлено: 25 май 2007, 06:43
Алексей
Nikos
У вас ограничение на таблицу - потому и выводится одна запись.

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

и будет Вам счастье.

Добавлено: 25 май 2007, 08:34
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
В то время как акт сверки только один.

Добавлено: 25 май 2007, 10:26
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 вызовет кучу предупреждений.
если запись не вставиться проверте местоположение данного блока.

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