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

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

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

edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

что, что
месяц и год за который табель инициализируем
в вашем случае возьмите месяц и год от даты начала
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

Имеем табель.
Изображение
Пытаюсь подсчитать количество часов работы в выходные с помощью WT_GetHours(HourKind, 1). Подставляю вместо HourKind значения от 1 до 31, получаю такие результаты:

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

1 |186.00
2 |0.00
3 |0.00
4 |0.00
5 |0.00
6 |13.00
7 |1.00
8 |0.00
9 |0.00
10|186.00
11|182.00
12|186.00
13|0.00
14|0.00
15|0.00
16|0.00
17|0.00
18|182.00
19|0.00
20|0.00
21|186.00
22|0.00
23|0.00
24|0.00
25|186.00
26|0.00
27|0.00
28|0.00
29|0.00
30|0.00
31|0.00
Вопросы: а где эти самые 4 часа? как вывести количество часов работы в выходные, не прибегая к ковырянию таблицы LSTAB?
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

посмотрите в документации wt2.chm
Войдите в табель конкретного человека и повычисляйте по Ctrl+F4 - должно работать, в табеле же работает :). Скорей всего вы не для того человека вычисляли.
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

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

Сообщение Irina_ »

По Ctrl+F4 выдает значение, а не поле, где оно хранится.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

1. Вопрос был по поводу функции и в табеле она прекрасно работает - можно вычислять все, что доступно, а не только значение полей
2. Если поле не показывает, то всегда есть getifccurrentfieldname и редактор свойств в конфигураторе. А далее еще есть шанс посмотреть в консоле управления что же там на самом деле выводится.
3. Имхо журнал надежней, но речь о функции.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

edward_K писал(а):посмотрите в документации wt2.chm
Естественно, смотрел и считал как WT_GetHours(4, 1)+WT_GetHours(5, 1), однако, выяснилось, что выдаётся 0.
edward_K писал(а):Скорей всего вы не для того человека вычисляли.
Того-того. Вон, сверхурочка же 13+1 (коды HourKind 6 и 7) правильно показывается.
edward_K писал(а):повычисляйте по Ctrl+F4
Это мне не нужно: я и так знаю, где циферки лежат. :grin: Хотелось бы не применять запросы к LSTAB, а вычислить при помощи функций из wt2.chm.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

ну тут видимо зависит от способа хранения и похоже в этой функции действительно ошибка.
В табеле итоги формируются как
WT_GetHoursBwDays(STOTALS.HOURKIND, 0, 0, stActual, 1, 31);
STOTALS.HOURKIND можете конфигуратором вывести.
Кстати. Если перехватите
procedure IWTContainerItem.ReRead;
в

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

#component "z_wt"
alter interface WTTotals
  ( '')
;
  overload
    procedure  IWTContainerItem.ReRead;
    function GetColor: integer;
    
  end;
то можно добавить свои итоги. Я например сделал вывод по половинам месяца, а также отнимал для пары отклонений рабочие часы.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

edward_K писал(а):WT_GetHoursBwDays(STOTALS.HOURKIND, 0, 0, stActual, 1, 31);
:cool: WT_GetHoursBwDays(5, 0, 0, 1, 1, 31) = 4. Жаль, плюсануть не получается...
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

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

Сообщение Irina_ »

Здравствуйте. Возникла необходимость по сотрудникам за определенный месяц найти дни и часы по плану и дни и часы, отработанные фактически. Это получилось. Но надо дополнительно проанализировать отклонения, в частности ремонт (дни и часы), когда вместо основной оплаты идет оплата времени на ремонте. Для этого, если я правильно поняла, используются :

function WT_LoadMonthlyAbsences: integer;

function WT_GetMonthlyAbsenceCount: integer;

Далее в цикле по полученному количеству неявок пробегаем неявки. Анализируем условное обозначение неявки с помощью
function WT_GetMonthlyAbsenceAttribute( AbsenceNumber: integer; Attr: word; var Value): boolean;

И с ее же помощью определяем нужные дни и часы. Я права?

Вопросы:
1.Приведенные функции работают по одному текущему сотруднику?
2. Процедеру WT_ResetMonthlyAbsences надо использовать один раз после работы с табелями всех сотрудников или же после работы с табелем каждого сотрудника?

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

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

Сообщение Screw »

Вопросы:
1.Приведенные функции работают по одному текущему сотруднику?
2. Процедеру WT_ResetMonthlyAbsences надо использовать один раз после работы с табелями всех сотрудников или же после работы с табелем каждого сотрудника?
1. По одному текущему ТАБЕЛЮ, загруженному с помощью вызова LoadWorkingTable, в пределах указанного в этом вызове месяца.

2. Вызывать WT_ResetMonthlyAbsences не нужно. Вызов LoadWorkingTable автоматически сбросит неявки.
Виталий
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

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

Сообщение Irina_ »

Screw, большое спасибо за ответ.
По в.1 уже сама поняла. Немного помучилась с днями неявок с нужным обозначением – была проблема, которая решилась приведением типов.
По в.2 не совсем понятно. Вы пишите, что вызов LoadWorkingTable автоматом сбросит неявки. Если в цикле по табелям после LoadWorkingTable я использую WT_LoadMonthlyAbsences, далее работаю с неявками, то при обработке последнего табеля, если у него есть неявки, очищения списка неявок по данному табелю не произойдет, т.к. после него не будет вызова LoadWorkingTable - ведь это последний табель. Или я не права?
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

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

Сообщение Screw »

Всё правильно, в конце работы в табельном функционале останется установленный контекст (табель последнего из работников в вашем списке) и список загруженных месячных неявок. Для очистки совести в конце работы можно сбросить неявки.
Виталий
Irina_
Местный житель
Сообщения: 554
Зарегистрирован: 17 июл 2012, 11:56
Откуда: Республика Беларусь, г.Могилев

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

Сообщение Irina_ »

Спасибо, Виталий.
RAJAH
Местный житель
Сообщения: 932
Зарегистрирован: 18 фев 2008, 12:49

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

Сообщение RAJAH »

Приветствую!
Возникла необходимость подсчитать количество отработанных часов в зависимости от разряда работника (меняют, шельмы, разряд в течение месяца, а кое-кому не терпится узнать отработанное время именно в разрезе разрядов). Такого фильтра не нашёл в wt2.chm...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

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

Сообщение edward_K »

Вам придется перебирать периоды работы, а по ним брать данные либ из табеля(если это не тек.месяц, для тек. можно из лиц.счета) для периода с начала месяца или из перехода.
Я делал так

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

Procedure InsTabel(Change:comp);
  WT_ResetFilter;
  // если включено раздельное ведение табелей
  //    if (SeparateTableKeeping)
  // установим фильтр по данному переходу в межпериод
  WT_SetAttributeFilter(wtaChange, Change);
Сие вызывал из пробежки по perexod c perexod.nrec, а потом с 0. Ключевое здесь Change - ищите по описанию. Разряд так понимаю надо тянуть из тарифной сетки.
Ответить