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