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

Протокол сообщений: возможность отключения.

Добавлено: 07 авг 2014, 17:31
Irina_
Здравствуйте. Написала отчет в зарплате на vip-е. Работаю со многими данными (начисления отчетного м-ца, архив оплат, табеля, назначения, справочники). При формировании отчета часто появляется протокол вида:
--------------------------------------------------------------------------------
Протокол сообщений (четверг, 07/08/2014)
--------------------------------------------------------------------------------
[!] График за июль 2014 г. для режима работы 114 не сформирован.
Фонд рабочего времени по умолчанию: 23 дн., 184 ч.
--------------------------------------------------------------------------------
Проблема в том, что протокол формируется не один раз в конце, а более 10 раз, т.е. не по каждому сотруднику, а по некоторым при выполнении определенных условий. Вообще говоря, мне этот протокол не нужен, только лишняя необходимость каждый раз закрывать окно с протоколом. Большое подозрение, что неоднократный вывод протокола может быть связан с работой с табельными функциями (WT_GetDaysBwDates, WT_GHBD, WT_GetMonthlyAbsenceAttribute и др.). Возможно, кто-нибудь подскажет, как отключить формирование указанного протокола.

Re: Протокол сообщений: возможность отключения.

Добавлено: 07 авг 2014, 19:54
edward_K
Обычно сей протокол показывается по команде ShowErrors
Может быть по Done...
Вы же можете в своем фейсе сузить облать поиска тем же протоколом
Заведите какую нибудь переменную - типа уровень протоколирование и при максимальном значении выведите .. да хоть через строчку
ну либо #define + #ifdef
После того как найдете конкретный кусок кода можно будет и поговорить.

Re: Протокол сообщений: возможность отключения.

Добавлено: 07 авг 2014, 23:34
RAJAH
По-моему, Fcenv = Off должен помочь.

Re: Протокол сообщений: возможность отключения.

Добавлено: 08 авг 2014, 10:27
edward_K
это протокол зарплатный(судя по шапке) - через displ выводиться в zarerror.out. А Fcenv гасит выбор одиночных форм, в том числе и error - но тут не она.

Re: Протокол сообщений: возможность отключения.

Добавлено: 08 авг 2014, 12:45
Screw
1. В начале файла с исходным кодом вашего отчёта вставьте...

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

#include Contexts.vih
2. В теле интерфейса, в любом допустимом месте до HandleEvent...

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

#include IntInitSession.vpp
3. В конце кода формирования отчёта вставьте вызов ShowErrors.

Re: Протокол сообщений: возможность отключения.

Добавлено: 08 авг 2014, 14:46
Irina_
Здравствуйте.
To Edward_. Не ругайте сильно, но я не поняла, что мне надо сделать. Опыта работы на vip не очень много (написала только несколько отчетов), с описанной проблемой не сталкивалась. Полный код выкладывать не хочу, он достаточно большой, не думаю, что кому-то захочется в нем ковыряться.
Команд ShowErrors или Done у меня в исходнике нет.
Вы писали: «Заведите какую нибудь переменную - типа уровень протоколирование и при максимальном значении выведите .. да хоть через строчку ну либо #define + #ifdef ». Можете ли привести небольшой пример кода как это сделать?

To Screw. Сделала как Вы написали, при компиляции «Ошибка при открытии include файла IntInitSession.vpp». Где найти этот файл? В архивах не нашла. Что значит вставить в любом допустимом месте до HandleEvent ? Это где?

Re: Протокол сообщений: возможность отключения.

Добавлено: 08 авг 2014, 14:56
edward_K
файло надо искать в папке frm, но там его нет - это в ТП со ссылкой на форум
создайте сами

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

//******************************************************************************
//                                                      (с) корпорация Галактика
// Галактика 8.1 - Заработная плата
// Код захвата контекста "IntInit" (базовый зарплатный), аналог процедурных
// скобок IntInit|ExitProc
//******************************************************************************

//------------------------------------------------------------------------------
//  Для захвата контекста достаточно подключить данный vpp-файл в свой
//    интерфейс.
//
//  Пример.
//    ...
//    #include Contexts.vih // Обработка контекстов
//    ...
//    Interface ...
//    ...
//    #include IntInitSession.vpp // Захват контекста 'IntInit'
//    ...
//------------------------------------------------------------------------------

var IntInitSession: IContextSession;

function CaptureIntInitContext: boolean;
{
  var CL: ContextList;
  InitContextSessionOwner;
  Result := CL.Add(IntInitSession, 'IntInit');
}

HandleEvent
  cmInit:
  {
    if not CaptureIntInitContext
      abort;
  }

  cmOnVipLoad:
  {
    if not CaptureIntInitContext
      abort;
  }
end;
как использовать define

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

#define test_rep
...
#ifdef test_rep
   logstrtofile('!test_rep.log','?????????')
#ELSE
#END

Re: Протокол сообщений: возможность отключения.

Добавлено: 08 авг 2014, 19:40
Irina_
Файл я тоже искала в папке FRM по архивам, но не нашла. Получила файл из ОТП, компиляция прошла, но то, что посоветовал Screw, не помогло. Пробовала ставить ShowErrors в разных местах, но ничего этим не добилась. Сейчас появилась мысль, что, скорее всего это из/за того, что главная таблица обхода не табеля. На основе начислений отчетного месяца я заполняю таблицу в памяти, в которой записи по сотрудникам, у которых были начисления в отчетном месяце. Причем, если по сотруднику начисления были только за один месяц (период), то он будет в таблице 1 раз, если за разные месяцы, то сотрудник в таблице будет более 1 раза. Т.е например, если по сотруднику в 07 мес начисления за 06, 07 и 08 мес., то он будет в таблице 3 раза. После заполнения записи по сотруднику по периоду ЗА который я работаю с табелем этого сотрудника по периоду ЗА который начислено. Поэтому IntInit и ExitProc делаю не один раз, а при изменении сотрудника и периода ЗА который. Протоколы выдавались на работниках в середине обработки, на последнем протокола не было. Видимо поэтому ShowErrors ничего не дала, т.к. последний тн не был проблемным.
Поэтому вопрос: IntInit и ExitProc в интерфейсе в моем случае обхода надо делать один раз или как сделала я – несколько раз? Ранее я один раз при написании другого отчета работала с табелями, но тогда обход был по табелям и IntInit и ExitProc я ставила один раз – перед началом обхода и после окончания обхода.
А вообще я нашла проблемных сотрудников и причины проблемы у них оказались разными.
1. У сотрудника были начисления за 07 мес., но по режиму, по которому он работает, не был сформирован график . Поэтому при просмотре табеля в Галактике непонятно, по какому фонду рассчиталась з/п.
2. У сотрудника рассчитана з/п, начисления только за отчетный 07 мес. Но в отпусках будущего периода лежит отпуск без расчета, приходящийся на 08 и 09 мес. По режиму работы этого сотрудника графики на 08 и 09 мес еще не формировались.
3. 2 сотрудника находятся в отпусках по уходу за ребенком до 3 лет. В табелях ОЖ на весь месяц. Но в архиве оплат до ..2016 г. стоит отпуск без сохранения з/п. Думаю, это связано с настройкой классификатора отпусков. Не знаю, по какой причине на данный отпуск привязали ВО «Административный отпуск за свой счет», это кто-то делал до меня.

Re: Протокол сообщений: возможность отключения.

Добавлено: 09 авг 2014, 11:04
edward_K
достаточно в начале запуска фейса(cmInit) вызвать IntInit и при его закрытии(cmDone) ExitProc. ExitProc и приводит к показу протокола
Для табеля впрочем есть свои функции - InitWorkingTable , DoneWorkingTable - их не достаточно? Также достаточно вызвать по разу.
вопросы по сопровождению задавайте в другой ветке.
Помниться мне приходилось в кл.отпусков ставить во с пользовательским алгоритмом с 0 в формуле - иначе шло какое то левое начисление. Мож в вашем случае сделано тоже самое, но не до конца.

Re: Протокол сообщений: возможность отключения.

Добавлено: 11 авг 2014, 15:47
Irina_
Здравствуйте.
Edward_K, спасибо за внимание к моей проблеме. Собственно вопросов по сопровождению я не задавала, а привела только причины, по которым сотрудники попали в протокол сообщений об ошибках. То, что не был введен график за отчетный месяц – это вопрос к пользователю. Мне до сих пор не понятно, почему графики на предприятии не вводятся сразу на год, ведь думаю, что они нужны, так или иначе, и при расчете отпусков будущего периода и при расчете б/л по БиР (хотя с прошлого года их расчет в РБ уже по календарным дням, а до этого был по рабочим часам). Но, если я правильно поняла, на предприятии много сменных и индивидуальных графиков, возможно пользователю проще ввести график за отчетный месяц перед формированием табелей. Но я считаю, что правильно вводить сразу на год. По поводу формирования ВО «Административный отпуск за свой счет» при вводе отпуска по уходу за ребенком до 3 лет. Тоже считаю, что это неправильно. И у меня есть подозрения, на что это может повлиять. И ведь еще может быть досрочный выход из отпуска по уходу, тогда в архиве оплат окажется мусор.

А теперь по теме. Я читала http://tyumbit.ru/gal_forum/viewtopic.php?f=2&t=5727. Там использовались и IntInit / ExitProc и InitWorkingTable / DoneWorkingTable. Поэтому сделала так же и у себя. Как только я перенесла указанные «процедурные скобки» и они реально стали использоваться один раз (а не вызываться каждый раз при изменении NREC л/сч или периода ЗА который), я получила вывод протокола с сообщениями об ошибках только один раз – в конце. Еще раз большое СПАСИБО за помощь!

P.S. Протокол вообще лишний, неинформативный, даже не выводятся тн, по которым инфо в протоколе. Т.е. пользователю он ничего не скажет. Но то, что он сейчас выводится только один раз, уже хорошо.