8.2 УТП Расчет индексации при повышении оклада

  • Автор темы Автор темы ivisor
  • Дата начала Дата начала

ivisor

New member
Регистрация
18 Дек 2011
Сообщения
27
Реакции
0
Подскажите пожалуйста:

Человеку повысили оклад, у него ранее была фиксированная индексация.
Вводится документ: ВводСведенийОПлановыхНачисленияхУдержаниях.
При его расчете на закладке "Начисления для индексации" в первой табличке (таблица ДО) появляется строка "Индексация зарплата", но рассчитанная там сумма неверна: там всегда стоит индексация начиная с даты приема, без учета предыдущих повышений оклада, а этому сотруднику ранее повышался оклад и у него была фиксированная индексация. Документ этого не видит.
Если сделать расчет индексации в документе "Начисление зарплаты", то там индексация считается правильно ...

Должен ли (при повышение оклада) документ ВводСведенийОПлановыхНачисленияхУдержаниях рассчитывать индексацию и исходя из нее определять фиксированную индексацию, если таковая возникает?
Просто у меня при повышении оклада этот документ считает индексацию, но считает ее не правильно. Мне сказали что он (документ) и не должен ее (индексацию) считать.
Хочу понять прав я или ошибаюсь.
И если не прав, то какой документ должен определять фикс. индексацию при повышении оклада?
Я вроде бы разобрался почему ВводСведенийОПлановыхНачисленияхУдержаниях считает неправильно, но не знаю как это устранить.
Поэтому для начала хотел бы узнать надо ли "устранять" а то может действительно я просто не тот документ использую smile.gif

П.С. если кому интересно моё мнение, то проблема в том, что при расчете индексации всё завязано на запрос к регистру "Начисления" (общий модуль ПроведениеРасчетов, Функция ПолучитьДанныеДляРасчета)
Код:
ВЫБРАТЬ 
        Доход.Сотрудник                                    КАК Сотрудник, 
        Доход.ПодразделениеОрганизации                    КАК ПодразделениеОрганизации,
        Доход.Должность                                    КАК Должность,
        Доход.Регистратор                                КАК Регистратор,
        НАЧАЛОПЕРИОДА(Доход.БазовыйПериодНачало, МЕСЯЦ)    КАК ДатаНачала 
ПОМЕСТИТЬ ВТИндексироватьСотрудниковПоПериодам    
ИЗ РегистрРасчета.Начисления КАК Доход
ГДЕ        Доход.Регистратор = &парамРегистратор 
                        И    Доход.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ИндексацияЗарплаты) 
                        И    Доход.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ИндексацияЗарплаты)
А поскольку документ ВводСведенийОПлановыхНачисленияхУдержаниях не делает записей в регистр "Начисления", то из-за условия Доход.Регистратор = &парамРегистратор запрос всегда будет возвращаться пустой и все дальнейшие левые соединения остальных запросов к пустому множеству ... безнадежное дело smile.gif
Соответственно док НачисдениеЗП делает записи по регистру Начисления и потому возвращает правильный результат. т.к. в этом случае запрос всегда возвращает результат.

Сам вопорс в том - должен ли документ ВводСведенийОПлановыхНачисленияхУдержаниях считать фикс. индексацию или надо использовать другой? (какой?)
И, если должен, то как исправить ситуацию?
 
.......
Сам вопорс в том - должен ли документ ВводСведенийОПлановыхНачисленияхУдержаниях считать фикс. индексацию или надо использовать другой? (какой?)

[CUT="Ну он, как бы рассчитывает - но, далее (под капотом) ;)"]

Код:
ТекстЗапроса = "
//......................

ЕСТЬNULL(ТаблицаФиксированнаяИндексация.Результат, 0) КАК ФиксированнаяИндексацияДо,

//......................
ВЫБОР
    |        КОГДА ЕСТЬNULL(ДоходыПосле.Результат, 0) = 0
    |            ТОГДА 0
    |        КОГДА ЕСТЬNULL(ДоходыПосле.Результат, 0) <= ЕСТЬNULL(ДоходыДоБезИндексации.Результат, 0)
    |            ТОГДА 0
    |        ИНАЧЕ ЕСТЬNULL(ДоходыПосле.Результат, 0) - ЕСТЬNULL(ДоходыДоБезИндексации.Результат, 0)
    |    КОНЕЦ КАК Повышение,
//......................
        |ВЫБОР
	|		КОГДА ЕСТЬNULL(ДоходыПосле.Результат, 0) = 0
	|			ТОГДА 0
	|		КОГДА ЕСТЬNULL(ДоходыПосле.Результат, 0) > ЕСТЬNULL(ДоходыДо.Результат, 0)
	|			ТОГДА 0
	|		КОГДА ЕСТЬNULL(ДоходыДо.Результат, 0) - ЕСТЬNULL(ДоходыПосле.Результат, 0) > ЕСТЬNULL(ТаблицаФиксированнаяИндексация.Результат, 0)
	|			ТОГДА ЕСТЬNULL(ДоходыДо.Результат, 0) - ЕСТЬNULL(ДоходыПосле.Результат, 0)
	|		ИНАЧЕ ЕСТЬNULL(ТаблицаФиксированнаяИндексация.Результат, 0)
	|	КОНЕЦ КАК ФиксированнаяИндексация,
