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