Вот рабочий пример, использую при расчете резервов на отпуска
Код 1C v 8.3 ДокОбъект = Документы.НачислениеОтпускаРаботникамОрганизаций.СоздатьДокумент();
ДокОбъект.Дата = ТекущаяДата();
Порядок = 1;
Скорость=0;
Для Каждого стр из ТЧРезервы Цикл
#Если НаКлиенте Тогда
ОбработкаПрерыванияПользователя();
#КонецЕсли
// Отладка
Если НЕ СотрудникДляОтладки.Пустая() Тогда
Если СотрудникДляОтладки = стр.Сотрудник Тогда
// СТОП
#Если НаКлиенте Тогда
Сообщить("ВОТ ОН!!!");
#КонецЕсли
Иначе
Продолжить;
КонецЕсли;
КонецЕсли;
СкорСтарт=ТекущаяДата();
//Прерывание
//Если Порядок>70 Тогда Прервать; КонецЕсли;
#Если НаКлиенте Тогда
Состояние("3. Обрабатывается " + Порядок +" из " + ВсегоСотрудников + ". Сотрудник: " + стр.Сотрудник+" => Осталось ~ "+Строка(Цел(((ВсегоСотрудников-Порядок)*Скорость)/60))+" мин. (1 за "+Строка(Скорость)+" сек.)");
#КонецЕсли
Если стр.ДоходСначалаГода = 0 Тогда
стр.ДоходСначалаГода = РасчетБазыСтрВзносов(стр.Сотрудник, РабДата);
КонецЕсли;
Если стр.СреднеДневнойЗаработок = 0 Тогда
стр.СреднеДневнойЗаработок = РасчетСреднегоПоСотруднику(ДокОбъект,стр.Сотрудник, РабДата,1);
стр.ДатаНачалаРабочегоГода = ДокОбъект.РабочийГодС;
стр.ДатаОкончанияРабочегоГода = ДокОбъект.РабочийГодПО;
КонецЕсли;
Если стр.СреднеДневнойЗаработок = 0 Тогда // -12 месяцев
стр.СреднеДневнойЗаработок = РасчетСреднегоПоСотруднику(ДокОбъект,стр.Сотрудник, ДобавитьМесяц(РабДата, -12),1);
стр.ДатаНачалаРабочегоГода = ДокОбъект.РабочийГодС;
стр.ДатаОкончанияРабочегоГода = ДокОбъект.РабочийГодПО;
КонецЕсли;
Если стр.СреднеДневнойЗаработок = 0 Тогда // -24 месяцев
стр.СреднеДневнойЗаработок = РасчетСреднегоПоСотруднику(ДокОбъект,стр.Сотрудник, ДобавитьМесяц(РабДата, -24),1);
стр.ДатаНачалаРабочегоГода = ДокОбъект.РабочийГодС;
стр.ДатаОкончанияРабочегоГода = ДокОбъект.РабочийГодПО;
КонецЕсли;
Если стр.СреднеДневнойЗаработок = 0 Тогда // -36 месяцев
стр.СреднеДневнойЗаработок = РасчетСреднегоПоСотруднику(ДокОбъект,стр.Сотрудник, ДобавитьМесяц(РабДата, -36),1);
стр.ДатаНачалаРабочегоГода = ДокОбъект.РабочийГодС;
стр.ДатаОкончанияРабочегоГода = ДокОбъект.РабочийГодПО;
КонецЕсли;
Если стр.СреднеДневнойЗаработок = 0 Тогда // -48 месяцев
стр.СреднеДневнойЗаработок = РасчетСреднегоПоСотруднику(ДокОбъект,стр.Сотрудник, ДобавитьМесяц(РабДата, -48),1);
стр.ДатаНачалаРабочегоГода = ДокОбъект.РабочийГодС;
стр.ДатаОкончанияРабочегоГода = ДокОбъект.РабочийГодПО;
ИначеЕсли стр.СреднеДневнойЗаработок = 0 Тогда
стр.СреднеДневнойЗаработок = 1;
КонецЕсли;
Скорость = ТекущаяДата()-СкорСтарт;
Порядок = Порядок + 1;
КонецЦикла;
Попытка
ДокОбъект.Удалить();
Исключение
#Если НаКлиенте Тогда
Сообщить(ОписаниеОшибки());
#КонецЕсли
КонецПопытки;
Функция РасчетСреднегоПоСотруднику(Документ, Сотрудник, Период, ОстатокОтпуска) Экспорт
//Документ.Дата = Период;
Документ.ПериодРегистрации = НачалоМесяца(Период);
Документ.Организация = Сотрудник.ОбособленноеПодразделение;
Документ.Сотрудник = Сотрудник;
Документ.Физлицо = Сотрудник.ФизЛицо;
Документ.ДатаНачалаСобытия = Период;
Документ.ОсновнойОтпуск = Истина;
Документ.ДатаНачалаОсновногоОтпуска = Период;
Документ.ДатаОкончанияОсновногоОтпуска = Период + ((ОстатокОтпуска-1) * ДлинаСуток);
Документ.ДатаВыплатыДохода = Период + ((ОстатокОтпуска-1) * ДлинаСуток);
Документ.КоличествоДнейОсновногоОтпуска = ОстатокОтпуска;
Документ.ПорядокРасчетаОсновногоОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПоКалендарнымДням;
// способ расчета Рабочего года и остатков отпуска
ЗаполнитьЗначенияСвойств(Документ,ПроцедурыУправленияПерсоналом.РассчитатьПериодРаботыДляОсновногоОтпуска(Документ.Ссылка, Сотрудник, Документ.ДатаНачалаОсновногоОтпуска, Документ.ДатаОкончанияОсновногоОтпуска));
Документ.ОпределитьРасчетныйПериод();
//МассивТаблиц = НачислениеОтпускаРаботникамОрганизацийПереопределяемый.ПолучитьМассивТабличныхЧастей(Документ, "ПолныйРасчет");
МассивТаблиц = ПолучитьМассивТабличныхЧастей(Документ, "ПолныйРасчет");
Для каждого ТабличнаяЧасть Из МассивТаблиц Цикл
ТабличнаяЧасть.Очистить();
КонецЦикла;
ЗаписьЖурналаРегистрации("Расчет резерва", УровеньЖурналаРегистрации.Информация, , ,"Документ отпуск: " +Строка(Документ.Номер)+" от "+Формат(Документ.дата,"ДФ=dd.MM.yyyy"));
Документ.Записать();
мРассчитываемыеТаблицы.Начисления = Ложь;
мРассчитываемыеТаблицы.РасчетСреднего = Истина;
Документ.Рассчитать(мРассчитываемыеТаблицы);
Документ.Записать();
СуммаОтпускных = 0;
//Это используется когда считаются отпускные
//Для каждого СтрокаНачислений Из Документ.Начисления Цикл
// СуммаОтпускных = СуммаОтпускных + СтрокаНачислений.Результат;
//КонецЦикла;
мСведенияОВидахРасчета = Новый Соответствие;
ВариантРасчетаДокумента = Документ.ОсновнойВариантРасчетаДокумента();
ВидРасчета = ВариантРасчетаДокумента.ВидРасчета;
СведениеОВидеРасчета = ПроведениеРасчетов.ПолучитьСведенияОВидеРасчета(мСведенияОВидахРасчета, ВидРасчета);
МесяцевРасчетногоПериода = ?(СведениеОВидеРасчета.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка = Перечисления.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка.ПоКолдоговору,СведениеОВидеРасчета.ПериодРасчетаСреднегоЗаработка,НачислениеОтпускаРаботникамОрганизацийПереопределяемый.КоличествоМесяцевРасчетаПоЗакону(Документ));
СуммаОтпускных = Формат(НачислениеОтпускаРаботникамОрганизацийПереопределяемый.РасчетСреднегоЗаработка(Документ, СведениеОВидеРасчета.СпособРасчета, МесяцевРасчетногоПериода, Документ.ПериодРасчетаСреднегоЗаработкаНачало, Документ.ПериодРасчетаСреднегоЗаработкаОкончание), "ЧЦ=12; ЧДЦ=2; ЧН=");
Возврат СуммаОтпускных;
КонецФункции