В процедуре глЗаполнитьТаблицуСотрудниковСОсобымиПериодами имеем классическую ошибку, за которую выгоняют с экзаменов - многократные запросы к одному объекту - ЖурналуРасчетов.
Заменяем их на единый и получаем выигрыш примерно в половину.
ДатаЗапросаС = ДатаНачала;
ДатаЗапросаПо = ДатаОкончания;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияБЛ)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Функция ЕстьБЛ = Сумма(1) Когда (ВидРасч в СписокВРБольничныеЛисты) ;
|Функция ЕстьОтпускЗаСвойСчет = Сумма(1) Когда (ВидРасч в СписокВРОтпускаБезСохранения) ;
|Функция ЕстьОтпуск = Сумма(1) Когда (ВидРасч в СписокВРОтпускаИсключаемыеИзСтажа) ;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие ((ВидРасч в СписокВРБольничныеЛисты) ИЛИ (ВидРасч в СписокВРОтпускаБезСохранения) ИЛИ (ВидРасч в СписокВРОтпускаИсключаемыеИзСтажа));
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьБЛ = ?(Запрос.ЕстьБЛ =0,0,1);
ТаблицаСотрудниковСОсобымиПериодами.ЕстьОтпускЗаСвойСчет = ?(Запрос.ЕстьОтпускЗаСвойСчет=0,0,1);
ТаблицаСотрудниковСОсобымиПериодами.ЕстьОтпуск = ?(Запрос.ЕстьОтпуск =0,0,1);
КонецЦикла;
КонецЕсли;