Получение базы премии

1. khabibullin.tu 95 15.08.18 20:14 Сейчас в теме +10 $m
Коллеги, очень нужна помощь знающих ЗУП 3.1. В регистре расчета есть запись с рассчитанной премией. Каким образом можно получить программно базу по этой строке ?

Читал в интернете про виртуальную таблицу "База" регистра расчета, но не понял как ей пользоваться
+
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
20. Timur.V 78 16.08.18 09:37 Сейчас в теме
(1)
Настройка - Начисления - Премия
смотрим формулу, если возможно

Далее,
Настройка - Начисления - Создать -
назначение - Прочие начисления и выплаты
формула - РасчетнаяБаза
закладка Расчет базы - Премия (выбрать из списка)

Назначьте это начисление сотруднику и посмотрите цифры. Если нужно изменить цифры - меняйте в новом начислении формулу.
+
58. CHELLL 53 05.09.18 00:29 Сейчас в теме
(1) автор темы, нашел для себя оптимальный выход из ситуации?
+
59. khabibullin.tu 95 05.09.18 08:04 Сейчас в теме
(58) Приходится получать начисления за базовый период, считать их по формулам и сравнивать с премией, если совпадает то пересчитывается по другому алгоритму, иначе выводится ошибка о невозможности пересчета
+
2. khabibullin.tu 95 15.08.18 21:11 Сейчас в теме
Или такое вообще невозможно ? Сердце чует, что можно как-то просто решить эту задачу
+
4. Cooler 22 15.08.18 23:09 Сейчас в теме
(2)
Сердце чует, что можно как-то просто решить эту задачу
Ага, проще некуда: сумму премии разделить на процент премии и умножить на 100 - профит!
+
5. khabibullin.tu 95 15.08.18 23:22 Сейчас в теме
(4) Это ничего не даст, мне нужна именно база в разрезе всех начислений, на которые накручена премия
+
3. khabibullin.tu 95 15.08.18 22:54 Сейчас в теме
Коллеги, ну хоть кто-нибууууууудь знает ?
+
6. DarkUser 16.08.18 00:14 Сейчас в теме
Какая точно версия конфигурации ЗУП 3.1 и как называется регистр расчета в котором есть искомая запись?
+
7. khabibullin.tu 95 16.08.18 00:26 Сейчас в теме
(6) Версия ЗУП ПРОФ - самая последняя, регистр расчета - "Начисления"
+
8. shnurov 16.08.18 02:37 Сейчас в теме
Я базу получал используя механизмы расчета. Конфигуратор в руки и разбирайтесь как в зупе происходит расчет. В кратце могу сказать что вызывается обработка "МенеджерРасчетаЗарплаты", подготавливаются данные, и вызывается процедура расчета, возвращаются расчетные данные в том числе и база если она есть в начислении. Все это можно посмотреть в любом документе расчета, премия, разовые, начисление зп и др.
Ниже пример кода
		УстановитьПривилегированныйРежим(Истина);
		НачатьТранзакцию();	
		МенеджерРасчета=РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(Объект.ПериодРегистрации, Объект.Организация);
		МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления=Истина;
		МенеджерРасчета.ИсключаемыйРегистратор=Объект.Ссылка;
		СотрудникиДляНачислений=МенеджерРасчета.ТаблицаСотрудников();
		СотрудникиДляРассчета=Новый Массив;
		Пока ВыборкаСотрудник.Следующий() Цикл
			СотрудникиДляРассчета.Добавить(ВыборкаСотрудник.Сотрудник);
			НоваяСтрока=СотрудникиДляНачислений.Добавить();
			НоваяСтрока.Сотрудник=ВыборкаСотрудник.Сотрудник;
			НоваяСтрока.ДатаНачала=Объект.ПериодРегистрации;
			НоваяСтрока.ДатаОкончания=ВыборкаСотрудник.ДатаОкончания;			
		КонецЦикла;		
		МенеджерРасчета.НастройкиРасчета.Сотрудники=СотрудникиДляРассчета;						
		ОтборМенеджераРасчета=МенеджерРасчета.СоздатьОтборы();
		ОтборМенеджераРасчета.Подразделение=Объект.Подразделение;
		МенеджерРасчета.ЗаполнитьНачислениеЗарплаты(СотрудникиДляНачислений, ОтборМенеджераРасчета);
		МенеджерРасчета.РассчитатьЗарплату();
		ОтменитьТранзакцию();	
		УстановитьПривилегированныйРежим(Ложь);
