InitWorkingTable и Runtime Error 216 in atlantis.rtl at 2F7B

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

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

niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Сообщение niteo »

Одно очевидно: инициализировать табель нужно до начала цикла обхода лицевых счетов, а не на каждой его итерации.
100% согласен, просто ошибка возникла изначально не в том виде в котором я показал исходник вначале. Итерация всего одна была.
Насчет того, что причина падения LoadWorkingTable - вызов ее в функции - это домыслы.
Вы правы. Не мог подумать что это из-за writemessagelog но вот код, окторый 100% у меня падает, а если коментирую строчки с writemessagelog то все гуд. Чорт, столько времени грешил на writemessagelog страшно подумать, решение было перед носом!!! Штоб я еще раз стал пользоваться writemessagelog - НИЗАЧТО :(

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

interface f1_Pererabotka 'Переработки' (,hcNoContext,) escclose, gray;
  show at (,,65,12);

create view vDB;
screen OptionsScreen;
    buttons
      cmOk, default,, 'Сформировать отчет',, sci1Esc;
      cmClose,,, 'Закрыть окно',, sci1Esc;
  <<
  <.Сформировать.>                         <.   Отмена   .>
  >>
  end; // screen OptionsScreen
//---------------------------------------------------------------------------------------------------------//
function GetUpperHours(ds, de: date; Chel : comp): double;
{
    GetUpperHours := 0;
    WriteMessageLog(string(ds) + ' ' + string(de) + ' ' + string(chel));

    if InitWorkingTable
    {
        writemessagelog('InitWorkingTable');
//        Message('Табель загрузился', mfInformation or OkButton);
        if LoadWorkingTable(chel, 9, 2009) = 0
        {
            writemessagelog('LoadWorkingTable');
            WT_AddDayRangeFilter(1, 31)
            if WT_LoadMonthlyAbsences = 0
            {
                writemessagelog('WT_LoadMonthlyAbsences');
            }
        }
        else
            writemessagelog('Табель не загрузился');
//            Message('Табель не загрузился', mfError or OkButton);
        DoneWorkingTable;
    }
}

handleevent
    cmOk:
    {
        if OpenMessageLog('D:\tmp\1\vasya.log', mfLog2Screen + mfBatch) = false {}
        GetUpperHours(Date(1, 9, 2009), Date(30, 9, 2009), 85568392920071951);
        CloseMessageLog;
        CloseInterface(cmDone); 
        Exit;
    }
end

end.
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Да всё в порядке с функцией. Просто дело в том, что при инициализации табельного функционала тоже вызывается метод инициализации лога. Точнее, там инициализируется прикладной функционал, который основан на системных методах работы с логом. Только у прикладной части свои представления о правилах работы с логом (конечная цель - весь вывод свалить в файл, а не на экран). Возможно, имеет место какая-то хитрая интерференция методов работы с логом, вызываемых при загрузке табеля.

Кстати, как именно запускается вышеописанный интерфейс? Перед запуском открываются еще какие-либо интерфейсы?
Виталий
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Сообщение niteo »

Запускаю из интерфейса - отчеты пользователя[Управление персоналом].
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Кстати, а на экране успевает мелькнуть Атлантическое окошко лога? Серенькое такое, внизу экрана. Если каждый вызов WriteMessageLog сопроводить выдачей мессаги, то должно быть заметно... Затем после вызова InitWorkingTable это окошко должно закрыться. Таково ожидаемое поведение системы.

Еще: что возвращает OpenMessageLog?
Виталий
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Сообщение niteo »

Лог открывается нормально, и заносит данные только до InitWorkingTable, то есть после этой функции запись в лог не падает, и происходит падение клиента галактики.

OpenMessageLog возвращает TRUE

вот ORA90DRV.LOG

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

03.03.2010 08:08:51 [GAL#SUPERVISOR]:

DECLARE ID VARCHAR2(40); BEGIN ID := GAL."GETUSERNREC" || GAL."GETSESSIONID"; DELETE FROM GAL."SYS#LOCKS" WHERE USERID = ID; END;
ORA-12571: TNS:packet writer failure
вот последние строки atlerror.log

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

Runtime error 216 (rtl: попытка обращения к некорректному дескриптору)
in atlantis.rtl at 00002F7B

Содержимое стека
 0012BA8C: 00321438 atlantis.rtl.1:00000438
 0012BAB0: 00321438 atlantis.rtl.1:00000438
 0012BB48: 00322F7B atlantis.rtl.1:00001F7B
___________________________________________
Кстати а как сюда картинки вставлять?
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

niteo
идешь на http://imageshost.ru, грузишь рисунок (лучше всего в png), получаешь ссылку, потом используешь тег [img]ссылка[/img] для вставки в сообщение
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Нет, ни о чем это мне пока не говорит. Кстати, всю последовательность действий можно выполнить в Вычислителе Выражений - инициализацию лога, табеля, его загрузку. Хорошо было бы пронаблюдать последовательность в деталях. Я у себя моделировал - всё прошло так, как я предполагал. Последовательность была такой:

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

openmessagelog('d:\msg.log', 9) // на экране показалось окно лога
writemessagelog('screw') // в лог добавилась строка
initworkingtable // тут окно лога скрылось
LoadWorkingTable(4611781931441166432, 2, 2006) // ничего не произошло
DoneWorkingTable // порядок
Виталий
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Сообщение niteo »

у себя моделировал - всё прошло так, как я предполагал. Последовательность была такой: Код:
openmessagelog('d:\msg.log', 9) // на экране показалось окно лога
writemessagelog('screw') // в лог добавилась строка
initworkingtable // тут окно лога скрылось
LoadWorkingTable(4611781931441166432, 2, 2006) // ничего не произошло
DoneWorkingTable // порядок
У меня на DoneWorkingTable падает галактика.
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Из какого модуля производился вызов Вычислителя? Какие интерфейсы были открыты в Галактике в момент запуска?
Виталий
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Сообщение niteo »

Из модуля Управление персоналом. Ничего не было запущено. Просто по ctrl+F4 вызвал окошко и начал вводить данные
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Вот тут начисто сформированный atlerror.log + отчет о рабоче станции в личку, пожалуйста.
Виталий
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

Сообщение niteo »

Вроде отправил :)
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Что-то ничего...
Виталий
Ответить