6.
Michael_K
8
28.11.11 21:58
Сейчас в теме
Спасибо огромное! Небольшая переделка и на крупных предприятиях запросто выводятся сотрудники с тремя и более детьми, что сейчас очень актуально!
Вот, кому надо - пользуйтесь. Написано "на живую нитку", просьба сильно не пинать, было не до красоты. Если у сотрудника куча закрытых вычетов, например ежегодно закрывался и с НГ вводился новый - такие тоже попадут, кому надо доработайте, мне для анализа хватило. :))) Автору еще раз респект! В форму вставьте флажек с идентификатором флБольше3х и на закладке Дополнительно свяжите его с Процедурой ПриИзмененииФлага()
//******************************************************************************
Процедура ПриИзмененииФлага()
Если флБольше3х > 0 Тогда
флСортПоКодам=1;
КонецЕсли;
КонецПроцедуры
Процедура Сформировать()
спр = СоздатьОбъект("Справочник.Сотрудники");
тз = СоздатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка("Сотрудник", "Справочник.Сотрудники");
тз.НоваяКолонка("Код", "Строка");
тз.НоваяКолонка("Начало", "Дата");
тз.НоваяКолонка("Окончание", "Дата");
тз.НоваяКолонка("Сумма", "Число");
спр1 = СоздатьОбъект("Справочник.ВычетыСотрудниковПоНДФЛ");
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент() = 1 Цикл
Если спр.ЭтоГруппа() = 1 Тогда
Продолжить;
КонецЕсли;
спр1.ИспользоватьВладельца(спр.ТекущийЭлемент());
спр1.ВыбратьЭлементы();
Пока спр1.ПолучитьЭлемент() = 1 Цикл
тз.НоваяСтрока();
тз.Сотрудник = спр.ТекущийЭлемент();
тз.Код = спр1.ВидВычета.Код;
тз.Начало = спр1.ДатаНачала;
тз.Окончание = спр1.ДатаОкончания;
кв = СокрЛП(тз.Код);
Если спр1.Сумма = 0 Тогда
тз.Сумма = спр1.ВидВычета.Сумма.Получить(Дата1);
Иначе
тз.Сумма = спр1.Сумма;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если флСортПоКодам = 1 Тогда
тз.Сортировать("Код+, Сотрудник+");
КонецЕсли;
Таб = СоздатьОбъект("Таблица");
Таб.ВывестиСекцию("Шапка");
//КМЮ++
Если флБольше3х = 0 Тогда
тз.ВыбратьСтроки();
Пока тз.ПолучитьСтроку() = 1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;
Иначе //а здесь выводим только с детьми больше 2-х
тзКопия = СоздатьОбъект("ТаблицаЗначений");
тзПечать = СоздатьОбъект("ТаблицаЗначений");
чИ=0;
чНачало=1;
чКонец=1;
сСотрудник="";
тз.Выгрузить(тзКопия);
тз.Выгрузить(тзПечать);
тзКопия.ВыбратьСтроки();
Пока тзКопия.ПолучитьСтроку() = 1 Цикл
чИ=чИ+1;
Если Число(тзКопия.Код) <> 108 Тогда
Продолжить;
Иначе
Если сСотрудник <> тзКопия.Сотрудник.Наименование Тогда
сСотрудник = тзКопия.Сотрудник.Наименование;
Если чКонец - чНачало + 1 > 2 Тогда //Выводим
тзПечать.Выгрузить(тз,чНачало,чКонец);
чНачало = чИ;
чКонец = чИ;
тз.ВыбратьСтроки();
Пока тз.ПолучитьСтроку() = 1 Цикл
//и убираем закрытые или не начатые вычеты
Если (тз.Начало > Дата1) Или ((ПустоеЗначение(тз.Окончание) = 0) И (тз.Окончание < Дата1)) Тогда
Продолжить;
Иначе
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
Иначе
чНачало = чИ;
чКонец = чИ;
КонецЕсли;
Иначе //Добавляем
чКонец=чИ;
КонецЕсли;
КонецЕсли;
КонецЦикла;
//На всякий случай проверка на детей инвалидов
тзКопия.Выгрузить(тз);
тз.ВыбратьСтроки();
Пока тз.ПолучитьСтроку() = 1 Цикл
Если Число(тз.Код) <> 109 Тогда
Продолжить;
Иначе
//и убираем закрытые или не начатые вычеты
Если (тз.Начало > Дата1) Или ((ПустоеЗначение(тз.Окончание) = 0) И (тз.Окончание < Дата1)) Тогда
Продолжить;
Иначе
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
//КМЮ--
Таб.ВывестиСекцию("Подвал");
Таб.ТолькоПросмотр(1);
Таб.ПараметрыСтраницы(2, 100, , , , , , , , 1);
Таб.Опции(0, 0, 3, 2);
Таб.Показать("Отчет");
КонецПроцедуры
//******************************************************************************
// ПриОткрытии()
//
Процедура ПриОткрытии()
Дата1 = РабочаяДата();
флСортПоКодам = 1;
КонецПроцедуры // ПриОткрытии