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

Количество рабочих часов в смесяц

Добавлено: 28 ноя 2006, 16:13
savov
Будьте добры, подскажите, кто знает быстрое решение. Надо в випе получить значение "число рабочих часов в месяц". Ну есть , например, январь. По закону определили выходные и праздники. Надо все рабочие часы (с учетом сокращения на 1 час перед праздниками, без праздников и выходных) получить. Как быстрее всего?
Еще раз : получить число рабочих часов в любом месяце (с учетом праздничных и выходных) в випе.

Добавлено: 29 ноя 2006, 10:29
edward_K
1.В клас.видов оплат на алгоритме - F3 - F4 - F3
там есть функция wt_ghbd и расписаны ее параметры
2.чтобы ее использовать нужно перед вызовом сделать
InitWorkingTable ;
.....
LoadWorkingTable(vvv.LSTAB.CLSCHET, vvv.LSTAB.MESN, vvv.LSTAB.YEARN);
после
DoneWorkingTable ;
вообще функций хватает - но вот документация есть только на упомянутую - в силу объявления ее для общего использования.

Добавлено: 29 ноя 2006, 10:33
Riman
Присоединяюсь, плюс хотелось бы плановые и фактические дни по работникам вытащить. Очень надо!!!!

Добавлено: 29 ноя 2006, 10:35
edward_K
а вобще , если нужны плановые часы, берете таблу klndr и считаете в ней часики. С табелем могет быть чуть сложнее - но тоже решаемо.
Но если хотите тождествености с печатью табеля, то лучше использовать упомянутое. К слову при печати самого табеля сие использовать незя - поскоку результат будет не предсказуем. Как вариант можно в форме накопить данные по людям во времянку и потом в отдельном цикле подтянуть недостающие данные.

Добавлено: 29 ноя 2006, 14:21
Riman
а функцией типа WT_GetDaysBwDates(?, ?, Date(01,01,2006), Date(01,06,2006)) возможно в lnk-форме воспользоваться? у меня не получается... :-(

Добавлено: 29 ноя 2006, 14:57
edward_K
можно на тех же условиях.
1. форма никак не связана с табелем
2. InitWorkingTable ;
.....
LoadWorkingTable(vvv.LSTAB.CLSCHET, vvv.LSTAB.MESN, vvv.LSTAB.YEARN);
присутствует
3. параметры вы правильно написали.
вообще зайдите в редактирование табеля и попробуйте ее вычислить по ctrl+F4 - там условие 2 уже выполнено.
WT_GetDaysBwDays(2,1,1,31) - факт отработанно
WT_GetDaysBwDays(2,0,1,31) - план
также и
WT_GetDaysBwDates(2,0,date(1,3,2006),date(31,5,2006))

Добавлено: 30 ноя 2006, 08:39
Riman
WT_GetDaysBwDates в табеле работает.
в отчете (Заработная плата - Отчеты - Дополнительная информация - Справка о начислениях за год) нет. Как узнать, эта форма связана с табелем или нет?

Добавлено: 30 ноя 2006, 10:16
savov
Насчет klndr - не получится, там рабочие и выходные согласно графика!!! т.е. у нас работают не совсем (совсем не) по календарю, в выходные могут работать и наоборот. А мне надо именно по законному календарю, т.е. пятидневка , суб и вс - выходные + Гос. праздники с учетом сокращения на час перед праздником.
А упомянутые ф-ии работают в випе? НЕ в присоединенной, не в Арде, а именно в випе.

Добавлено: 30 ноя 2006, 10:35
edward_K
везде они работают, сию конкретную не пробовал правда
- extfun.res тока не забудьте подцепить.
по поводу табеля, если есть данные о отработанном времени, длительности отпусков или неявок, то наиболее вероятно что сии функции там задействованы. Для начала попробуйте на простой АРД по челу вытащить данные. Не поможет - откройте фейс лицевые счета и снова попробуйте. Если да, то добавте еще IntInit, а на выходе exitproc.

Добавлено: 30 ноя 2006, 10:57
edward_K
а кто мешает вам посчитать дни и часы по 11 режиму в klndr, который должен точно соответсвовать законому?

Добавлено: 30 ноя 2006, 11:11
savov
Скорее всего придется считать именно по 11 режиму, т.к. ничего другое не подходит, ибо только 11 соответствует законному !
Я просто думал, что может есть что-то более изящное...

Добавлено: 30 ноя 2006, 11:25
edward_K
есть еще
function CalcDaysBetweenDates (aDateFrom,
aDateTo : date;
aMinusNonWorkDays : Boolean
) : integer;
Параметры

aDateFrom : date - нижняя граница диапазона дат.

aDateTo : date - верхняя граница диапазона дат.

aMinusNonWorkDays : boolean - признак, исключающий из диапазона дат нерабочие дни (true - исключать, false - не исключать).

- насчет праздников тока не уверен, выкинет или нет.

Добавлено: 01 дек 2006, 13:50
Riman
Пробовал так:

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

.begin
   KolWorkDaysPlan := 0;
   KolWorkDaysFact := 0;
   dkWorking := word(2);
   //количество дней, которые сотрудник должен отработать(план)
   IntInit;
   InitWorkingTable;
   KolWorkDaysPlan:=  WT_GetDaysBwDates(2, 0, Date(1,1,2006), Date(1,6,2006));
   //количество дней, которые сотрудник отработал фактически
   KolWorkDaysFact:=  WT_GetDaysBwDates(2, 1, Date(1,1,2006), Date(1,6,2006));
   DoneWorkingTable;
   exitproc;
   message('Plan='+String(KolWorkDaysPlan)+';  Fact='+String(KolWorkDaysFact));
end.
Выдает нули.... что делать? ОЧЕНЬ нужны эти дни!
ПОМОГИТЕ!

Добавлено: 01 дек 2006, 14:04
Riman
Понял... Пропустил LoadWorkingTable(vvv.LSTAB.CLSCHET, vvv.LSTAB.MESN, vvv.LSTAB.YEARN);
где
vvv.LSTAB.CLSCHET = LSCHET.nrec,
а что означают vvv.LSTAB.MESN и vvv.LSTAB.YEARN ??

Добавлено: 01 дек 2006, 14:05
edward_K
а кто будет делать
LoadWorkingTable(vvv.LSTAB.CLSCHET, vvv.LSTAB.MESN, vvv.LSTAB.YEARN); ?