Страница 1 из 1
Как открываются файлы в Source ABC ?
Добавлено: 08 Декабрь 2011, 2:40
Андрей
Прошу прощения за ламерский вопрос, однако не могу понять, какой принцип открытия файлов в ABC в шаблоне Source.
В общем так, достаточно элементарно:
Есть брауз, позиционируемся на записи и жмем кнопочку "Расчет". По ней вызывается процедура Calc (шаблон Source). Да... в этом браузе включены поля таблиц T1 и Т2. А в Calc-e описываю в Other Files T1, T2 и Т3 - по ним производится некоторый расчет. Что имеем - та часть, относящаяся к Т1 и Т2 -Ок, а вот расчет по Т3 срабатывает только на 2-й раз вызова Calc, так понимаю не открыта Т3. Почему тогда таблица Т3 со второго раза открывается ? Пробую так:
Access:T3.Init()
MESSAGE(ERROR()) ->
Access:Т3.Open()
MESSAGE(ERROR()) -> Entry Not found
MESSAGE(status(T3)) -> 0
(после 1-й попытки)
Т.е. не открывается.
Но если вместо этого(или выше) сделать Access:Т3.Fetch(ххх_key), то работает
Ежели кому не лень, опишите pls кратенько механизм открытия файлов (ну хотя бы в этом случае) и как правильно надо делать. Спасибо !
Re: Как открываются файлы в Source ABC ?
Добавлено: 08 Декабрь 2011, 9:57
Андрей
Уточняю свой вопрос, может непонятно изложил ранее
Есть брауз, позиционируемся на записи и жмем кнопочку "Расчет". По ней вызывается процедура Calc (шаблон Source). Да... в этом браузе включены поля таблиц T1 и Т2. А в Calc-e описываю в Other Files T1, T2 и Т3 - по ним производится некоторый расчет. Что имеем - та часть, относящаяся к Т1 и Т2 -Ок,
а вот в расчет по Т3 (я там ищу запись через Set(T3_key,T3_key);Access.Т3.Next() ), срабатывает только на 2-й раз вызова Calc. Ставлю перед Next() MESSAGE(status(T3)), вижу что Т3 не открыт.
Вопрос 1: Файлы надо принудительно открывать что ли ? А почему при 2-м вызове Next() отрабатывает ?
Ладно пытаюсь открыть Т3 явно: Access:T3.Init(); Access:Т3.Open() - результат тот же
Вопрос 2: почему не открывается, что не так пишу
И наконец, просто из интереса перед Set(T3_key,T3_key);Access.Т3.Next() ставлю Access:Т3.Fetch(ххх_key) и вижу что и Fetch отрабатывает правильно и Next ниже тоже.
Вопрос 3: Почему Access.Т3.Next() не работает(файл не открыт), а Access:Т3.Fetch(ххх_key) работает ?
Re: Как открываются файлы в Source ABC ?
Добавлено: 08 Декабрь 2011, 11:47
Игорь Столяров
Привет ! Как-то все длиннннннно описано, но дочитал ...
В Global Properties APP на закладке "File Control" просто отключи опцию "Defer opening files until accesssed".
И все будет работать, хотя это и не есть хорошо. Если из названия не понятен смысл ее действия - см. справку.
Да ! Методы работают одинаково независимо от типа шаблона процедуры (Source, Browse, Report и т.д)
Re: Как открываются файлы в Source ABC ?
Добавлено: 08 Декабрь 2011, 14:23
Дед Пахом
В Source процедуре есть опции "Generate Open/Close Files Routines" и "Generate Save/Restore Files Routines" - включите обе и в коде в начале процедуры
do SaveFiles
do OpenFiles
а в конце
do CloseFiles
do RestoreFiles
Re: Как открываются файлы в Source ABC ?
Добавлено: 08 Декабрь 2011, 14:27
Андрей
Вот что прочел в ИноНете:
>>The Filemanager object will call UseFile() when a method needs it. But
>>unfortunately, not all calls use FileManager (such as the Clear() and
>>SET() ). So, if you need the file/table for other calls you need to
>>call UseFile()
>>
>>In general, the "Access:Myfile..." or "Relate:Myfile..." is the
>>FileManager, others are not.
>>
>>The problem only occurs in your embeds, the template code is ok. And
>>it usually occurs in embeds in the window Init() method, where the
>>other methods have not run yet.
>>
>>In your example code, the open is not actually done until the next().
>>Unless, something else already opened it (which can make some cases
>>look intermittent).
>>
>>Always call UseFile() when you might need it. It only checks a flag if
>>it is already open, so it does not add much.
>>
>>The IDE does not know the code, only the templates and objects know...
Значит все же Source особняком стоит.... я правильно понял ?
Кто знает как UseFile() полезно использовать ?
Re: Как открываются файлы в Source ABC ?
Добавлено: 08 Декабрь 2011, 14:54
Андрей
Забавненько все же этот LazyOpen работает - Fetch() значит сигнализирует что надо файл задействовать а вот Set/Next - почему то нет.