Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

ЗИК 7.7 СЗВ-6-1 Особые условия труда

ruuh
читатель
офлайн
Дата регистрации: 07.07.2010
Сообщений: 4
Пост №1
 
07.07.2010 09:42

Есть вид расчета "Работа в экспедициях". Как сделать так, чтобы по этому ВР автоматически формировалась запись о стаже с особыми условиями труда (27-6) при заполнении формы СЗВ-6-1? 298 релиз.

ruuh
читатель
офлайн
Дата регистрации: 07.07.2010
Сообщений: 4
Пост №2
 
08.07.2010 10:02

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

ruuh
читатель
офлайн
Дата регистрации: 07.07.2010
Сообщений: 4
Пост №3
 
08.07.2010 10:03

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

ruuh
читатель
офлайн
Дата регистрации: 07.07.2010
Сообщений: 4
Пост №4
 
08.07.2010 10:04

" НомерСтрокиТаблицыВР = """";<br> ТаблицаВР.НайтиЗначение(ВидРасчета.ПособиеПоУходуЗаРебенкомФЗП,НомерСтрокиТаблицыВР,"Расчет");<br> Если НомерСтрокиТаблицыВР > 0 Тогда<br> //отпуск по уходу до 3-х лет не входит в стаж<br> СЗВПараметр3ИТС = """";                   <br> ФормироватьЗаписьСтажа=0;<br> Иначе<br> //не действует и отпуск до 3-х лет, значит введен БЛ - Отпуск по беременности и родам<br> СЗВПараметр3ИТС = Перечисление.СЗВПараметр3ИТС2010.ДЕКРЕТ;<br> КонецЕсли; <br> КонецЕсли;<br> <br> Если ФормироватьЗаписьСтажа=1 Тогда <br> // формируем параметры стажа в этом периоде <br> Если СЗВПараметр3ИТС=Перечисление.СЗВПараметр3ИТС2010.ДЕКРЕТ Тогда<br> Должность = Сотрудник.Должность.Получить(НачалоОчередногоПериода);<br> Подразделение = Сотрудник.Подразделение.Получить(НачалоОчередногоПериода);<br> <br> //учтем, что отпуск по беременности и родам не исключается из периода "льготгого" стажа, т.е.<br> //нам необходимо определить параметны на начало отпуска и записать их в строку стажа.<br> //получим условия труда из штатного расписания<br> УТ="""";<br> ШтР = СоздатьОбъект("Справочник.ШтатноеРасписание");<br> Если глНайтиСтрокуШтатногоРасписания( ШтР, Подразделение, Должность) = 1 Тогда<br> //нашли в штатном расписании подразделение и должность<br> Для НомерНадбавки = 1 по 3 Цикл <br> Надбавка = ШтР.ПолучитьАтрибут("Надбавка"+НомерНадбавки).Получить(НачалоОчередногоПериода);<br> Если ПустоеЗначение(Надбавка)=0 Тогда<br> Если Надбавка.Расчет = ВидРасчета.ДоплатаЗаВредность Тогда<br> УТНадбавки = ШтР.ПолучитьАтрибут("РазмерНадбавки"+НомерНадбавки).Получить(НачалоОчередногоПериода).КодОсобыхУсловийТруда;<br> УТ=?(ПустоеЗначение(УТНадбавки)=1,УТ,УТНадбавки);<br> КонецЕсли;<br> КонецЕсли;<br> КонецЦикла; <br> КонецЕсли;<br> <br> НаборДляСтажа.УдалитьВсе();<br> НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеОчередногоПериода));<br> НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(УТ) = 1,"""",УТ));<br> НаборДляСтажа.ДобавитьЗначение(СЗВПараметр3ИТС); <br> НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));<br> НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка));<br> <br> Иначе<br> //это период нахождения в отпуске по уходу за ребенком до 1,5 лет<br> НаборДляСтажа.УдалитьВсе();<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(СЗВПараметр3ИТС);<br> НаборДляСтажа.ДобавитьЗначение(""""); <br> НаборДляСтажа.ДобавитьЗначение("""");<br> КонецЕсли;<br> <br> глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачалоОчередногоПериода,ОкончаниеОчередногоПериода, НаборДляСтажа);<br> <br> КонецЕсли;<br> Иначе //период когда состояние физлица не пустое и не ВременноНеРаботает <br> //разберем этот период на периоды, когда менялась должность и подразделение<br> //и внутри этих маленьких периодов проведем разбор наличия "льготного" стажа<br> <br> ТаблицаПериодовСтажа.УдалитьСтроки();<br> ТаблицаРеквизитов = глПолучитьТаблицуИсторииРеквизитов(Сотрудник,НачалоОчередногоПериода,ОкончаниеОчередногоПериода,"Должность,Подразделение");<br> КоличествоСтрокТаблицыСтажа = ТаблицаРеквизитов.КоличествоСтрок();<br> <br> Для НомерПериодаСтажа=1 по КоличествоСтрокТаблицыСтажа Цикл       <br> <br> ТаблицаРеквизитов.ПолучитьСтрокуПоНомеру(НомерПериодаСтажа);<br> НачалоПериодаСтажа=ТаблицаРеквизитов.Дата;<br> <br> //на дату может быть несколько значений, возмем последнее значение на дату<br> Если (НомерПериодаСтажа < КоличествоСтрокТаблицыСтажа)<br> и (ТаблицаРеквизитов.Дата >= ?(НомерПериодаСтажа<КоличествоСтрокТаблицыСтажа,ТаблицаРеквизитов.ПолучитьЗначение(НомерПериодаСтажа + 1, "Дата"), ОкончаниеОчередногоПериода)) Тогда<br> Продолжить;<br> КонецЕсли;<br> <br> ОкончаниеПериодаСтажа = ?(НомерПериодаСтажа<КоличествоСтрокТаблицыСтажа,ТаблицаРеквизитов.ПолучитьЗначение(НомерПериодаСтажа+1,"Дата")-1,ОкончаниеОчередногоПериода);<br> <br> ТаблицаПериодовСтажа.НоваяСтрока();<br> ТаблицаПериодовСтажа.НачалоПериода=НачалоПериодаСтажа;<br> ТаблицаПериодовСтажа.ОкончаниеПериода=ОкончаниеПериодаСтажа;<br> ТаблицаПериодовСтажа.Должность=ТаблицаРеквизитов.Должность;<br> ТаблицаПериодовСтажа.Подразделение=ТаблицаРеквизитов.Подразделение;<br> КонецЦикла;<br> <br> КоличествоСтрок=ТаблицаПериодовСтажа.КоличествоСтрок();<br> <br> Для Номер = 1 по КоличествоСтрок Цикл <br> //разбор стажа "внутри" периода когда сотрудник работал и имел определенную должность и подразделение<br> ПромТаблицаСоСтажем.УдалитьСтроки();<br> <br> ТаблицаПериодовСтажа.ПолучитьСтрокуПоНомеру(Номер);<br> НачалоПериодаСтажа=ТаблицаПериодовСтажа.НачалоПериода;<br> ОкончаниеПериодаСтажа=ТаблицаПериодовСтажа.ОкончаниеПериода; <br> Должность= ТаблицаПериодовСтажа.Должность;<br> Подразделение= ТаблицаПериодовСтажа.Подразделение;<br> <br> //запишим во временную таблицу весь период<br> НаборДляСтажа.УдалитьВсе();<br> НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеПериодаСтажа));<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(""""); <br> НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));<br> НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка));<br> <br> Если (ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=0) или (ПустоеЗначение(Должность.КодПозицииИзСписка)=0)<br> или (ПустоеЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",ОкончаниеПериодаСтажа))=0) Тогда<br> ЕстьЛьготныйСтаж=1;<br> КонецЕсли;<br> <br> //зарегистрируем во временной таблице стажа весь этот период<br> глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоПериодаСтажа,ОкончаниеПериодаСтажа, НаборДляСтажа);<br> <br> //теперь проверим есть ли внутри этого периода стажа "льготные" периоды, они могутт быть, т.к. <br> //реквизит Надбавка периодический, если будет льготный период, то его необходимо "вписать" <br> //в уже зарегистрированный период с НачалоПериодаСтажа по ОкончаниеПериодаСтажа<br> <br> ШтР = СоздатьОбъект("Справочник.ШтатноеРасписание");<br> Если глНайтиСтрокуШтатногоРасписания( ШтР, Подразделение, Должность) = 1 Тогда<br> //нашли в штатном расписании подразделение и должность<br> <br> Для НомерНадбавки = 1 по 3 Цикл <br> <br> ТаблицаРеквизитовШтатногоРасписания = глПолучитьТаблицуИсторииРеквизитов(ШтР.ТекущийЭлемент(), <br> НачалоПериодаСтажа,ОкончаниеПериодаСтажа,"Надбавка"+НомерНадбавки);                                     <br> КоличествоСтрокШтатногоРасписания = ТаблицаРеквизитовШтатногоРасписания.КоличествоСтрок(); <br> <br> Для НомерШтатногоРасписания = 1 по КоличествоСтрокШтатногоРасписания Цикл<br> ТаблицаРеквизитовШтатногоРасписания.ПолучитьСтрокуПоНомеру(НомерШтатногоРасписания); <br> НачальнаяДатаШтатногоРасписания=ТаблицаРеквизитовШтатногоРас­писания.ПолучитьЗначение(НомерШтатногоРасписания,"Дата");<br> СледующаяДатаШтатногоРасписания = ?(НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания,ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания,"Дата")-1,ОкончаниеПериодаСтажа);<br> // т.к. значений может быть несколько, берем последнее значение на дату<br> Если (НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания)и(ТаблицаРеквизитовШтатногоРасписания.Дата>=?(НомерШтатногоРасписания<КоличествоСтрокШтатногоРасписания,ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания+1,"Дата"),ОкончаниеПериодаСтажа)) Тогда<br> Продолжить;<br> КонецЕсли;<br> Надбавка = ТаблицаРеквизитовШтатногоРасписания.ПолучитьЗначение(НомерШтатногоРасписания,"Надбавка"+НомерНадбавки);<br> Если ПустоеЗначение(Надбавка)=0 Тогда<br> Если Надбавка.Расчет = ВидРасчета.ДоплатаЗаВредность Тогда<br> УТ = ШтР.ПолучитьАтрибут("РазмерНадбавки"+НомерНадбавки).Получить(ТаблицаРеквизитовШтатногоРасписания.Дата).КодОсобыхУсловийТруда;<br> НаборДляСтажа.УдалитьВсе();<br> НаборДляСтажа.ДобавитьЗначение(глПолучитьРеквизитДляОтчета(Сотрудник,"ТерриториальныеУсловия",СледующаяДатаШтатногоРасписания));<br> НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(УТ) = 1,"""",УТ));<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(?(ПустоеЗначение(Должность.ПенсияЗаВыслугуЛет)=1,"""",Должность.ПенсияЗаВыслугуЛет));<br> НаборДляСтажа.ДобавитьЗначение(СокрЛП(Должность.КодПозицииИзСписка)); <br> <br> Если ПустоеЗначение(УТ)=0 Тогда<br> ЕстьЛьготныйСтаж=1;<br> КонецЕсли; <br> <br> //"впишем" во временную таблицу льготный период<br> глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ПромТаблицаСоСтажем,НомерЗаписи,НачальнаяДатаШтатногоРасписания,СледующаяДатаШтатногоРасписания, НаборДляСтажа);<br> <br> КонецЕсли;<br> КонецЕсли;<br> КонецЦикла;<br> КонецЦикла; <br> <br> КонецЕсли; <br> //перенесем периоды стажа из временной таблицы в основную<br> глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериодаСтажа,ОкончаниеПериодаСтажа, ПромТаблицаСоСтажем);<br> <br> КонецЦикла; <br> <br> КонецЕсли;<br> <br> КонецЦикла;<br> <br> <br> //если был льготный стаж, проверим наличие периодов, которые исключаются из льготного<br> //стажа, в частности это учебные отпуска <br> Если (ЕстьЛьготныйСтаж=1) и (ЕстьОтпуск = 1) Тогда<br> ТаблицаОтпусков="""";<br> Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаОтпусков,Начало, Окончание, СписокВРОтпускаИсключаемыеИзСтажа)=1 Тогда<br> <br> //Создадим набор для стажа, которым будем замещать льготные периоды<br> НаборДляСтажа.УдалитьВсе();<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(""""); <br> //впишем периоды отпусков <br> ТаблицаОтпусков.ВыбратьСтроки();<br> Пока ТаблицаОтпусков.ПолучитьСтроку()=1 Цикл<br> НачалоПериода=ТаблицаОтпусков.НачалоПериода;<br> ОкончаниеПериода=ТаблицаОтпусков.ОкончаниеПериода;<br> //"впишем" во временную таблицу льготный период<br> глВписатьОсновнуюЗаписьОСтаже2010("ВписатьЛьготный",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);<br> КонецЦикла;<br> КонецЕсли; <br> КонецЕсли;<br> <br> Если ЕстьОтпускЗаСвойСчет = 1 Тогда<br> ТаблицаОтпусков="""";<br> Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаОтпусков,Начало, Окончание, СписокВРОтпускаБезСохранения)=1 Тогда<br> <br> //Создадим набор для стажа, которым будем замещать периоды<br> НаборДляСтажа.УдалитьВсе();<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВПараметр3ИТС2010.АДМИНИСТР);<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(""""); <br> //впишем периоды отпусков за свой счет <br> ТаблицаОтпусков.ВыбратьСтроки();<br> Пока ТаблицаОтпусков.ПолучитьСтроку()=1 Цикл<br> НачалоПериода=ТаблицаОтпусков.НачалоПериода;<br> ОкончаниеПериода=ТаблицаОтпусков.ОкончаниеПериода;<br> //"впишем" во временную таблицу период<br> глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);<br> КонецЦикла;<br> КонецЕсли; <br> КонецЕсли; <br> <br> Если ЕстьБЛ = 1 Тогда<br> ТаблицаБЛ="""";<br> Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаБЛ,Начало, Окончание, СписокВРБольничныеЛисты)=1 Тогда<br> <br> //Создадим набор для стажа, которым будем замещать периоды<br> НаборДляСтажа.УдалитьВсе();<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВПараметр3ИТС2010.ВРНЕТРУД);<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(""""); <br> //впишем периоды отпусков за свой счет <br> ТаблицаБЛ.ВыбратьСтроки();<br> Пока ТаблицаБЛ.ПолучитьСтроку()=1 Цикл<br> НачалоПериода=ТаблицаБЛ.НачалоПериода;<br> ОкончаниеПериода=ТаблицаБЛ.ОкончаниеПериода;<br> //"впишем" во временную таблицу период<br> глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);<br> КонецЦикла;<br> КонецЕсли; <br> КонецЕсли; <br>             <br> // переносить при обновлении - для расчёта стажа экспедиций<br> <br> Если ЕстьПолевые = 1 Тогда<br> ТаблицаПолевых="""";<br> Если глЗаполнитьТаблицуПериодовДействияВР(Сотрудник,ТаблицаПолевых,Начало, Окончание, СписокВРПолевых)=1 Тогда<br> <br> //Создадим набор для стажа, которым будем замещать периоды<br> НаборДляСтажа.УдалитьВсе();<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(Перечисление.СЗВОсобыеУсловияТруда2002.ст27п6);<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение("""");<br> НаборДляСтажа.ДобавитьЗначение(""""); <br> //впишем периоды отпусков за свой счет <br> ТаблицаПолевых.ВыбратьСтроки();<br> Пока ТаблицаПолевых.ПолучитьСтроку()=1 Цикл<br> НачалоПериода=ТаблицаПолевых.НачалоПериода;<br> ОкончаниеПериода=ТаблицаПолевых.ОкончаниеПериода;<br> //"впишем" во временную таблицу период<br> глВписатьОсновнуюЗаписьОСтаже2010("Вписать",ВремТаблицаСоСтажем,НомерЗаписи,НачалоПериода,ОкончаниеПериода, НаборДляСтажа);<br> КонецЦикла;<br> КонецЕсли; <br> КонецЕсли; <br> <br> // конец изменений<br> <br> Если ВремТаблицаСоСтажем.КоличествоСтрок()=0 Тогда<br> Продолжить; <br> КонецЕсли;<br> <br>        // ВремТаблицаСоСтажем - в таблице периоды стажа внутри одного месяца отчетного периода<br> // соберем табицы стажей по категориям, свернем периоды после цикла по месяцам отчетного периода<br> <br> НомСтрокиТКЗЛ="""";<br> ТаблицаКатегорийЗЛ.НайтиЗначение(Месяц,НомСтрокиТКЗЛ,"Месяц");<br> <br> ТекущаяКатегорияЗЛ = ТаблицаКатегорийЗЛ.ПолучитьЗначение(НомСтрокиТКЗЛ,"КатегорияЗЛ"); <br> ЕстьСтажЕНВД = ТаблицаКатегорийЗЛ.ПолучитьЗначение(НомСтрокиТКЗЛ,"ЕстьЕНВД"); //для сбора стажа по ЕНВД в таблицу ВремТаблицаСоСтажемЕНВД<br> Если Месяц = ПервыйМесяц Тогда<br> ВремТаблицаСтажаСотрудника.НоваяСтрока(); <br> ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ; <br> ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;<br> Если ЕстьСтажЕНВД=1 Тогда<br> ВремТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажемЕНВД); <br> КонецЕсли;<br> Иначе<br> //не первый месяц, поищем, есть ли в таблице данные с категорией текущего месяца<br> <br> НомСтрокиВТС = """";<br> Если ВремТаблицаСтажаСотрудника.НайтиЗначение(ТекущаяКатегорияЗЛ,НомСтрокиВТС,"КатегорияЗЛ") = 0 Тогда<br> //данных с текущей категорией нет, добавим<br> ВремТаблицаСтажаСотрудника.НоваяСтрока(); <br> ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ; <br> ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;<br> Иначе <br> ТекущаяТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ПолучитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем"); <br> глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажем,ТекущаяТаблицаСоСтажем);<br> ВремТаблицаСтажаСотрудника.УстановитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем",ТекущаяТаблицаСоСтажем);<br> КонецЕсли; <br> <br> Если ЕстьСтажЕНВД=1 Тогда<br> глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажем,ВремТаблицаСоСтажемЕНВД); <br> КонецЕсли;<br> <br> КонецЕсли;<br> <br> КонецЦикла; // цикл по месяцам отчетного периода<br> <br> Если ВремТаблицаСоСтажемЕНВД.КоличествоСтрок()>0 Тогда<br> // добавим стаж ЕНВД<br> НомСтрокиВТС = """";<br> Если ВремТаблицаСтажаСотрудника.НайтиЗначение(Перечисление.КатегорииЗастрахованныхЛицПФР.УСЕН,НомСтрокиВТС,"КатегорияЗЛ") = 0 Тогда<br> //данных с текущей категорией нет, добавим<br> ВремТаблицаСтажаСотрудника.НоваяСтрока(); <br> ВремТаблицаСтажаСотрудника.КатегорияЗЛ = ТекущаяКатегорияЗЛ; <br> ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажемЕНВД;<br> Иначе <br> ТекущаяТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ПолучитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем"); <br> глПереписатьИзТаблицыВТаблицу(ВремТаблицаСоСтажемЕНВД,ТекущаяТаблицаСоСтажем);<br> ВремТаблицаСтажаСотрудника.УстановитьЗначение(НомСтрокиВТС,"ТаблицаСоСтажем",ТекущаяТаблицаСоСтажем);<br> КонецЕсли; <br> <br> КонецЕсли; <br> <br> // если есть стаж ЕНВД, проверим наличие стажа с пустой категорией<br> // вычеркним эту строку, это бывает при 100% ЕНВД<br> НомСтрокиВТС = """";<br> Если ВремТаблицаСтажаСотрудника.НайтиЗначение(ПолучитьПустоеЗначение("Перечисление.КатегорииЗастрахованныхЛицПФР"),НомСтрокиВТС,"КатегорияЗЛ") = 1 Тогда<br> ВремТаблицаСтажаСотрудника.УдалитьСтроку(НомСтрокиВТС); <br> КонецЕсли; <br> <br> //свернем таблицы стажа, по периодам с одинаковыми значениями стажа<br> //когда мы "собирали" таблицу, периоды стажа просто регистрировались<br> ВремТаблицаСтажаСотрудника.ВыбратьСтроки();<br> Пока ВремТаблицаСтажаСотрудника.ПолучитьСтроку()=1 Цикл<br> <br> ВремТаблицаСоСтажем = ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем;<br> <br> НаборДляСтажа.УдалитьВсе();<br> СтарыйНаборДляСтажа.УдалитьВсе();<br> КолСтрокСтажа=ВремТаблицаСоСтажем.КоличествоСтрок();<br> НомерЗаписи=1;<br> ПромТаблицаСоСтажем.УдалитьСтроки();<br> Если КолСтрокСтажа>1 Тогда<br> Для НомСтроки=1 По КолСтрокСтажа Цикл <br> ВремТаблицаСоСтажем.ПолучитьСтрокуПоНомеру(НомСтроки);<br> Если НомСтроки=1 Тогда <br> //для первой строки запомним набор для стажа и даты начала и окончания периода стажа<br> НачалоСтажа = ВремТаблицаСоСтажем.Начало;<br> ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание; <br> //получим набор стажа для этого периода<br> ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");<br> Иначе<br> //это не первая строка стажа,<br> //получим набор стажа<br> ВремТаблицаСоСтажем.Выгрузить(НаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");<br> <br> Если (ОкончаниеСтажа+1)<ВремТаблицаСоСтажем.Начало Тогда<br> //между записями стажа есть пропущенный период, значит<br> //можно перенести старый набор для стажа в таблицу<br> глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, СтарыйНаборДляСтажа); <br> <br> //занесли в таблицу стажа набор, определим даты начала и окончания текущего набора и сам набор стажа<br> НомерЗаписи=НомерЗаписи+1;<br> НачалоСтажа = ВремТаблицаСоСтажем.Начало;<br> ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание; <br> ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");<br> Иначе<br> //очередной период начинается сразу по окончании предыдущего<br> //проверим, изменился стаж в следующей записи или нет<br> Если глСпискиИдентичны(СтарыйНаборДляСтажа,НаборДляСтажа)=1 Тогда<br> //следующая запись стажа идентична предыдущей<br> //не меняем начало стажа, а дату окончания устанавлваем до дате окончания текущего периода<br> ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание;<br> Иначе<br> //стаж изменился, перенесем предыдущий набор стажа строку в таблицы стажа<br> глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, СтарыйНаборДляСтажа);<br> <br> //занесли в таблицу стажа набор, определим даты начала и окончания текущего набора и сам набор стажа<br> НомерЗаписи=НомерЗаписи+1;<br> НачалоСтажа = ВремТаблицаСоСтажем.Начало;<br> ОкончаниеСтажа= ВремТаблицаСоСтажем.Окончание; <br> ВремТаблицаСоСтажем.Выгрузить(СтарыйНаборДляСтажа,НомСтроки,НомСтроки,"5,6,10,11,15");<br> КонецЕсли;<br> КонецЕсли;<br> <br> Если НомСтроки=КолСтрокСтажа Тогда<br> //последняя строка стажа, перенесем набор в таблицу<br> глВписатьОсновнуюЗаписьОСтаже2010("Добавить",ПромТаблицаСоСтажем,НомерЗаписи,НачалоСтажа,ОкончаниеСтажа, НаборДляСтажа); <br> КонецЕсли;<br> КонецЕсли; <br> КонецЦикла; <br> ПромТаблицаСоСтажем.Выгрузить(ВремТаблицаСоСтажем);<br> ВремТаблицаСтажаСотрудника.ТаблицаСоСтажем = ВремТаблицаСоСтажем;<br> КонецЕсли; <br> <br> КонецЦикла;<br> <br> <br> Если ВремТаблицаСтажаСотрудника.КоличествоСтрок() > 0 Тогда<br> ТаблицаСтажиСотрудников.НоваяСтрока();<br> ТаблицаСтажиСотрудников.Сотрудник = Сотрудник;<br> ТаблицаСтажиСотрудников.ТаблицаСтажаСотрудника = ВремТаблицаСтажаСотрудника;<br> КонецЕсли;<br> <br> <br> КонецЕсли; //рассмотрели оба варианта - когда в справочнике есть стаж и когда его в справочнике не было<br> <br> КонецЦикла; // обхода сотров и физлиц<br> <br> ТаблицаСтажиСотрудников.Сортировать("1"); <br> <br> глСтатусСтрока(Форма,"""");<br><br> Возврат 1;<br> <br>КонецФункции // глСобратьДанныеДляСЗВ2010() "

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Учет, налогообложение, автоматизация
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация