Имя: Пароль:
1C
1C 7.7
v7: расчет зарплаты- есть ошибка
,
0 Mikkei
 
28.11.11
12:45
при расчете з\п неправильно вычисляется пенсионный фонд . Объясняю - вычисляется после вычета из основного после вычита медстраха. А надо из основного.
Предлагаю посмотреть модуль Подскажите
// *******************************************************************************************
Процедура ОбработкаПроведения()
   Если глМожноЗаписатьДокумент(Контекст)=0 Тогда
       СтатусВозврата(0);
   КонецЕсли;      
   Ит=СоздатьОбъект("БухгалтерскиеИтоги");                
   Ит.ПериодМ(ДатаДок);
   ФОТ = 0;
   ФОТосн = 0;
   ВыбратьСтроки();
   Пока ПолучитьСтроку() = 1 Цикл
       //Если СокрЛП(Сотрудник.Код)="10028" Тогда
       //    СпрСотрудник = СоздатьОбъект( "Справочник.Сотрудники" );
       //    СпрСотрудник.НайтиПоКоду("00005");
       //    Сотрудник= СпрСотрудник.ТекущийЭлемент();
       //КонецЕсли;


       ПрофВзнос= Сотрудник.ПрофВзнос.Получить(ДатаДок);
       Если Пересчет=1 Тогда
           НапрВыпл=НапрВыпл-Остаток;
       КонецЕсли;
       МедСтрахованиеСотрудниковСНачГода=0;
       ВаловыйДоходСНачГода = 0;
       ПодоходныйНалогСНачГода = 0;
       НеОблагается = 0;      
       КолМесРаб = 0;
       РасчСумМин=0;
       РасчСумШкалыПН=0;            
       ПодоходныйНалог = 0;
       ПодНалогМес=0;
       ПенсФонд=0;
       НапрНаВыплСНачГода=0;
       ПрочДоходСНачГода=0;
       ДатаИт = КонМесяца(ДатаДок);
       Ит.ПериодМ(ДатаИт);
       //___________________________________________________________________________________
       БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
       БухИт.ПериодМ(ДатаДок);
       УжеНачОсв=0;    
       Если Сотрудник.ДатаПриема>НачМесяца(ДатаДок) Тогда
           УжеНачОсв=1;    
       Иначе
           УжеНачОсв = БухИт.ДО(СчетПоКоду("КМ",ПланыСчетов.Вспомогательный),"С",,Сотрудник);
       КонецЕсли;
       Если Сотрудник.ДатаУвольнения<>Дата("..") Тогда
           Если Сотрудник.ДатаУвольнения<КонМесяца(ДатаДок) Тогда
               УжеНачОсв=1;    
           Иначе
               УжеНачОсв = БухИт.ДО(СчетПоКоду("КМ",ПланыСчетов.Вспомогательный),"С",,Сотрудник);
           КонецЕсли;      
       КонецЕсли;      
       Если УжеНачОсв = 0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("КМ",ПланыСчетов.Вспомогательный);
           Операция.Дебет.Сотрудники = Сотрудник;
           Операция.Кредит.Счет = СчетПоКоду("КМ",ПланыСчетов.Вспомогательный);
           Операция.Кредит.Сотрудники = Сотрудник;
           Операция.Сумма = 1;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Месяц работы-"+Сотрудник;
           Операция.Записать();
           //___________________________________________________________________________________
       КонецЕсли;
       БухИтНГ = СоздатьОбъект("БухгалтерскиеИтоги");
       БухИтНГ.ПериодМНГ(ДатаДок);
       ОсвобождениеПредГода= Сотрудник.ОсвобождениеПредГода.Получить(НачГода(ДатаДок));
       НеОблагается =НеОблагается + БухИтНГ.ДО(СчетПоКоду("НМ",ПланыСчетов.Вспомогательный),"С",,Сотрудник)+ОсвобождениеПредГода;
       КолМесРаб = КолМесРаб+БухИтНГ.ДО(СчетПоКоду("КМ",ПланыСчетов.Вспомогательный),"С",,Сотрудник);
       ПрочДоходСНачГода=БухИтНГ.ДО(СчетПоКоду("ПД",ПланыСчетов.Вспомогательный),"С",,Сотрудник);
       СуммаБольничный=БухИтНГ.ДО(СчетПоКоду("НЧ.8",ПланыСчетов.Вспомогательный),"С",,Сотрудник);

       ИтНГ = СоздатьОбъект("БухгалтерскиеИтоги");
       ИтНГ.ВключатьСубсчета(1,1);
       ИтНГ.ИспользоватьСубконто(ВидыСубконто.Сотрудники,Сотрудник,2);
       ИтНГ.ВыполнитьЗапрос(НачГода(ДатаДок),ДатаДок,"531.1",,,2,,"С");
       
       Если ИтНГ.ПолучитьКорСчет(,"534.7") = 1 Тогда
           ПодоходныйНалогСНачГода = ИтНГ.КорДО();
       Иначе
           ПодоходныйНалогСНачГода = 0;
       КонецЕсли;
       Если Сотрудник.МедСтрахованиеСотрудников.Получить(ДатаДок)= Перечисление.Булево.Нет Тогда
           МедСтрахованиеСотрудников=0;
       Иначе
           МедСтрахованиеСотрудников=(НапрВыпл-Больничный-МатерПомощь)*Константа.МедСтрахованиеСотрудников.Получить(Месяц)/100;
       КонецЕсли;
       Если ИтНГ.ПолучитьКорСчет(,"533.3") = 1 Тогда
           МедСтрахованиеСотрудниковСНачГода = ИтНГ.КорДО()+МедСтрахованиеСотрудников;
       Иначе
           МедСтрахованиеСотрудниковСНачГода = МедСтрахованиеСотрудников;
       КонецЕсли;
       
       Если ИтНГ.ПолучитьКорСчет(,"531.0") = 1 Тогда
           НапрНаВыплСНачГода = ИтНГ.КорКО();
       Иначе
           НапрНаВыплСНачГода = 0;
       КонецЕсли;
       //*******************************************************************************************        
       Если Месяц = '  .  .  ' Тогда
           ДатаОпр=ДатаДок;
       Иначе    
           ДатаОпр=Месяц;
       КонецЕсли;    
       
       СтавкаПенсФонда=Константа.СтавкаПенсФонда.Получить(ДатаОпр);
       //***************************************************************************************************        
       СуммаНапрВыпл =0;  
       СуммаМатерПомощь = 0;  
       СуммаПенсФонд = 0;  
       ПенсФонд=0;
       ИтогНапрВыпл=0;
       ИтогПенсФонд=0;
       ИтогМатерПомощь=0;
       ИтогБольничный=0;
       Док =  СоздатьОбъект( "Документ.ЗарПлНапрНаВыпл" );
       Док.ВыбратьДокументы(НачГода(Месяц),ДатаДок);
       Пока Док.ПолучитьДокумент() = 1 Цикл
           Стр = Док.Вид();
           Если Док.Проведен()=1 Тогда
               Если Стр = "ЗарПлНапрНаВыпл" Тогда  
                   Если Док.НомерДок<>НомерДок Тогда
