Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
16 июн 2024, 10:18

1С 8.2 СХ "ИнАгро" РасчетНДФЛ

Автор EritikWoW, 11 сен 2015, 16:00

0 Пользователей и 1 гость просматривают эту тему.

EritikWoW

Ребят кому не сложно помогите оптимизировать и решить проьлему зацикливания создания строк, а то я уже не соображаю ! За ранее ООООГРОМНОЕ СПАСИБО ! =)

Функция РасчетНДФЛ()
Ставка = РегистрыСведений.СтавкиНДФЛ.Выбрать(Дата(01,01,0001),КонецГода(Дата));
ТабНДФЛ = НДФЛПроводки.Выгрузить();
ТабНач = НачисленияПроводки.Выгрузить();
ТабВзнос = ВзносыПроводки.Выгрузить();
ТабОтрВБУ = ОтражениеВРеглУчете.Выгрузить();
НольОдин = Число("0,01");
Для Каждого Строчка из ТабНач Цикл
Если Строчка.СчетКт.Ссылка = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда
Работник = Строчка.Сотрудник;
Для каждого Строка из ТабНДФЛ Цикл
Если Строка.Сотрудник = Работник Тогда
СуммНач = 0;
СуммВзн = 0;
СумБоль = 0;
СумНДФЛ = 0;
СумВС = 0;
СуммаВС663 = 0;
СуммаНДФЛ663 = 0;
СуммаВС661 = 0;
СуммаНДФЛ661 = 0;
Для Каждого Стр Из ТабВзнос цикл //
Если Стр.Сотрудник = Работник И НЕ Стр.Результат = 0 и
Стр.СчетДТ.Ссылка = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка Тогда //
СумВзн = Стр.Результат; //
СуммВзн = СуммВзн + СумВзн; //
СуммаВзн = СуммВзн //
Иначе Продолжить //
КонецЕсли; //
КонецЦикла; //
РазмерЛьготы = РегистрыСведений.РазмерыЛьготНДФЛ.ПолучитьПоследнее(ТекущаяДата()); //
Для Каждого Строк из ТабОтрВБУ Цикл //
Если Строк.СубконтоКт1 = Работник Тогда //
СумНач = Строк.Сумма; //
СуммНач = СуммНач + СумНач; //
СуммаНач = СуммНач //
КонецЕсли;
КонецЦикла; //
Для каждого ст из ТабНач Цикл
Если Строчка.СчетКт.Ссылка = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка и Ст.Сотрудник = Работник Тогда
СуммБоль = ст.Результат;
СумБоль = СумБоль + СуммБоль;
СуммаБоль = СумБоль;
КонецЕсли;
КонецЦикла;
Для каждого Стро из ТабНДФЛ цикл
Если Стро.Сотрудник = Работник Тогда
Если НЕ Стро.ДоходНДФЛ.Ссылка = Справочники.ВидыДоходовНДФЛ.ВоенныйСбор.Ссылка Тогда
СуммНДФЛ = Стро.Результат;
СумНДФЛ = СумНДФЛ + СуммНДФЛ;
СуммаНДФЛ = СумНДФЛ;
КонецЕсли;
Если Стро.ДоходНДФЛ.Ссылка = Справочники.ВидыДоходовНДФЛ.ВоенныйСбор.Ссылка Тогда
СуммВС = Стро.Результат;
СумВС = СумВС + СуммВС;
СуммаВС = СумВС;
КонецЕсли;
КонецЕсли;
Если НЕ СуммаБоль = 0 И НЕ СуммаНДФЛ = 0 И НЕ СуммаВС = 0 И
НЕ СуммаБоль = Неопределено и НЕ СуммаНДФЛ = Неопределено И НЕ СуммаВС = Неопределено Тогда
ПроцентБольничных = (СуммаБоль*100)/СуммаНач;
СуммаНДФЛ663 = (СуммаНДФЛ/100)*ПроцентБольничных;
СуммаНДФЛ663 = Число(Формат(СуммаНДФЛ663,"ЧДЦ=2"));
СуммаНДФЛ661 = СуммаНДФЛ - СуммаНДФЛ663;
СуммаВС663 = (СуммаВС/100)*ПроцентБольничных;
СуммаВС663 = Число(Формат(СуммаВС663,"ЧДЦ=2"));
СуммаВС661 = СуммаВС - СуммаВС663;
КонецЕсли;
КонецЦикла;
НовСтрока = ТабНДФЛ.Добавить();
НовСтрока.БазовыйПериодНачало = Строка.БазовыйПериодНачало;
НовСтрока.ДоходНДФЛ = Строка.ДоходНДФЛ;
Если СуммаНДФЛ661 > Число(0) Тогда
НовСтрока.Результат = СуммаНДФЛ661;
СуммаНДФЛ661 = Число(0)
КонецЕсли;
Если СуммаВС661 > Число(0) И СуммаНДФЛ661 < Число(0)Тогда
НовСтрока.Результат = СуммаНДФЛ661;
СуммаНДФЛ661 = Число(0)
КонецЕсли;
НовСтрока.Сотрудник = Работник;
НовСтрока.СубконтоДт1 = Работник;
НовСтрока.СубконтоКт1 = Строка.СубконтоКт1;
НовСтрока.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка;
НовСтрока.СчетКт = Строка.СчетКт;
Если СуммаНДФЛ663 > Число(0) Тогда
Строка.Результат = СуммаНДФЛ663;
СуммаНДФЛ663= Число(0)
КонецЕсли;
Если СуммаВС663 > Число(0) и СуммаНДФЛ663 < Число(0) Тогда
Строка.Результат = СуммаВС663;
СуммаВС663= Число(0)
КонецЕсли;
Строка.СчетДт = ПланыСчетов.Хозрасчетный.РасчетыПоДругимВыплатам.Ссылка;
СуммаНДФЛ663 = 0
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
НДФЛПроводки.Очистить();
НДФЛПроводки.Загрузить(ТабНДФЛ);
КонецФункции

Теги:
Рейтинг@Mail.ru

Поиск