Ard отчет и табличка в памяти

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

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

Ответить
Spvl
Постоянный обитатель
Сообщения: 136
Зарегистрирован: 29 мар 2005, 17:49

Ard отчет и табличка в памяти

Сообщение Spvl »

Подскажите ....
В интерфейсе объявлена таблица в памяти
Строчки в ней заполняются и все это в бровсе показывается. Это все работает
Проблема встала напечатать ARD отчет по этой таблице.
При компиляции отчета он ругается что таблици нет в словаре.
Подскажите собственно как правильно все это организовать.
m0p3e
Местный житель
Сообщения: 1386
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва

Re: Ard отчет и табличка в памяти

Сообщение m0p3e »

В поиск...
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Ard отчет и табличка в памяти

Сообщение Deinis »

Объяви ее не в интерфейсе, а в проекте.
Если проекта нету, то точно не знаю можно ли, но попробуй объявить непосредственно в форме.
Например, весь мой ARD-отчет содержит следующие строки

.Begin
// Очистим все временные таблицы и подготовим их для работы в отчете
RunInterface('MyInit_tTables');

// Получим параметры, необходимые для работы отчета
RunInterface('GetReportParam' , PickPlansSch , Schet , ShortSchet , SubSchet , IsNeedSubSchet , BeginDate , EndDate);

// Заполним временную таблицу теми организациями
RunInterface('MyPutOrg');

// Вытащим данные из проводок
RunInterface('My_Oborot',ShortSchet,SubSchet,IsNeedSubSchet,BeginDate,EndDate);

// Выведем данные в отчет
RunInterface('MyProcessDoc',ShortSchet,SubSchet,IsNeedSubSchet,BeginDate,EndDate);

// Очистка и ликвидация временных таблиц из памяти
RunInterface('MyClear_tTables_Dogov');
End.

В начале работы отчета сделай запуск фейса, инициализирующего таблицы в памяти (Init_tTables) с записями типа mtChangeRefCount( #tPlansSch, 1 ); и т.д.
В конце работы отчета сделай запуск фейса, инициализирующего таблицы в памяти (Clear_tTables) с записями типа mtChangeRefCount( #tPlansSch, -1 ); и т.д.

Я писал об этом (да и не я один, поищи на форуме, не поленись):
http://tyumbit.ru/galaktika/read.php?f=6&i=2468&t=2466
sth
Постоянный обитатель
Сообщения: 148
Зарегистрирован: 29 мар 2005, 17:49

Re: Ard отчет и табличка в памяти

Сообщение sth »

Деинис прав, объявляй на уровне проекта, в форме не получится.
Еще вариант - в интерфейсе сложи из таблицы в памяти все в какую-нибудь временную таблицу словаря и уже оттуда выковыривай в отчет. Правда помимо очевидного замедления работы при таком подходе, придется еще искать подходящую таблицу в словаре :)
Так что объявление на уровне проекта - самое то.
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: Ard отчет и табличка в памяти

Сообщение hope »

Объясните, пожалуйста, что это за функция mtChangeRefCount? где можно про нее почитать?
и как ее использовать?
Если возможно: с примером.
Спасибо!
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Ard отчет и табличка в памяти

Сообщение Deinis »

http://tyumbit.ru/galaktika/read.php?f=6&i=2468&t=2466
Если вы что-то делаете с данными в ТП в своем фейсе, знайте, что после закрытия этого своего фейса данные "грохнутся". То есть таблица-то, если она объявлена для всего проекта, видна будет (компилятор не будет ругаться на отсутствие таблицы в словаре), но будет совсем пустой. Чтобы данные не "грохнулись" надо в конце фейса выполнить:
mtChangeRefCount( #tPlansSch, 1 );
Однако, чтобы эти таблицы были ликвидированы ПОСЛЕ окончания всей работы всех фейсов, использующих эту таблицу, обязательно надо выполнить в последнем интерфейсе:
mtChangeRefCount( #tPlansSch, -1 );
Функция mtChangeRefCount меняет кол-во счетчика ссылок на экземпляр ТП.
При значении счетчика <=0 экземпляр ТП удаляется.
Об этом написано в доке по ТП. Сама дока выложена в разделе "Опыт" :)
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: Ard отчет и табличка в памяти

Сообщение hope »

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

Re: Ard отчет и табличка в памяти

Сообщение Vitas »

Ох, ну зачем все эти сложности?
Можно ведь написать прототип, привязать его к фейсу, который заполняет ТП и выгружать из этого вейса все это дело в свой прототип. Ну естественно написать линковые формочки. И не нужны ни какие ард-отчеты :))
Ищу возможности довести и так отличный продукт до еще большего блеска
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Ard отчет и табличка в памяти

Сообщение Deinis »

Vitas, а можно поподробнее?
Как видно, должно быть задействовано 2 прототипа. Как такую структуру организовать? Как запускать? И пример еще (пусть самый небольшой) :)
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

Re: Ard отчет и табличка в памяти

Сообщение Vitas »

Где видно, что должно быть задействовано два прототипа? :)
//Пример:
//Описание формы

.form test
.fields
user
.endfields
Список пользователей системы
.{
^
.}
.endform
//Интерфейс

interface testForm doaccept;
create view
var x:integer;
as select * from X$USERS;
form test('test.out');
handleEvent
cmInit:
{
x:=testForm.GetFirst;
if x=0 then
test.Write(xu$FullName);
if x=0 then begin
while x=0 do begin
x:=testForm.GetNext;
if x=0 then
test.Write(xu$FullName);
end;
end;
test.PutEvent(feBreak);
test.ShowFile('');
}
end;
end.

А вообще посмотри описание методов форм для интерфейсов и по объекту TForm посмотри.
Ищу возможности довести и так отличный продукт до еще большего блеска
Deinis
Местный житель
Сообщения: 783
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Re: Ard отчет и табличка в памяти

Сообщение Deinis »

>> Где видно, что должно быть задействовано два прототипа? :)

Из фразы: :D
>> Можно ведь написать прототип,...
1-й прототип
>>привязать его к фейсу, который заполняет ТП и выгружать из этого вейса все это дело в свой прототип...
2-й прототип

Однако, теперь ясно. Спасибо за пример и за наводку. :)
Можешь еще пояснить, как и где запускать свои отчетные формы? В каком месте они станут видны?
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: Ard отчет и табличка в памяти

Сообщение hope »

только в Рабочем месте пользователя
Vitas
Местный житель
Сообщения: 230
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Сибирь

Re: Ard отчет и табличка в памяти

Сообщение Vitas »

Ну во-первых, разговор шел об одном и том же прототипе :)

Во вторытх, фейс можно подрубить в рабочем месте пользователя, или написать ард-шник, в котором будет только вызываться твой фейс и тогда можно запускать из списка ард-отчетов.

Линковые формы будут видны из твоего фейса. В данно примере сразу при инициализации фейса, но можно приципить как к событиям кнопок так и к событиям из статус-строки, например к cmPrintDoc
Ищу возможности довести и так отличный продукт до еще большего блеска
Ответить