//                        СуммаБольничный = 0;  
//                        Если Док.Итог("Больничный")<>0 Тогда
//                            Пока Док.ПолучитьСтроку() = 1 Цикл  
//                                СотрудникОпр=Док.Сотрудник;
//                                Если СотрудникОпр=Сотрудник Тогда
//                                СуммаБольничный = Док.Больничный;  
//                                КонецЕсли;
//                            КонецЦикла; // по строкам документа
//                        КонецЕсли;
//                        Если СуммаБольничный<>0 Тогда
//                            Если ДатаДок<Дата("08.09.2006") Тогда  
//                                
//                            ИначеЕсли НачГода(Месяц)<НачГода(ДатаДок) Тогда
//
//                            Иначе
//                                ИтогоБольничный=ИтогоБольничный+СуммаБольничный;
//                            КонецЕсли;
//                        КонецЕсли;
                       Если Док.Месяц=Месяц Тогда
                           Пока Док.ПолучитьСтроку() = 1 Цикл  
                               СотрудникОпр=Док.Сотрудник;
                               Если СотрудникОпр=Сотрудник Тогда
                                   СуммаНапрВыпл = Док.НапрВыпл;  
                                   ИтогБольничный=ИтогБольничный+Док.Больничный;
                                   ИтогМатерПомощь=ИтогМатерПомощь+Док.МатерПомощь;
                                   СуммаПенсФонд = Док.ПенсФонд;  
                                   ИтогНапрВыпл=ИтогНапрВыпл+СуммаНапрВыпл;
                                   ИтогПенсФонд=ИтогПенсФонд+СуммаПенсФонд;
                               КонецЕсли;
                           КонецЦикла; // по строкам документа
                       КонецЕсли;
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
       
       //***************************************************************************************************        
       Если ((ИтогНапрВыпл+НапрВыпл)-(ИтогБольничный+Больничный)-(ИтогМатерПомощь+МатерПомощь))>=Константа.ПределПенсФонда.Получить(ДатаОпр) Тогда
           ПенсФондОпр=Константа.ПределПенсФонда.Получить(ДатаОпр)*(СтавкаПенсФонда/100);
       Иначе
           ПенсФондОпр=Окр(((ИтогНапрВыпл+НапрВыпл)-(ИтогБольничный+Больничный)-(ИтогМатерПомощь+МатерПомощь))*(СтавкаПенсФонда/100),2,1);
       КонецЕсли;    
       Если ПенсФондОпр-ИтогПенсФонд>0 Тогда
           ПенсФонд=ПенсФондОпр-ИтогПенсФонд;
           //Иначе
           //    ПенсФонд=0;
       КонецЕсли;    
       //Если (НапрВыпл-Больничный-МатерПомощь)>=Константа.ПределПенсФонда.Получить(ДатаОпр) Тогда
       //    ПенсФонд=Константа.ПределПенсФонда.Получить(ДатаОпр)*(СтавкаПенсФонда/100);
       //Иначе
       //    ПенсФонд=(НапрВыпл-Больничный-МатерПомощь)*(СтавкаПенсФонда/100);
       //КонецЕсли;  
       
       Если ДатаДок<Дата("01.01.2005") Тогда
           ПенсСтрахованиеСотрудников=0;
           ПенсСтрахованиеСотрудниковСНачГода = 0;
       Иначе
           ПенсСтрахованиеСотрудников=ПенсФонд;
           Если ИтНГ.ПолучитьКорСчет(,"229.2") = 1 Тогда
               ПенсСтрахованиеСотрудниковСНачГода = ИтНГ.КорДО()+ПенсСтрахованиеСотрудников;
           Иначе
               ПенсСтрахованиеСотрудниковСНачГода = ПенсСтрахованиеСотрудников;
           КонецЕсли;
       КонецЕсли;
       //*******************************************************************************************
       
       ВаловыйДоходСНачГода = ВаловыйДоходСНачГода+НапрНаВыплСНачГода+ПрочДоходСНачГода;
       ВаловыйДоход = ВаловыйДоходСНачГода+НапрВыпл+ПрочиеДоходы;
       Если ДатаДок<Дата("01.01.2007") Тогда
           ОблагаемаяСумма = ВаловыйДоход-НеОблагается-МедСтрахованиеСотрудниковСНачГода-ПенсСтрахованиеСотрудниковСНачГода;
       Иначе        
           ОблагаемаяСумма = ВаловыйДоход-НеОблагается-МедСтрахованиеСотрудниковСНачГода-ПенсСтрахованиеСотрудниковСНачГода-(СуммаБольничный+Больничный);
       КонецЕсли;
       Если КолМесРаб = 0 Тогда
           КолМесРаб=1
       КонецЕсли;
       ПервыйПредел=Константа.ПервыйПредел.Получить(ДатаДок);
       ВторойПредел=Константа.ВторойПредел.Получить(ДатаДок);
       ТретийПредел=Константа.ТретийПредел.Получить(ДатаДок);
       СтавкаПодохНалога1=Константа.ПодохНалогПервыйПредел.Получить(ДатаДок);
       СтавкаПодохНалога2=Константа.ПодохНалогВторойПредел.Получить(ДатаДок);
       СтавкаПодохНалога3=Константа.ПодохНалогТретийПредел.Получить(ДатаДок);
       Если Сотрудник.ВидУдержанийПодохНалога.Получить(ДатаДок)=Перечисление.ВидУдержанийПодохНалога.Предельный Тогда
           ПодоходныйНалог=ОблагаемаяСумма*(СтавкаПодохНалога3/100);
       Иначе
           Если ОблагаемаяСумма > 0 Тогда
               Если ОблагаемаяСумма <= ПервыйПредел*КолМесРаб Тогда
                   ПодоходныйНалог=ОблагаемаяСумма*СтавкаПодохНалога1/100;
               ИначеЕсли ОблагаемаяСумма <= ВторойПредел*КолМесРаб Тогда
                   РасчСумМин1=(ПервыйПредел*СтавкаПодохНалога1/100) ;
                   РасчСумМин=РасчСумМин1*КолМесРаб;    
                   РасчСумШкалыПН=ПервыйПредел*КолМесРаб;            
                   ПодоходныйНалог=РасчСумМин+(ОблагаемаяСумма-РасчСумШкалыПН)*(СтавкаПодохНалога2/100);
               ИначеЕсли ОблагаемаяСумма > ВторойПредел*КолМесРаб Тогда
                   РасчСумМин1=(ВторойПредел-ПервыйПредел)*(СтавкаПодохНалога2/100)+ПервыйПредел*(СтавкаПодохНалога1/100);
                   РасчСумМин=РасчСумМин1*КолМесРаб;
                   РасчСумШкалыПН=ВторойПредел*КолМесРаб;            
                   ПодоходныйНалог=РасчСумМин+(ОблагаемаяСумма-РасчСумШкалыПН)*(СтавкаПодохНалога3/100);
               КонецЕсли;              
           КонецЕсли;              
       КонецЕсли;    
       
       Если ПодоходныйНалогСНачГода=0 Тогда      
           Если ПодоходныйНалог>0 Тогда      
               ПодНалогМес=ПодоходныйНалог;
           Иначе
               ПодНалогМес=0;  
           КонецЕсли;
       КонецЕсли;
       
       Если ПодоходныйНалогСНачГода>0 Тогда
           ПодНалогМес=ПодоходныйНалог-ПодоходныйНалогСНачГода    
       КонецЕсли;
       //_________________________________________________________________________________
       Если ПодНалогМес <>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("531.1",ПланыСчетов.Основной);;
           Операция.Дебет. Сотрудники= Сотрудник;
           Операция.Кредит.Счет = СчетПоКоду("534.7",ПланыСчетов.Основной);
           Если ДатаДок>=Дата("01.01.2005") Тогда
               Операция.Кредит. ПодразделенияФирмы= Сотрудник.Подразделение.Получить(ДатаДок).ПодразделенияФирмы;
           КонецЕсли;
           Операция.Сумма = ПодНалогМес;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Impozit pe venit pers.fizice";
       КонецЕсли;        
       Если ПенсФонд <>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("531.1",ПланыСчетов.Основной);;
           Операция.Дебет. Сотрудники= Сотрудник;
           Операция.Кредит.Счет = СчетПоКоду("229.2",ПланыСчетов.Основной);
           СпрКонтрагенты = СоздатьОбъект( "Справочник.Контрагенты" );
           СпрКонтрагенты.НайтиПоКоду("3/6");
           Операция.Кредит.Контрагенты = СпрКонтрагенты.ТекущийЭлемент();
           Операция.Сумма = ПенсФонд;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Fondul special de pensii "+СтавкаПенсФонда+"%";
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("946",ПланыСчетов.Основной);
           Операция.Дебет.Сотрудники = Сотрудник;
           Операция.Сумма = ПенсФонд;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Fondul special de pensii "+СтавкаПенсФонда+"%";
       КонецЕсли;        
       Если МедСтрахованиеСотрудников <>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("531.1",ПланыСчетов.Основной);;
           Операция.Дебет. Сотрудники= Сотрудник;
           Операция.Кредит.Счет = СчетПоКоду("533.3",ПланыСчетов.Основной);
           Операция.Сумма = МедСтрахованиеСотрудников;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Fondul special de medicina";
       КонецЕсли;        
       СуммаПрофВзноса=(НапрВыпл-Больничный-МатерПомощь)*ПрофВзнос/100;
       Если СуммаПрофВзноса <>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("531.1",ПланыСчетов.Основной);;
           Операция.Дебет. Сотрудники= Сотрудник;
           Операция.Кредит.Счет = СчетПоКоду("539.3",ПланыСчетов.Основной);
           СпрКонтрагент = СоздатьОбъект( "Справочник.Контрагенты" );
           СпрКонтрагент.НайтиПоКоду("3/18");
           Операция.Кредит.Контрагенты = СпрКонтрагент.ТекущийЭлемент();
           Операция.Сумма = СуммаПрофВзноса;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Fondul special sindicale";
       КонецЕсли;        
       Если Больничный <>0 Тогда
           Операция.НоваяПроводка();
           Операция.Кредит.Счет = СчетПоКоду("229.2",ПланыСчетов.Основной);
           СпрКонтрагенты1 = СоздатьОбъект( "Справочник.Контрагенты" );
           СпрКонтрагенты1.НайтиПоКоду("3/4");
           Операция.Кредит.Контрагенты = СпрКонтрагенты1.ТекущийЭлемент();
           Операция.Дебет.Счет = СчетПоКоду("533.1",ПланыСчетов.Основной);
           Операция.Сумма = Больничный;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Fondul Social Calcularea de boala";
           Если Константа.СоцФондНаБольничный.Получить(ДатаДок)=Перечисление.Булево.Да Тогда
               Операция.НоваяПроводка();
               Операция.Кредит.Счет = СчетПоКоду("229.2",ПланыСчетов.Основной);
               СпрКонтрагенты = СоздатьОбъект( "Справочник.Контрагенты" );
               СпрКонтрагенты.НайтиПоКоду("3/5");
               Операция.Кредит.Контрагенты = СпрКонтрагенты.ТекущийЭлемент();
               Операция.Дебет.Счет = СчетПоКоду("533.1",ПланыСчетов.Основной);
               Операция.Сумма = Больничный*(Константа.СтавкаСоцФонда.Получить(ДатаДок)/100);
               Операция.НомерЖурнала = "ЗП";
               Операция.СодержаниеПроводки = "Fondul Social Calcularea de boala";
               Операция.НоваяПроводка();
               Операция.Кредит.Счет = СчетПоКоду("229.2",ПланыСчетов.Основной);
               СпрКонтрагенты1 = СоздатьОбъект( "Справочник.Контрагенты" );
               СпрКонтрагенты1.НайтиПоКоду("3/14");
               Операция.Кредит.Контрагенты = СпрКонтрагенты1.ТекущийЭлемент();
               Операция.Дебет.Счет = СчетПоКоду("533.2",ПланыСчетов.Основной);
               Операция.Сумма = Больничный*(Константа.СтавкаПенсФонда.Получить(ДатаДок)/100);
               Операция.НомерЖурнала = "ЗП";
               Операция.СодержаниеПроводки = "Fondul de pensii Calcularea de boala";
           КонецЕсли;        
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("НЧ.8",ПланыСчетов.Вспомогательный);
           Операция.Дебет.Сотрудники = Сотрудник;
           Операция.Сумма = Больничный;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Calcularea de boala-"+Формат(ДатаДок,"Д ММММГГГГ");
       КонецЕсли;
       //___________________________________________________________________________________
       Если МатерПомощь>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("МП",ПланыСчетов.Вспомогательный);
           Операция.Дебет.Сотрудники = Сотрудник;
           Операция.Сумма = МатерПомощь;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Agutor material din-"+Формат(ДатаДок,"Д ММММГГГГ");
           //Операция.НоваяПроводка();
           //Операция.Дебет.Счет = СчетПоКоду("ПД",ПланыСчетов.Вспомогательный);
           //Операция.Дебет.Сотрудники = Сотрудник;
           //Операция.Кредит.Счет = СчетПоКоду("ПД",ПланыСчетов.Вспомогательный);
           //Операция.Кредит.Сотрудники = Сотрудник;
           //Операция.Сумма = МатерПомощь;
           //Операция.НомерЖурнала = "ЗП";
           //Операция.СодержаниеПроводки = "Eliberat salariu-"+Формат(ДатаДок,"Д ММММГГГГ");
       КонецЕсли;
       ПроцентАлиментов=Сотрудник.Алименты.Получить(ДатаДок);
       ОблСуммаАлиментами=НапрВыпл-(ПодНалогМес+ПенсФонд+МедСтрахованиеСотрудников+СуммаПрофВзноса);
       СуммаАлиментов=ОблСуммаАлиментами*(ПроцентАлиментов/100);
       Если СуммаАлиментов <>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("531.1",ПланыСчетов.Основной);;
           Операция.Дебет. Сотрудники= Сотрудник;
           Операция.Кредит.Счет = СчетПоКоду("539.3",ПланыСчетов.Основной);
           Операция.Кредит.Контрагенты = Сотрудник.КонтрагентАлименты.Получить(ДатаДок);
           Операция.Сумма = СуммаАлиментов;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Retinut alimente "+ПроцентАлиментов+" % din suma "+ОблСуммаАлиментами;
       КонецЕсли;        
       //УдержаниеАльтернатива=Сотрудник.Альтернатива.Получить(ДатаДок);  
       //Если УдержаниеАльтернатива=Перечисление.Булево.Да Тогда
       //ОблАльтернатива=НапрВыпл-(ПодНалогМес+ПенсФонд+МедСтрахованиеСотрудников+СуммаПрофВзноса);
       //СуммаАльтернатива=ОблАльтернатива*(Константа.ПроцентАльтернатива.Получить(ДатаДок)/100);
       //КонецЕсли;        
       //Если СуммаАльтернатива <>0 Тогда
       //    Операция.НоваяПроводка();
       //    Операция.Дебет.Счет = СчетПоКоду("531.1",ПланыСчетов.Основной);;
       //    Операция.Дебет. Сотрудники= Сотрудник;
       //    Операция.Кредит.Счет = СчетПоКоду("539.3",ПланыСчетов.Основной);
       //    Операция.Кредит.Контрагенты = Сотрудник.КонтрагентАльтернатива.Получить(ДатаДок);
       //    Операция.Сумма = СуммаАльтернатива;
       //    Операция.НомерЖурнала = "ЗП";
       //    Операция.СодержаниеПроводки = "Retinut servicii alternativ "+(Константа.ПроцентАльтернатива.Получить(ДатаДок))+" % din suma "+ОблСуммаАлиментами;
       //КонецЕсли;        
       Удержания=Сотрудник.Удержания.Получить(ДатаДок);  
       УдержанияАльтернатива=Сотрудник.Удержания.Получить(ДатаДок).Альтернатива;  
       Если Удержания.Выбран()=1 Тогда
           ОблПрочиеУдержания=НапрВыпл-(ПодНалогМес+ПенсФонд+МедСтрахованиеСотрудников+СуммаПрофВзноса);
           Если УдержанияАльтернатива=Перечисление.Булево.Да Тогда
               СуммаПрочУдержаний=ОблПрочиеУдержания*(Константа.ПроцентАльтернатива.Получить(ДатаДок)/100);
           Иначе
               СуммаПрочУдержаний=ОблПрочиеУдержания*(Сотрудник.ПроцентПрочихУдержаний.Получить(ДатаДок)/100);
           КонецЕсли;
           Если СуммаПрочУдержаний <>0 Тогда
               Операция.НоваяПроводка();
               Операция.Дебет.Счет = СчетПоКоду("531.1",ПланыСчетов.Основной);;
               Операция.Дебет. Сотрудники= Сотрудник;
               Операция.Кредит.Счет = Сотрудник.Удержания.Получить(ДатаДок).СчетЗатрат;
               Если УдержанияАльтернатива=Перечисление.Булево.Да Тогда
               Операция.Кредит.Субконто(1,Сотрудник.КонтрагентАльтернатива.Получить(ДатаДок));
               Иначе    
               Операция.Кредит.Субконто(1,Сотрудник.Удержания.Получить(ДатаДок).Субконто1);
               КонецЕсли;
               Операция.Кредит.Субконто(2,Сотрудник.Удержания.Получить(ДатаДок).Субконто2);
               Операция.Кредит.Субконто(3,Сотрудник.Удержания.Получить(ДатаДок).Субконто3);
               Операция.Сумма = СуммаПрочУдержаний;
               Операция.НомерЖурнала = "ЗП";
               Операция.СодержаниеПроводки = "Retinut  "+Удержания+"-"+(Константа.ПроцентАльтернатива.Получить(ДатаДок))+" % din suma "+ОблСуммаАлиментами;
           КонецЕсли;        
       КонецЕсли;        
       Если НапрВыпл <>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("531.0",ПланыСчетов.Основной);
           Операция.Дебет.Сотрудники = Сотрудник;
           Операция.Кредит.Счет = СчетПоКоду("531.1",ПланыСчетов.Основной);
           Операция.Кредит.Сотрудники = Сотрудник;
           Операция.Сумма = НапрВыпл;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Eliberat salariu-"+Формат(ДатаДок,"Д ММММГГГГ");
       КонецЕсли;
       Если ПрочиеДоходы <>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("ПД",ПланыСчетов.Вспомогательный);
           Операция.Дебет.Сотрудники = Сотрудник;
           Операция.Кредит.Счет = СчетПоКоду("ПД",ПланыСчетов.Вспомогательный);
           Операция.Кредит.Сотрудники = Сотрудник;
           Операция.Сумма = ПрочиеДоходы;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Eliberat salariu-"+Формат(ДатаДок,"Д ММММГГГГ");
       КонецЕсли;
       Если Пересчет=1 Тогда
           Операция.Записать();
           Остаток= Ит.СККРС(СчетПоКоду("531.1",ПланыСчетов.Основной),"С",,Сотрудник,"!")-Ит.СКДРС(СчетПоКоду("531.1",ПланыСчетов.Основной),"С",,Сотрудник,"!");
       КонецЕсли;
   КонецЦикла;        
   Если Итог("МедСтрахованиеСотрудников") <>0 Тогда
       Операция.НоваяПроводка();
       Операция.Кредит.Счет = СчетПоКоду("533.3",ПланыСчетов.Основной);;
       Операция.Дебет.Счет = СчетПоКоду("533.31",ПланыСчетов.Основной);
       Операция.Сумма = Итог("МедСтрахованиеСотрудников");
       Операция.НомерЖурнала = "ЗП";
       Операция.СодержаниеПроводки = "Fondul special de medicina patron";
       ОтклонениеМедСтрах=(Константа.МедСтрахованиеСотрудников.Получить(ДатаДок)/100)-(Константа.МедСтрахованиеСотрудников.Получить(Месяц)/100);
       СуммаОтклонениеМедСтрах=ОтклонениеМедСтрах*(Итог("НапрВыпл")-Итог("Больничный")-Итог("МатерПомощь"));
       Если СуммаОтклонениеМедСтрах<>0 Тогда
           Операция.НоваяПроводка();
           Операция.Дебет.Счет = СчетПоКоду("713.9",ПланыСчетов.Основной);
           СпрСтатьиЗатрат = СоздатьОбъект( "Справочник.СтатьиЗатрат" );
           СпрСтатьиЗатрат.НайтиПоКоду("8");
           Операция.Дебет.Субконто(1,СпрСтатьиЗатрат.ТекущийЭлемент());
           Операция.Кредит.Счет = СчетПоКоду("533.31",ПланыСчетов.Основной);;
           Операция.Сумма = СуммаОтклонениеМедСтрах;
           Операция.НомерЖурнала = "ЗП";
           Операция.СодержаниеПроводки = "Fondul special de medicina patron";
       КонецЕсли;        
   КонецЕсли;        
   Пересчет=0;
   ФлагПересчет=0;
   Операция.СуммаОперации = Итог("НапрВыпл");
   Операция.Содержание = "Salariul din "+Формат(Месяц,"Д ММММГГГГ");
   Операция.Записать();