Показать


Далее нужная вам таблица
МенеджерРасчета.Зарплата.Начисления

ее анализируете.
Roootru; Ululu; Nelli_A86; +3
9. Stref75 16.08.18 06:16 Сейчас в теме
(8) надо взять на заметку!
+
10. khabibullin.tu 95 16.08.18 08:04 Сейчас в теме
(8)
Пока ВыборкаСотрудник.Следующий() Цикл
СотрудникиДляРассчета.Добавить(ВыборкаСотрудник.Сотрудник);
НоваяСтрока=СотрудникиДляНачислений.Добавить();
НоваяСтрока.Сотрудник=ВыборкаСотрудник.Сотрудник;
НоваяСтрока.ДатаНачала=Объект.ПериодРегистрации;
НоваяСтрока.ДатаОкончания=ВыборкаСотрудник.ДатаОкончания;
КонецЦикла;


Вот это что-то интересное, сейчас посмотрю эту обработку
+
11. shnurov 16.08.18 08:08 Сейчас в теме
(10) Не обработку нужно смотреть, а как подготавливаются данные и скармливается данные обработке. Ну правда если вы любитель разбирать код от 1с то пожелаю вам удачи ).
+
12. khabibullin.tu 95 16.08.18 08:16 Сейчас в теме
(11) Понял, спасибо )) Всё же меня гложет чувство, что возможно как-то легче решить эту задачу ... или не нужно мечтать ? )))
+
13. shnurov 16.08.18 08:41 Сейчас в теме
(12)Вряд ли, расчетная база это расчетный параметры, который должен рассчитаться на основании других начислений, которые в свою очередь должны быть рассчитаны. И на сколько мне известно регистры расчета не полностью задействованы, и через них базу не получишь, т.е. в зуп 3 расчет идет кодом, а не механизмом регистров, но тут я могу ошибаться.
+
14. khabibullin.tu 95 16.08.18 09:07 Сейчас в теме
(13) Так может есть какая то экспортная функция, которая бы вернула для конкретной строки расчетную базу, я именно про это говорю, вот сейчас ищу ее ))
+
15. shnurov 16.08.18 09:11 Сейчас в теме
(14)МенеджерРасчета это и есть ваша функция. Если вы обратили внимание то в моем примере идет расчет всей зп. Я определял расчетную базу для планового начисления, для не планового начисления нельзя задать расчетную базу в текущем месяце. Поэкспериментируйте, создайте начисление которое разовое и попробуйте указать ему базу.
+
16. khabibullin.tu 95 16.08.18 09:23 Сейчас в теме
(15) К сожалению, судя по вашему коду, результат в виде расчетной базы по начислениям получен не будет, т.е.

Есть премия, нужно получить расчетную базу по показателям, в вашем коде можно получить просто итоговое число - расчетная база, а мне необходимо получить расчетную базу прямо в разрезе начислений, из которых она состоит
+
17. shnurov 16.08.18 09:26 Сейчас в теме
(16) Вы много пишите, но мало делаете. Попробуйте в коде, а там все увидите. Я дал то что вам нужно и то что работает у меня, там есть все показатели в т.ч. и расчетная база.
+
18. khabibullin.tu 95 16.08.18 09:32 Сейчас в теме
(17) Еще раз: мне не нужна расчетная база, мне нужно знать из каких сумм она сложилась, в типовом функционале в документах расчета расчетная база хранится просто в виде числа, из этого я делаю вывод, что в результате выполнения вашего кода я получу просто число или это не так ?
+
19. shnurov 16.08.18 09:36 Сейчас в теме
(18)Что такое расчетная база?
+
21. Timur.V 78 16.08.18 09:39 Сейчас в теме
(19) расчетная база - это сумма от которой считается премия.
можно в яндексе ещё посмотреть.
+
23. shnurov 16.08.18 09:44 Сейчас в теме
(21)Это неверный ответ.
+
22. khabibullin.tu 95 16.08.18 09:42 Сейчас в теме
(19) Это база на основании которой посчитана премия, мне нужно ее получить не в виде числа, а в виде начислений

Например
Была начислена премия - 50.000

Начисляется она как 100% от сложения двух показателей за прошлый месяц (Оклад + Надбавка)

Т.е. я хочу получить такую таблицу

Оклад за прошлый месяц - 30.000
Надбавка за прошлый месяц - 20.000
+
24. Timur.V 78 16.08.18 09:54 Сейчас в теме
(22) А дальше, что будете делать с этими цифрами?
+
25. shnurov 16.08.18 09:54 Сейчас в теме
(22) Это так же неверный ответ. Расчетная база это сумма начислений входящих в расчетную базу за выбранный период. Нет начисления оклад, если начисление оплата по окладу. И если оклад 20 тыс., а сотрудник отработал 19 дней, вместо 20 по норме, то он получит не 20 тыс., а 20 000 * 19/20 = 19 000. Т.о. расчетная база от начисление оплата по окладу будет 19 000. Чтобы узнать расчетную базу от начисления оплата по окладу программа должна его рассчитать. То же самое касается вашей надбавки.
Если вы не понимаете этих принципов о чем с вами можно говорить.
+
27. khabibullin.tu 95 16.08.18 09:58 Сейчас в теме
(25)
Это так же неверный ответ. Расчетная база это сумма начислений входящих в расчетную базу за выбранный период. Нет начисления оклад, если начисление оплата по окладу. И если оклад 20 тыс., а сотрудник отработал 19 дней, вместо 20 по норме, то он получит не 20 тыс., а 20 000 * 19/20 = 19 000. Т.о. расчетная база от начисление оплата по окладу будет 19 000. Чтобы узнать расчетную базу от начисления оплата по окладу программа должна его рассчитать. То же самое касается вашей надбавки.
Если вы не понимаете этих принципов о чем с вами можно говорить.


Вы придираетесь к словам, оклад и надбавка уже рассчитаны, мне не нужно их считать, мне нужно получить программно какие суммы оклада и надбавки программа использовала при расчете премии, если вы не знаете как решить эту задачу то о чем с вами можно говорить
+
28. shnurov 16.08.18 10:05 Сейчас в теме
(27)
оклад и надбавка уже рассчитаны
кем? Пришельцами с нибиру? У вас начисление плановое или нет? Расчетная база за текущий месяц или предыдущие периоды?
Да вообщем, о добра добра не жди, неудачи вам.
+
29. khabibullin.tu 95 16.08.18 10:07 Сейчас в теме
(28) Ответы на все вопросы я писал неоднократно выше, неудачи и вам
+
26. Timur.V 78 16.08.18 09:56 Сейчас в теме
(22) Вы формулу расчета премии уже знаете или ещё нет?
Это премия типовая или у вас своя?
+
30. khabibullin.tu 95 16.08.18 10:16 Сейчас в теме
(26) Накручиваешь стартмани ?)))
31. Timur.V 78 16.08.18 10:23 Сейчас в теме
(30) Зарабатываю ))

Ответ (20) помог?
+
35. khabibullin.tu 95 16.08.18 11:04 Сейчас в теме
(31) Молодец !

Нет, не помог :)
+
32. azali 16.08.18 10:48 Сейчас в теме
(30)
Если в общем (нужные поля отберете) , без учета за какой период базы , то как-то так

ВЫБРАТЬ
	НачисленияБазовыеВидыРасчета.ВидРасчета КАК расчет
ПОМЕСТИТЬ ВТРасчеты
ИЗ
	ПланВидовРасчета.Начисления.БазовыеВидыРасчета КАК НачисленияБазовыеВидыРасчета
ГДЕ
	НачисленияБазовыеВидыРасчета.Ссылка = &Ссылка
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ
        Начисления.ПериодДействия КАК ПериодДействия,
	Начисления.ПериодДействияНачало КАК ПериодДействияНачало,
	Начисления.ПериодДействияКонец КАК ПериодДействияКонец,
	Начисления.БазовыйПериодНачало КАК БазовыйПериодНачало,
	Начисления.БазовыйПериодКонец КАК БазовыйПериодКонец,
	Начисления.Сотрудник КАК Сотрудник,
	Начисления.ФизическоеЛицо КАК ФизическоеЛицо,
	Начисления.СторноТекущегоПериода КАК СторноТекущегоПериода,
	Начисления.Результат КАК Результат,
	Начисления.ОтработаноДней КАК ОтработаноДней,
	Начисления.ОтработаноЧасов КАК ОтработаноЧасов,
	Начисления.РезультатВТомЧислеЗаСчетФБ КАК РезультатВТомЧислеЗаСчетФБ,
	Начисления.ГрафикРаботы КАК ГрафикРаботы,
	Начисления.ВидУчетаВремени КАК ВидУчетаВремени,
	Начисления.ВремяВЧасах КАК ВремяВЧасах,
	Начисления.ГрафикРаботыНорма КАК ГрафикРаботыНорма,
	Начисления.Организация КАК Организация,
	Начисления.ФиксСтрока КАК ФиксСтрока,
	Начисления.ФиксЗаполнение КАК ФиксЗаполнение,
	Начисления.ФиксРасчетВремени КАК ФиксРасчетВремени,
	Начисления.ФиксРасчет КАК ФиксРасчет,
	Начисления.ФиксСторно КАК ФиксСторно,
	Начисления.РасчетнаяБазаЗаЕдиницуНормыВремени КАК РасчетнаяБазаЗаЕдиницуНормыВремени,
	Начисления.ИдентификаторСтроки КАК ИдентификаторСтроки,
	Начисления.ПериодРегистрацииВремени КАК ПериодРегистрацииВремени,
	Начисления.ПериодРегистрацииНормыВремени КАК ПериодРегистрацииНормыВремени,
	Начисления.ДоляРезультата КАК ДоляРезультата,
	Начисления.Месяц КАК Месяц,
	Начисления.ДокументОснование КАК ДокументОснование,
	Начисления.СторнируемыйДокумент КАК СторнируемыйДокумент,
	Начисления.ГоловнойСотрудник КАК ГоловнойСотрудник,
	Начисления.ОбщийГрафик КАК ОбщийГрафик,
	Начисления.Перерасчет КАК Перерасчет
ИЗ
	РегистрРасчета.Начисления КАК Начисления
ГДЕ
	Начисления.ВидРасчета В
			(ВЫБРАТЬ
				ВТРасчеты.расчет
			ИЗ
				ВТРасчеты)
	И Начисления.Сотрудник = &Сотрудник
Показать
+
33. khabibullin.tu 95 16.08.18 10:56 Сейчас в теме
(32) Это самый очевидный вариант и я думал насчет него )) Но если после расчета премии вдруг корректировались начисления которые составляли базу, то результат запроса будет неверный, мне бы как нибудь получить данные именно на момент расчета премии
+
34. khabibullin.tu 95 16.08.18 10:57 Сейчас в теме
(33) Некие процедуры и функции похожие по коду на то, что мне нужно - я нашел, пытаюсь их сейчас курить
+
36. vadim1011985 99 16.08.18 12:03 Сейчас в теме
(33) Интересно , как можно получить базу на момент расчета премии если была корректировка , допустим был у сотрудника оклад 10 000 рассчиталась премия , далее по какой-то причине (например забыли ввести больничный) его оклад уменьшился , в регистрах уже лежат обновленные данные , т.е. при попытке достать базу , вы все равно получите обновленные данные а не те с которых считалась премия
yulia-sap; +1
38. khabibullin.tu 95 16.08.18 12:18 Сейчас в теме
(36)
(37)
Всё же ЗУП 3.1 очень монструозное решение, я уверен, что на этот случай есть выход )))
+
39. vadim1011985 99 16.08.18 12:28 Сейчас в теме
(38) можно получить примерную (но не точную) базу в разрезе начислений - в документе премии есть колонка с базой с которой рассчиталась премия - запросом из (32) собираете базу и сравниваете с ранее рассчитанной если разница 0 то база не менялась если разница не равно 0 то эту разницу раскидываете в процентном соотношении между начислениями сформировавшими эту базу
+
41. khabibullin.tu 95 16.08.18 12:30 Сейчас в теме
(39) Этот вариант мне пришёл в голову самым первым, но я думаю есть всё таки типовая возможность узнать базу, ну очень это странно если такой возможности в ТАКОЙ конфигурации нет
+
42. vadim1011985 99 16.08.18 12:33 Сейчас в теме
(41) почему странно ? Это логично - зачем хранить старую базу ? Это экономия ресурсов
+
43. khabibullin.tu 95 16.08.18 12:35 Сейчас в теме
(42) А зачем мы храним журнал регистрации ? Версии объектов ? Или это тоже странно ? ))
+
44. vadim1011985 99 16.08.18 12:45 Сейчас в теме
(43) Это служебная информация , для отслеживания действий пользователей и контроля которая не влияет на расчет и на случай восстановления первоначального состояния документов , а база премии это расчетная величина которая зависит от других начислений на момент расчета и тут важна именно актуальность расчета а не история
+
45. khabibullin.tu 95 16.08.18 13:11 Сейчас в теме
(44) Ну вот а мне важна история, а если это кому-то нужно то это не странно
+
46. vadim1011985 99 16.08.18 13:51 Сейчас в теме
(45) Если так важно делайте через расширение конфигурации , при расчете премии сохраняйте базу начислений в какой-нибудь файл (xml,dbf или еще куда) вот вам и история
+
49. yulia-sap 16.08.18 14:24 Сейчас в теме
(45) Если рассуждать как Вы, то программа должна хранить подробные данные расчета каждого начисления. (Вам премия нужна, а кто-то может быть захочет увидеть какие начисления вошли в расчет среднего за каждый месяц). Нет смысла хранить такой огромный объем причем неактуальных данных.
+
50. khabibullin.tu 95 16.08.18 14:30 Сейчас в теме
(49) Это для вас нет смысла, не обобщайте. Будь такой функционал - я бы им сейчас воспользовался и не парился бы
+
51. СергейКа 669 16.08.18 18:46 Сейчас в теме
(50) Вау сколько здесь уже нафлудили ))
А по сути вопроса: простого пути конечно нет или я его не знаю.
Но есть следующие варианты:
Вы знаете формулу расчета, значения показателей хранятся в регистре сведений - ЗначенияПоказателейНачислений. Посчитать я думаю труда не должно составить?
Теперь остается вопрос что делать с корректировками?
Действительно, на текущий момент предыдущие значения не хранятся. Когда платформа сможет делать версионирование (уже есть в последних релизах) можно будет воспользоваться, а пока можно использовать сторонние решения.
Однако если сейчас не используется - вариант тоже есть.
В документах хранится информация о том что такие то строки были скорректированы вручную. Соответственно полный расчет базы будет выполняться по следующим шагам:
1. Получаем значения показателей по формуле с документом расчета.
2. В документе проверяем корректировалась ли сумма.
3.1 Если нет, то просто берем показатель.
3.2 Если да, то скармливаем функции расчета в документе по кому считать и указываем что корректировки учитывать не нужно. Получаем показатель.
4. Выводим показатели.

Здесь нужно покодить конечно ))
Опять же, нужно учитывать нюансы: мы не знаем от какого показателя считалось начисление (от скорректированого или нет). Поэтому придется делать циклически: считаем как есть, сверяем итоговую сумму. Если совпало - профит. Нет - значит были корректировки, делаем расчет с их учетом.

В общем если есть задача и желание, решить ее можно.
+
37. yulia-sap 16.08.18 12:03 Сейчас в теме
(33)
мне бы как нибудь получить данные именно на момент расчета премии

Не думаю, что они где-нибудь хранятся прямо таблицей. Она существует только во время расчета премии.
Если у Вас "корректировались начисления", то по хорошему и рассчитанную от неверной базы премию тоже надо пересчитать.
+
40. khabibullin.tu 95 16.08.18 12:28 Сейчас в теме
(37) Очень будет жаль, если это так
+
47. azali 16.08.18 14:07 Сейчас в теме
(40)
Не нашла, чтобы в базе где-то хранилась информация (процедуры) о составе базы для расчета начислений у которых показатель это расчетная база.

Откуда такая задача ?
+
48. khabibullin.tu 95 16.08.18 14:18 Сейчас в теме
(47) У нас премия должна учитываться в среднем заработке не полностью, т.е. например премия начислена на оклад и надбавку, премия по окладу должна учесться полностью на оклад и пропорционально отработанных дням на надбавку, НО только у тех кто был в командировке, у всех остальных должна учитываться полностью.

Для решения этой задачи, при расчете среднего заработка, мне нужно знать базу премии в разрезе начислений. Ну и конечно оклад и надбавка это для понимания, у нас пару десятков начислений входит в базу
+
52. СергейКа 669 16.08.18 20:48 Сейчас в теме
(48) Кстати, в действительности не совсем понятно зачем базу премии по начислениям считать?
Не проще ли будет правильно настроить формулу для вида расчета и брать расчет из нее?
+
53. khabibullin.tu 95 16.08.18 20:56 Сейчас в теме
(52) Может и проще, подскажите как, если знаете, я не нашел типовой возможности чтобы одно и тоже начисление считалось по разному для тех кто был в командировке и тех кто не был, конкретно про премию говорю
+
54. СергейКа 669 16.08.18 21:18 Сейчас в теме
(53) Вариантов может быть несколько. Вот например можно сделать так:
1. Вводим новый показатель - Командировка.
2. Настраиваем формулу премии: Оклад + ?(Командировка = 0, Надбавка, Надбавка - Надбавка*(НормаДней - ОтработаноДней))
3. Настраиваем показатель - Для сотрудника, Числовой, Только в месяце в котором вводится значение, Вводится единовременно документом ввода данных для расчета зарплаты.
Далее можно сделать либо расширение, которое при проведении командировки будет вводить документ с показателем 1 для данного сотрудника. Либо обработка, которая перед проведением премии пробежится по командировкам и сделает то же самое.

Тут уж на ваш вкус. Возможно еще какие то нюансы нужно учитывать, но я их просто не знаю. Но описанная схема вполне рабочая. Делается не дольше чем я это описывал )
+
55. khabibullin.tu 95 16.08.18 21:37 Сейчас в теме
(54) Это конечно тоже вариант, но представьте, что начислений не 2, а 20 ?
+
56. СергейКа 669 16.08.18 21:41 Сейчас в теме
(55) Разница только в одном - больше показателей в формуле. Я не думаю что перечисление в ней начислений даже 20 займет более 10 минут. Как я понял у вас затык только в том как подставить в формулу был ли сотрудник в командировке. Я предложил вариант. А формулу вы уже корректируете под потребности, хоть проценты считаете, хоть логарифмы. Это все равно делается только один раз, потом все считается автоматически.
+
57. azali 17.08.18 09:23 Сейчас в теме
(55)
У нас премия должна учитываться в среднем заработке не полностью,

Период действия не будем рассматривать, считаем что премия ежемесячная.
Согласно п. 922 премия учитывается неполностью если она выплачена без учета отработанного времени. В этом случае премия должна быть учтена согласно доле отработанного времени.
Если вы выплачиваете премию на время командировки, то эта премия в принципе не должна входить в средней ( согласно тому же п.922)

Может стоит создать два вида премии . Одну за время командировки,которая не будет входит в средний.
M.Flint; +1
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот