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