Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Расчет НДФЛ          
EritikWoW Подменю пользователя
сообщение 11.09.15, 6:11
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 53
Спасибо сказали: 1 раз
Рейтинг: 0

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

Функция РасчетНДФЛ()
    Ставка = РегистрыСведений.СтавкиНДФЛ.Выбрать(Дата(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
            
        КонецЕсли;        
     КонецЦикла;
КонецЕсли;
КонецЦикла;
    НДФЛПроводки.Очистить();
    НДФЛПроводки.Загрузить(ТабНДФЛ);
КонецФункции

sava1 Подменю пользователя
сообщение 11.09.15, 6:57
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2695
Из: Проскуров
Спасибо сказали: 682 раз
Рейтинг: 661

Так лажа налицо - два цикла в цикле;

Для Каждого Строчка из ТабНач Цикл
     Для каждого Строка из ТабНДФЛ Цикл
           Для каждого ст из ТабНач Цикл
                 Для каждого Стро из ТабНДФЛ цикл


Для такого пользования ТабНач и ТабНДФЛ нужно скопировать в другие и во внутренних циклах ходить по этим другим.
Иначе сбивается позиционирование внешних обходов.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 30.05.24, 7:24
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!