Исправление ошибки переноса стандартных вычетов по НДФЛ при конвертации данных ЗиК->ЗУП 2.5.45.3


При  конвертации данных штатными средствами  ЗУП 2.5.45.3, неверно переносится сведения о предоставленных вычетах по НДФЛ.

При выгрузке данных, обработкой v77exp.ert, которая идет в составе ЗУП 2.5.45.3, неверно выгружаются сведения о предоставленных вычетах по НДФЛ..

Кто не знает — эта обработка хранится в ЗУП в справочнике «Конвертации из информационных баз 1С:Предприятие 7.7» 

 

 

Ошибка закралась в функции ЗаполнитьТаблицуНДФЛПредоставленныеСтдВычетыФизЛиц()

 

Функция ЗаполнитьТаблицуНДФЛПредоставленныеСтдВычетыФизЛиц(
            ИсходящиеДанные = «», ВходящиеДанные = «», Источник = «», Приемник = «», ТипПриемника = «», Значение = «», Выражение = «»,
            Пусто = «», ВыборкаДанных = «», Объект = «», КоллекцияОбъектов = «», ОбъектКоллекции = «», ИмяПКО = «», ИмяПКОВидСубконто = «»,
            НомерПКО = «», НомерПКС = «», Правило = «», КлючВыгружаемыхДанных = «», НеЗапоминатьВыгруженные = «», НеЗамещатьОбъектПриЗагрузке = «»,
            ВсеОбъектыВыгружены = «», ТолькоПолучитьУзелСсылки = «», РежимЗаписи = «», РежимПроведения = «», СтандартнаяОбработка = «»,
            НеЗамещать = «», НеОчищать = «», УзелСсылки = «», УзелКоллекцииОбъектов = «», УзелОбъектаКоллекции = «», УзелСвойства = «»,
            ВидСубконто = «», Субконто = «», Отказ = «»)

    СписокФизлиц                    = ИсходящиеДанные;
    ДоходыВычетыНалогиСотрудников    = ВходящиеДанные;
    ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц = Источник;
    Год                                = Приемник;
    
    ВсегоСотров = СписокФизлиц.РазмерСписка();
    НомерРелизаИБ        = Число(СтрЗаменить(Константа.НомерРелиза, «.»,»»));
    
    Если ВсегоСотров > 0 Тогда
        
        БуферРазделов=СоздатьОбъект(«СписокЗначений»);
            
        Для СчСотров = 1 По ВсегоСотров  Цикл
            
            СтрокаИтоговойТаблицы = (СчСотров-1)*12;
            ФизЛицо = СписокФизлиц.ПолучитьЗначение(СчСотров);                             
            
            БуферРазделов.УдалитьВсе();
            ПоследнийМесяц = 0;
            
            // заполняем буферы
            Если (Год>=2011) и (НомерРелизаИБ >= 770318) Тогда
                
                ТаблицаВычетов = ПолучитьСписокСтандартныхВычетов(ФизЛицо,ДоходыВычетыНалогиСотрудников,СтрокаИтоговойТаблицы,Год, ПоследнийМесяц);  
                
    
                Если (ТаблицаВычетов.КоличествоСтрок() <> 0) Тогда
                    
                    Для СчМес = 1 По ПоследнийМесяц Цикл
                        
                        ПериодРегистрацииДохода        = Дата(Год,СчМес,1);
                        ПодразделениеОрганизации = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+СчМес,»Подразделение»);
                        МесяцНалоговогоПериода        = Дата(Год,СчМес,1);
                        
                        НомСтроки = «»;
                        Если ТаблицаВычетов.НайтиЗначение(СчМес,НомСтроки,»Месяц»)>0 Тогда
                            
                            Для СчСтрок = НомСтроки По ТаблицаВычетов.КоличествоСтрок() Цикл
                                ТаблицаВычетов.ПолучитьСтрокуПоНомеру(СчСтрок);//вот этой строки не хватает
                                Если ТаблицаВычетов.Месяц<>СчМес Тогда
                                    Прервать;
                                КонецЕсли;
                                
                                Если ТаблицаВычетов.СуммаВычета<>0 Тогда
                                    
                                    ПримененныйВычет            = ТаблицаВычетов.СуммаВычета;
                                    КодВычета                    = ТаблицаВычетов.КодВычета;
                                    ЗаполнитьТаблицуПредоставленныхВычетов(
                                    ФизЛицо,
                                    ПериодРегистрацииДохода,
                                    ПодразделениеОрганизации,
                                    МесяцНалоговогоПериода,
                                    КодВычета,
                                    ПримененныйВычет,
                                    ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);
                                    
                                КонецЕсли;
    
                            КонецЦикла;    
                            
                        КонецЕсли;
                        
                    КонецЦикла;
                    
                КонецЕсли;
                
            Иначе
                Если Год>=2009 Тогда
                    глЗаполнитьРазделыНК2009(ФизЛицо,»»,Год,ДоходыВычетыНалогиСотрудников,СтрокаИтоговойТаблицы,БуферРазделов,БуферРазделов,БуферРазделов,БуферРазделов,БуферРазделов,ПоследнийМесяц);
                Иначе
                    глЗаполнитьРазделыНК2005(ФизЛицо,»»,Год,ДоходыВычетыНалогиСотрудников,СтрокаИтоговойТаблицы,БуферРазделов,БуферРазделов,БуферРазделов,БуферРазделов,БуферРазделов,ПоследнийМесяц);
                КонецЕсли;
                
                Если (БуферРазделов.РазмерСписка() <> 0) Тогда
                    
                    Для СчМес = 1 По ПоследнийМесяц Цикл
                        
                        ПериодРегистрацииДохода        = Дата(Год,СчМес,1);
                        ПодразделениеОрганизации = ДоходыВычетыНалогиСотрудников.ПолучитьЗначение(СтрокаИтоговойТаблицы+СчМес,»Подразделение»);
                        МесяцНалоговогоПериода        = Дата(Год,СчМес,1);
                        
                        СчСтрок = ?(СтрДлина(СчМес)=1, «0»+СчМес, СчМес);
                        
                        
                        Если Год>=2009 Тогда
                            
                            Сумма103 = Число(Сокрлп(БуферРазделов.Получить(«СВМес3» + СчСтрок)));
                            Если Сумма103<>0 Тогда
                                ПримененныйВычет            = Сумма103;
                                КодВычета                    = «103»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма104 = Число(Сокрлп(БуферРазделов.Получить(«СВМес4» + СчСтрок)));
                            Если Сумма104<>0 Тогда
                                ПримененныйВычет            = Сумма104;
                                КодВычета                    = «104»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма105 = Число(Сокрлп(БуферРазделов.Получить(«СВМес5» + СчСтрок)));
                            Если Сумма105<>0 Тогда
                                ПримененныйВычет            = Сумма105;
                                КодВычета                    = «105»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма108 = Число(Сокрлп(БуферРазделов.Получить(«СВМес8» + СчСтрок)));
                            Если Сумма108<>0 Тогда
                                ПримененныйВычет            = Сумма108;
                                КодВычета                    = «108»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма109 = Число(Сокрлп(БуферРазделов.Получить(«СВМес9» + СчСтрок)));
                            Если Сумма109<>0 Тогда
                                ПримененныйВычет            = Сумма109;
                                КодВычета                    = «109»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма110 = Число(Сокрлп(БуферРазделов.Получить(«СВМес10» + СчСтрок)));
                            Если Сумма110<>0 Тогда
                                ПримененныйВычет            = Сумма110;
                                КодВычета                    = «110»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма111 = Число(Сокрлп(БуферРазделов.Получить(«СВМес11» + СчСтрок)));
                            Если Сумма111<>0 Тогда
                                ПримененныйВычет            = Сумма111;
                                КодВычета                    = «111»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма112 = Число(Сокрлп(БуферРазделов.Получить(«СВМес12» + СчСтрок)));
                            Если Сумма112<>0 Тогда
                                ПримененныйВычет            = Сумма112;
                                КодВычета                    = «112»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма113 = Число(Сокрлп(БуферРазделов.Получить(«СВМес13» + СчСтрок)));
                            Если Сумма113<>0 Тогда
                                ПримененныйВычет            = Сумма113;
                                КодВычета                    = «113»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            
                        Иначе
                            
                            Сумма101 = Число(Сокрлп(БуферРазделов.Получить(«СВМес1» + СчСтрок)));
                            Если Сумма101<>0 Тогда
                                ПримененныйВычет            = Сумма101;
                                КодВычета                    = «101»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма102 = Число(Сокрлп(БуферРазделов.Получить(«СВМес2» + СчСтрок)));
                            Если Сумма102<>0 Тогда
                                ПримененныйВычет            = Сумма102;
                                КодВычета                    = «102»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма103 = Число(Сокрлп(БуферРазделов.Получить(«СВМес3» + СчСтрок)));
                            Если Сумма103<>0 Тогда
                                ПримененныйВычет            = Сумма103;
                                КодВычета                    = «103»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма104 = Число(Сокрлп(БуферРазделов.Получить(«СВМес4» + СчСтрок)));
                            Если Сумма104<>0 Тогда
                                ПримененныйВычет            = Сумма104;
                                КодВычета                    = «104»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма105 = Число(Сокрлп(БуферРазделов.Получить(«СВМес5» + СчСтрок)));
                            Если Сумма105<>0 Тогда
                                ПримененныйВычет            = Сумма105;
                                КодВычета                    = «105»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма106 = Число(Сокрлп(БуферРазделов.Получить(«СВМес6» + СчСтрок)));
                            Если Сумма106<>0 Тогда
                                ПримененныйВычет            = Сумма106;
                                КодВычета                    = «106»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            Сумма107 = Число(Сокрлп(БуферРазделов.Получить(«СВМес7» + СчСтрок)));
                            Если Сумма107<>0 Тогда
                                ПримененныйВычет            = Сумма107;
                                КодВычета                    = «107»;
                                ЗаполнитьТаблицуПредоставленныхВычетов(
                                ФизЛицо,
                                ПериодРегистрацииДохода,
                                ПодразделениеОрганизации,
                                МесяцНалоговогоПериода,
                                КодВычета,
                                ПримененныйВычет,
                                ТаблицаНДФЛПредоставленныеСтандартныеВычетыФизЛиц);    
                            КонецЕсли;
                            
                            
                        КонецЕсли;
                        
                    КонецЦикла;
                    
                КонецЕсли;
                
            КонецЕсли;
            
        КонецЦикла;    
        
    КонецЕсли;

КонецФункции // ЗаполнитьТаблицуНДФЛПредоставленныеСтдВычетыФизЛиц()

19 Comments

  1. Abzkrs

    При конвертации данных штатными средствами ЗУП 2.5.45.3, неверно переносится сведения о предоставленных вычетах по НДФЛ.

    Перейти к публикации

    Reply
  2. Umos

    Молоток, чего тут скажешь

    Reply
  3. kis

    Умница!!!! У меня правда зарплата бюджетная, но судя по картинке косяк тот-же. Попробую поправлю. Но плюсик готова уже сейчас поставить.

    Reply
  4. kis

    В 7 зик у сотрудника два вычета на детей 114108 и 115 с 01/06/2011. Поправила прцедуру конвертации. 115 код в документе «Перенос данных» встал правильно, а 114108 вообще не перенесся. У меня 8 ЗикБУ (8-ка зарплата бюджет) релиз 1.0.35.1 (но по моему косяк с 34 релиза). Отпуска, больничные считаются правильно, но хочется чтобы все было красиво. Может еще где-то надо править?

    Reply
  5. Abzkrs

    (3) Так трудно сказать…

    Есть еще не понятный для меня цикл в функции ПолучитьСписокСтандартныхВычетов()

    Для чего оно надо, я так и не понял… но может оно именно и мешает?

    в самом конце

    Для Сч =0 По КолСтрок-1 Цикл
    
    Ном = КолСтрок — Сч;
    ТаблицаВычетов.ПолучитьСтрокуПоНомеру(Ном);
    КодВычета = ТаблицаВычетов.КодВычета;
    СуммаВычета = ТаблицаВычетов.СуммаВычета;
    
    Если СуммаВычета<0 Тогда
    СписокВычетов.Установить(КодВычета,-СуммаВычета + Число(СписокВычетов.Получить(КодВычета)));
    ТаблицаВычетов.СуммаВычета = 0;
    Иначе
    СуммаВычетаЛишняя = Число(СписокВычетов.Получить(КодВычета));
    СуммаВычетаНовая = Макс(0,СуммаВычета-СуммаВычетаЛишняя);
    СуммаВычетаЛишняяНовая = Макс(0,СуммаВычетаЛишняя — СуммаВычета + СуммаВычетаНовая);
    ТаблицаВычетов.СуммаВычета = СуммаВычетаНовая;
    СписокВычетов.Установить(КодВычета,СуммаВычетаЛишняяНовая);
    
    
    КонецЕсли;
    
    Если ТаблицаВычетов.СуммаВычета = 0 Тогда
    ТаблицаВычетов.УдалитьСтроку(Ном);
    КонецЕсли;
    
    КонецЦикла;
    

    Показать

    Reply
  6. 1Cworking

    (3) Неправильная функция: Найти(КодВычета, «114108»), надо:

    Найти(«114108»,КодВычета) или

    Найти(КодВычета, «114») ИЛИ Найти(КодВычета, «114»)

    // Вычеты на детей

    в этом месте замените код:

    ИначеЕсли (Найти(КодВычета, «114108») <> 0) ИЛИ (Найти(КодВычета, «115») <> 0) ИЛИ (Найти(КодВычета, «116») <> 0) ИЛИ (Найти(КодВычета, «117109») <> 0)

    ИЛИ (Найти(КодВычета, «118110») <> 0) ИЛИ (Найти(КодВычета, «119») <> 0) ИЛИ (Найти(КодВычета, «120») <> 0) ИЛИ (Найти(КодВычета, «121112») <> 0)

    ИЛИ (Найти(КодВычета, «122111») <> 0) ИЛИ (Найти(КодВычета, «123») <> 0) ИЛИ (Найти(КодВычета, «124») <> 0) ИЛИ (Найти(КодВычета, «125113») <> 0) Тогда

    на

    ИначеЕсли (Найти(КодВычета, «114») <> 0) ИЛИ (Найти(КодВычета, «108») <> 0) ИЛИ (Найти(КодВычета, «115») <> 0) ИЛИ (Найти(КодВычета, «116») <> 0)

    ИЛИ (Найти(КодВычета, «109») <> 0) ИЛИ (Найти(КодВычета, «117») <> 0)

    ИЛИ (Найти(КодВычета, «118») <> 0) ИЛИ (Найти(КодВычета, «110») <> 0) ИЛИ (Найти(КодВычета, «119») <> 0) ИЛИ (Найти(КодВычета, «120») <> 0)

    ИЛИ (Найти(КодВычета, «112») <> 0) ИЛИ (Найти(КодВычета, «121») <> 0) ИЛИ (Найти(КодВычета, «122») <> 0)ИЛИ (Найти(КодВычета, «111») <> 0)

    ИЛИ (Найти(КодВычета, «123») <> 0) ИЛИ (Найти(КодВычета, «124») <> 0) ИЛИ (Найти(КодВычета, «125») <> 0) ИЛИ (Найти(КодВычета, «113») <> 0) Тогда

    Reply
  7. econom1

    и для комплексной такая же фигня

    спасибо!

    Reply
  8. Katarri

    Спасибо большое, очень помогли!))

    Reply
  9. pacas

    Спасиб помогло

    Reply
  10. kis

    (5) 1Cworking, Поправила модуль как написано, переносит 108 и 114 вычеты в справочник вычетов и в документы переноса , их потом обработкой можно заменить на вычет 114/108 и удалить. Такой результат меня устраивает. Но мне пришлось снимать конфигурацию с поддержки. А как теперь вернуть замочек на место. Я в программировании не сильна. Мне с замочком спокойнее. Подскажите, пожалуйста.

    Reply
  11. 1Cworking

    (10) Есть справочник «Конвертации из информационных баз…». Из него можно получить обработку выгрузки из ЗиК и уже редактировать и использовать ее при выгрузке из ЗиК. При этом конфигурация не меняется и замочек на месте.

    Вот обработка , которую я использовал V77ExpМоя318.ert. В ней добавлена возможность загружать только непом.на уд.( это для того, чтобы можно было выгружать/загружать частями).

    Reply
  12. kis

    (11) 1Cworking, Я из 8 ЗикБУ выгражала V77Exp.ert, редактировала в конфигураторе 7 зик, снимала замочек с 8 ЗикБУ и опять загружала в справочник «Конвертации из информационных баз…». Из 7 Зик V77Exp.ert запускается, но там надо указать Имя файла правил. А где взять эти правила я не знаю. И как потом в 8-ку загрузить?

    Reply
  13. 1Cworking

    (12) правила выгружаются там же. Можете взять от сюда.

    Reply
  14. kis

    (13) 1Cworking, Огромное спасибо !!! Нашла я правила в справочнике «Конвертации из информационных баз…». Выгрузила данные из 7 зик 321 в 8 ЗикБУ 35,2, все получилось. Только выгрузка через файл выполнялась раза в три быстрее. 🙂

    Reply
  15. Prooa

    а если база уже перенесена как можно перегрузить именно эту информацию

    Reply
  16. kis

    (15) Prooa, посмотри http://infostart.ru/public/121850/.

    Reply
  17. Prooa

    (16) kis, это я сам уже сделал

    Reply
  18. samamoiloff

    Да, забавно. Еще в 2010 писал в (Изменения стандартных правил выгрузки перехода с ЗиК на ЗУП (вычеты НДФЛ на детей) про разные ошибочки, так этот вопрос и тянется, как Змей Горыныч трансформируясь и отращивая головы… 🙂

    Reply
  19. kurvik

    Хорошая обработка.А не то исправляли вручную.Будем использовать,Спасибо.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *