Привет!

В результате изучения различных решений я пришел к выводу, что проще и универсальнее сделать расчет производственной премии следующим образом. Для расчета мне нужны некоторые цифры, а именно среднесписочная численность по МВЗ, производственные показатели, суммы. На первом этапе внедрения механизма мы решили сделать полуавтоматический режим. В этом случае численность и сами сотрудники берутся из BW-HR, производственные показатели пока вводятся вручную (как только настроим модуль PP, то будем тоже брать из BW-PP).

В HR системе делаем правило для формирования вида времени с численностью. В правиле мы считаем, что сотруднику положен бонус, если он не отсутствовал по ряду причин. Искомый вид времени 9BW2. zbw_rule


Создаем вид времени для целей отчетности в кластере ракурсов VC_T557I и присваиваем этот вид времени 9BW2. Теперь система BW может получать данные из этого вида времени. У меня логика простая — человек считается за единицу каждый календарный день, если он трудоспособен.

В системе BW сделан куб, в который загружаются данные из HR в разрезе: сотрудник, МВЗ, календарный день, вид времени. С помощью средств того же BW мы можем подсчитать количество дней между двумя датами. Поэтому сделаны два отчета:

  1. Численность по МВЗ
  2. Список сотрудников по МВЗ

Первый отчет выдает общее количество сотрудников, кому положен бонус. Это наш делитель для общей суммы бонуса. Второй отчет показывает этих сотрудников поименно.

Теперь начинаем творить фокусы. Для фокуса создается отдельная роль в BW, создается отдельная рабочая книга. В этой книге и происходит весь расчет бонуса с помощью формул MS Excel. Иными словами, я загружаю два отчета из BW на один лист Excel. С помощью формул MS Excel рассчитываю бонус. А по кнопке с небольшим VBA кодом формируется выходной файл вида: сотрудник, сумма бонуса. Этот файл и будет загружаться в HR с помощью либо LSMW, либо WinShuttle. Пока что я новичок в BW, поэтому все выглядит немного страшненько, но вот так добавляются два отчета в рабочую книгу. bonus_1
А вот так выглядит кнопка запуска. Поля с датами связаны через ссылки в Excel, что позволяет на одном экране задать параметры фильтров, нажать кнопку, передать параметры в наши отчеты.
bonus_2

Плюс маленький макрос для формирования выходного файла:

Sub Run()
Dim sSheet As Object

Set sSheet = ThisWorkbook.Worksheets(«SAPDATA»)
sSheet.BUTTON_2_Click
sSheet.BUTTON_3_Click

MsgBox («Data was updated»)
End Sub

Sub ExportData()
Dim iSource
Dim iDest

‘ Go through all employees
iSource = 2
iDest = 1

Worksheets(«Export»).Cells.ClearContents

Do While Not IsEmpty(Worksheets(«SAPDATA»).Range(«E» & iSource).Value)
If Round(Worksheets(«SAPDATA»).Range(«E» & iSource).Value, 0) > 0 Then
bonus = getBonus(Worksheets(«SAPDATA»).Range(«B» & iSource).Value)
If bonus > 0 Then
Worksheets(«Export»).Range(«A» & iDest).Value = Worksheets(«SAPDATA»).Range(«A» & iSource).Value
Worksheets(«Export»).Range(«B» & iDest).Value = Worksheets(«SAPDATA»).Range(«B» & iSource).Value
Worksheets(«Export»).Range(«C» & iDest).Value = Worksheets(«SAPDATA»).Range(«C» & iSource).Value
Worksheets(«Export»).Range(«D» & iDest).Value = Worksheets(«SAPDATA»).Range(«D» & iSource).Value
Worksheets(«Export»).Range(«E» & iDest).Value = bonus

iDest = iDest + 1
End If
End If

iSource = iSource + 1
Loop

MsgBox («Data was exported»)
Worksheets(«Export»).Select
End Sub