//........................................ 
;

//При обходе результата запроса!

ТЗРаботникиОрганизации = Запрос.Выполнить().Выгрузить();
    
    Для Каждого Работник из ТЗРаботникиОрганизации Цикл
        Если Работник.Повышение <=0 И
            Работник.ФиксированнаяИндексация > 0 Тогда
[B]            //Что делать с фиксированной индексацией в этом случае - не известно
            //Будем считать, что она остается прежней (не увеличивается, не закрывается)
[/B]            Работник.ФиксированнаяИндексация = Работник.ФиксированнаяИндексацияДо;
        КонецЕсли;
    КонецЦикла;

//Что делать с фиксированной индексацией в этом случае - не известно
//Будем считать, что она остается прежней (не увеличивается, не закрывается)

Комментарии самой 1C "ABBYY Ukraine" )))


[/CUT]
 
Последнее редактирование:
Комментарии самой 1C "ABBYY Ukraine" )))
По поводу?
А то я не догоняю как это применимо для моей проблемы ...
Тут, насколько я понял, запрос по фиксированной индексации (я подозреваю, что я до этой проблемы еще не дошел :) ), а я говорил о неправильном определении базового периода и соответственно неправильном расчете для документов вида ВводСведенийОПлановыхНачисленияхУдержаниях.
 
По поводу?
А то я не догоняю как это применимо для моей проблемы ...
Тут, насколько я понял, запрос по фиксированной индексации (я подозреваю, что я до этой проблемы еще не дошел :) ), а я говорил о неправильном определении базового периода и соответственно неправильном расчете для документов вида ВводСведенийОПлановыхНачисленияхУдержаниях.

Написал ответ на вопрос, постом выше.
 
Подскажите пожалуйста:

Человеку повысили оклад, у него ранее была фиксированная индексация.
Вводится документ: ВводСведенийОПлановыхНачисленияхУдержаниях.

Сам вопорс в том - должен ли документ ВводСведенийОПлановыхНачисленияхУдержаниях считать фикс. индексацию или надо использовать другой? (какой?)
И, если должен, то как исправить ситуацию?

1. Возможно, не везде при повышении оклада проставлен флаг Индексация заработка = 1.00
2. Не введен документ Изменение параметров расчета индексации (по должностям)

Вы ответили сами, программа не видит базовый месяц повышения оклада. Так установите его!! :-)
 
Вы ответили сами, программа не видит базовый месяц повышения оклада. Так установите его!! :-)
Вы видимо невнимательно прочли мой пост - НЕ вся программа не видит базовый месяц, а 1 конкретный документ: "ввод сведений ..."
Док. "Начисление ЗП" всё прекрасно видит. Используют они одну и ту же процедуру общего модуля, а результаты выходят разные.
"Начисление ЗП" правильно видит базовый месяц - как месяц последнего повышения, а "Ввод сведений" - как дату приема на работу.
Если бы они оба не видели, тогда я понимаю - проблема в неправильном вводе информации, но разве тогда бы документ "Начисление ЗП" показывал бы правильный базовый месяц?
Я все таки думаю что косяк в запросе.
У вас Документ Ввод сведений правильно определяет базовый месяц, если у человека базовый месяц НЕ дата приема на работу, а дата предыдущего повышения оклада?
 
Последнее редактирование:
Вы видимо невнимательно прочли мой пост - НЕ вся программа не видит базовый месяц, а 1 конкретный документ: "ввод сведений ..."
Док. "Начисление ЗП" всё прекрасно видит. Используют они одну и ту же процедуру общего модуля, а результаты выходят разные.
"Начисление ЗП" правильно видит базовый месяц - как месяц последнего повышения, а "Ввод сведений" - как дату приема на работу.
Если бы они оба не видели, тогда я понимаю - проблема в неправильном вводе информации, но разве тогда бы документ "Начисление ЗП" показывал бы правильный базовый месяц?
Я все таки думаю что косяк в запросе.
У вас Документ Ввод сведений правильно определяет базовый месяц, если у человека базовый месяц НЕ дата приема на работу, а дата предыдущего повышения оклада?

Например, одна из зарегистрированных проблем
Документ "Изменение параметров расчета индексации", "Ввод сведений о плановых начислениях и удержаниях", "Кадровое перемещение организаций" при расчете индексации игнорирует новый базовый период, установленный документом "Изменение параметров расчета индексации (по должностям)"
Так что, возможно, это, действительно ошибка конфигурации.
Из вашего примера не ясно, каким документом Повышали раньше оклад, а каким Фиксировали базовый месяц.
Т.б. глюк. А попробуйте документом Кадровое перемещение, мне однажды помогло, правда для текущей индексации без фиксированной
 
Спасибо, я наконец то поял о чем вы говорили приводя строки о фиксированной индексации :) дошел и до них наконец то :)
Лично я думаю что фиксированная индексация должна быть уменьшена на сумму повышения (в случае повышения).
 
В итоге:
В общий модуль ПроведениеРасчетов, Функция ПолучитьДанныеДляРасчета) добавил:
Код:
// нач. изм. 
	Если ТипЗнч(Регистратор) = Тип("ДокументСсылка.ВводСведенийОПлановыхНачисленияхУдержаниях") Тогда 
		ТекстЗапросаВТ = "
		|	ВЫБРАТЬ РАЗЛИЧНЫЕ
		|		Доход.Сотрудник								КАК Сотрудник, 
		|		Доход.ПодразделениеОрганизации					КАК ПодразделениеОрганизации,
		|		Доход.Должность								КАК Должность,
		|		НАЧАЛОПЕРИОДА(Доход.Ссылка.Дата, МЕСЯЦ)			КАК ДатаНачала 
		|ПОМЕСТИТЬ ВТИндексироватьСотрудниковПоПериодам	
		|	ИЗ Документ.ВводСведенийОПлановыхНачисленияхУдержаниях.РаботникиОрганизации КАК Доход
		|	ГДЕ 	Доход.Ссылка = &парамРегистратор 
		|		И	Доход.Сотрудник В (&парамСотрудники) 
		//|		И	Доход.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ИндексацияЗарплаты) 
		//|		И	Доход.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ИндексацияЗарплаты) 
		|";
		Запрос.Текст = ТекстЗапросаВТ;
		Запрос.Выполнить();
		ТекстЗапросаВТИндексироватьСотрудниковПоПериодам = "ВТИндексироватьСотрудниковПоПериодам";
	Иначе
// кон. изм.
		ТекстЗапросаВТ = "
		|	ВЫБРАТЬ РАЗЛИЧНЫЕ
		|		Доход.Сотрудник									КАК Сотрудник, 
		|		Доход.ПодразделениеОрганизации					КАК ПодразделениеОрганизации,
		|		Доход.Должность									КАК Должность,
		|		НАЧАЛОПЕРИОДА(Доход.БазовыйПериодНачало, МЕСЯЦ)	КАК ДатаНачала 
		|ПОМЕСТИТЬ ВТИндексироватьСотрудниковПоПериодам	
		|   ИЗ РегистрРасчета.Начисления КАК Доход
		|	ГДЕ 	Доход.Регистратор = &парамРегистратор 
		|		И	Доход.Сотрудник В (&парамСотрудники) 
		//|		И	Доход.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.Начисления.ИндексацияЗарплаты) 
		|		И	Доход.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ИндексацияЗарплаты) 
		|";
		Запрос.Текст = ТекстЗапросаВТ;
		Запрос.Выполнить();
		ТекстЗапросаВТИндексироватьСотрудниковПоПериодам = "ВТИндексироватьСотрудниковПоПериодам";
	КонецЕсли; // изм.
Это чистой воды костыль :) , но я пока не придумал как сделать изящное решение, если Регистратор НЕ "Начисление зарплаты", потому как у других документов Сотрудник, Подразделение и Должность могут находится в других ТЧ, или в шапке (или не быть)

И в модуле объекта документа "ВводСведенийОПлановыхНачисленияхУдержаниях" в функции РассчитатьИндексацию():
Код:
	Для Каждого Работник из ТЗРаботникиОрганизации Цикл
		Если Работник.Повышение <=0 И
			Работник.ФиксированнаяИндексация > 0 Тогда
			//Что делать с фиксированной индексацией в этом случае - не известно
			//Будем считать, что она остается прежней (не увеличивается, не закрывается)
			Работник.ФиксированнаяИндексация = Работник.ФиксированнаяИндексацияДо;
		КонецЕсли;
		// нач. изм. ФИЛ
		Если Работник.Повышение > 0 И Работник.ФиксированнаяИндексация > 0 Тогда
			Работник.ФиксированнаяИндексация = Макс(0, Работник.ФиксированнаяИндексация - Работник.Повышение); // изм. ФИЛ
		КонецЕсли;
		// Кон. изм. ФИЛ
	КонецЦикла;
Это лично мой взгляд на то, что делать с фикс. индексацией.
 
Спасибо, я наконец то поял о чем вы говорили приводя строки о фиксированной индексации :) дошел и до них наконец то :)
Лично я думаю что фиксированная индексация должна быть уменьшена на сумму повышения (в случае повышения).


Ну и славненько, что мой пост стал стартом в начале решения Вашей проблемы!
И кстати - круто, что сами решили проблему, хоть и методом научного тыка или через "костыли" !)

З.Ы. А для "спасибо" - есть специальная "княпка"))
 
Назад
Сверху