|
ЗиУП 3.1 Плановые начисления за период | ☑ | ||
---|---|---|---|---|
0
Said_We
29.07.20
✎
13:16
|
Старый стал слепой. Да и ЗиУП 3.х не приходилось внутри сильно смотреть. Максимум структуру, но меняют постоянно кардинально. Запоминать нет смысла - через год поменяют все на 100%.
Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.14.55) Функция получения плановых начислений на дату: ТекущиеДанныеОплатыТруда = КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника(Сотрудник, ДатаСведений,,); Правда и функция какая-то не удобная - возвращает соответствие с ТЗ по каждому ВР. Вернули бы общую ТЗ. Не вижу функцию получения плановых начислений за период. Например, необходимо получить плановые начисления за период с 10 по 20 число месяца с разбивкой по периодам изменениям показателей по этим начислениям: т.е. упрощенно на выходе некая таблица: Сотурудник, ВР, датаС, ДатаПо, размер показателя. |
|||
1
SleepyHead
гуру
29.07.20
✎
13:36
|
(0) ПлановыеНачисленияИнтервальный
|
|||
2
Said_We
29.07.20
✎
13:42
|
(1) Это один из РС, в котором хранятся данные.
Вопрос какая функция для получению данных в таком виде. Пусть в виде коллекции соответствий или ещё каком, но информация в виде 4-х колонок должна быть. В (0) я написал что структуру часто 1С меняет и решили она написать набор статичных функций, которые будут возвращать фиксированные структуры данных в не зависимости от изменений структуры хранения данных. Они сами так рекомендуют - не лезть даже читать данные РС. :-) |
|||
3
Said_We
29.07.20
✎
14:05
|
(1) Есть же РС, в котором хранится сам размер показателя. Есть где хранятся исправления.
ПлановыеНачисления, ПлановыеНачисленияИспр, ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудников, ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковИнтервальный, ЗначенияПериодическихПоказателейРасчетаЗарплатыСотрудниковИспр.... Отдельный РС для хранения значений показателей по подразделениям и организациям: ЗначенияПериодическихПоказателейРасчетаЗарплатыОрганизаций, ЗначенияПериодическихПоказателейРасчетаЗарплатыПодразделений, ЗначенияПоказателейДоплатыЗаРаботуВНочноеВечернееВремя и т.д. На выходе надо иметь уже готовую таблицу с плановым ВР и значением показателя. На самом деле во ВР может быть сразу несколько показателей. И меняться они могут независимо друг от друга и в разное время. На выходе нужна таблица с максимальной разбивкой по периодам и значениями этих показателей. |
|||
4
Ц_У
29.07.20
✎
14:27
|
(3) а если через КадровыйУчетРасширенный.ТекущиеНачисленияСотрудника
|
|||
5
Said_We
29.07.20
✎
14:32
|
(4) Функция ТекущиеНачисленияСотрудника(Сотрудник, ДатаСведений, ИсключаемыйРегистратор = Неопределено, ФормироватьСПериодичностьДень = Истина) Экспорт
Возврат ТекущиеНачисленияСотрудников(ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Сотрудник), ДатаСведений, ИсключаемыйРегистратор, ФормироватьСПериодичностьДень).Получить(Сотрудник); КонецФункции В качестве параметра передается дата, а не период. |
|||
6
Ц_У
29.07.20
✎
14:37
|
(5) это.. и я слепой что-то стал :)
|
|||
7
d4rkmesa
29.07.20
✎
14:39
|
(5) К (4) можно попробовать еще запрос сделать, как в http://catalog.mista.ru/public/836840/ , см. пункт 1, только запрос переделать вместо Представления_КадровыеДанныеСотрудников указать Представления_ТаблицаРегистра_ПлановыеНачисления. Структуру полей Представления_ТаблицаРегистра_ПлановыеНачисления можно взять из других отчетов по плановым начислениям, например, ДинамикаПлановыхНачислений или АнализПлановыхНачислений.
|
|||
8
d4rkmesa
29.07.20
✎
14:40
|
(7) Точнее, вместо вызова процедуры.
|
|||
9
Ц_У
29.07.20
✎
14:56
|
Может так устроит?
СотрудникиПериоды = Новый ТаблицаЗначений; СотрудникиПериоды.Колонки.Добавить("Период", Новый ОписаниеТипов("Дата")); СотрудникиПериоды.Колонки.Добавить("Сотрудник", Новый ОписаниеТипов("СправочникСсылка.Сотрудники")); //Тут надо сформировать ТЗ сотрудник/период Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("ххххххххххх"); НоваяСтрока = СотрудникиПериоды.Добавить(); НоваяСтрока.Период = Дата(2019,12,24); НоваяСтрока.Сотрудник = Сотрудник; НоваяСтрока = СотрудникиПериоды.Добавить(); НоваяСтрока.Период = ТекущаяДатаСеанса(); НоваяСтрока.Сотрудник = Сотрудник; // Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.УстановитьПараметр("СотрудникиПериоды", СотрудникиПериоды); Запрос.Текст = "ВЫБРАТЬ | СотрудникиПериоды.Период КАК Период, | СотрудникиПериоды.Сотрудник КАК Сотрудник |ПОМЕСТИТЬ ВТСотрудникиПериоды |ИЗ | &СотрудникиПериоды КАК СотрудникиПериоды"; Запрос.Выполнить(); НачисленияСотрудников = КадровыйУчет.ТаблицаНачисленийСотрудниковПоВременнойТаблице(Запрос.МенеджерВременныхТаблиц, "ВТСотрудникиПериоды"); |
|||
10
Said_We
29.07.20
✎
15:15
|
(9) Неа....
КадровыйУчет.ТаблицаНачисленийСотрудниковПоВременнойТаблице() Возвращает столько срезов на дату - сколько передашь. Мне же не нужны срезы на каждую дату. Необходимо, что бы периоды были сформированы внутри переданного периода в зависимости от данных. (7) Это понятно что можно самостоятельно из РС вытащить всё в нужном виде. Но "политика партии" разработчиков ЗиУП на сейчас такова, что подобную информацию тащить необходимо их готовыми функциями. Объясняется это просто. Они сами навояли на столько сложную структуру, что сами в ней не могут разобраться и меняют её туды сюды и какая она будет в конечном результате они еще не знают, поэтому что бы ваш написанный код работал они разработали "неизменяемые" функции, которые будут возвращать фиксированные структуры, в не зависимости как данные в БД лежат. |
|||
11
Ц_У
29.07.20
✎
15:22
|
(10) не ну потом еще обработать напильником до блеска :)
|
|||
12
Said_We
29.07.20
✎
15:39
|
(3) "На выходе надо иметь уже готовую таблицу с плановым ВР и значением показателя." - если говорить логикой ЗиУП 3, то упрощенно для начислений это две связанные таблицы. По аналогии с документом "Начисление ЗП" - это таблицы "Начисления" и "Показатели". И связь по полю "ИдентификаторСтрокиВидаРасчета".
|
|||
13
d4rkmesa
29.07.20
✎
15:59
|
(10) Вы не поняли, Представления_ТаблицаРегистра_ПлановыеНачисления - не конкретный регистр, а "алиас", который после вызова процедур программного интерфейса заменяется на запрос к конкретным регистрам. Если представляете, как отчет ЗУП-овские берут данные, это аналогично, только можно использовать не только в СКД, а в своих запросах, сделав более удобную выборку к конкретному коду.
|
|||
14
Ц_У
29.07.20
✎
16:09
|
В тоже время, если посмотреть как отображается история изменений оплаты труда, то там такого навертели... Выходит, что нет типовой функции
|
|||
15
Said_We
29.07.20
✎
16:25
|
(13) Не увидел в этой схеме получения периода по изменениям показателей. Значения на дату - это не то что необходимо.
(14) Я тоже предварительно к такому выводу пришел, но решил поинтересоваться. Может я стал сильно стар и не вижу. |
|||
16
SleepyHead
гуру
29.07.20
✎
16:28
|
(15) Погугли по словам "Представления в ЗУП 3.1"- как из регистра сведений сделать интервальный регистр.
Там необязательно с регистром работать, можешь сформировать нужные тебе временные таблицы и уже на них натравить механизм создания интервальных таблиц. Я как-то пару раз делал, получалось. |
|||
17
Said_We
29.07.20
✎
19:15
|
Мне нужно было на выходе ровно так как тянет документ Начисление ЗП.
Поэтому полез посмотрел как заполняется документ. Закопано там хорошо, но наковырял. Сотрудник = Справочники.Сотрудники.НайтиПоНаименованию("ХХХХХХ"); ДатаС = Дата(2020,7,10); ДатаПо = Дата(2020,7,20); МенеджерРасчета = РасчетЗарплатыРасширенный.СоздатьМенеджерРасчета(НачалоМесяца(ДатаС), Сотрудник.ГоловнаяОрганизация); СотрудникиДляНачислений = МенеджерРасчета.ТаблицаСотрудников(); НоваяСтрока = СотрудникиДляНачислений.Добавить(); НоваяСтрока.Сотрудник = Сотрудник; НоваяСтрока.ДатаНачала = ДатаС; НоваяСтрока.ДатаОкончания = ДатаПо; НоваяСтрока.БезусловноСоответствуетКадровымДанным = ЛОЖЬ; НоваяСтрока.Вычеркивать = ЛОЖЬ; НоваяСтрока.НеСоответствуетПодразделение = ЛОЖЬ; МенеджерРасчета.НастройкиРасчета.РассчитыватьНачисления = ИСТИНА; МенеджерРасчета.НастройкиРасчета.ИсключатьРанееОплаченныеПериоды = ЛОЖЬ; МенеджерРасчета.НастройкиРасчета.СохранятьИсправления = ЛОЖЬ; МенеджерРасчета.НастройкиРасчета.ПерваяПоловинаМесяца = ЛОЖЬ; МенеджерРасчета.НастройкиРасчета.ОкончательныйРасчет = ИСТИНА; МенеджерРасчета.НастройкиНачислений.РассчитыватьНачисления = ИСТИНА; ОтборМенеджераРасчета = МенеджерРасчета.СоздатьОтборы(); ОтборМенеджераРасчета.Подразделение = Справочники.ПодразделенияОрганизаций.ПустаяСсылка(); МенеджерРасчета.ЗаполнитьНачислениеЗарплаты(СотрудникиДляНачислений, ОтборМенеджераРасчета, Неопределено); МенеджерРасчета.Зарплата.Начисления.ВыбратьСтроку(); В таблице значений "Начисления" сидит таблица с разбиением на периоды. Примерно тоже самое что и в документе. Аналогично наверное можно и таблицу Показателей вытащить. Они тоже заполняются при заполнении документа Начисление ЗП. Это отдельная табличная часть. |
|||
18
Said_We
30.07.20
✎
11:06
|
(17) В принципе таблица отдельная с показателями не нужна. В этой есть отдельно все значения всех показателей.
МенеджерРасчета.Зарплата.Начисления[0].Показатели.ВыбратьСтроку(); МенеджерРасчета.Зарплата.Начисления[1].Показатели.ВыбратьСтроку(); .... |
|||
19
SleepyHead
гуру
30.07.20
✎
11:16
|
(18) Круто. Теперь остается следить, как этот код будет меняться из версии к версии и допиливать под себя.. Помнится, в одном из релизов алгоритмы поменяли кардинально и где-то до сих пор хранятся архивные алгоритмы расчета.
|
|||
20
Said_We
30.07.20
✎
11:45
|
(19) Ну нету готового кода, который бы одной функцией возвращал бы эти данные. По крайней мере, я не нашел. Если есть, то покажите.
Основным тут является: МенеджерРасчета.ЗаполнитьНачислениеЗарплаты(СотрудникиДляНачислений, ОтборМенеджераРасчета, Неопределено); Он не менялся скорее всего. Сам расчет кардинально менялся, но там две отдельные ветки внутри. Оптимизированный вариант и не оптимизированный. Чем отличаются не смотрел, но встречал отзывы что оптимизированный считает быстрее, но результат иногда не верный :-) С точки зрения получения плановых начислений - без разницы. Нам рассчитывать не нужно. |
|||
21
Said_We
30.07.20
✎
17:54
|
(19)
Наверное вот это имелось ввиду: Функция СоздатьМенеджерРасчета(МесяцНачисления, Организация) Экспорт УстановитьПривилегированныйРежим(Истина); Если ЗарплатаКадры.ВыполнятьРасчетЗарплатыБезОптимизации() Тогда МенеджерРасчета = Обработки.МенеджерРасчетаЗарплатыАрхивный.Создать(); Иначе МенеджерРасчета = Обработки.МенеджерРасчетаЗарплаты.Создать(); КонецЕсли; .... |
|||
22
SleepyHead
гуру
30.07.20
✎
18:05
|
(20) Да я без подколов, реально круто. Сам однажды ковырял эту тему, но не дожал. Твой код прихоронил, вдруг пригодится.
|
|||
23
Said_We
31.07.20
✎
14:01
|
(22) Что-то очень часто у меня - сам задал вопрос и сам ответил. :-(
|
|||
24
2S
31.07.20
✎
14:02
|
(23) через представления не достучался?
|
|||
25
Said_We
31.07.20
✎
17:55
|
(24) Через какое представление? Что имеется ввиду?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |