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

Добавлено: 02 мар 2010, 17:25
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.

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

Кстати, как именно запускается вышеописанный интерфейс? Перед запуском открываются еще какие-либо интерфейсы?

Добавлено: 02 мар 2010, 19:02
niteo
Запускаю из интерфейса - отчеты пользователя[Управление персоналом].

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

Еще: что возвращает OpenMessageLog?

Добавлено: 03 мар 2010, 10:40
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
___________________________________________
Кстати а как сюда картинки вставлять?

Добавлено: 03 мар 2010, 10:52
galover
niteo
идешь на http://imageshost.ru, грузишь рисунок (лучше всего в png), получаешь ссылку, потом используешь тег [img]ссылка[/img] для вставки в сообщение

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

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

openmessagelog('d:\msg.log', 9) // на экране показалось окно лога
writemessagelog('screw') // в лог добавилась строка
initworkingtable // тут окно лога скрылось
LoadWorkingTable(4611781931441166432, 2, 2006) // ничего не произошло
DoneWorkingTable // порядок

Добавлено: 03 мар 2010, 13:45
niteo
у себя моделировал - всё прошло так, как я предполагал. Последовательность была такой: Код:
openmessagelog('d:\msg.log', 9) // на экране показалось окно лога
writemessagelog('screw') // в лог добавилась строка
initworkingtable // тут окно лога скрылось
LoadWorkingTable(4611781931441166432, 2, 2006) // ничего не произошло
DoneWorkingTable // порядок
У меня на DoneWorkingTable падает галактика.

Добавлено: 03 мар 2010, 14:10
Screw
Из какого модуля производился вызов Вычислителя? Какие интерфейсы были открыты в Галактике в момент запуска?

Добавлено: 03 мар 2010, 14:38
niteo
Из модуля Управление персоналом. Ничего не было запущено. Просто по ctrl+F4 вызвал окошко и начал вводить данные

Добавлено: 03 мар 2010, 14:50
Screw
Вот тут начисто сформированный atlerror.log + отчет о рабоче станции в личку, пожалуйста.

Добавлено: 03 мар 2010, 16:39
niteo
Вроде отправил :)

Добавлено: 03 мар 2010, 17:37
Screw
Что-то ничего...