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

Вопрос по интерфейсу

Добавлено: 04 июл 2011, 18:34
Ruslan_V
Добрый день! Возник такой вопрос. В ард-отчете вызываю свой интерфейс, в котором есть 2 кнопки для выбора подразделения (склад-отправитель и склад-получатель). Нреки помеченных складов загоняю в 2 временные таблицы. Но когда нажимаю в интерфейсе ОК и закрываю интерфейс, чтоб продолжить формирование отчета, в этих таблицах уже ничего не хранится. Похоже, что при закрытии интерфейса происходит очистка этих таблиц. Таблицы описаны в проектном файле. Может нужно указать какой-то параметр интерфейса? подскажите пожалуйста.

Re: Вопрос по интерфейсу

Добавлено: 04 июл 2011, 19:05
galover
mtChangeRefCount

Re: Вопрос по интерфейсу

Добавлено: 04 июл 2011, 20:10
Masygreen

Код: Выделить всё

mtChangeRefCount(#TabExcel,1); 

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 07:49
n0where
маркеры поюзать

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 09:42
RAJAH
Было как-то: мне слово 'local' в описании временной таблицы мешало. Темку создавал даже.

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 11:36
Ruslan_V
Спасибо огромное. mtChangeRefCount помогло справиться с проблемой. А нужно ли по завершении формирования отчета изменять количество ссылок на таблицу до 0, т.е. mtChangeRefCount(#tpodr,0); ? Или смысла нет и временная таблица все равно удаляется?

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 11:48
edward_K
а проверить то легко - если при повторном входе в фейс число записей 0 - значит не надо. А вообще на всякий случай чистите принудительно при входе и выходе.

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 12:21
Masygreen
ни когда не чистил :) (это не означает что так правильно делать)

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 12:34
LaaLaa
Если данные больше не нужны обязательно надо чистить. Иначе до конца сеанса Галактики будет зря расходоваться память.

Если вы увеличивали счетчик на единицу mtChangeRefCount(#TabExcel,1), то чтобы почистить надо уменьшить на единицу mtChangeRefCount(#TabExcel,-1)
Процедура mtChangeRefCount

Назначение
Увеличивает /уменьшает счетчик ссылок на экземпляр данных таблицы в памяти. Если счетчик ссылок = 0, то экземпляр освобождается. Система ведет два счетчика ссылок - один для прикладного, другой для системного использования. Таким образом, система не позволяет освободить экземпляр таблицы в памяти до тех пор, пока на нее есть хотя бы одна реальная ссылка.

Описание
function mtChangeRefCount(iTable : integer; iCount : integer) : longInt;

Параметры
iTable - номер узла в логической таблице;
iCount - значение, на которое надо увеличить /уменьшить значение счетчика ссылок на экземпляр таблицы в памяти.

Возвращает новое значение счетчика ссылок.

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 12:57
Masygreen
LaaLaa писал(а):Если данные больше не нужны обязательно надо чистить. Иначе до конца сеанса Галактики будет зря расходоваться память.

Если вы увеличивали счетчик на единицу mtChangeRefCount(#TabExcel,1), то чтобы почистить надо уменьшить на единицу mtChangeRefCount(#TabExcel,-1)
а просто написать mtChangeRefCount(#TabExcel,0) - не прокатит? если надо делать -1 то можно и запутаться в количестве?

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 15:47
edward_K
-1 как раз для того чтобы не запутаться. Мож ваш фейс еще откуда то вызовется где эта же табла - там тоже делаете +1-1.

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 17:34
Masygreen
я в плане того что будет если (-1) больше чем (1) .. будет вылет с ошибкой или чего ?

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 21:29
edward_K
Ну если сделано нормально то ниче не будет. Просто где то раньше чем нужно таблица освободится из памяти. Но обычно ставят +1-1 на расстоянии одной строки - сложно ошибиться.

Re: Вопрос по интерфейсу

Добавлено: 05 июл 2011, 22:12
LaaLaa
Masygreen писал(а):а просто написать mtChangeRefCount(#TabExcel,0) - не прокатит?
ноль счетчик не изменит