|   |   | 
| 
 | ЗиУП 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) Через какое представление? Что имеется ввиду?     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |