Ard отчет и табличка в памяти
Модераторы: m0p3e, edward_K, Модераторы
Ard отчет и табличка в памяти
Подскажите ....
В интерфейсе объявлена таблица в памяти
Строчки в ней заполняются и все это в бровсе показывается. Это все работает
Проблема встала напечатать ARD отчет по этой таблице.
При компиляции отчета он ругается что таблици нет в словаре.
Подскажите собственно как правильно все это организовать.
В интерфейсе объявлена таблица в памяти
Строчки в ней заполняются и все это в бровсе показывается. Это все работает
Проблема встала напечатать ARD отчет по этой таблице.
При компиляции отчета он ругается что таблици нет в словаре.
Подскажите собственно как правильно все это организовать.
Re: Ard отчет и табличка в памяти
В поиск...
-
- Местный житель
- Сообщения: 783
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Ard отчет и табличка в памяти
Объяви ее не в интерфейсе, а в проекте.
Если проекта нету, то точно не знаю можно ли, но попробуй объявить непосредственно в форме.
Например, весь мой 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
Если проекта нету, то точно не знаю можно ли, но попробуй объявить непосредственно в форме.
Например, весь мой 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
Re: Ard отчет и табличка в памяти
Деинис прав, объявляй на уровне проекта, в форме не получится.
Еще вариант - в интерфейсе сложи из таблицы в памяти все в какую-нибудь временную таблицу словаря и уже оттуда выковыривай в отчет. Правда помимо очевидного замедления работы при таком подходе, придется еще искать подходящую таблицу в словаре
Так что объявление на уровне проекта - самое то.
Еще вариант - в интерфейсе сложи из таблицы в памяти все в какую-нибудь временную таблицу словаря и уже оттуда выковыривай в отчет. Правда помимо очевидного замедления работы при таком подходе, придется еще искать подходящую таблицу в словаре
Так что объявление на уровне проекта - самое то.
Re: Ard отчет и табличка в памяти
Объясните, пожалуйста, что это за функция mtChangeRefCount? где можно про нее почитать?
и как ее использовать?
Если возможно: с примером.
Спасибо!
и как ее использовать?
Если возможно: с примером.
Спасибо!
-
- Местный житель
- Сообщения: 783
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Ard отчет и табличка в памяти
http://tyumbit.ru/galaktika/read.php?f=6&i=2468&t=2466
Если вы что-то делаете с данными в ТП в своем фейсе, знайте, что после закрытия этого своего фейса данные "грохнутся". То есть таблица-то, если она объявлена для всего проекта, видна будет (компилятор не будет ругаться на отсутствие таблицы в словаре), но будет совсем пустой. Чтобы данные не "грохнулись" надо в конце фейса выполнить:
mtChangeRefCount( #tPlansSch, 1 );
Однако, чтобы эти таблицы были ликвидированы ПОСЛЕ окончания всей работы всех фейсов, использующих эту таблицу, обязательно надо выполнить в последнем интерфейсе:
mtChangeRefCount( #tPlansSch, -1 );
Функция mtChangeRefCount меняет кол-во счетчика ссылок на экземпляр ТП.
При значении счетчика <=0 экземпляр ТП удаляется.
Об этом написано в доке по ТП. Сама дока выложена в разделе "Опыт"
Если вы что-то делаете с данными в ТП в своем фейсе, знайте, что после закрытия этого своего фейса данные "грохнутся". То есть таблица-то, если она объявлена для всего проекта, видна будет (компилятор не будет ругаться на отсутствие таблицы в словаре), но будет совсем пустой. Чтобы данные не "грохнулись" надо в конце фейса выполнить:
mtChangeRefCount( #tPlansSch, 1 );
Однако, чтобы эти таблицы были ликвидированы ПОСЛЕ окончания всей работы всех фейсов, использующих эту таблицу, обязательно надо выполнить в последнем интерфейсе:
mtChangeRefCount( #tPlansSch, -1 );
Функция mtChangeRefCount меняет кол-во счетчика ссылок на экземпляр ТП.
При значении счетчика <=0 экземпляр ТП удаляется.
Об этом написано в доке по ТП. Сама дока выложена в разделе "Опыт"
Re: Ard отчет и табличка в памяти
Спасибо за наводку!
Re: Ard отчет и табличка в памяти
Ох, ну зачем все эти сложности?
Можно ведь написать прототип, привязать его к фейсу, который заполняет ТП и выгружать из этого вейса все это дело в свой прототип. Ну естественно написать линковые формочки. И не нужны ни какие ард-отчеты )
Можно ведь написать прототип, привязать его к фейсу, который заполняет ТП и выгружать из этого вейса все это дело в свой прототип. Ну естественно написать линковые формочки. И не нужны ни какие ард-отчеты )
Ищу возможности довести и так отличный продукт до еще большего блеска
-
- Местный житель
- Сообщения: 783
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Ard отчет и табличка в памяти
Vitas, а можно поподробнее?
Как видно, должно быть задействовано 2 прототипа. Как такую структуру организовать? Как запускать? И пример еще (пусть самый небольшой)
Как видно, должно быть задействовано 2 прототипа. Как такую структуру организовать? Как запускать? И пример еще (пусть самый небольшой)
Re: Ard отчет и табличка в памяти
Где видно, что должно быть задействовано два прототипа?
//Пример:
//Описание формы
.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 посмотри.
//Пример:
//Описание формы
.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 посмотри.
Ищу возможности довести и так отличный продукт до еще большего блеска
-
- Местный житель
- Сообщения: 783
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Москва
- Контактная информация:
Re: Ard отчет и табличка в памяти
>> Где видно, что должно быть задействовано два прототипа?
Из фразы:
>> Можно ведь написать прототип,...
1-й прототип
>>привязать его к фейсу, который заполняет ТП и выгружать из этого вейса все это дело в свой прототип...
2-й прототип
Однако, теперь ясно. Спасибо за пример и за наводку.
Можешь еще пояснить, как и где запускать свои отчетные формы? В каком месте они станут видны?
Из фразы:
>> Можно ведь написать прототип,...
1-й прототип
>>привязать его к фейсу, который заполняет ТП и выгружать из этого вейса все это дело в свой прототип...
2-й прототип
Однако, теперь ясно. Спасибо за пример и за наводку.
Можешь еще пояснить, как и где запускать свои отчетные формы? В каком месте они станут видны?
Re: Ard отчет и табличка в памяти
только в Рабочем месте пользователя
Re: Ard отчет и табличка в памяти
Ну во-первых, разговор шел об одном и том же прототипе
Во вторытх, фейс можно подрубить в рабочем месте пользователя, или написать ард-шник, в котором будет только вызываться твой фейс и тогда можно запускать из списка ард-отчетов.
Линковые формы будут видны из твоего фейса. В данно примере сразу при инициализации фейса, но можно приципить как к событиям кнопок так и к событиям из статус-строки, например к cmPrintDoc
Во вторытх, фейс можно подрубить в рабочем месте пользователя, или написать ард-шник, в котором будет только вызываться твой фейс и тогда можно запускать из списка ард-отчетов.
Линковые формы будут видны из твоего фейса. В данно примере сразу при инициализации фейса, но можно приципить как к событиям кнопок так и к событиям из статус-строки, например к cmPrintDoc
Ищу возможности довести и так отличный продукт до еще большего блеска