1С бухгалтерия

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

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

Стал смотреть именно второй алгоритм заполнения значений показателей. И нашел, что в обработке МенеджерРасчетаЗарплаты в процедуре ЗаполнитьЗначенияПериодическихПоказателейПодразделений происходит соединение двух таблиц ВТЗначенияПериодическихПоказателейПодразделенийИнтервалы и Начисления. И логично, что в качестве одного из полей присутствует Подразделение. Но вот только в таблице ВТЗначенияПериодическихПоказателейПодразделенийИнтервалы подразделения заполнены, а в таблице Начисления нет. Т.е. поле Подразделение есть, но оно не заполнено и вообще пробежавшись по алгоритму не происходит даже попытки заполнения этого поля. Может я чего-то не доглядел и не понял в этом модуле расчета, но если все таки принудительно заполнить подразделения в таблице Начисления, то показатели начинают заполняться как и положено.

Поэтому я дописал процедуру ЗаполнитьВыявленнымиНачислениями все в той же обработке МенеджерРасчетаЗарплаты в модуле объекта. Процедура у меня выглядит так:

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

Просто добавил в конце заполнение подразделений в таблице Начисления.

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".