ЗИК 7.7 СЗВ-6-1 Особые условия труда
07.07.2010
09:42
#1
Есть вид расчета "Работа в экспедициях". Как сделать так, чтобы по этому ВР автоматически формировалась запись о стаже с особыми условиями труда (27-6) при заполнении формы СЗВ-6-1? 298 релиз.
08.07.2010
10:02
#2
"Пришлось сделать самому. Изменения в две процедуры Глобального модуля. Долго думал, стоит ли менять глЗаполнитьТаблицуСотрудниковСОсобымиПериодами() или добавить ещё одну, потом всё же решил поменять.
У нас вид расчета работа в экспедициях - ПрозивольнаяДоплата42, не забудьте поменять на свой.
Не зацепите глВписатьОсновнуюЗаписьОСтаже2010() - она без изменений между двумя измененными.
Бухгалтер ещё не смотрел, но по-моему считает правильно.
//******************************************************************************
// глЗаполнитьТаблицуСотрудниковСОсобымиПериодами()
//
// Параметры:
//
//
// Вызывается из формул элементов диалога:
//
//
// Описание:
//
// ВНИМАНИЕ! При обновлении процедуру обновлять вручную! Внесены изменения для учёта стажа сотрудников
// находящихся в экспедициях (ПрозивольнаяДоплата42)
//
Процедура глЗаполнитьТаблицуСотрудниковСОсобымиПериодами(ТаблицаСотрудниковСОсобымиПериодами, СписокСотрудников, ДатаНачала, ДатаОкончания,
СписокВРБольничныеЛисты,СписокВРОтпускаБезСохранения,СписокВРОтпускаИсключаемыеИзСтажа,СписокВРПолевых)
//
ДатаЗапросаС = ДатаНачала;
ДатаЗапросаПо = ДатаОкончания;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияБЛ)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие(ВидРасч в СписокВРБольничныеЛисты);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьБЛ = 1;
КонецЦикла;
КонецЕсли;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияОтпускЗаСвойСчет)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие(ВидРасч в СписокВРОтпускаБезСохранения);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьОтпускЗаСвойСчет = 1;
КонецЦикла;
КонецЕсли;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияОтпуск)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие(ВидРасч в СписокВРОтпускаИсключаемыеИзСтажа);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьОтпуск = 1;
КонецЦикла;
КонецЕсли;
// Изменения переносить при обновлении!
// Расчет стажа в экспедициях
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияПолевых)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие(ВидРасч в СписокВРПолевых);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьПолевые = 1;
КонецЦикла;
КонецЕсли;
ТаблицаСотрудниковСОсобымиПериодами.Свернуть("Сотрудник","ЕстьБЛ,ЕстьОтпускЗаСвойСчет,ЕстьОтпуск,ЕстьПолевые");
// Конец изменений
КонецПроцедуры //глЗаполнитьТаблицуСотрудниковСОсобымиПериодами "
У нас вид расчета работа в экспедициях - ПрозивольнаяДоплата42, не забудьте поменять на свой.
Не зацепите глВписатьОсновнуюЗаписьОСтаже2010() - она без изменений между двумя измененными.
Бухгалтер ещё не смотрел, но по-моему считает правильно.
//******************************************************************************
// глЗаполнитьТаблицуСотрудниковСОсобымиПериодами()
//
// Параметры:
//
//
// Вызывается из формул элементов диалога:
//
//
// Описание:
//
// ВНИМАНИЕ! При обновлении процедуру обновлять вручную! Внесены изменения для учёта стажа сотрудников
// находящихся в экспедициях (ПрозивольнаяДоплата42)
//
Процедура глЗаполнитьТаблицуСотрудниковСОсобымиПериодами(ТаблицаСотрудниковСОсобымиПериодами, СписокСотрудников, ДатаНачала, ДатаОкончания,
СписокВРБольничныеЛисты,СписокВРОтпускаБезСохранения,СписокВРОтпускаИсключаемыеИзСтажа,СписокВРПолевых)
//
ДатаЗапросаС = ДатаНачала;
ДатаЗапросаПо = ДатаОкончания;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияБЛ)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие(ВидРасч в СписокВРБольничныеЛисты);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьБЛ = 1;
КонецЦикла;
КонецЕсли;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияОтпускЗаСвойСчет)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие(ВидРасч в СписокВРОтпускаБезСохранения);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьОтпускЗаСвойСчет = 1;
КонецЦикла;
КонецЕсли;
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияОтпуск)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие(ВидРасч в СписокВРОтпускаИсключаемыеИзСтажа);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьОтпуск = 1;
КонецЦикла;
КонецЕсли;
// Изменения переносить при обновлении!
// Расчет стажа в экспедициях
Запрос=СоздатьОбъект("Запрос");
ТекстЗапроса = "//{{ЗАПРОС(ТаблицаПериодовДействияПолевых)
|с ДатаЗапросаС по ДатаЗапросаПо;
|Сотрудник = ЖурналРасчетов.Зарплата.Объект;
|ВидРасч = ЖурналРасчетов.Зарплата.ВидРасч;
|Группировка Сотрудник без групп;
|Условие(Сотрудник в СписокСотрудников);
|Условие(ВидРасч в СписокВРПолевых);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) =1 Тогда
Пока Запрос.Группировка("Сотрудник")=1 Цикл
ТаблицаСотрудниковСОсобымиПериодами.НоваяСтрока();
ТаблицаСотрудниковСОсобымиПериодами.Сотрудник = Запрос.Сотрудник;
ТаблицаСотрудниковСОсобымиПериодами.ЕстьПолевые = 1;
КонецЦикла;
КонецЕсли;
ТаблицаСотрудниковСОсобымиПериодами.Свернуть("Сотрудник","ЕстьБЛ,ЕстьОтпускЗаСвойСчет,ЕстьОтпуск,ЕстьПолевые");
// Конец изменений
КонецПроцедуры //глЗаполнитьТаблицуСотрудниковСОсобымиПериодами "
08.07.2010
10:03
#3
"//******************************************************************************
// глСобратьДанныеДляСЗВ2010()
//
// Параметры:
// Режим - строка, режим сбора данных, значения: "Отчетность", "ВводДанных", "СохранениеДанных"
//
//
// Возвращаемое значение:
// число 1 или 0 - удалось (не удалось) собрать данные в таблицу
//
// Описание:
// используется начиная с 2010 года
//
// ВНИМАНИЕ! При обновлении фунцию обновлять вручную! Внесены изменения для учёта стажа сотрудников
// находящихся в экспедициях (ПрозивольнаяДоплата42)
//
Функция глСобратьДанныеДляСЗВ2010(ТаблицаСтажиСотрудников, ОбобщенныйСотрудник, ТаблицаСотрудниковСКатегориямиЗЛ, ДатаНачала, ДатаОкончания, Форма ="""", Режим = """") Экспорт
// Структура таблицы ТаблицаСотрудниковСКатегориямиЗЛ
// Сотрудник
// ТаблицаПериодов - таблица значений
// далее в запросах будем использовать список сотрудников
Если ТипЗначения(ОбобщенныйСотрудник)=11 Тогда //здесь был передан элемент справочника - добавим его в только что созданный список
Сотрудники=СоздатьОбъект("СписокЗначений");
Сотрудники.ДобавитьЗначение(ОбобщенныйСотрудник);
Иначе //а здесь был передан список элементов - будем использовать непосредственно его
Сотрудники=ОбобщенныйСотрудник;
КонецЕсли;
ВсегоСотров = Сотрудники.РазмерСписка();
// Структура таблицы ТаблицаСтажиСотрудников
// Сотрудник
// ТаблицаСтажаСотрудника - таблица значений
ТаблицаСтажиСотрудников = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажиСотрудников.НоваяКолонка("Сотрудник","Справочник.Сотрудники");
ТаблицаСтажиСотрудников.НоваяКолонка("ТаблицаСтажаСотрудника", "ТаблицаЗначений");
// Структура ТаблицаСтажаСотрудника
// КатегорияЗЛ
// ТаблицаСоСтажем - таблица значений
// ИсчисленоСтраховая
// ИсчисленоНакопительная
ТаблицаСтажаСотрудника = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажаСотрудника.НоваяКолонка("КатегорияЗЛ","Перечисление.КатегорииЗастрахованныхЛицПФР");
ТаблицаСтажаСотрудника.НоваяКолонка("ТаблицаСоСтажем", "ТаблицаЗначений");
ТаблицаСтажаСотрудника.НоваяКолонка("ИсчисленоСтраховая","Число",15,2,,,,);
ТаблицаСтажаСотрудника.НоваяКолонка("ИсчисленоНакопительная","Число",15,2,,,,);
// Структура ТаблицаСоСтажем
// это собственно таблица с записями о стаже
ТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.НоваяКолонка("ТипЗаписи","Строка",14,,,,,); // Основная или дополнительная
ТаблицаСоСтажем.НоваяКолонка("НомерЗаписи","Число",2,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("Начало","Дата",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("Окончание","Дата",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ТерриториальныеУсловия","Перечисление.ТерриториальныеУсловия",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("УсловияТруда","Перечисление.СЗВОсобыеУсловияТруда2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСОснование","Перечисление.СЗВОснованияИТС2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения1","Число",5,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения2","Число",2,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения3","Перечисление.СЗВПараметр3ИТС2010",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетОснование","Перечисление.СЗВОснованияВыслугиЛет2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения1","Число",5,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения2","Число",4,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения3","Число",8,2,,,,);
ТаблицаСоСтажем.НоваяКолонка("КодПозицииСписка","Строка",20,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ПараметрТерриториальныхУсловий","Число",5,2,,,,);
глСтатусСтрока(Форма,"Обрабатываются данные стажа");
// данные о стаже из справочника
ЗапросПоСтажу=СоздатьОбъект("Запрос");
ТекстЗапроса="//{{ЗАПРОС(ЗапросПоСтажу)
|Сотр = Справочник.СЗВСтаж2010.Владелец.ОсновнойЭлемент;
|КатегорияЗЛ = Справочник.СЗВСтаж2010.КатегорияЗЛ;
|Запись = Справочник.СЗВСтаж2010.ТекущийЭлемент;
|ОтчетныйПериод = Справочник.СЗВСтаж2010.ОтчетныйПериод;
|ОсновнаяЗапись = Справочник.СЗВСтаж2010.ОсновнаяЗапись;
|Начало = Справочник.СЗВСтаж2010.Начало;
|Окончание = Справочник.СЗВСтаж2010.Окончание;
|УсловияТруда = Справочник.СЗВСтаж2010.УсловияТруда;
|КодПозицииСписка = Справочник.СЗВСтаж2010.КодПозицииСписка;
|ИТСОснование = Справочник.СЗВСтаж2010.ИТСОснование;
|ИТСДопСведения1 = Справочник.СЗВСтаж2010.ИТСДопСведения1;
|ИТСДопСведения2 = Справочник.СЗВСтаж2010.ИТСДопСведения2;
|ИТСДопСведения3 = Справочник.СЗВСтаж2010.ИТСДопСведения3;
|ВыслугаЛетОснование = Справочник.СЗВСтаж2010.ВыслугаЛетОснование;
|ВыслугаЛетДопСведения1 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения1;
|ВыслугаЛетДопСведения2 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения2;
|ВыслугаЛетДопСведения3 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения3;
|ТерриториальныеУсловия = Справочник.СЗВСтаж2010.ТерриториальныеУсловия;
|ПараметрТерриториальныхУсловий = Справочник.СЗВСтаж2010.ПараметрТерриториальныхУсловий;
|Группировка Сотр без упорядочивания без групп;
|Группировка КатегорияЗЛ;
|Группировка Запись упорядочить по Запись.Код;
|Условие(Сотр в Сотрудники);
|Условие(ОтчетныйПериод = ДатаНачала);
|"//}}ЗАПРОС
;
Если Режим <> "СохранениеДанных" Тогда
ПопытокВыполненияЗапроса = 10;
Для Сч = 1 По ПопытокВыполненияЗапроса Цикл
Если ЗапросПоСтажу.Выполнить(ТекстЗапроса)=1 Тогда
Прервать
КонецЕсли;
КонецЦикла;
Если Сч = ПопытокВыполненияЗапроса + 1 Тогда
глДобавитьСообщение(глОбработчикСообщений, "Не удалось обработать данные о стаже работников!", , , );
Возврат 0;
КонецЕсли;
КонецЕсли;
// заполним списоки в.р. которые используем в дальнейшем для выделения периода стажа
СписокВРБольничныеЛисты = СоздатьОбъект("СписокЗначений");
СписокВРОтпускаБезСохранения = СоздатьОбъект("СписокЗначений");
СписокВРОтпускаИсключаемыеИзСтажа = СоздатьОбъект("СписокЗначений");
СписокВРПолевых = СоздатьОбъект("СписокЗначений"); // переносить при обновлении - для расчёта стажа экспедиций
Для Сч = 1 По ГруппаРасчетов.УчитыватьДни.Количество() Цикл // эти в.р. определяют отработанное время
ВР = ГруппаРасчетов.УчитыватьДни.ПолучитьРасчет(Сч);
Если ВР.ВходитВГруппу(ГруппаРасчетов.БольничныеЛисты) = 1 Тогда
Если (ВР <> ВидРасчета.ОтпускПоБеременностиПоТекущемуМесяцу)
и (ВР <> ВидРасчета.ОтпускПоБеременности)
и (ВР <> ВидРасчета.ОтпускПоБеременностис2004)
и (ВР <> ВидРасчета.ОтпускПоБеременностис2005)
и (ВР <> ВидРасчета.ОтпускПоБеременностис2007)
и (ВР <> ВидРасчета.ОтпускПоБеременностис2010) Тогда
// больничные листы, кроме отпуска по беременности и родам
СписокВРБольничныеЛисты.ДобавитьЗначение(ВР);
КонецЕсли;
ИначеЕсли (ВР = ВидРасчета.ОтпускЗаСвойСчетКраткосрочный)или (ВР = ВидРасчета.ОтпускЗаСвойСчетДолгосрочный) Тогда
//отпуска без сохранения заработной платы
СписокВРОтпускаБезСохранения.ДобавитьЗначение(ВР);
СписокВРОтпускаИсключаемыеИзСтажа.ДобавитьЗначение(ВР);
ИначеЕсли (ВР = ВидРасчета.ОтпускУчебный) Тогда
СписокВРОтпускаИсключаемыеИзСтажа.ДобавитьЗначение(ВР);
КонецЕсли;
КонецЦикла;
// переносить при обновлении
// для расчёта стажа экспедиций
ВР = ВидРасчета.ПроизвольнаяДоплата42;
СписокВРПолевых.ДобавитьЗначение(ВР);
// конец изменений
// получим таблицу значений в которй будут сотрудники, имевшие в периоде отчета
// отпуск без сохранения ЗП, больничные или отпуска, исключаемые из льготного стажа
ТаблицаСотрудниковСОсобымиПериодами=СоздатьОбъект("ТаблицаЗначений");
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("Сотрудник");
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьБЛ", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпускЗаСвойСчет", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпуск", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьПолевые", "Число", 1, 0); // переносить при обновлении - для расчёта стажа экспедиций
глЗаполнитьТаблицуСотрудниковСОсобымиПериодами(ТаблицаСотрудниковСОсобымиПериодами, Сотрудники, ДатаНачала, ДатаОкончания,
СписокВРБольничныеЛисты,СписокВРОтпускаБезСохранения,СписокВРОтпускаИсключаемыеИзСтажа,СписокВРПолевых);
// конец изменений
//таблица для сбора периодов состояния физлица в разрезе месяцев
ТаблицаПериодов=СоздатьОбъект("ТаблицаЗначений");
ТаблицаПериодов.НоваяКолонка("Месяц"); //число
ТаблицаПериодов.НоваяКолонка("КатегорияЗЛ");
ТаблицаПериодов.НоваяКолонка("НачалоПериода");
ТаблицаПериодов.НоваяКолонка("ОкончаниеПериода");
ТаблицаПериодов.НоваяКолонка("СостояниеФизлица");
ТаблицаПериодов.НоваяКолонка("Документ");
ТаблицаПериодов.НоваяКолонка("ЕстьЕНВД");
//таблица для сбора периодов стажа сотрудника, внутри периода состояния физлица
ТаблицаПериодовСтажа=СоздатьОбъект("ТаблицаЗначений");
ТаблицаПериодовСтажа.НоваяКолонка("НачалоПериода");
ТаблицаПериодовСтажа.НоваяКолонка("ОкончаниеПериода");
ТаблицаПериодовСтажа.НоваяКолонка("Должность");
ТаблицаПериодовСтажа.НоваяКолонка("Подразделение");
//списки значений в котоых будем хранить наборы по стажу
НаборДляСтажа = СоздатьОбъект("СписокЗначений");
СтарыйНаборДляСтажа = СоздатьОбъект("СписокЗначений");
ПервыйМесяц = ДатаМесяц(ДатаНачала);
ПоследнийМесяц = ДатаМесяц(ДатаОкончания);
Год = ДатаГод(ДатаНачала);
ПромТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ПромТаблицаСоСтажем);
Для СчСотров = 1 По ВсегоСотров Цикл
Сотрудник = Сотрудники.ПолучитьЗначение(СчСотров);
КодСотра=Сотрудник.Код;
ИмяСотра=Сотрудник.Наименование;
Если ПустоеЗначение(""""+КодСотра+ИмяСотра)=1 Тогда
Продолжить
КонецЕсли;
СтажВСправочнике=0;
Если Режим <> "СохранениеДанных" Тогда
ЗапросПоСтажу.вНачалоВыборки();
Если ЗапросПоСтажу.Получить(Сотрудник,,)=1 Тогда
СтажВСправочнике=1;
КонецЕсли;
КонецЕсли;
НовыйПроцент = Окр(СчСотров/ВсегоСотров*100);
Если СчСотров < ВсегоСотров Тогда
глСтатусСтрока(Форма,"Обрабатываются данные стажа"+?(ВсегоСотров=1,""""," ("+НовыйПроцент+"%)")+": "+ИмяСотра);
КонецЕсли;
ВремТаблицаСтажаСотрудника = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажаСотрудника.Выгрузить(ВремТаблицаСтажаСотрудника);
// стаж
Если СтажВСправочнике = 1 Тогда
НомерСтрокиСтажа = 0;
Пока ЗапросПоСтажу.Группировка("КатегорияЗЛ")=1 Цикл
КатегорияЗЛ = ЗапросПоСтажу.КатегорияЗЛ;
НомерСтрокиСтажа = 0;
ВремТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
Пока ЗапросПоСтажу.Группировка("Запись")=1 Цикл
Если ЗапросПоСтажу.ОсновнаяЗапись = 1 Тогда
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
НомерСтрокиСтажа = НомерСтрокиСтажа + 1;
ВремТаблицаСоСтажем.ТипЗаписи = "Основная";
ВремТаблицаСоСтажем.НомерЗаписи = НомерСтрокиСтажа;
ИначеЕсли НомерСтрокиСтажа > 0 Тогда
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
ВремТаблицаСоСтажем.ТипЗаписи = "Дополнительная";
ВремТаблицаСоСтажем.НомерЗаписи = 0;
Иначе
Продолжить
КонецЕсли;
ВремТаблицаСоСтажем.Начало = ЗапросПоСтажу.Начало;
ВремТаблицаСоСтажем.Окончание = ЗапросПоСтажу.Окончание;
ВремТаблицаСоСтажем.УсловияТруда = ЗапросПоСтажу.УсловияТруда;
ВремТаблицаСоСтажем.КодПозицииСписка = ЗапросПоСтажу.КодПозицииСписка;
ВремТаблицаСоСтажем.ИТСОснование = ЗапросПоСтажу.ИТСОснование;
ВремТаблицаСоСтажем.ИТСДопСведения1 = ЗапросПоСтажу.ИТСДопСведения1;
ВремТаблицаСоСтажем.ИТСДопСведения2 = ЗапросПоСтажу.ИТСДопСведения2;
ВремТаблицаСоСтажем.ИТСДопСведения3 = ЗапросПоСтажу.ИТСДопСведения3;
ВремТаблицаСоСтажем.ВыслугаЛетОснование = ЗапросПоСтажу.ВыслугаЛетОснование;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения1 = ЗапросПоСтажу.ВыслугаЛетДопСведения1;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения2 = ЗапросПоСтажу.ВыслугаЛетДопСведения2;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения3 = ЗапросПоСтажу.ВыслугаЛетДопСведения3;
ВремТаблицаСоСтажем.ТерриториальныеУсловия = ЗапросПоСтажу.ТерриториальныеУсловия;
ВремТаблицаСоСтажем.ПараметрТерриториальныхУсловий = ЗапросПоСтажу.ПараметрТерриториальныхУсловий;
КонецЦикла;
Если ВремТаблицаСоСтажем.КоличествоСтрок() > 0 Тогда
// для этой категории ЗЛ есть стаж
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = КатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
КонецЕсли;
КонецЦикла;
Если ВремТаблицаСтажаСотрудника.КоличествоСтрок() > 0 Тогда
ТаблицаСтажиСотрудников.НоваяСтрока();
ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;
ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;
КонецЕсли;
Иначе //стажа в справочнике нет
ВремТаблицаСоСтажемЕНВД = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажемЕНВД);
НомСтроки = """";
ТаблицаСотрудниковСКатегориямиЗЛ.НайтиЗначение(Сотрудник,НомСтроки,"Сотрудник");
Если НомСтроки>0 Тогда
ТаблицаКатегорийЗЛ = ТаблицаСотрудниковСКатегориямиЗЛ.ПолучитьЗначение(НомСтроки,"ТаблицаПериодов");
Иначе
// по этому сотруднику нет данных о категориях ЗЛ
Продолжить;
КонецЕсли;
ЕстьОтпуск = 0;
ЕстьБЛ = 0;
ЕстьОтпускЗаСвойСчет = 0;
ЕстьПолевые = 0; // переносить при обновлении - для расчёта стажа экспедиций
НомСтрокиТОС = """";
ТаблицаСотрудниковСОсобымиПериодами.НайтиЗначение(Сотрудник,НомСтрокиТОС,"Сотрудник");
Если НомСтрокиТОС>0 Тогда
ЕстьБЛ = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьБЛ");
ЕстьОтпускЗаСвойСчет = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьОтпускЗаСвойСчет");
ЕстьОтпуск = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьОтпуск");
ЕстьПолевые = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьПолевые"); // переносить при обновлении - для расчёта стажа экспедиций
КонецЕсли;
Для Месяц = ПервыйМесяц по ПоследнийМесяц Цикл
ВремТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
Начало = Дата(Год,Месяц,1);
Окончание = КонМесяца(Начало);
ТаблицаПериодов.УдалитьСтроки();
ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Сотрудник,Начало, Окончание,"СостояниеФизлица");
КоличествоСтрокТаблицы=ТаблицаРеквизитов.КоличествоСтрок();
Для НомерСостоянияФизлица=1 по КоличествоСтрокТаблицы Цикл
ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(НомерСостоянияФизлица);
НачалоОчередногоПериода=ТаблицаРеквизитов.Дата;
//на дату может быть несколько значений, возмем последнее значение на дату
Если (НомерСостоянияФизлица < КоличествоСтрокТаблицы)
и (ТаблицаРеквизитов.Дата >= ?(НомерСостоянияФизлица<КоличествоСтрокТаблицы,ТаблицаРеквизитов.ПолучитьЗначение(НомерСостоянияФизлица + 1, "Дата"), Окончание)) Тогда
Продолжить;
КонецЕсли;
ОкончаниеОчередногоПериода = ?(НомерСостоянияФизлица<КоличествоСтрокТаблицы,ТаблицаРеквизитов.ПолучитьЗначение(НомерСостоянияФизлица+1,"Дата")-1,Окончание);
СостояниеФизлица=ТаблицаРеквизитов.СостояниеФизлица;
ТаблицаПериодов.НоваяСтрока();
ТаблицаПериодов.НачалоПериода=НачалоОчередногоПериода;
ТаблицаПериодов.ОкончаниеПериода=ОкончаниеОчередногоПериода;
ТаблицаПериодов.СостояниеФизлица= СостояниеФизлица;
ТаблицаПериодов.Документ=ТаблицаРеквизитов.Документ;
КонецЦикла;
НомерЗаписи = 1;
НаборДляСтажа.УдалитьВсе();
СтарыйНаборДляСтажа.УдалитьВсе();
ТаблицаПериодов.ВыбратьСтроки();
ЕстьЛьготныйСтаж=0; //в переменной будет 1 - если после сбора стажа по сотруднику найдем льготный стаж
Пока ТаблицаПериодов.ПолучитьСтроку()=1 Цикл
//разберем очередной период состояния физлица
НачалоОчередногоПериода=ТаблицаПериодов.НачалоПериода;
ОкончаниеОчередногоПериода=ТаблицаПериодов.ОкончаниеПериода;
СостояниеФизлица=ТаблицаПериодов.СостояниеФизлица;
//получили очередной период состояния физлица
Если ПустоеЗначение(СостояниеФизлица)=1 Тогда
// необходимо проверить наличие договоров ГПХ в данном периоде
// получим таблицу всех действующих расчетов по сотруднику
ТаблицаРасчетов = глПолучитьВсеРасчетыДействующиеПоСотруднику(Сотрудник,НачалоОчередногоПериода,ОкончаниеОчередногоПериода);
ТаблицаРасчетов.Сортировать("Начало");
Инициализация = 0;
Для НомерРасчета = 1 по ТаблицаРасчетов.КоличествоСтрок() Цикл
ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомерРасчета);
Если (ТаблицаРасчетов.Расчет <> ВидРасчета.ОплатаПоДоговору) и (ТаблицаРасчетов.Расчет <> ВидРасчета.Авторские) и (ТаблицаРасчетов.Расчет <> ВидРасчета.ЛицензионныеВыплаты) Тогда
Продолжить;
КонецЕсли;
Если Инициализация = 0 Тогда
НачальнаяДатаСтажаПоДоговору = Макс(ТаблицаРасчетов.Начало,НачалоОчередногоПериода);
ПоследняяДатаСтажаПоДоговору = Мин(ТаблицаРасчетов.Окончание,ОкончаниеОчередногоПериода);
Инициализация = 1;
КонецЕсли;
Если ТаблицаРасчетов.Начало > ПоследняяДатаСтажаПоДоговору Тогда
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачальнаяДатаСтажаПоДоговору,ПоследняяДатаСтажаПоДоговору,,Константа.ТерриториальныеУсловия);
НачальнаяДатаСтажаПоДоговору = ТаблицаРасчетов.Начало;
ПоследняяДатаСтажаПоДоговору = Мин(ТаблицаРасчетов.Окончание,ОкончаниеОчередногоПериода);
Иначе
ПоследняяДатаСтажаПоДоговору = Макс(ПоследняяДатаСтажаПоДоговору,Мин(ТаблицаРасчетов.Окончание,ОкончаниеОчередногоПериода));
КонецЕсли;
Если ПоследняяДатаСтажаПоДоговору = ОкончаниеОчередногоПериода Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Инициализация = 1 Тогда
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачальнаяДатаСтажаПоДоговору,ПоследняяДатаСтажаПоДоговору,,Константа.ТерриториальныеУсловия);
КонецЕсли;
ИначеЕсли (СостояниеФизлица=Перечисление.СостояниеФизлица.ВременноНеРаботает) или (СостояниеФизлица=Перечисление.СостояниеФизлица.ВременноНеРаботаетВоеннослужащий) Тогда
//помним, что когда сотрудник в расчетном периоде из декрета уходит в отпуск по уходу за ребенком,
//в ТаблицаПериодов будет два периода, с состоянием физлица - ВременноНеРаботает
ФормироватьЗаписьСтажа=1;
// определим причину, или ДЕТИ или ДЕКРЕТ
ТаблицаВР = глПолучитьВсеРасчетыДействующиеПоСотруднику(Сотрудник,НачалоОчередногоПериода,ОкончаниеОчередногоПериода);
НомерСтрокиТаблицыВР = """";
ТаблицаВР.НайтиЗначение(ВидРасчета.ПособиеПоУходуЗаРебенкомФСС,НомерСтрокиТаблицыВР,"Расчет");
НомерСтрокиТаблицыВР2007 = """";
ТаблицаВР.НайтиЗначение(ВидРасчета.ПособиеПоУходуЗаРебенкомФССс2007,НомерСтрокиТаблицыВР2007,"Расчет");
Если НомерСтрокиТаблицыВР > 0 Тогда
//нашли отпуск до 1.5 лет, действующий в периоде
СЗВПараметр3ИТС = Перечисление.СЗВПараметр3ИТС2010.ДЕТИ;
//уточним дату окончания отпуска до 1.5 лет, возможно он в отчетном периоде переходит
//в отпуск по уходу до 3-х лет, а этот период не отражается в стаже
ОкончаниеОчередногоПериода=Мин(ОкончаниеОчередногоПериода,ТаблицаВР.ПолучитьЗначение(НомерСтрокиТаблицыВР,"Окончание"));
ИначеЕсли НомерСтрокиТаблицыВР2007 > 0 Тогда
//нашли отпуск до 1.5 лет, действующий в периоде
СЗВПараметр3ИТС = Перечисление.СЗВПараметр3ИТС2010.ДЕТИ;
//уточним дату окончания отпуска до 1.5 лет, возможно он в отчетном периоде переходит
//в отпуск по уходу до 3-х лет, а этот период не отражается в стаже
ОкончаниеОчередногоПериода=Мин(ОкончаниеОчередногоПериода,ТаблицаВР.ПолучитьЗначение(НомерСтрокиТаблицыВР2007,"Окончание"));
Иначе
//не действует отпуск до 1.5 лет
//проверим, может действует отпуск по уходу до 3-х лет
"
// глСобратьДанныеДляСЗВ2010()
//
// Параметры:
// Режим - строка, режим сбора данных, значения: "Отчетность", "ВводДанных", "СохранениеДанных"
//
//
// Возвращаемое значение:
// число 1 или 0 - удалось (не удалось) собрать данные в таблицу
//
// Описание:
// используется начиная с 2010 года
//
// ВНИМАНИЕ! При обновлении фунцию обновлять вручную! Внесены изменения для учёта стажа сотрудников
// находящихся в экспедициях (ПрозивольнаяДоплата42)
//
Функция глСобратьДанныеДляСЗВ2010(ТаблицаСтажиСотрудников, ОбобщенныйСотрудник, ТаблицаСотрудниковСКатегориямиЗЛ, ДатаНачала, ДатаОкончания, Форма ="""", Режим = """") Экспорт
// Структура таблицы ТаблицаСотрудниковСКатегориямиЗЛ
// Сотрудник
// ТаблицаПериодов - таблица значений
// далее в запросах будем использовать список сотрудников
Если ТипЗначения(ОбобщенныйСотрудник)=11 Тогда //здесь был передан элемент справочника - добавим его в только что созданный список
Сотрудники=СоздатьОбъект("СписокЗначений");
Сотрудники.ДобавитьЗначение(ОбобщенныйСотрудник);
Иначе //а здесь был передан список элементов - будем использовать непосредственно его
Сотрудники=ОбобщенныйСотрудник;
КонецЕсли;
ВсегоСотров = Сотрудники.РазмерСписка();
// Структура таблицы ТаблицаСтажиСотрудников
// Сотрудник
// ТаблицаСтажаСотрудника - таблица значений
ТаблицаСтажиСотрудников = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажиСотрудников.НоваяКолонка("Сотрудник","Справочник.Сотрудники");
ТаблицаСтажиСотрудников.НоваяКолонка("ТаблицаСтажаСотрудника", "ТаблицаЗначений");
// Структура ТаблицаСтажаСотрудника
// КатегорияЗЛ
// ТаблицаСоСтажем - таблица значений
// ИсчисленоСтраховая
// ИсчисленоНакопительная
ТаблицаСтажаСотрудника = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажаСотрудника.НоваяКолонка("КатегорияЗЛ","Перечисление.КатегорииЗастрахованныхЛицПФР");
ТаблицаСтажаСотрудника.НоваяКолонка("ТаблицаСоСтажем", "ТаблицаЗначений");
ТаблицаСтажаСотрудника.НоваяКолонка("ИсчисленоСтраховая","Число",15,2,,,,);
ТаблицаСтажаСотрудника.НоваяКолонка("ИсчисленоНакопительная","Число",15,2,,,,);
// Структура ТаблицаСоСтажем
// это собственно таблица с записями о стаже
ТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.НоваяКолонка("ТипЗаписи","Строка",14,,,,,); // Основная или дополнительная
ТаблицаСоСтажем.НоваяКолонка("НомерЗаписи","Число",2,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("Начало","Дата",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("Окончание","Дата",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ТерриториальныеУсловия","Перечисление.ТерриториальныеУсловия",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("УсловияТруда","Перечисление.СЗВОсобыеУсловияТруда2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСОснование","Перечисление.СЗВОснованияИТС2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения1","Число",5,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения2","Число",2,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ИТСДопСведения3","Перечисление.СЗВПараметр3ИТС2010",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетОснование","Перечисление.СЗВОснованияВыслугиЛет2002",,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения1","Число",5,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения2","Число",4,0,,,,);
ТаблицаСоСтажем.НоваяКолонка("ВыслугаЛетДопСведения3","Число",8,2,,,,);
ТаблицаСоСтажем.НоваяКолонка("КодПозицииСписка","Строка",20,,,,,);
ТаблицаСоСтажем.НоваяКолонка("ПараметрТерриториальныхУсловий","Число",5,2,,,,);
глСтатусСтрока(Форма,"Обрабатываются данные стажа");
// данные о стаже из справочника
ЗапросПоСтажу=СоздатьОбъект("Запрос");
ТекстЗапроса="//{{ЗАПРОС(ЗапросПоСтажу)
|Сотр = Справочник.СЗВСтаж2010.Владелец.ОсновнойЭлемент;
|КатегорияЗЛ = Справочник.СЗВСтаж2010.КатегорияЗЛ;
|Запись = Справочник.СЗВСтаж2010.ТекущийЭлемент;
|ОтчетныйПериод = Справочник.СЗВСтаж2010.ОтчетныйПериод;
|ОсновнаяЗапись = Справочник.СЗВСтаж2010.ОсновнаяЗапись;
|Начало = Справочник.СЗВСтаж2010.Начало;
|Окончание = Справочник.СЗВСтаж2010.Окончание;
|УсловияТруда = Справочник.СЗВСтаж2010.УсловияТруда;
|КодПозицииСписка = Справочник.СЗВСтаж2010.КодПозицииСписка;
|ИТСОснование = Справочник.СЗВСтаж2010.ИТСОснование;
|ИТСДопСведения1 = Справочник.СЗВСтаж2010.ИТСДопСведения1;
|ИТСДопСведения2 = Справочник.СЗВСтаж2010.ИТСДопСведения2;
|ИТСДопСведения3 = Справочник.СЗВСтаж2010.ИТСДопСведения3;
|ВыслугаЛетОснование = Справочник.СЗВСтаж2010.ВыслугаЛетОснование;
|ВыслугаЛетДопСведения1 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения1;
|ВыслугаЛетДопСведения2 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения2;
|ВыслугаЛетДопСведения3 = Справочник.СЗВСтаж2010.ВыслугаЛетДопСведения3;
|ТерриториальныеУсловия = Справочник.СЗВСтаж2010.ТерриториальныеУсловия;
|ПараметрТерриториальныхУсловий = Справочник.СЗВСтаж2010.ПараметрТерриториальныхУсловий;
|Группировка Сотр без упорядочивания без групп;
|Группировка КатегорияЗЛ;
|Группировка Запись упорядочить по Запись.Код;
|Условие(Сотр в Сотрудники);
|Условие(ОтчетныйПериод = ДатаНачала);
|"//}}ЗАПРОС
;
Если Режим <> "СохранениеДанных" Тогда
ПопытокВыполненияЗапроса = 10;
Для Сч = 1 По ПопытокВыполненияЗапроса Цикл
Если ЗапросПоСтажу.Выполнить(ТекстЗапроса)=1 Тогда
Прервать
КонецЕсли;
КонецЦикла;
Если Сч = ПопытокВыполненияЗапроса + 1 Тогда
глДобавитьСообщение(глОбработчикСообщений, "Не удалось обработать данные о стаже работников!", , , );
Возврат 0;
КонецЕсли;
КонецЕсли;
// заполним списоки в.р. которые используем в дальнейшем для выделения периода стажа
СписокВРБольничныеЛисты = СоздатьОбъект("СписокЗначений");
СписокВРОтпускаБезСохранения = СоздатьОбъект("СписокЗначений");
СписокВРОтпускаИсключаемыеИзСтажа = СоздатьОбъект("СписокЗначений");
СписокВРПолевых = СоздатьОбъект("СписокЗначений"); // переносить при обновлении - для расчёта стажа экспедиций
Для Сч = 1 По ГруппаРасчетов.УчитыватьДни.Количество() Цикл // эти в.р. определяют отработанное время
ВР = ГруппаРасчетов.УчитыватьДни.ПолучитьРасчет(Сч);
Если ВР.ВходитВГруппу(ГруппаРасчетов.БольничныеЛисты) = 1 Тогда
Если (ВР <> ВидРасчета.ОтпускПоБеременностиПоТекущемуМесяцу)
и (ВР <> ВидРасчета.ОтпускПоБеременности)
и (ВР <> ВидРасчета.ОтпускПоБеременностис2004)
и (ВР <> ВидРасчета.ОтпускПоБеременностис2005)
и (ВР <> ВидРасчета.ОтпускПоБеременностис2007)
и (ВР <> ВидРасчета.ОтпускПоБеременностис2010) Тогда
// больничные листы, кроме отпуска по беременности и родам
СписокВРБольничныеЛисты.ДобавитьЗначение(ВР);
КонецЕсли;
ИначеЕсли (ВР = ВидРасчета.ОтпускЗаСвойСчетКраткосрочный)или (ВР = ВидРасчета.ОтпускЗаСвойСчетДолгосрочный) Тогда
//отпуска без сохранения заработной платы
СписокВРОтпускаБезСохранения.ДобавитьЗначение(ВР);
СписокВРОтпускаИсключаемыеИзСтажа.ДобавитьЗначение(ВР);
ИначеЕсли (ВР = ВидРасчета.ОтпускУчебный) Тогда
СписокВРОтпускаИсключаемыеИзСтажа.ДобавитьЗначение(ВР);
КонецЕсли;
КонецЦикла;
// переносить при обновлении
// для расчёта стажа экспедиций
ВР = ВидРасчета.ПроизвольнаяДоплата42;
СписокВРПолевых.ДобавитьЗначение(ВР);
// конец изменений
// получим таблицу значений в которй будут сотрудники, имевшие в периоде отчета
// отпуск без сохранения ЗП, больничные или отпуска, исключаемые из льготного стажа
ТаблицаСотрудниковСОсобымиПериодами=СоздатьОбъект("ТаблицаЗначений");
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("Сотрудник");
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьБЛ", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпускЗаСвойСчет", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьОтпуск", "Число", 1, 0);
ТаблицаСотрудниковСОсобымиПериодами.НоваяКолонка("ЕстьПолевые", "Число", 1, 0); // переносить при обновлении - для расчёта стажа экспедиций
глЗаполнитьТаблицуСотрудниковСОсобымиПериодами(ТаблицаСотрудниковСОсобымиПериодами, Сотрудники, ДатаНачала, ДатаОкончания,
СписокВРБольничныеЛисты,СписокВРОтпускаБезСохранения,СписокВРОтпускаИсключаемыеИзСтажа,СписокВРПолевых);
// конец изменений
//таблица для сбора периодов состояния физлица в разрезе месяцев
ТаблицаПериодов=СоздатьОбъект("ТаблицаЗначений");
ТаблицаПериодов.НоваяКолонка("Месяц"); //число
ТаблицаПериодов.НоваяКолонка("КатегорияЗЛ");
ТаблицаПериодов.НоваяКолонка("НачалоПериода");
ТаблицаПериодов.НоваяКолонка("ОкончаниеПериода");
ТаблицаПериодов.НоваяКолонка("СостояниеФизлица");
ТаблицаПериодов.НоваяКолонка("Документ");
ТаблицаПериодов.НоваяКолонка("ЕстьЕНВД");
//таблица для сбора периодов стажа сотрудника, внутри периода состояния физлица
ТаблицаПериодовСтажа=СоздатьОбъект("ТаблицаЗначений");
ТаблицаПериодовСтажа.НоваяКолонка("НачалоПериода");
ТаблицаПериодовСтажа.НоваяКолонка("ОкончаниеПериода");
ТаблицаПериодовСтажа.НоваяКолонка("Должность");
ТаблицаПериодовСтажа.НоваяКолонка("Подразделение");
//списки значений в котоых будем хранить наборы по стажу
НаборДляСтажа = СоздатьОбъект("СписокЗначений");
СтарыйНаборДляСтажа = СоздатьОбъект("СписокЗначений");
ПервыйМесяц = ДатаМесяц(ДатаНачала);
ПоследнийМесяц = ДатаМесяц(ДатаОкончания);
Год = ДатаГод(ДатаНачала);
ПромТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ПромТаблицаСоСтажем);
Для СчСотров = 1 По ВсегоСотров Цикл
Сотрудник = Сотрудники.ПолучитьЗначение(СчСотров);
КодСотра=Сотрудник.Код;
ИмяСотра=Сотрудник.Наименование;
Если ПустоеЗначение(""""+КодСотра+ИмяСотра)=1 Тогда
Продолжить
КонецЕсли;
СтажВСправочнике=0;
Если Режим <> "СохранениеДанных" Тогда
ЗапросПоСтажу.вНачалоВыборки();
Если ЗапросПоСтажу.Получить(Сотрудник,,)=1 Тогда
СтажВСправочнике=1;
КонецЕсли;
КонецЕсли;
НовыйПроцент = Окр(СчСотров/ВсегоСотров*100);
Если СчСотров < ВсегоСотров Тогда
глСтатусСтрока(Форма,"Обрабатываются данные стажа"+?(ВсегоСотров=1,""""," ("+НовыйПроцент+"%)")+": "+ИмяСотра);
КонецЕсли;
ВремТаблицаСтажаСотрудника = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСтажаСотрудника.Выгрузить(ВремТаблицаСтажаСотрудника);
// стаж
Если СтажВСправочнике = 1 Тогда
НомерСтрокиСтажа = 0;
Пока ЗапросПоСтажу.Группировка("КатегорияЗЛ")=1 Цикл
КатегорияЗЛ = ЗапросПоСтажу.КатегорияЗЛ;
НомерСтрокиСтажа = 0;
ВремТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
Пока ЗапросПоСтажу.Группировка("Запись")=1 Цикл
Если ЗапросПоСтажу.ОсновнаяЗапись = 1 Тогда
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
НомерСтрокиСтажа = НомерСтрокиСтажа + 1;
ВремТаблицаСоСтажем.ТипЗаписи = "Основная";
ВремТаблицаСоСтажем.НомерЗаписи = НомерСтрокиСтажа;
ИначеЕсли НомерСтрокиСтажа > 0 Тогда
ВремТаблицаСоСтажем.НоваяСтрока();
НомерСтрокиТаблицы = ВремТаблицаСоСтажем.КоличествоСтрок();
ВремТаблицаСоСтажем.ТипЗаписи = "Дополнительная";
ВремТаблицаСоСтажем.НомерЗаписи = 0;
Иначе
Продолжить
КонецЕсли;
ВремТаблицаСоСтажем.Начало = ЗапросПоСтажу.Начало;
ВремТаблицаСоСтажем.Окончание = ЗапросПоСтажу.Окончание;
ВремТаблицаСоСтажем.УсловияТруда = ЗапросПоСтажу.УсловияТруда;
ВремТаблицаСоСтажем.КодПозицииСписка = ЗапросПоСтажу.КодПозицииСписка;
ВремТаблицаСоСтажем.ИТСОснование = ЗапросПоСтажу.ИТСОснование;
ВремТаблицаСоСтажем.ИТСДопСведения1 = ЗапросПоСтажу.ИТСДопСведения1;
ВремТаблицаСоСтажем.ИТСДопСведения2 = ЗапросПоСтажу.ИТСДопСведения2;
ВремТаблицаСоСтажем.ИТСДопСведения3 = ЗапросПоСтажу.ИТСДопСведения3;
ВремТаблицаСоСтажем.ВыслугаЛетОснование = ЗапросПоСтажу.ВыслугаЛетОснование;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения1 = ЗапросПоСтажу.ВыслугаЛетДопСведения1;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения2 = ЗапросПоСтажу.ВыслугаЛетДопСведения2;
ВремТаблицаСоСтажем.ВыслугаЛетДопСведения3 = ЗапросПоСтажу.ВыслугаЛетДопСведения3;
ВремТаблицаСоСтажем.ТерриториальныеУсловия = ЗапросПоСтажу.ТерриториальныеУсловия;
ВремТаблицаСоСтажем.ПараметрТерриториальныхУсловий = ЗапросПоСтажу.ПараметрТерриториальныхУсловий;
КонецЦикла;
Если ВремТаблицаСоСтажем.КоличествоСтрок() > 0 Тогда
// для этой категории ЗЛ есть стаж
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = КатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
КонецЕсли;
КонецЦикла;
Если ВремТаблицаСтажаСотрудника.КоличествоСтрок() > 0 Тогда
ТаблицаСтажиСотрудников.НоваяСтрока();
ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;
ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;
КонецЕсли;
Иначе //стажа в справочнике нет
ВремТаблицаСоСтажемЕНВД = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажемЕНВД);
НомСтроки = """";
ТаблицаСотрудниковСКатегориямиЗЛ.НайтиЗначение(Сотрудник,НомСтроки,"Сотрудник");
Если НомСтроки>0 Тогда
ТаблицаКатегорийЗЛ = ТаблицаСотрудниковСКатегориямиЗЛ.ПолучитьЗначение(НомСтроки,"ТаблицаПериодов");
Иначе
// по этому сотруднику нет данных о категориях ЗЛ
Продолжить;
КонецЕсли;
ЕстьОтпуск = 0;
ЕстьБЛ = 0;
ЕстьОтпускЗаСвойСчет = 0;
ЕстьПолевые = 0; // переносить при обновлении - для расчёта стажа экспедиций
НомСтрокиТОС = """";
ТаблицаСотрудниковСОсобымиПериодами.НайтиЗначение(Сотрудник,НомСтрокиТОС,"Сотрудник");
Если НомСтрокиТОС>0 Тогда
ЕстьБЛ = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьБЛ");
ЕстьОтпускЗаСвойСчет = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьОтпускЗаСвойСчет");
ЕстьОтпуск = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьОтпуск");
ЕстьПолевые = ТаблицаСотрудниковСОсобымиПериодами.ПолучитьЗначение(НомСтрокиТОС,"ЕстьПолевые"); // переносить при обновлении - для расчёта стажа экспедиций
КонецЕсли;
Для Месяц = ПервыйМесяц по ПоследнийМесяц Цикл
ВремТаблицаСоСтажем = СоздатьОбъект("ТаблицаЗначений");
ТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
Начало = Дата(Год,Месяц,1);
Окончание = КонМесяца(Начало);
ТаблицаПериодов.УдалитьСтроки();
ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Сотрудник,Начало, Окончание,"СостояниеФизлица");
КоличествоСтрокТаблицы=ТаблицаРеквизитов.КоличествоСтрок();
Для НомерСостоянияФизлица=1 по КоличествоСтрокТаблицы Цикл
ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(НомерСостоянияФизлица);
НачалоОчередногоПериода=ТаблицаРеквизитов.Дата;
//на дату может быть несколько значений, возмем последнее значение на дату
Если (НомерСостоянияФизлица < КоличествоСтрокТаблицы)
и (ТаблицаРеквизитов.Дата >= ?(НомерСостоянияФизлица<КоличествоСтрокТаблицы,ТаблицаРеквизитов.ПолучитьЗначение(НомерСостоянияФизлица + 1, "Дата"), Окончание)) Тогда
Продолжить;
КонецЕсли;
ОкончаниеОчередногоПериода = ?(НомерСостоянияФизлица<КоличествоСтрокТаблицы,ТаблицаРеквизитов.ПолучитьЗначение(НомерСостоянияФизлица+1,"Дата")-1,Окончание);
СостояниеФизлица=ТаблицаРеквизитов.СостояниеФизлица;
ТаблицаПериодов.НоваяСтрока();
ТаблицаПериодов.НачалоПериода=НачалоОчередногоПериода;
ТаблицаПериодов.ОкончаниеПериода=ОкончаниеОчередногоПериода;
ТаблицаПериодов.СостояниеФизлица= СостояниеФизлица;
ТаблицаПериодов.Документ=ТаблицаРеквизитов.Документ;
КонецЦикла;
НомерЗаписи = 1;
НаборДляСтажа.УдалитьВсе();
СтарыйНаборДляСтажа.УдалитьВсе();
ТаблицаПериодов.ВыбратьСтроки();
ЕстьЛьготныйСтаж=0; //в переменной будет 1 - если после сбора стажа по сотруднику найдем льготный стаж
Пока ТаблицаПериодов.ПолучитьСтроку()=1 Цикл
//разберем очередной период состояния физлица
НачалоОчередногоПериода=ТаблицаПериодов.НачалоПериода;
ОкончаниеОчередногоПериода=ТаблицаПериодов.ОкончаниеПериода;
СостояниеФизлица=ТаблицаПериодов.СостояниеФизлица;
//получили очередной период состояния физлица
Если ПустоеЗначение(СостояниеФизлица)=1 Тогда
// необходимо проверить наличие договоров ГПХ в данном периоде
// получим таблицу всех действующих расчетов по сотруднику
ТаблицаРасчетов = глПолучитьВсеРасчетыДействующиеПоСотруднику(Сотрудник,НачалоОчередногоПериода,ОкончаниеОчередногоПериода);
ТаблицаРасчетов.Сортировать("Начало");
Инициализация = 0;
Для НомерРасчета = 1 по ТаблицаРасчетов.КоличествоСтрок() Цикл
ТаблицаРасчетов.ПолучитьСтрокуПоНомеру(НомерРасчета);
Если (ТаблицаРасчетов.Расчет <> ВидРасчета.ОплатаПоДоговору) и (ТаблицаРасчетов.Расчет <> ВидРасчета.Авторские) и (ТаблицаРасчетов.Расчет <> ВидРасчета.ЛицензионныеВыплаты) Тогда
Продолжить;
КонецЕсли;
Если Инициализация = 0 Тогда
НачальнаяДатаСтажаПоДоговору = Макс(ТаблицаРасчетов.Начало,НачалоОчередногоПериода);
ПоследняяДатаСтажаПоДоговору = Мин(ТаблицаРасчетов.Окончание,ОкончаниеОчередногоПериода);
Инициализация = 1;
КонецЕсли;
Если ТаблицаРасчетов.Начало > ПоследняяДатаСтажаПоДоговору Тогда
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачальнаяДатаСтажаПоДоговору,ПоследняяДатаСтажаПоДоговору,,Константа.ТерриториальныеУсловия);
НачальнаяДатаСтажаПоДоговору = ТаблицаРасчетов.Начало;
ПоследняяДатаСтажаПоДоговору = Мин(ТаблицаРасчетов.Окончание,ОкончаниеОчередногоПериода);
Иначе
ПоследняяДатаСтажаПоДоговору = Макс(ПоследняяДатаСтажаПоДоговору,Мин(ТаблицаРасчетов.Окончание,ОкончаниеОчередногоПериода));
КонецЕсли;
Если ПоследняяДатаСтажаПоДоговору = ОкончаниеОчередногоПериода Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если Инициализация = 1 Тогда
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачальнаяДатаСтажаПоДоговору,ПоследняяДатаСтажаПоДоговору,,Константа.ТерриториальныеУсловия);
КонецЕсли;
ИначеЕсли (СостояниеФизлица=Перечисление.СостояниеФизлица.ВременноНеРаботает) или (СостояниеФизлица=Перечисление.СостояниеФизлица.ВременноНеРаботаетВоеннослужащий) Тогда
//помним, что когда сотрудник в расчетном периоде из декрета уходит в отпуск по уходу за ребенком,
//в ТаблицаПериодов будет два периода, с состоянием физлица - ВременноНеРаботает
ФормироватьЗаписьСтажа=1;
// определим причину, или ДЕТИ или ДЕКРЕТ
ТаблицаВР = глПолучитьВсеРасчетыДействующиеПоСотруднику(Сотрудник,НачалоОчередногоПериода,ОкончаниеОчередногоПериода);
НомерСтрокиТаблицыВР = """";
ТаблицаВР.НайтиЗначение(ВидРасчета.ПособиеПоУходуЗаРебенкомФСС,НомерСтрокиТаблицыВР,"Расчет");
НомерСтрокиТаблицыВР2007 = """";
ТаблицаВР.НайтиЗначение(ВидРасчета.ПособиеПоУходуЗаРебенкомФССс2007,НомерСтрокиТаблицыВР2007,"Расчет");
Если НомерСтрокиТаблицыВР > 0 Тогда
//нашли отпуск до 1.5 лет, действующий в периоде
СЗВПараметр3ИТС = Перечисление.СЗВПараметр3ИТС2010.ДЕТИ;
//уточним дату окончания отпуска до 1.5 лет, возможно он в отчетном периоде переходит
//в отпуск по уходу до 3-х лет, а этот период не отражается в стаже
ОкончаниеОчередногоПериода=Мин(ОкончаниеОчередногоПериода,ТаблицаВР.ПолучитьЗначение(НомерСтрокиТаблицыВР,"Окончание"));
ИначеЕсли НомерСтрокиТаблицыВР2007 > 0 Тогда
//нашли отпуск до 1.5 лет, действующий в периоде
СЗВПараметр3ИТС = Перечисление.СЗВПараметр3ИТС2010.ДЕТИ;
//уточним дату окончания отпуска до 1.5 лет, возможно он в отчетном периоде переходит
//в отпуск по уходу до 3-х лет, а этот период не отражается в стаже
ОкончаниеОчередногоПериода=Мин(ОкончаниеОчередногоПериода,ТаблицаВР.ПолучитьЗначение(НомерСтрокиТаблицыВР2007,"Окончание"));
Иначе
//не действует отпуск до 1.5 лет
//проверим, может действует отпуск по уходу до 3-х лет
"
08.07.2010
10:04
#4
" НомерСтрокиТаблицыВР = """";
ТаблицаВР.НайтиЗначение(ВидРасчета.ПособиеПоУходуЗаРебенкомФЗП,НомерСтрокиТаблицыВР,"Расчет");
Если НомерСтрокиТаблицыВР > 0 Тогда
//отпуск по уходу до 3-х лет не входит в стаж
СЗВПараметр3ИТС = """";
ФормироватьЗаписьСтажа=0;
Иначе
//не действует и отпуск до 3-х лет, значит введен БЛ - Отпуск по беременности и родам
СЗВПараметр3ИТС = Перечисление.СЗВПараметр3ИТС2010.ДЕКРЕТ;
КонецЕсли;
КонецЕсли;
Если ФормироватьЗаписьСтажа=1 Тогда
// формируем параметры стажа в этом периоде
Если СЗВПараметр3ИТС=Перечисление.СЗВПараметр3ИТС2010.ДЕКРЕТ Тогда
Должность = Сотрудник.Должность.Получить(НачалоОчередногоПериода);
Подразделение = Сотрудник.Подразделение.Получить(НачалоОчередногоПериода);
//учтем, что отпуск по беременности и родам не исключается из периода "льготгого" стажа, т.е.
//нам необходимо определить параметны на начало отпуска и записать их в строку стажа.
//получим условия труда из штатного расписания
УТ="""";
ШтР = СоздатьОбъект("Справочник.ШтатноеРасписание");
Если глНайтиСтрокуШтатногоРасписания( ШтР, Подразделение, Должность) = 1 Тогда
//нашли в штатном расписании подразделение и должность
Для НомерНадбавки = 1 по 3 Цикл
Надбавка = ШтР.ПолучитьАтрибут("Надбавка"+НомерНадбавки).Получить(НачалоОчередногоПериода);
Если ПустоеЗначение(Надбавка)=0 Тогда
Если Надбавка.Расчет = ВидРасчета.ДоплатаЗаВредность Тогда
УТНадбавки = ШтР.ПолучитьАтрибут("РазмерНадбавки"+НомерНадбавки).Получить(НачалоОчередногоПериода).КодОсобыхУсловийТруда;
УТ=?(ПустоеЗначение(УТНадбавки)=1,УТ,УТНадбавки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеОчередногоПериода));
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(УТ) = 1,"""",УТ));
НаборДляСтажа.ДобавитьЗначение(СЗВПараметр3ИТС);
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));
НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка));
Иначе
//это период нахождения в отпуске по уходу за ребенком до 1,5 лет
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(СЗВПараметр3ИТС);
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
КонецЕсли;
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачалоОчередногоПериода,ОкончаниеОчередногоПериода, НаборДляСтажа);
КонецЕсли;
Иначе //период когда состояние физлица не пустое и не ВременноНеРаботает
//разберем этот период на периоды, когда менялась должность и подразделение
//и внутри этих маленьких периодов проведем разбор наличия "льготного" стажа
ТаблицаПериодовСтажа.УдалитьСтроки();
ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Сотрудник,НачалоОчередногоПериода,ОкончаниеОчередногоПериода,"Должность,Подразделение");
КоличествоСтрокТаблицыСтажа = ТаблицаРеквизитов.КоличествоСтрок();
Для НомерПериодаСтажа=1 по КоличествоСтрокТаблицыСтажа Цикл
ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(НомерПериодаСтажа);
НачалоПериодаСтажа=ТаблицаРеквизитов.Дата;
//на дату может быть несколько значений, возмем последнее значение на дату
Если (НомерПериодаСтажа < КоличествоСтрокТаблицыСтажа)
и (ТаблицаРеквизитов.Дата >= ?(НомерПериодаСтажа<КоличествоСтрокТаблицыСтажа,ТаблицаРеквизитов.ПолучитьЗначение(НомерПериодаСтажа + 1, "Дата"), ОкончаниеОчередногоПериода)) Тогда
Продолжить;
КонецЕсли;
ОкончаниеПериодаСтажа = ?(НомерПериодаСтажа<КоличествоСтрокТаблицыСтажа,ТаблицаРеквизитов.ПолучитьЗначение(НомерПериодаСтажа+1,"Дата")-1,ОкончаниеОчередногоПериода);
ТаблицаПериодовСтажа.НоваяСтрока();
ТаблицаПериодовСтажа.НачалоПериода=НачалоПериодаСтажа;
ТаблицаПериодовСтажа.ОкончаниеПериода=ОкончаниеПериодаСтажа;
ТаблицаПериодовСтажа.Должность=ТаблицаРеквизитов.Должность;
ТаблицаПериодовСтажа.Подразделение=ТаблицаРеквизитов.Подразделение;
КонецЦикла;
КоличествоСтрок=ТаблицаПериодовСтажа.КоличествоСтрок();
Для Номер = 1 по КоличествоСтрок Цикл
//разбор стажа "внутри" периода когда сотрудник работал и имел определенную должность и подразделение
ПромТаблицаСоСтажем.УдалитьСтроки();
ТаблицаПериодовСтажа.ПолучитьСтрокуПоНомеру(Номер);
НачалоПериодаСтажа=ТаблицаПериодовСтажа.НачалоПериода;
ОкончаниеПериодаСтажа=ТаблицаПериодовСтажа.ОкончаниеПериода;
Должность= ТаблицаПериодовСтажа.Должность;
Подразделение= ТаблицаПериодовСтажа.Подразделение;
//запишим во временную таблицу весь период
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеПериодаСтажа));
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));
НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка));
Если (ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=0) или (ПустоеЗначение(Должность.КодПозицииИзСписка)=0)
или (ПустоеЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеПериодаСтажа))=0) Тогда
ЕстьЛьготныйСтаж=1;
КонецЕсли;
//зарегистрируем во временной таблице стажа весь этот период
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоПериодаСтажа,ОкончаниеПериодаСтажа, НаборДляСтажа);
//теперь проверим есть ли внутри этого периода стажа "льготные" периоды, они могутт быть, т.к.
//реквизит Надбавка периодический, если будет льготный период, то его необходимо "вписать"
//в уже зарегистрированный период с НачалоПериодаСтажа по ОкончаниеПериодаСтажа
ШтР = СоздатьОбъект("Справочник.ШтатноеРасписание");
Если глНайтиСтрокуШтатногоРасписания( ШтР, Подразделение, Должность) = 1 Тогда
//нашли в штатном расписании подразделение и должность
Для НомерНадбавки = 1 по 3 Цикл
ТаблицаРеквизитовШтатногоРасписания = глПолучитьТаблицуИсторииРеквизитов(ШтР.ТекущийЭлемент(),
НачалоПериодаСтажа,ОкончаниеПериодаСтажа,"Надбавка"+НомерНадбавки);
КоличествоСтрокШтатногоРасписания = ТаблицаРеквизитовШтатногоРасписания.КоличествоСтрок();
Для НомерШтатногоРасписания = 1 по КоличествоСтрокШтатногоРасписания Цикл
ТаблицаРеквизитовШтатногоРасписания.ПолучитьСтрокуПоНомеру(НомерШтатногоРасписания);
НачальнаяДатаШтатногоРасписания=ТаблицаРеквизитовШтатногоРас писания.ПолучитьЗначение(НомерШтатногоРасписания,"Дата");
СледующаяДатаШтатногоРасписания = ?(НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания,ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания,"Дата")-1,ОкончаниеПериодаСтажа);
// т.к. значений может быть несколько, берем последнее значение на дату
Если (НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания)и(ТаблицаРеквизитовШтатногоРасписания.Дата>=?(НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания,ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания+1,"Дата"),ОкончаниеПериодаСтажа)) Тогда
Продолжить;
КонецЕсли;
Надбавка = ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания,"Надбавка"+НомерНадбавки);
Если ПустоеЗначение(Надбавка)=0 Тогда
Если Надбавка.Расчет = ВидРасчета.ДоплатаЗаВредность Тогда
УТ = ШтР.ПолучитьАтрибут("РазмерНадбавки"+НомерНадбавки).Получить(ТаблицаРеквизитовШтатногоРасписания.Дата).КодОсобыхУсловийТруда;
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",СледующаяДатаШтатногоРасписания));
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(УТ) = 1,"""",УТ));
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));
НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка));
Если ПустоеЗначение(УТ)=0 Тогда
ЕстьЛьготныйСтаж=1;
КонецЕсли;
//"впишем" во временную таблицу льготный период
глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ПромТаблицаСоСтажем,НомерЗаписи,НачальнаяДатаШтатногоРасписания,СледующаяДатаШтатногоРасписания, НаборДляСтажа);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
//перенесем периоды стажа из временной таблицы в основную
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериодаСтажа,ОкончаниеПериодаСтажа, ПромТаблицаСоСтажем);
КонецЦикла;
КонецЕсли;
КонецЦикла;
//если был льготный стаж, проверим наличие периодов, которые исключаются из льготного
//стажа, в частности это учебные отпуска
Если (ЕстьЛьготныйСтаж=1) и (ЕстьОтпуск = 1) Тогда
ТаблицаОтпусков="""";
Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаОтпусков,Начало, Окончание, СписокВРОтпускаИсключаемыеИзСтажа)=1 Тогда
//Создадим набор для стажа, которым будем замещать льготные периоды
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
//впишем периоды отпусков
ТаблицаОтпусков.ВыбратьСтроки();
Пока ТаблицаОтпусков.ПолучитьСтроку()=1 Цикл
НачалоПериода=ТаблицаОтпусков.НачалоПериода;
ОкончаниеПериода=ТаблицаОтпусков.ОкончаниеПериода;
//"впишем" во временную таблицу льготный период
глВписатьОсновнуюЗаписьОСтаже2010("ВписатьЛьготный",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ЕстьОтпускЗаСвойСчет = 1 Тогда
ТаблицаОтпусков="""";
Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаОтпусков,Начало, Окончание, СписокВРОтпускаБезСохранения)=1 Тогда
//Создадим набор для стажа, которым будем замещать периоды
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВПараметр3ИТС2010.АДМИНИСТР);
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
//впишем периоды отпусков за свой счет
ТаблицаОтпусков.ВыбратьСтроки();
Пока ТаблицаОтпусков.ПолучитьСтроку()=1 Цикл
НачалоПериода=ТаблицаОтпусков.НачалоПериода;
ОкончаниеПериода=ТаблицаОтпусков.ОкончаниеПериода;
//"впишем" во временную таблицу период
глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ЕстьБЛ = 1 Тогда
ТаблицаБЛ="""";
Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаБЛ,Начало, Окончание, СписокВРБольничныеЛисты)=1 Тогда
//Создадим набор для стажа, которым будем замещать периоды
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВПараметр3ИТС2010.ВРНЕТРУД);
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
//впишем периоды отпусков за свой счет
ТаблицаБЛ.ВыбратьСтроки();
Пока ТаблицаБЛ.ПолучитьСтроку()=1 Цикл
НачалоПериода=ТаблицаБЛ.НачалоПериода;
ОкончаниеПериода=ТаблицаБЛ.ОкончаниеПериода;
//"впишем" во временную таблицу период
глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);
КонецЦикла;
КонецЕсли;
КонецЕсли;
// переносить при обновлении - для расчёта стажа экспедиций
Если ЕстьПолевые = 1 Тогда
ТаблицаПолевых="""";
Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаПолевых,Начало, Окончание, СписокВРПолевых)=1 Тогда
//Создадим набор для стажа, которым будем замещать периоды
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВОсобыеУсловияТруда2002.ст27п6);
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
//впишем периоды отпусков за свой счет
ТаблицаПолевых.ВыбратьСтроки();
Пока ТаблицаПолевых.ПолучитьСтроку()=1 Цикл
НачалоПериода=ТаблицаПолевых.НачалоПериода;
ОкончаниеПериода=ТаблицаПолевых.ОкончаниеПериода;
//"впишем" во временную таблицу период
глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);
КонецЦикла;
КонецЕсли;
КонецЕсли;
// конец изменений
Если ВремТаблицаСоСтажем.КоличествоСтрок()=0 Тогда
Продолжить;
КонецЕсли;
// ВремТаблицаСоСтажем - в таблице периоды стажа внутри одного месяца отчетного периода
// соберем табицы стажей по категориям, свернем периоды после цикла по месяцам отчетного периода
НомСтрокиТКЗЛ="""";
ТаблицаКатегорийЗЛ.НайтиЗначение(Месяц,НомСтрокиТКЗЛ,"Месяц");
ТекущаяКатегорияЗЛ = ТаблицаКатегорийЗЛ.ПолучитьЗначение(НомСтрокиТКЗЛ,"КатегорияЗЛ");
ЕстьСтажЕНВД = ТаблицаКатегорийЗЛ.ПолучитьЗначение(НомСтрокиТКЗЛ,"ЕстьЕНВД"); //для сбора стажа по ЕНВД в таблицу ВремТаблицаСоСтажемЕНВД
Если Месяц = ПервыйМесяц Тогда
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
Если ЕстьСтажЕНВД=1 Тогда
ВремТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажемЕНВД);
КонецЕсли;
Иначе
//не первый месяц, поищем, есть ли в таблице данные с категорией текущего месяца
НомСтрокиВТС = """";
Если ВремТаблицаСтажаСотрудника.НайтиЗначение(ТекущаяКатегорияЗЛ,НомСтрокиВТС,"КатегорияЗЛ") = 0 Тогда
//данных с текущей категорией нет, добавим
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
Иначе
ТекущаяТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ПолучитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем");
глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажем,ТекущаяТаблицаСоСтажем);
ВремТаблицаСтажаСотрудника.УстановитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем",ТекущаяТаблицаСоСтажем);
КонецЕсли;
Если ЕстьСтажЕНВД=1 Тогда
глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажем,ВремТаблицаСоСтажемЕНВД);
КонецЕсли;
КонецЕсли;
КонецЦикла; // цикл по месяцам отчетного периода
Если ВремТаблицаСоСтажемЕНВД.КоличествоСтрок()>0 Тогда
// добавим стаж ЕНВД
НомСтрокиВТС = """";
Если ВремТаблицаСтажаСотрудника.НайтиЗначение(Перечисление.КатегорииЗастрахованныхЛицПФР.УСЕН,НомСтрокиВТС,"КатегорияЗЛ") = 0 Тогда
//данных с текущей категорией нет, добавим
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажемЕНВД;
Иначе
ТекущаяТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ПолучитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем");
глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажемЕНВД,ТекущаяТаблицаСоСтажем);
ВремТаблицаСтажаСотрудника.УстановитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем",ТекущаяТаблицаСоСтажем);
КонецЕсли;
КонецЕсли;
// если есть стаж ЕНВД, проверим наличие стажа с пустой категорией
// вычеркним эту строку, это бывает при 100% ЕНВД
НомСтрокиВТС = """";
Если ВремТаблицаСтажаСотрудника.НайтиЗначение(ПолучитьПустоеЗначение("Перечисление.КатегорииЗастрахованныхЛицПФР"),НомСтрокиВТС,"КатегорияЗЛ") = 1 Тогда
ВремТаблицаСтажаСотрудника.УдалитьСтроку(НомСтрокиВТС);
КонецЕсли;
//свернем таблицы стажа, по периодам с одинаковыми значениями стажа
//когда мы "собирали" таблицу, периоды стажа просто регистрировались
ВремТаблицаСтажаСотрудника.ВыбратьСтроки();
Пока ВремТаблицаСтажаСотрудника.ПолучитьСтроку()=1 Цикл
ВремТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем;
НаборДляСтажа.УдалитьВсе();
СтарыйНаборДляСтажа.УдалитьВсе();
КолСтрокСтажа=ВремТаблицаСоСтажем.КоличествоСтрок();
НомерЗаписи=1;
ПромТаблицаСоСтажем.УдалитьСтроки();
Если КолСтрокСтажа>1 Тогда
Для НомСтроки=1 По КолСтрокСтажа Цикл
ВремТаблицаСоСтажем.ПолучитьСтрокуПоНомеру(НомСтроки);
Если НомСтроки=1 Тогда
//для первой строки запомним набор для стажа и даты начала и окончания периода стажа
НачалоСтажа = ВремТаблицаСоСтажем.Начало;
ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;
//получим набор стажа для этого периода
ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");
Иначе
//это не первая строка стажа,
//получим набор стажа
ВремТаблицаСоСтажем.Выгрузить(НаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");
Если (ОкончаниеСтажа+1)<ВремТаблицаСоСтажем.Начало Тогда
//между записями стажа есть пропущенный период, значит
//можно перенести старый набор для стажа в таблицу
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, СтарыйНаборДляСтажа);
//занесли в таблицу стажа набор, определим даты начала и окончания текущего набора и сам набор стажа
НомерЗаписи=НомерЗаписи+1;
НачалоСтажа = ВремТаблицаСоСтажем.Начало;
ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;
ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");
Иначе
//очередной период начинается сразу по окончании предыдущего
//проверим, изменился стаж в следующей записи или нет
Если глСпискиИдентичны(СтарыйНаборДляСтажа,НаборДляСтажа)=1 Тогда
//следующая запись стажа идентична предыдущей
//не меняем начало стажа, а дату окончания устанавлваем до дате окончания текущего периода
ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;
Иначе
//стаж изменился, перенесем предыдущий набор стажа строку в таблицы стажа
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, СтарыйНаборДляСтажа);
//занесли в таблицу стажа набор, определим даты начала и окончания текущего набора и сам набор стажа
НомерЗаписи=НомерЗаписи+1;
НачалоСтажа = ВремТаблицаСоСтажем.Начало;
ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;
ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");
КонецЕсли;
КонецЕсли;
Если НомСтроки=КолСтрокСтажа Тогда
//последняя строка стажа, перенесем набор в таблицу
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, НаборДляСтажа);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПромТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
КонецЕсли;
КонецЦикла;
Если ВремТаблицаСтажаСотрудника.КоличествоСтрок() > 0 Тогда
ТаблицаСтажиСотрудников.НоваяСтрока();
ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;
ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;
КонецЕсли;
КонецЕсли; //рассмотрели оба варианта - когда в справочнике есть стаж и когда его в справочнике не было
КонецЦикла; // обхода сотров и физлиц
ТаблицаСтажиСотрудников.Сортировать("1");
глСтатусСтрока(Форма,"""");
Возврат 1;
КонецФункции // глСобратьДанныеДляСЗВ2010() "
ТаблицаВР.НайтиЗначение(ВидРасчета.ПособиеПоУходуЗаРебенкомФЗП,НомерСтрокиТаблицыВР,"Расчет");
Если НомерСтрокиТаблицыВР > 0 Тогда
//отпуск по уходу до 3-х лет не входит в стаж
СЗВПараметр3ИТС = """";
ФормироватьЗаписьСтажа=0;
Иначе
//не действует и отпуск до 3-х лет, значит введен БЛ - Отпуск по беременности и родам
СЗВПараметр3ИТС = Перечисление.СЗВПараметр3ИТС2010.ДЕКРЕТ;
КонецЕсли;
КонецЕсли;
Если ФормироватьЗаписьСтажа=1 Тогда
// формируем параметры стажа в этом периоде
Если СЗВПараметр3ИТС=Перечисление.СЗВПараметр3ИТС2010.ДЕКРЕТ Тогда
Должность = Сотрудник.Должность.Получить(НачалоОчередногоПериода);
Подразделение = Сотрудник.Подразделение.Получить(НачалоОчередногоПериода);
//учтем, что отпуск по беременности и родам не исключается из периода "льготгого" стажа, т.е.
//нам необходимо определить параметны на начало отпуска и записать их в строку стажа.
//получим условия труда из штатного расписания
УТ="""";
ШтР = СоздатьОбъект("Справочник.ШтатноеРасписание");
Если глНайтиСтрокуШтатногоРасписания( ШтР, Подразделение, Должность) = 1 Тогда
//нашли в штатном расписании подразделение и должность
Для НомерНадбавки = 1 по 3 Цикл
Надбавка = ШтР.ПолучитьАтрибут("Надбавка"+НомерНадбавки).Получить(НачалоОчередногоПериода);
Если ПустоеЗначение(Надбавка)=0 Тогда
Если Надбавка.Расчет = ВидРасчета.ДоплатаЗаВредность Тогда
УТНадбавки = ШтР.ПолучитьАтрибут("РазмерНадбавки"+НомерНадбавки).Получить(НачалоОчередногоПериода).КодОсобыхУсловийТруда;
УТ=?(ПустоеЗначение(УТНадбавки)=1,УТ,УТНадбавки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеОчередногоПериода));
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(УТ) = 1,"""",УТ));
НаборДляСтажа.ДобавитьЗначение(СЗВПараметр3ИТС);
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));
НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка));
Иначе
//это период нахождения в отпуске по уходу за ребенком до 1,5 лет
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(СЗВПараметр3ИТС);
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
КонецЕсли;
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачалоОчередногоПериода,ОкончаниеОчередногоПериода, НаборДляСтажа);
КонецЕсли;
Иначе //период когда состояние физлица не пустое и не ВременноНеРаботает
//разберем этот период на периоды, когда менялась должность и подразделение
//и внутри этих маленьких периодов проведем разбор наличия "льготного" стажа
ТаблицаПериодовСтажа.УдалитьСтроки();
ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Сотрудник,НачалоОчередногоПериода,ОкончаниеОчередногоПериода,"Должность,Подразделение");
КоличествоСтрокТаблицыСтажа = ТаблицаРеквизитов.КоличествоСтрок();
Для НомерПериодаСтажа=1 по КоличествоСтрокТаблицыСтажа Цикл
ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(НомерПериодаСтажа);
НачалоПериодаСтажа=ТаблицаРеквизитов.Дата;
//на дату может быть несколько значений, возмем последнее значение на дату
Если (НомерПериодаСтажа < КоличествоСтрокТаблицыСтажа)
и (ТаблицаРеквизитов.Дата >= ?(НомерПериодаСтажа<КоличествоСтрокТаблицыСтажа,ТаблицаРеквизитов.ПолучитьЗначение(НомерПериодаСтажа + 1, "Дата"), ОкончаниеОчередногоПериода)) Тогда
Продолжить;
КонецЕсли;
ОкончаниеПериодаСтажа = ?(НомерПериодаСтажа<КоличествоСтрокТаблицыСтажа,ТаблицаРеквизитов.ПолучитьЗначение(НомерПериодаСтажа+1,"Дата")-1,ОкончаниеОчередногоПериода);
ТаблицаПериодовСтажа.НоваяСтрока();
ТаблицаПериодовСтажа.НачалоПериода=НачалоПериодаСтажа;
ТаблицаПериодовСтажа.ОкончаниеПериода=ОкончаниеПериодаСтажа;
ТаблицаПериодовСтажа.Должность=ТаблицаРеквизитов.Должность;
ТаблицаПериодовСтажа.Подразделение=ТаблицаРеквизитов.Подразделение;
КонецЦикла;
КоличествоСтрок=ТаблицаПериодовСтажа.КоличествоСтрок();
Для Номер = 1 по КоличествоСтрок Цикл
//разбор стажа "внутри" периода когда сотрудник работал и имел определенную должность и подразделение
ПромТаблицаСоСтажем.УдалитьСтроки();
ТаблицаПериодовСтажа.ПолучитьСтрокуПоНомеру(Номер);
НачалоПериодаСтажа=ТаблицаПериодовСтажа.НачалоПериода;
ОкончаниеПериодаСтажа=ТаблицаПериодовСтажа.ОкончаниеПериода;
Должность= ТаблицаПериодовСтажа.Должность;
Подразделение= ТаблицаПериодовСтажа.Подразделение;
//запишим во временную таблицу весь период
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеПериодаСтажа));
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));
НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка));
Если (ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=0) или (ПустоеЗначение(Должность.КодПозицииИзСписка)=0)
или (ПустоеЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеПериодаСтажа))=0) Тогда
ЕстьЛьготныйСтаж=1;
КонецЕсли;
//зарегистрируем во временной таблице стажа весь этот период
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоПериодаСтажа,ОкончаниеПериодаСтажа, НаборДляСтажа);
//теперь проверим есть ли внутри этого периода стажа "льготные" периоды, они могутт быть, т.к.
//реквизит Надбавка периодический, если будет льготный период, то его необходимо "вписать"
//в уже зарегистрированный период с НачалоПериодаСтажа по ОкончаниеПериодаСтажа
ШтР = СоздатьОбъект("Справочник.ШтатноеРасписание");
Если глНайтиСтрокуШтатногоРасписания( ШтР, Подразделение, Должность) = 1 Тогда
//нашли в штатном расписании подразделение и должность
Для НомерНадбавки = 1 по 3 Цикл
ТаблицаРеквизитовШтатногоРасписания = глПолучитьТаблицуИсторииРеквизитов(ШтР.ТекущийЭлемент(),
НачалоПериодаСтажа,ОкончаниеПериодаСтажа,"Надбавка"+НомерНадбавки);
КоличествоСтрокШтатногоРасписания = ТаблицаРеквизитовШтатногоРасписания.КоличествоСтрок();
Для НомерШтатногоРасписания = 1 по КоличествоСтрокШтатногоРасписания Цикл
ТаблицаРеквизитовШтатногоРасписания.ПолучитьСтрокуПоНомеру(НомерШтатногоРасписания);
НачальнаяДатаШтатногоРасписания=ТаблицаРеквизитовШтатногоРас
СледующаяДатаШтатногоРасписания = ?(НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания,ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания,"Дата")-1,ОкончаниеПериодаСтажа);
// т.к. значений может быть несколько, берем последнее значение на дату
Если (НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания)и(ТаблицаРеквизитовШтатногоРасписания.Дата>=?(НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания,ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания+1,"Дата"),ОкончаниеПериодаСтажа)) Тогда
Продолжить;
КонецЕсли;
Надбавка = ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания,"Надбавка"+НомерНадбавки);
Если ПустоеЗначение(Надбавка)=0 Тогда
Если Надбавка.Расчет = ВидРасчета.ДоплатаЗаВредность Тогда
УТ = ШтР.ПолучитьАтрибут("РазмерНадбавки"+НомерНадбавки).Получить(ТаблицаРеквизитовШтатногоРасписания.Дата).КодОсобыхУсловийТруда;
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",СледующаяДатаШтатногоРасписания));
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(УТ) = 1,"""",УТ));
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));
НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка));
Если ПустоеЗначение(УТ)=0 Тогда
ЕстьЛьготныйСтаж=1;
КонецЕсли;
//"впишем" во временную таблицу льготный период
глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ПромТаблицаСоСтажем,НомерЗаписи,НачальнаяДатаШтатногоРасписания,СледующаяДатаШтатногоРасписания, НаборДляСтажа);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
//перенесем периоды стажа из временной таблицы в основную
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериодаСтажа,ОкончаниеПериодаСтажа, ПромТаблицаСоСтажем);
КонецЦикла;
КонецЕсли;
КонецЦикла;
//если был льготный стаж, проверим наличие периодов, которые исключаются из льготного
//стажа, в частности это учебные отпуска
Если (ЕстьЛьготныйСтаж=1) и (ЕстьОтпуск = 1) Тогда
ТаблицаОтпусков="""";
Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаОтпусков,Начало, Окончание, СписокВРОтпускаИсключаемыеИзСтажа)=1 Тогда
//Создадим набор для стажа, которым будем замещать льготные периоды
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
//впишем периоды отпусков
ТаблицаОтпусков.ВыбратьСтроки();
Пока ТаблицаОтпусков.ПолучитьСтроку()=1 Цикл
НачалоПериода=ТаблицаОтпусков.НачалоПериода;
ОкончаниеПериода=ТаблицаОтпусков.ОкончаниеПериода;
//"впишем" во временную таблицу льготный период
глВписатьОсновнуюЗаписьОСтаже2010("ВписатьЛьготный",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ЕстьОтпускЗаСвойСчет = 1 Тогда
ТаблицаОтпусков="""";
Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаОтпусков,Начало, Окончание, СписокВРОтпускаБезСохранения)=1 Тогда
//Создадим набор для стажа, которым будем замещать периоды
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВПараметр3ИТС2010.АДМИНИСТР);
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
//впишем периоды отпусков за свой счет
ТаблицаОтпусков.ВыбратьСтроки();
Пока ТаблицаОтпусков.ПолучитьСтроку()=1 Цикл
НачалоПериода=ТаблицаОтпусков.НачалоПериода;
ОкончаниеПериода=ТаблицаОтпусков.ОкончаниеПериода;
//"впишем" во временную таблицу период
глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ЕстьБЛ = 1 Тогда
ТаблицаБЛ="""";
Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаБЛ,Начало, Окончание, СписокВРБольничныеЛисты)=1 Тогда
//Создадим набор для стажа, которым будем замещать периоды
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВПараметр3ИТС2010.ВРНЕТРУД);
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
//впишем периоды отпусков за свой счет
ТаблицаБЛ.ВыбратьСтроки();
Пока ТаблицаБЛ.ПолучитьСтроку()=1 Цикл
НачалоПериода=ТаблицаБЛ.НачалоПериода;
ОкончаниеПериода=ТаблицаБЛ.ОкончаниеПериода;
//"впишем" во временную таблицу период
глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);
КонецЦикла;
КонецЕсли;
КонецЕсли;
// переносить при обновлении - для расчёта стажа экспедиций
Если ЕстьПолевые = 1 Тогда
ТаблицаПолевых="""";
Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаПолевых,Начало, Окончание, СписокВРПолевых)=1 Тогда
//Создадим набор для стажа, которым будем замещать периоды
НаборДляСтажа.УдалитьВсе();
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВОсобыеУсловияТруда2002.ст27п6);
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
НаборДляСтажа.ДобавитьЗначение("""");
//впишем периоды отпусков за свой счет
ТаблицаПолевых.ВыбратьСтроки();
Пока ТаблицаПолевых.ПолучитьСтроку()=1 Цикл
НачалоПериода=ТаблицаПолевых.НачалоПериода;
ОкончаниеПериода=ТаблицаПолевых.ОкончаниеПериода;
//"впишем" во временную таблицу период
глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);
КонецЦикла;
КонецЕсли;
КонецЕсли;
// конец изменений
Если ВремТаблицаСоСтажем.КоличествоСтрок()=0 Тогда
Продолжить;
КонецЕсли;
// ВремТаблицаСоСтажем - в таблице периоды стажа внутри одного месяца отчетного периода
// соберем табицы стажей по категориям, свернем периоды после цикла по месяцам отчетного периода
НомСтрокиТКЗЛ="""";
ТаблицаКатегорийЗЛ.НайтиЗначение(Месяц,НомСтрокиТКЗЛ,"Месяц");
ТекущаяКатегорияЗЛ = ТаблицаКатегорийЗЛ.ПолучитьЗначение(НомСтрокиТКЗЛ,"КатегорияЗЛ");
ЕстьСтажЕНВД = ТаблицаКатегорийЗЛ.ПолучитьЗначение(НомСтрокиТКЗЛ,"ЕстьЕНВД"); //для сбора стажа по ЕНВД в таблицу ВремТаблицаСоСтажемЕНВД
Если Месяц = ПервыйМесяц Тогда
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
Если ЕстьСтажЕНВД=1 Тогда
ВремТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажемЕНВД);
КонецЕсли;
Иначе
//не первый месяц, поищем, есть ли в таблице данные с категорией текущего месяца
НомСтрокиВТС = """";
Если ВремТаблицаСтажаСотрудника.НайтиЗначение(ТекущаяКатегорияЗЛ,НомСтрокиВТС,"КатегорияЗЛ") = 0 Тогда
//данных с текущей категорией нет, добавим
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
Иначе
ТекущаяТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ПолучитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем");
глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажем,ТекущаяТаблицаСоСтажем);
ВремТаблицаСтажаСотрудника.УстановитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем",ТекущаяТаблицаСоСтажем);
КонецЕсли;
Если ЕстьСтажЕНВД=1 Тогда
глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажем,ВремТаблицаСоСтажемЕНВД);
КонецЕсли;
КонецЕсли;
КонецЦикла; // цикл по месяцам отчетного периода
Если ВремТаблицаСоСтажемЕНВД.КоличествоСтрок()>0 Тогда
// добавим стаж ЕНВД
НомСтрокиВТС = """";
Если ВремТаблицаСтажаСотрудника.НайтиЗначение(Перечисление.КатегорииЗастрахованныхЛицПФР.УСЕН,НомСтрокиВТС,"КатегорияЗЛ") = 0 Тогда
//данных с текущей категорией нет, добавим
ВремТаблицаСтажаСотрудника.НоваяСтрока();
ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ;
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажемЕНВД;
Иначе
ТекущаяТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ПолучитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем");
глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажемЕНВД,ТекущаяТаблицаСоСтажем);
ВремТаблицаСтажаСотрудника.УстановитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем",ТекущаяТаблицаСоСтажем);
КонецЕсли;
КонецЕсли;
// если есть стаж ЕНВД, проверим наличие стажа с пустой категорией
// вычеркним эту строку, это бывает при 100% ЕНВД
НомСтрокиВТС = """";
Если ВремТаблицаСтажаСотрудника.НайтиЗначение(ПолучитьПустоеЗначение("Перечисление.КатегорииЗастрахованныхЛицПФР"),НомСтрокиВТС,"КатегорияЗЛ") = 1 Тогда
ВремТаблицаСтажаСотрудника.УдалитьСтроку(НомСтрокиВТС);
КонецЕсли;
//свернем таблицы стажа, по периодам с одинаковыми значениями стажа
//когда мы "собирали" таблицу, периоды стажа просто регистрировались
ВремТаблицаСтажаСотрудника.ВыбратьСтроки();
Пока ВремТаблицаСтажаСотрудника.ПолучитьСтроку()=1 Цикл
ВремТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем;
НаборДляСтажа.УдалитьВсе();
СтарыйНаборДляСтажа.УдалитьВсе();
КолСтрокСтажа=ВремТаблицаСоСтажем.КоличествоСтрок();
НомерЗаписи=1;
ПромТаблицаСоСтажем.УдалитьСтроки();
Если КолСтрокСтажа>1 Тогда
Для НомСтроки=1 По КолСтрокСтажа Цикл
ВремТаблицаСоСтажем.ПолучитьСтрокуПоНомеру(НомСтроки);
Если НомСтроки=1 Тогда
//для первой строки запомним набор для стажа и даты начала и окончания периода стажа
НачалоСтажа = ВремТаблицаСоСтажем.Начало;
ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;
//получим набор стажа для этого периода
ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");
Иначе
//это не первая строка стажа,
//получим набор стажа
ВремТаблицаСоСтажем.Выгрузить(НаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");
Если (ОкончаниеСтажа+1)<ВремТаблицаСоСтажем.Начало Тогда
//между записями стажа есть пропущенный период, значит
//можно перенести старый набор для стажа в таблицу
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, СтарыйНаборДляСтажа);
//занесли в таблицу стажа набор, определим даты начала и окончания текущего набора и сам набор стажа
НомерЗаписи=НомерЗаписи+1;
НачалоСтажа = ВремТаблицаСоСтажем.Начало;
ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;
ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");
Иначе
//очередной период начинается сразу по окончании предыдущего
//проверим, изменился стаж в следующей записи или нет
Если глСпискиИдентичны(СтарыйНаборДляСтажа,НаборДляСтажа)=1 Тогда
//следующая запись стажа идентична предыдущей
//не меняем начало стажа, а дату окончания устанавлваем до дате окончания текущего периода
ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;
Иначе
//стаж изменился, перенесем предыдущий набор стажа строку в таблицы стажа
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, СтарыйНаборДляСтажа);
//занесли в таблицу стажа набор, определим даты начала и окончания текущего набора и сам набор стажа
НомерЗаписи=НомерЗаписи+1;
НачалоСтажа = ВремТаблицаСоСтажем.Начало;
ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;
ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");
КонецЕсли;
КонецЕсли;
Если НомСтроки=КолСтрокСтажа Тогда
//последняя строка стажа, перенесем набор в таблицу
глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, НаборДляСтажа);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПромТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);
ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;
КонецЕсли;
КонецЦикла;
Если ВремТаблицаСтажаСотрудника.КоличествоСтрок() > 0 Тогда
ТаблицаСтажиСотрудников.НоваяСтрока();
ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;
ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;
КонецЕсли;
КонецЕсли; //рассмотрели оба варианта - когда в справочнике есть стаж и когда его в справочнике не было
КонецЦикла; // обхода сотров и физлиц
ТаблицаСтажиСотрудников.Сортировать("1");
глСтатусСтрока(Форма,"""");
Возврат 1;
КонецФункции // глСобратьДанныеДляСЗВ2010() "
Читают тему
(гостей: 1)