КонецПроцедуры;
1 truba
 
28.11.11
12:47
Когда то давно пенсионный фонд вычислялся при расчете налогов...
2 Mikkei
 
28.11.11
12:49
у нас из зарплаты вычисляется медстрахование = 3,5% и пенсионный фонд 6%
3 truba
 
28.11.11
12:50
ТС ну напиши хотя бы это бух типовая или нет, какой релиз?
4 Mikkei
 
28.11.11
12:53
объясняю - 1000 - это зарплата. 3,5% - медстрах, 6% пенсионный фонд , а он вычислятся  после вычита медстраха а надо из общей суммы Типовая рез 7,7-19
5 Dmitry77
 
28.11.11
12:53
(0) Это Украина? в России такой фигни нет.
6 mdocs
 
28.11.11
12:54
(4) с утра пить нехорошо.
7 Mikkei
 
28.11.11
12:54
Это Молдова
8 truba
 
28.11.11
12:55
да все мы тут молдоване...
9 mdocs
 
28.11.11
12:55
(7) А как мы должны были догадаться?)
10 DJ Anthon
 
28.11.11
12:58
я вообще по нику подумал, что это эстонец...
11 Mikkei
 
28.11.11
12:59
Если ((ИтогНапрВыпл+НапрВыпл)-(ИтогБольничный+Больничный)-(ИтогМатерПомощь+МатерПомощь))>=Константа.ПределПенсФонда.Получить(ДатаОпр) Тогда
           ПенсФондОпр=Константа.ПределПенсФонда.Получить(ДатаОпр)*(СтавкаПенсФонда/100);
       Иначе
           ПенсФондОпр=Окр(((ИтогНапрВыпл+НапрВыпл)-(ИтогБольничный+Больничный)-(ИтогМатерПомощь+МатерПомощь))*(СтавкаПенсФонда/100),2,1);
       КонецЕсли;    
       Если ПенсФондОпр-ИтогПенсФонд>0 Тогда
           ПенсФонд=ПенсФондОпр-ИтогПенсФонд;
           //Иначе
           //    ПенсФонд=0;
       КонецЕсли;    
       //Если (НапрВыпл-Больничный-МатерПомощь)>=Константа.ПределПенсФонда.Получить(ДатаОпр) Тогда
       //    ПенсФонд=Константа.ПределПенсФонда.Получить(ДатаОпр)*(СтавкаПенсФонда/100);
       //Иначе
       //    ПенсФонд=(НапрВыпл-Больничный-МатерПомощь)*(СтавкаПенсФонда/100);
       //КонецЕсли;  
       
       Если ДатаДок<Дата("01.01.2005") Тогда
           ПенсСтрахованиеСотрудников=0;
           ПенсСтрахованиеСотрудниковСНачГода = 0;
       Иначе
           ПенсСтрахованиеСотрудников=ПенсФонд;
           Если ИтНГ.ПолучитьКорСчет(,"229.2") = 1 Тогда
               ПенсСтрахованиеСотрудниковСНачГода = ИтНГ.КорДО()+ПенсСтрахованиеСотрудников;
           Иначе
               ПенсСтрахованиеСотрудниковСНачГода = ПенсСтрахованиеСотрудников;
           КонецЕсли;
       КонецЕсли;

может здесь

формула обычная
начисление равно 1000(з\п)-35(мед стр)-60(пенс фонд) =
12 Злой Бобр
 
28.11.11
13:00
(0) Посмотрел. Подсказываю - делай как ГБ скажет (письменно). Ну или на свой страх и риск, в зависимости от наклонностей к садо-мазо.
13 Mikkei
 
28.11.11
13:04
гб так и говорит
14 Шапокляк
 
28.11.11
13:04
(0)        Пока Док.ПолучитьДокумент() = 1 Цикл
           Стр = Док.Вид();
           Если Док.Проведен()=1 Тогда
               Если Стр = "ЗарПлНапрНаВыпл" Тогда  
                   Если Док.НомерДок<>НомерДок Тогда
//                         СуммаБольничный = 0;  

//                        Если Док.Итог("Больничный")<>0 Тогда

//                            Пока Док.ПолучитьСтроку() = 1 Цикл  

//                                СотрудникОпр=Док.Сотрудник;

//                                Если СотрудникОпр=Сотрудник Тогда

//                                 СуммаБольничный = Док.Больничный;  

//                                КонецЕсли;

//                            КонецЦикла; // по строкам документа

//                        КонецЕсли;

//                        Если СуммаБольничный<>0 Тогда

//                            Если ДатаДок<Дата("08.09.2006") Тогда  

//                                

//                            ИначеЕсли НачГода(Месяц)<НачГода(ДатаДок) Тогда

//

//                            Иначе

//                                ИтогоБольничный=ИтогоБольничный+СуммаБольничный;

//                            КонецЕсли;

//                        КонецЕсли;

                       Если Док.Месяц=Месяц Тогда
                           Пока Док.ПолучитьСтроку() = 1 Цикл  
                               СотрудникОпр=Док.Сотрудник;
                               Если СотрудникОпр=Сотрудник Тогда
                                   СуммаНапрВыпл = Док.НапрВыпл;  
                                   ИтогБольничный=ИтогБольничный+Док.Больничный;
                                   ИтогМатерПомощь=ИтогМатерПомощь+Док.МатерПомощь;
                                   СуммаПенсФонд = Док.ПенсФонд;  
                                   ИтогНапрВыпл=ИтогНапрВыпл+СуммаНапрВыпл;
                                   ИтогПенсФонд=ИтогПенсФонд+СуммаПенсФонд;
                               КонецЕсли;

в молдавских конфах не сильна, а в самом коде у вас есть некоторые странности. Вот в этом куске прежде чем Док.ПолучитьСтроку() надо бы Док.ВыбратьСтроки(); наверно?
(11)ПенсФонд расчитывается после подытоживания СуммаНапрВыпл из документов "ЗарПлНапрНаВыпл" с разности между этим итогом и больничными. А в сам документ как эти строки попадают - они ведь как-то расчитываются?

Вы бы лучше с цифрами как-то пример привели, типа ЗП 1000 из них медстрах столько-то и Пенс столько-то. А должно быть так-то.
15 Mikkei
 
28.11.11
13:05
1000(з\п)-35(мед стр)-60(пенс фонд)
16 Mikkei
 
28.11.11
13:06
1000 - это зарплата. 3,5% - медстрах, 6% пенсионный фонд
17 Злой Бобр
 
28.11.11
13:19
(13) Ну делай как ГБ говорит. Только то что есть не удаляй а заверни в :
Если делаемпостарому=1 Тогда
   // тут то что есть
Иначе
   // тут пиши свой мануал
КонецЕсли;
18 Шапокляк
 
28.11.11
13:42
в(0) "Объясняю - вычисляется после вычета из основного после вычита медстраха. А надо из основного", в (16) "1000 - это зарплата. 3,5% - медстрах, 6% пенсионный фонд". Ну так что не так-то? Цифры сходятся или нет? Насколько важен порядок?
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший