gifts2017

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

Опубликовал Александр Морозов (Abzkrs) в раздел Программирование - Практика программирования

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


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

См. также

Подписаться Добавить вознаграждение

Комментарии

0. Александр Морозов (Abzkrs) 25.01.12 05:12
При конвертации данных штатными средствами ЗУП 2.5.45.3, неверно переносится сведения о предоставленных вычетах по НДФЛ.

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

1. Umos (Umos) 25.01.12 05:12
Молоток, чего тут скажешь
2. Olga (kis) 25.01.12 14:39
Умница!!!! У меня правда зарплата бюджетная, но судя по картинке косяк тот-же. Попробую поправлю. Но плюсик готова уже сейчас поставить.
3. Olga (kis) 26.01.12 09:38
В 7 зик у сотрудника два вычета на детей 114\108 и 115 с 01/06/2011. Поправила прцедуру конвертации. 115 код в документе "Перенос данных" встал правильно, а 114\108 вообще не перенесся. У меня 8 ЗикБУ (8-ка зарплата бюджет) релиз 1.0.35.1 (но по моему косяк с 34 релиза). Отпуска, больничные считаются правильно, но хочется чтобы все было красиво. Может еще где-то надо править?
4. Александр Морозов (Abzkrs) 26.01.12 10:28
(3) Так трудно сказать...
Есть еще не понятный для меня цикл в функции ПолучитьСписокСтандартныхВычетов()
Для чего оно надо, я так и не понял... но может оно именно и мешает?
в самом конце

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


		КонецЕсли;  
		
		Если ТаблицаВычетов.СуммаВычета = 0 Тогда
			ТаблицаВычетов.УдалитьСтроку(Ном);    
		КонецЕсли;
		
	КонецЦикла; 
...Показать Скрыть
5. Владимир (1Cworking) 28.01.12 08:31
(3) Неправильная функция: Найти(КодВычета, "114\108"), надо:
Найти("114\108",КодВычета) или
Найти(КодВычета, "114") ИЛИ Найти(КодВычета, "114")

// Вычеты на детей
в этом месте замените код:

ИначеЕсли (Найти(КодВычета, "114\108") <> 0) ИЛИ (Найти(КодВычета, "115") <> 0) ИЛИ (Найти(КодВычета, "116") <> 0) ИЛИ (Найти(КодВычета, "117\109") <> 0)
ИЛИ (Найти(КодВычета, "118\110") <> 0) ИЛИ (Найти(КодВычета, "119") <> 0) ИЛИ (Найти(КодВычета, "120") <> 0) ИЛИ (Найти(КодВычета, "121\112") <> 0)
ИЛИ (Найти(КодВычета, "122\111") <> 0) ИЛИ (Найти(КодВычета, "123") <> 0) ИЛИ (Найти(КодВычета, "124") <> 0) ИЛИ (Найти(КодВычета, "125\113") <> 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) Тогда
6. econom1 30.01.12 17:28
и для комплексной такая же фигня
спасибо!
8. Катерина 1 (Katarri) 31.01.12 17:31
Спасибо большое, очень помогли!))
9. Александр П (pacas) 02.02.12 12:50
10. Olga (kis) 12.02.12 23:45
(5) 1Cworking, Поправила модуль как написано, переносит 108 и 114 вычеты в справочник вычетов и в документы переноса , их потом обработкой можно заменить на вычет 114/108 и удалить. Такой результат меня устраивает. Но мне пришлось снимать конфигурацию с поддержки. А как теперь вернуть замочек на место. Я в программировании не сильна. Мне с замочком спокойнее. Подскажите, пожалуйста.
11. Владимир (1Cworking) 13.02.12 06:59
(10) Есть справочник "Конвертации из информационных баз...". Из него можно получить обработку выгрузки из ЗиК и уже редактировать и использовать ее при выгрузке из ЗиК. При этом конфигурация не меняется и замочек на месте.
Вот обработка , которую я использовал V77ExpМоя318.ert. В ней добавлена возможность загружать только непом.на уд.( это для того, чтобы можно было выгружать/загружать частями).
Прикрепленные файлы:
V77ExpМоя318.ert
12. Olga (kis) 13.02.12 10:06
(11) 1Cworking, Я из 8 ЗикБУ выгражала V77Exp.ert, редактировала в конфигураторе 7 зик, снимала замочек с 8 ЗикБУ и опять загружала в справочник "Конвертации из информационных баз...". Из 7 Зик V77Exp.ert запускается, но там надо указать Имя файла правил. А где взять эти правила я не знаю. И как потом в 8-ку загрузить?
13. Владимир (1Cworking) 13.02.12 17:34
(12) правила выгружаются там же. Можете взять от сюда.
Прикрепленные файлы:
PrB.rar
14. Olga (kis) 13.02.12 20:13
(13) 1Cworking, Огромное спасибо !!! Нашла я правила в справочнике "Конвертации из информационных баз...". Выгрузила данные из 7 зик 321 в 8 ЗикБУ 35,2, все получилось. Только выгрузка через файл выполнялась раза в три быстрее. :)
15. Алексей Мальцев (Prooa) 19.03.12 04:24
а если база уже перенесена как можно перегрузить именно эту информацию
17. Алексей Мальцев (Prooa) 24.03.12 08:35
(16) kis, это я сам уже сделал
18. Владимир Самойлов (samamoiloff) 21.05.12 23:40
Да, забавно. Еще в 2010 писал в (Изменения стандартных правил выгрузки перехода с ЗиК на ЗУП (вычеты НДФЛ на детей) про разные ошибочки, так этот вопрос и тянется, как Змей Горыныч трансформируясь и отращивая головы... :)
19. Viktor (kurvik) 16.11.12 17:36
Хорошая обработка.А не то исправляли вручную.Будем использовать,Спасибо.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа