ghostrid3r
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: А лучше приведи полный код процедуры, тода будет понятней, что тебе надо. | Процедура Заполнить() Перем СчИзСписка, НомерСтроки, НужнаяСтрока, ДатаУвольнения; Если ПустоеЗначение(ДатаУвольнения) = 1 Тогда ДатаУвольнения = 0 ; КонецЕсли; Если ДатаВКвартале > КонецРассчитанногоПериодаБИ() Тогда Предупреждение ("На " + Формат(НачМесяца(ДатаВКвартале),"ДДММГГГГ") + " бухгалтерские итоги не рассчитаны!"+РазделительСтрок+ "Расчет итогов выполняется в режиме"+РазделительСтрок+ """Операции - Управление бухгалтерскими итогами""."); Возврат //не будем ничего заполнять, если итоги не рассчитаны КонецЕсли; ОчиститьСписки(); //анализ выплаченных сумм вне зависимости от того, регулярно или нет выплачивается зарплата //осуществляется с начала отчетного квартала ДатаНач = НачКвартала(ДатаВКвартале); ДатаКон = КонКвартала(ДатаВКвартале); Форма1ДФ = СоздатьОбъект("Таблица"); Спис = СоздатьОбъект("СписокЗначений"); Если глПолучитьНиО(ноЛьготаНДФЛ,"ЛьготыНДФЛбаз","о льготах по налогу на доходы физ. лиц!") = 0 Тогда Возврат; КонецЕсли; Если глПолучитьНиО(ноБезработицаФОТ,"ФЗПБезраб","об отчислениях в фонд страх. от безработицы!") = 0 Тогда Возврат; КонецЕсли; Если глПолучитьНиО(ноСтрахНетрудоспФОТ,"ФЗПСоцСтрах","об отчислениях в фонд страх. по временной нетрудоспособности!") = 0 Тогда Возврат; КонецЕсли; Если глПолучитьНиО(ноПенсионныйФОТ,"ФЗППенс","об отчислениях в ПФ!") = 0 Тогда Возврат; КонецЕсли; Если глПолучитьНиО(ноПенсионныйФОТИнв,"ФЗППенсИнв","об отчислениях в ПФ!") = 0 Тогда Возврат; КонецЕсли; Если глПолучитьНиО(ноСоцСтрахНесч,"ФЗПСоцСтрахНесч","об отчислениях в ПФ!") = 0 Тогда Возврат; КонецЕсли; стБезработица = ноБезработицаФОТ.Ставка.Получить(ДатаКон); стПенсионный = ноПенсионныйФОТ.Ставка.Получить(ДатаКон); стСоцСтрахНесч = ноСоцСтрахНесч.Ставка.Получить(ДатаКон); стСтрахНетрудоспФОТ = ноСтрахНетрудоспФОТ.Ставка.Получить(ДатаКон); стПенсионныйФОТИнв = ноПенсионныйФОТИнв.Ставка.Получить(ДатаКон); // пенсионный и безработица глПарсить(ноПенсионныйФОТ.Дополнительно.Получить(ДатаКон),Спис); МаксБазаПенс = Число(Спис.Получить("Макс. база")); глПарсить(ноБезработицаФОТ.Дополнительно.Получить(ДатаКон),Спис); МаксБазаБезр = Число(Спис.Получить("Макс. база")); глПарсить(ноСтрахНетрудоспФОТ.Дополнительно.Получить(ДатаКон),Спис); МаксБазаНетр = Число(Спис.Получить("Макс. база")); глПарсить(ноСоцСтрахНесч.Дополнительно.Получить(ДатаКон),Спис); МаксБазаНесч = Число(Спис.Получить("Макс. база")); // для перебора списка сотрудников СправСотр = СоздатьОбъект("Справочник.Сотрудники"); // таблица сотрудник + период (создается для подсчета соответствующих сумм по каждому из сотрудников // в разрезе месяца для выплаченных сумм) ТаблПериоды = СоздатьОбъект("ТаблицаЗначений"); ТаблПериоды.НоваяКолонка("Сотр","Справочник.Сотрудники"); ТаблПериоды.НоваяКолонка("Месяц","Дата"); ТаблПериоды.НоваяКолонка("Выплачено","Число",12,2); ТаблПериоды.НоваяКолонка("Льгота","Строка",2); СтрокНаЛисте = 25; КвоСтраниц = 1; ЗначениеВКлетку(КвоСтраниц,0,Стр); Ном = 0; ФизЛиц = 0; //для того, чтобы сразу внести месяцы отчетного квартала в тбПериоды Месяц[1] = ДатаНач; Месяц[2] = НачМесяца(ДобавитьМесяц(ДатаНач,1)); Месяц[3] = НачМесяца(ДатаКон); // определение количества физических лиц и списка сотрудников для вывода КвоШтатных = 0; КвоСовмест = 0; Если Форма.ВыбраннаяФирма.Видимость()=1 Тогда СправСотр.ВыбратьЭлементыПоРеквизиту("Фирма",ВыбраннаяФирма,0); Иначе СправСотр.ВыбратьЭлементы(); КонецЕсли; КвоШтатных =0; КвоСовмест = 0; Для инд=1 по 3 Цикл Шт[инд]=0; Совмест[инд]=0; КонецЦикла; //начальный перебор списка сотрудников с отсевом принятых на работу позже даты конца //отчетного периода, а также внесением отдельными строками для каждого сотрудника каждого //месяца отчетного квартала в таблицу тбПериоды Пока СправСотр.ПолучитьЭлемент() = 1 Цикл Сотр = СправСотр.ТекущийЭлемент(); Если Сотр.ЭтоГруппа() = 0 Тогда Если ИдентификаторКонфигурации = "UBUOUSL" Тогда // ДатаПриема=Сотр.ДатаНачалаДействия; // ДатаУвольнения= Сотр.ДатаОкончанияДействия; // Иначе ДатаПриема= Сотр.ДатаПриема; ДатаУвольнения= Сотр.ДатаУвольнения; КонецЕсли; Если (ДатаПриема>ДатаКон) или (ПустоеЗначение (ДатаПриема)=1) или (ПустоеЗначение(ДатаУвольнения)=0) И (ДатаУвольнения < ДатаНач) Тогда // Если (ДатаПриема>ДатаКон) или (ПустоеЗначение (ДатаПриема)=1) Или (ДатаУвольнения<>Дата('00010101')) И (ДатаУвольнения < ДатаНач) Тогда // принят на работу позже начала отчетного периода или дата приема не заполнена вообще //проверку даты увольнения также выполняем, так как если по сотрулнику в течение отчетного периода были //начисления или выплаты он учтется алгоритмом далее Продолжить; КонецЕсли; Для инд=1 по 3 Цикл //вносим в ТаблПериоды только тех сотрудников, по которым заведомо есть //информация о текущем месяце отчетного квартала // Если ((ДатаПриема<= Месяц[инд]) или ((Месяц[инд] <= ДатаПриема) и (ДатаПриема<= КонМесяца(Месяц[инд])))) Тогда // условие будет "истинно" только в первом после приема квартале Если ДатаПриема >= Месяц[инд] Тогда Если ДатаПриема >= КонМесяца(Месяц[инд]) Тогда Продолжить; КонецЕсли; КонецЕсли; ТаблПериоды.НоваяСтрока(); ТаблПериоды.Сотр = Сотр; ТаблПериоды.Месяц = Месяц[инд]; // определяем был ли штатным на конец каждого месяца или совместителем Если (ПустоеЗначение(ДатаУвольнения)=0) и (ДатаУвольнения <= НачМесяца(Месяц[инд])) Тогда Продолжить; Иначе Если (Сотр.ТипСотрудника.Получить(КонМесяца(Месяц[инд]))=1) Тогда Шт[инд] = Шт[инд]+1; ИначеЕсли (Сотр.ТипСотрудника.Получить(КонМесяца(Месяц[инд]))=0) Тогда Совмест[инд] = Совмест[инд]+1; КонецЕсли; КонецЕсли; КонецЦикла; //конец условия, что это не группа в справочнике сотрудников КонецЕсли; //конец перебора сотрудников в справочнике КонецЦикла; |