#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ПриКопировании(ОбъектКопирования)
ИсправлениеДокументов.ПриКопировании(ЭтотОбъект, ОбъектКопирования);
ИнициализироватьДокумент();
Если Сводно Тогда
НачисленнаяЗарплатаИВзносыПоФизлицам.Очистить();
КонецЕсли;
СтрокаТЧ = "НачисленныйНДФЛ,УдержаннаяЗарплата,НачисленныеПроцентыПоЗаймам,НачисленнаяЗарплатаИВзносы,НачисленнаяЗарплатаИВзносыПоФизлицам";
ОбщегоНазначенияУТ.ОчиститьИдентификаторыДокумента(ЭтотОбъект, СтрокаТЧ);
КонецПроцедуры
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ОтражениеЗарплатыВФинансовомУчете") Тогда
ИсправлениеДокументов.ЗаполнитьИсправление(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
ИнициализироватьДокумент(ДанныеЗаполнения);
ПараметрыВыбораСтатейИАналитик = Документы.ОтражениеЗарплатыВФинансовомУчете.ПараметрыВыбораСтатейИАналитик();
ДоходыИРасходыСервер.ОбработкаЗаполнения(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
Если ЭтоНовый() Тогда
СсылкаНаОбъект = ПолучитьСсылкуНового();
Если НЕ ЗначениеЗаполнено(СсылкаНаОбъект) Тогда
СсылкаНаОбъект = Документы.ОтражениеЗарплатыВФинансовомУчете.ПолучитьСсылку();
УстановитьСсылкуНового(СсылкаНаОбъект);
КонецЕсли;
Иначе
СсылкаНаОбъект = Ссылка;
КонецЕсли;
ПараметрыУчетнойПолитики = НастройкиНалоговУчетныхПолитик.ДействующиеПараметрыНалоговУчетныхПолитикНаДату("УчетнаяПолитикаБухУчета",
Организация,
КонецМесяца(ПериодРегистрации));
Если ПараметрыУчетнойПолитики <> Неопределено Тогда
ПроводкиПоРаботникам = ПараметрыУчетнойПолитики.ПроводкиПоРаботникам И ПолучитьФункциональнуюОпцию("ИспользоватьНачислениеЗарплаты") И Не Сводно;
КонецЕсли;
Для Каждого Строка Из УдержаннаяЗарплата Цикл
Если Строка.ВидОперации = Перечисления.ВидыОперацийПоЗарплате.ПогашениеЗаймов
ИЛИ Строка.ВидОперации = Перечисления.ВидыОперацийПоЗарплате.ПроцентыПоЗайму Тогда
Строка.СтатьяАктивовПассивов = ПланыВидовХарактеристик.СтатьиАктивовПассивов.ЗаймыВыданные;
Строка.АналитикаАктивовПассивов = Неопределено;
КонецЕсли;
Если Строка.ЯвляетсяОснованиемОформленияКассовогоЧека Тогда
Строка.ИдентификаторФискальнойЗаписи =
Документы.ОтражениеЗарплатыВФинансовомУчете.ИдентификаторФискальнойЗаписи(СсылкаНаОбъект, Строка);
Иначе
Строка.ИдентификаторФискальнойЗаписи = "";
КонецЕсли;
КонецЦикла;
ВидыНалогов = ВидыНалоговПоВидамОперацийНДФЛ();
Для Каждого Строка Из НачисленныйНДФЛ Цикл
Строка.ТипНалога = ВидыНалогов.Получить(Строка.ВидОперации);
КонецЦикла;
СтрокаТЧ = "НачисленныйНДФЛ,УдержаннаяЗарплата,НачисленныеПроцентыПоЗаймам,НачисленнаяЗарплатаИВзносы,НачисленнаяЗарплатаИВзносыПоФизлицам";
ОбщегоНазначенияУТ.ЗаполнитьИдентификаторыДокумента(ЭтотОбъект, СтрокаТЧ);
НастройкаСчетовУчетаСервер.ПередЗаписью(ЭтотОбъект,
Документы.ОтражениеЗарплатыВФинансовомУчете.ПараметрыНастройкиСчетовУчета());
ПараметрыВыбораСтатейИАналитик = Документы.ОтражениеЗарплатыВФинансовомУчете.ПараметрыВыбораСтатейИАналитик();
ДоходыИРасходыСервер.ПередЗаписью(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
ИсправлениеДокументов.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НепроверяемыеРеквизиты = Новый Массив;
НепроверяемыеРеквизиты.Добавить("ПериодРегистрации");
Если Не ЗначениеЗаполнено(ПериодРегистрации) Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Поле ""Месяц"" не заполнено'"), , "ПериодРегистрацииСтрокой", , Отказ);
КонецЕсли;
Если Не (ЗначениеЗаполнено(НачисленнаяЗарплатаИВзносы) ИЛИ ЗначениеЗаполнено(НачисленныйНДФЛ)
ИЛИ ЗначениеЗаполнено(УдержаннаяЗарплата) ИЛИ ЗначениеЗаполнено(НачисленныеПроцентыПоЗаймам)
ИЛИ ЗначениеЗаполнено(ВыплатаЗаСчетРезервов)) Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Табличные части документа не содержат ни одной строки'"), ЭтотОбъект, , , Отказ);
Возврат;
КонецЕсли;
ПроверитьЗаполнениеНачислений(Отказ, НепроверяемыеРеквизиты);
ПроверитьЗаполнениеУдержаний(Отказ, НепроверяемыеРеквизиты);
ПроверитьЗаполнениеНачисленногоНДФЛ(Отказ, НепроверяемыеРеквизиты);
ПроверитьЗаполнениеВыплатЗаСчетРезервов(Отказ, НепроверяемыеРеквизиты);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты);
ПараметрыВыбораСтатейИАналитик = Документы.ОтражениеЗарплатыВФинансовомУчете.ПараметрыВыбораСтатейИАналитик();
ДоходыИРасходыСервер.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты, ПараметрыВыбораСтатейИАналитик);
ИсправлениеДокументов.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Функция ВидыНалоговПоВидамОперацийНДФЛ()
ВидыНалогов = Справочники.ВидыНалоговВзносов;
ВидыОпераций = Перечисления.ВидыОперацийПоЗарплате;
Соответствие = Новый Соответствие;
Для Каждого ВидОперации Из ВидыОпераций.НДФЛ(Новый Структура) Цикл
Соответствие.Вставить(ВидОперации, ВидыНалогов.НДФЛ);
КонецЦикла;
ДатаНачалаДействия176ФЗ = НалоговыйУчет.ДатаНачалаДействия176ФЗ();
Если Дата < ДатаНачалаДействия176ФЗ И ПериодРегистрации < ДатаНачалаДействия176ФЗ Тогда
Соответствие.Вставить(ВидыОпераций.НДФЛ, ВидыНалогов.НДФЛ);
Соответствие.Вставить(ВидыОпераций.НДФЛСПревышения, ВидыНалогов.НДФЛСПревышения);
Соответствие.Вставить(ВидыОпераций.НФДЛДивидендыСотрудникам, ВидыНалогов.НДФЛДивидендыСотрудникам);
Соответствие.Вставить(ВидыОпераций.НДФЛДоходыКонтрагентов, ВидыНалогов.НДФЛДоходыКонтрагентов);
Соответствие.Вставить(ВидыОпераций.НФДЛДивиденды, ВидыНалогов.НДФЛДивиденды);
Соответствие.Вставить(ВидыОпераций.НДФЛПрочиеРасчетыСПерсоналом, ВидыНалогов.НДФЛПрочиеРасчетыСПерсоналом);
Соответствие.Вставить(ВидыОпераций.НДФЛРасчетыСБывшимиСотрудниками, ВидыНалогов.НДФЛДоходыКонтрагентов);
Соответствие.Вставить(ВидыОпераций.НДФЛДоначисленныйПоРезультатамПроверки, ВидыНалогов.НДФЛДоначисленныйПоРезультатамПроверки);
Соответствие.Вставить(ВидыОпераций.НДФЛПередачаЗадолженностиВНалоговыйОрган, ВидыНалогов.НДФЛПередачаЗадолженностиВНалоговыйОрган);
КонецЕсли;
Возврат Новый ФиксированноеСоответствие(Соответствие);
КонецФункции
Процедура ПроверитьЗаполнениеНачислений(Отказ, НепроверяемыеРеквизиты)
НепроверяемыеРеквизиты.Добавить("НачисленнаяЗарплатаИВзносы.СпособОтраженияЗарплатыВБухучете");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("НачалоПериода", НачалоМесяца(ПериодРегистрации));
Запрос.УстановитьПараметр("КонецПериода", КонецМесяца(ПериодРегистрации));
Запрос.УстановитьПараметр("НачисленияСводно", НачисленнаяЗарплатаИВзносы);
Запрос.УстановитьПараметр("НачисленияДетально", НачисленнаяЗарплатаИВзносыПоФизлицам);
Запрос.УстановитьПараметр("Сводно", Сводно);
ВременныеТаблицы = Новый Массив;
ВременныеТаблицы.Добавить(
"ВЫБРАТЬ
| Начисления.НомерСтроки КАК НомерСтроки,
| Начисления.ПодразделениеПредприятия КАК Подразделение,
| Начисления.ВидОперации КАК ВидОперации,
| Начисления.СпособРасчетов КАК СпособРасчетов,
| Начисления.СпособОтраженияЗарплатыВБухучете КАК СпособОтражения,
| Начисления.РезервБУ КАК РезервБУ,
| Начисления.РезервНУ КАК РезервНУ,
| Начисления.Резерв КАК Резерв,
| Начисления.НеОблагаетсяНДФЛ КАК НеОблагаетсяНДФЛ,
| Начисления.ОблагаетсяЕНВД КАК ОблагаетсяЕНВД,
| Начисления.Сумма + Начисления.ВзносыВсего КАК СуммаНачислений
|ПОМЕСТИТЬ ВТНачисленияСводно
|ИЗ
| &НачисленияСводно КАК Начисления");
ВременныеТаблицы.Добавить(
"ВЫБРАТЬ
| Начисления.НомерСтроки КАК НомерСтроки,
| Начисления.ПодразделениеПредприятия КАК Подразделение,
| Начисления.ВидОперации КАК ВидОперации,
| Начисления.СпособРасчетов КАК СпособРасчетов,
| Начисления.ФизическоеЛицо КАК ФизическоеЛицо,
| Начисления.СпособОтраженияЗарплатыВБухучете КАК СпособОтражения,
| Начисления.РезервБУ КАК РезервБУ,
| Начисления.РезервНУ КАК РезервНУ,
| Начисления.Резерв КАК Резерв,
| Начисления.НеОблагаетсяНДФЛ КАК НеОблагаетсяНДФЛ,
| Начисления.ОблагаетсяЕНВД КАК ОблагаетсяЕНВД,
| Начисления.Сумма + Начисления.ВзносыВсего КАК СуммаНачислений
|ПОМЕСТИТЬ ВТНачисленияДетально
|ИЗ
| &НачисленияДетально КАК Начисления");
ВременныеТаблицы.Добавить(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВидыНачислений.Вид КАК ВидНачислений,
| Начисления.СпособОтражения КАК СпособОтражения,
| Начисления.ОблагаетсяЕНВД КАК ЕНВД
|ПОМЕСТИТЬ ВТСпособыОтражения
|ИЗ
| (ВЫБРАТЬ 1 КАК Вид ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3) ВидыНачислений,
| ВТНачисленияСводно КАК Начисления");
ВременныеТаблицы.Добавить(
Справочники.СпособыОтраженияЗарплатыВБухУчете.ТекстЗапросаНастройкиОтраженияЗарплаты("ВТНастройкиОтражения"));
ВременныеТаблицы.Добавить(
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| &Организация КАК Организация,
| Начисления.Подразделение КАК Подразделение,
| ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка) КАК ФизическоеЛицо
|ПОМЕСТИТЬ ВТСдельныеНачисления
|ИЗ
| ВТНачисленияСводно КАК Начисления
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНастройкиОтражения КАК НастройкиОтражения
| ПО Начисления.СпособОтражения = НастройкиОтражения.СпособОтражения
| И Начисления.ОблагаетсяЕНВД = НастройкиОтражения.ЕНВД
| И НастройкиОтражения.СдельнаяОплата = ИСТИНА
| И &Сводно = ИСТИНА
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| &Организация КАК Организация,
| Начисления.Подразделение КАК Подразделение,
| Начисления.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| ВТНачисленияДетально КАК Начисления
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНастройкиОтражения КАК НастройкиОтражения
| ПО Начисления.СпособОтражения = НастройкиОтражения.СпособОтражения
| И Начисления.ОблагаетсяЕНВД = НастройкиОтражения.ЕНВД
| И НастройкиОтражения.СдельнаяОплата = ИСТИНА
| И &Сводно = ЛОЖЬ");
ВременныеТаблицы.Добавить(
ОтражениеЗарплатыВФинансовомУчетеУП.ТекстЗапросаВТВыработкаСотрудников());
Запрос.Текст = СтрСоединить(ВременныеТаблицы, ОбщегоНазначения.РазделительПакетаЗапросов());
УстановитьПривилегированныйРежим(Истина);
Запрос.Выполнить();
УстановитьПривилегированныйРежим(Ложь);
КолонкиВзносов = Документы.ОтражениеЗарплатыВФинансовомУчете.КолонкиВзносов();
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТНачисленияСводно КАК Начисления
|
|ГДЕ
| Начисления.СуммаНачислений = 0
| И &Сводно
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЕстьВзносы = Ложь;
СтрокаТаблицы = НачисленнаяЗарплатаИВзносы.Найти(Выборка.НомерСтроки, "НомерСтроки");
Для Каждого Колонка Из КолонкиВзносов Цикл
Если ЗначениеЗаполнено(СтрокаТаблицы[Колонка]) Тогда
ЕстьВзносы = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьВзносы Тогда
Продолжить;
КонецЕсли;
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Не заполнена сумма начисления и взносов в строке %1 списка ""Начисления и взносы""'"),
Выборка.НомерСтроки);
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("НачисленнаяЗарплатаИВзносы", Выборка.НомерСтроки, "Сумма");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| НачисленияСводно.НомерСтроки КАК НомерСтроки,
| Начисления.НомерСтроки КАК НомерДетальнойСтроки,
| Начисления.ФизическоеЛицо КАК ФизическоеЛицо
|ИЗ
| ВТНачисленияДетально КАК Начисления
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНачисленияСводно КАК НачисленияСводно
| ПО Начисления.Подразделение = НачисленияСводно.Подразделение
| И Начисления.ВидОперации = НачисленияСводно.ВидОперации
| И Начисления.СпособРасчетов = НачисленияСводно.СпособРасчетов
| И Начисления.СпособОтражения = НачисленияСводно.СпособОтражения
| И Начисления.РезервБУ = НачисленияСводно.РезервБУ
| И Начисления.РезервНУ = НачисленияСводно.РезервНУ
| И Начисления.Резерв = НачисленияСводно.Резерв
| И Начисления.НеОблагаетсяНДФЛ = НачисленияСводно.НеОблагаетсяНДФЛ
| И Начисления.ОблагаетсяЕНВД = НачисленияСводно.ОблагаетсяЕНВД
| И Начисления.СуммаНачислений = 0
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("НомерСтроки") Цикл
СписокФизлиц = Новый Массив;
Пока Выборка.СледующийПоЗначениюПоля("НомерДетальнойСтроки") Цикл
ЕстьВзносы = Ложь;
СтрокаТаблицы = НачисленнаяЗарплатаИВзносыПоФизлицам.Найти(Выборка.НомерДетальнойСтроки, "НомерСтроки");
Для Каждого Колонка Из КолонкиВзносов Цикл
Если ЗначениеЗаполнено(СтрокаТаблицы[Колонка]) Тогда
ЕстьВзносы = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьВзносы Тогда
Продолжить;
КонецЕсли;
СписокФизлиц.Добавить(Выборка.ФизическоеЛицо);
КонецЦикла;
Если Не ЗначениеЗаполнено(СписокФизлиц) Тогда
Продолжить;
КонецЕсли;
ТекстСообщения = СтрШаблон(
НСтр("ru = 'По сотруднику (-ам) %2 не заполнена сумма начисления и взносов в строке %1 списка ""Начисления и взносы""'"),
Выборка.НомерСтроки, СтрСоединить(СписокФизлиц, ", "));
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("НачисленнаяЗарплатаИВзносы", Выборка.НомерСтроки, "Сумма");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТНачисленияСводно КАК Начисления
|
|ГДЕ
| Начисления.СпособОтражения = ЗНАЧЕНИЕ(Справочник.СпособыОтраженияЗарплатыВБухучете.ПустаяСсылка)
| И НЕ Начисления.ВидОперации В (&ВидыОперацийСФиксированнымОтражением)
| И (Начисления.РезервБУ = ЛОЖЬ ИЛИ Начисления.РезервНУ = ЛОЖЬ)
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Запрос.УстановитьПараметр("ВидыОперацийСФиксированнымОтражением",
Документы.ОтражениеЗарплатыВФинансовомУчете.ВидыОперацийНачисленияСФиксированнымОтражением());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Не заполнена колонка ""Способ отражения"" в строке %1 списка ""Начисления и взносы""'"),
Выборка.НомерСтроки);
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("НачисленнаяЗарплатаИВзносы", Выборка.НомерСтроки, "СпособОтраженияЗарплатыВБухучете");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Начисления.НомерСтроки КАК НомерСтроки,
| Начисления.СпособОтражения КАК СпособОтражения
|ИЗ
| ВТНачисленияСводно КАК Начисления
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНастройкиОтражения КАК НастройкиОтражения
| ПО Начисления.СпособОтражения = НастройкиОтражения.СпособОтражения
| И Начисления.ОблагаетсяЕНВД = НастройкиОтражения.ЕНВД
| И НастройкиОтражения.СдельнаяОплата = ЛОЖЬ
|
|ГДЕ
| НастройкиОтражения.Статья.Ссылка ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Не указана статья в способе отражения ""%2"" в строке %1 списка ""Начисления и взносы""'"),
Выборка.НомерСтроки, Выборка.СпособОтражения);
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("НачисленнаяЗарплатаИВзносы", Выборка.НомерСтроки, "СпособОтраженияЗарплатыВБухучете");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.НомерСтроки КАК НомерСтроки,
| Начисления.Подразделение КАК Подразделение,
| ЕСТЬNULL(НачисленияДетально.ФизическоеЛицо,
| ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)) КАК ФизическоеЛицо,
| НастройкиОтражения.БазаРаспределения КАК БазаРаспределения,
| МИНИМУМ(ЕСТЬNULL(НачисленияДетально.НомерСтроки, 0)) КАК Порядок,
| ВЫБОР КОГДА НЕ Выработка.Подразделение ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьДанныеВыработки
|ИЗ
| ВТНачисленияСводно КАК Начисления
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНастройкиОтражения КАК НастройкиОтражения
| ПО Начисления.СпособОтражения = НастройкиОтражения.СпособОтражения
| И Начисления.ОблагаетсяЕНВД = НастройкиОтражения.ЕНВД
| И НастройкиОтражения.СдельнаяОплата = ИСТИНА
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНачисленияДетально КАК НачисленияДетально
| ПО Начисления.Подразделение = НачисленияДетально.Подразделение
| И Начисления.ВидОперации = НачисленияДетально.ВидОперации
| И Начисления.СпособРасчетов = НачисленияДетально.СпособРасчетов
| И Начисления.СпособОтражения = НачисленияДетально.СпособОтражения
| И Начисления.РезервБУ = НачисленияДетально.РезервБУ
| И Начисления.РезервНУ = НачисленияДетально.РезервНУ
| И Начисления.Резерв = НачисленияДетально.Резерв
| И Начисления.НеОблагаетсяНДФЛ = НачисленияДетально.НеОблагаетсяНДФЛ
| И Начисления.ОблагаетсяЕНВД = НачисленияДетально.ОблагаетсяЕНВД
| ЛЕВОЕ СОЕДИНЕНИЕ ВТВыработкаСотрудников КАК Выработка
| ПО Начисления.Подразделение = Выработка.Подразделение
| И (&Сводно ИЛИ НачисленияДетально.ФизическоеЛицо = Выработка.ФизическоеЛицо)
|
|СГРУППИРОВАТЬ ПО
| Начисления.НомерСтроки,
| Начисления.Подразделение,
| ЕСТЬNULL(НачисленияДетально.ФизическоеЛицо,
| ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)),
| НастройкиОтражения.БазаРаспределения,
| Выработка.Подразделение
|
|ИМЕЮЩИЕ
| Выработка.Подразделение ЕСТЬ NULL
| ИЛИ ВЫБОР НастройкиОтражения.БазаРаспределения
| КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыБазыРаспределенияРасходов.НормативыОплатыТруда)
| ТОГДА МАКСИМУМ(ЕСТЬNULL(Выработка.НормативнаяСтоимость, 0))
| КОГДА ЗНАЧЕНИЕ(Перечисление.ТипыБазыРаспределенияРасходов.ДлительностьВыполненияРабот)
| ТОГДА МАКСИМУМ(ЕСТЬNULL(Выработка.Длительность, 0))
| ИНАЧЕ 0
| КОНЕЦ = 0
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки,
| Порядок";
ШаблоныСообщенияОбОшибке = Новый Массив;
Если Сводно Тогда
ШаблоныСообщенияОбОшибке.Добавить(НСтр("ru = 'В подразделении ""%2"" не регистрировалась выработка сотрудников (строка %1 списка ""Начисления и взносы"")'"));
ШаблоныСообщенияОбОшибке.Добавить(НСтр("ru = 'Не задана трудоемкость работ выполненных в подразделении ""%2"" (строка %1 списка ""Начисления и взносы"")'"));
Иначе
ШаблоныСообщенияОбОшибке.Добавить(НСтр("ru = 'В подразделении ""%2"" не регистрировалась выработка сотрудника (-ов) %3 (строка %1 списка ""Начисления и взносы"")'"));
ШаблоныСообщенияОбОшибке.Добавить(НСтр("ru = 'Не задана трудоемкость выполненных работ сотрудника (-ов) %3 в подразделении ""%2"" (строка %1 списка ""Начисления и взносы"")'"));
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.СледующийПоЗначениюПоля("НомерСтроки") Цикл
Если Выборка.ЕстьДанныеВыработки
И Выборка.БазаРаспределения = Перечисления.ТипыБазыРаспределенияРасходов.ДлительностьВыполненияРабот Тогда
ШаблонСообщения = ШаблоныСообщенияОбОшибке[1];
Иначе
ШаблонСообщения = ШаблоныСообщенияОбОшибке[0];
КонецЕсли;
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("НачисленнаяЗарплатаИВзносы", Выборка.НомерСтроки, "ПодразделениеПредприятия");
Если Не Сводно Тогда
Количество = 0;
СписокФизлиц = Новый Массив;
Пока Выборка.Следующий() Цикл
Количество = Количество + 1;
Если СписокФизлиц.ВГраница() < 2 Тогда
СписокФизлиц.Добавить(Выборка.ФизическоеЛицо);
КонецЕсли;
КонецЦикла;
ПредставлениеСпискаФизлиц = СтрСоединить(СписокФизлиц, ", ");
Если Количество > 3 Тогда
ПредставлениеСпискаФизлиц = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(
НСтр("ru = '[СписокФизлиц] и [Количество] др.'"),
Новый Структура("СписокФизлиц, Количество",
ПредставлениеСпискаФизлиц, Количество - 3));
КонецЕсли;
ТекстСообщения = СтрШаблон(ШаблонСообщения, Выборка.НомерСтроки, Выборка.Подразделение, ПредставлениеСпискаФизлиц);
Иначе
ТекстСообщения = СтрШаблон(ШаблонСообщения, Выборка.НомерСтроки, Выборка.Подразделение);
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЗаполнениеУдержаний(Отказ, НепроверяемыеРеквизиты)
Если Сводно Тогда
НепроверяемыеРеквизиты.Добавить("УдержаннаяЗарплата.ФизическоеЛицо");
КонецЕсли;
НепроверяемыеРеквизиты.Добавить("УдержаннаяЗарплата.СтатьяДоходов");
НепроверяемыеРеквизиты.Добавить("УдержаннаяЗарплата.СтатьяАктивовПассивов");
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("Удержания", УдержаннаяЗарплата);
Запрос.УстановитьПараметр("Сводно", Сводно);
ВременныеТаблицы = Новый Массив;
ВременныеТаблицы.Добавить(
"ВЫБРАТЬ
| Удержания.НомерСтроки КАК НомерСтроки,
| Удержания.ПодразделениеПредприятия КАК Подразделение,
| Удержания.СпособРасчетов КАК СпособРасчетов,
| Удержания.ВидОперации КАК ВидОперации,
| Удержания.ФизическоеЛицо КАК ФизическоеЛицо,
| Удержания.СтатьяДоходов КАК СтатьяДоходов,
| Удержания.СтатьяАктивовПассивов КАК СтатьяАктивовПассивов,
| Удержания.ЯвляетсяОснованиемОформленияКассовогоЧека КАК НуженКассовыйЧек
|ПОМЕСТИТЬ ВТУдержания
|ИЗ
| &Удержания КАК Удержания");
Запрос.Текст = СтрСоединить(ВременныеТаблицы, ОбщегоНазначения.РазделительПакетаЗапросов());
Запрос.Выполнить();
Запрос.Текст =
"ВЫБРАТЬ
| Удержания.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТУдержания КАК Удержания
|
|ГДЕ
| Удержания.ФизическоеЛицо = ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)
| И (Удержания.СпособРасчетов <> ЗНАЧЕНИЕ(Перечисление.СпособыРасчетовСФизическимиЛицами.ОплатаТруда)
| ИЛИ Удержания.ВидОперации В (&ВидыОперацийСОбязательнымФизлицом)
| ИЛИ Удержания.НуженКассовыйЧек)
| И &Сводно
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Запрос.УстановитьПараметр("ВидыОперацийСОбязательнымФизлицом",
Документы.ОтражениеЗарплатыВФинансовомУчете.ВидыОперацийУдержанияСОбязательнымФизлицом());
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Не заполнена колонка ""Сотрудник"" в строке %1 списка ""Удержания""'"),
Выборка.НомерСтроки);
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("УдержаннаяЗарплата", Выборка.НомерСтроки, "ФизическоеЛицо");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
Запрос.Текст =
"ВЫБРАТЬ
| Удержания.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТУдержания КАК Удержания
|
|ГДЕ
| Удержания.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоЗарплате.ВозвратИзлишнеВыплаченныхСуммВследствиеСчетныхОшибок)
| И Удержания.СтатьяДоходов = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СтатьиДоходов.ПустаяСсылка)
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Не заполнена колонка ""Статья доходов"" в строке %1 списка ""Удержания""'"),
Выборка.НомерСтроки);
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("УдержаннаяЗарплата", Выборка.НомерСтроки, "СтатьяДоходов");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
Запрос.Текст =
"ВЫБРАТЬ
| Удержания.НомерСтроки КАК НомерСтроки
|ИЗ
| ВТУдержания КАК Удержания
|
|ГДЕ
| &ИспользуетсяУчетПрочихАктивовПассивов
| И Удержания.СтатьяАктивовПассивов = ЗНАЧЕНИЕ(ПланВидовХарактеристик.СтатьиАктивовПассивов.ПустаяСсылка)
| И НЕ Удержания.ВидОперации В (
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоЗарплате.ВозвратИзлишнеВыплаченныхСуммВследствиеСчетныхОшибок),
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоЗарплате.ПогашениеЗаймов),
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоЗарплате.ПроцентыПоЗайму),
| ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоЗарплате.УдержаниеНеизрасходованныхПодотчетныхСумм))
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
Запрос.УстановитьПараметр("ИспользуетсяУчетПрочихАктивовПассивов",
ПолучитьФункциональнуюОпцию("ИспользоватьУчетПрочихАктивовПассивов"));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Не заполнена колонка ""Статья пассивов"" в строке %1 списка ""Удержания""'"),
Выборка.НомерСтроки);
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("УдержаннаяЗарплата", Выборка.НомерСтроки, "СтатьяАктивовПассивов");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЗаполнениеНачисленногоНДФЛ(Отказ, НепроверяемыеРеквизиты)
НепроверяемыеРеквизиты.Добавить("НачисленныйНДФЛ.ПодразделениеПредприятия");
Если Сводно Тогда
НепроверяемыеРеквизиты.Добавить("НачисленныйНДФЛ.ФизическоеЛицо");
КонецЕсли;
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьПодразделения") Тогда
Возврат;
КонецЕсли;
Отбор = Новый Структура;
Отбор.Вставить("ВидОперации", Перечисления.ВидыОперацийПоЗарплате.НДФЛДоходыКонтрагентов);
Отбор.Вставить("ПодразделениеПредприятия", Справочники.СтруктураПредприятия.ПустаяСсылка());
Для Каждого СтрокаТаблицы Из НачисленныйНДФЛ.НайтиСтроки(Отбор) Цикл
ТекстСообщения = СтрШаблон(
НСтр("ru = 'Не заполнена колонка ""Подразделение"" в строке %1 списка ""НДФЛ""'"),
СтрокаТаблицы.НомерСтроки);
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("НачисленныйНДФЛ", СтрокаТаблицы.НомерСтроки, "ПодразделениеПредприятия");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
КонецПроцедуры
Процедура ПроверитьЗаполнениеВыплатЗаСчетРезервов(Отказ, НепроверяемыеРеквизиты)
НепроверяемыеРеквизиты.Добавить("ВыплатаЗаСчетРезервов.Резерв");
ВидыОперацийЗаСчетРезерваОтпусков = Перечисления.ВидыОперацийПоЗарплате.ЕжегодныеОтпускаОценочныеОбязательстваИРезервы();
Отбор = Новый Структура("Резерв", Справочники.Резервы.ПустаяСсылка());
Для Каждого СтрокаТаблицы Из ВыплатаЗаСчетРезервов.НайтиСтроки(Отбор) Цикл
Если ВидыОперацийЗаСчетРезерваОтпусков.Найти(СтрокаТаблицы.ВидОперации) <> Неопределено Тогда
Продолжить;
КонецЕсли;
ТекстСообщения = СтрШаблон(
НСтр("ru='Не заполнена колонка ""Резерв"" в строке %1 списка ""Выплата за счет резервов""'"),
СтрокаТаблицы.НомерСтроки);
ПутьКСтрокеТабличнойЧасти =
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("ВыплатаЗаСчетРезервов", СтрокаТаблицы.НомерСтроки, "Резерв");
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, ПутьКСтрокеТабличнойЧасти, , Отказ);
КонецЦикла;
КонецПроцедуры
#Область ИнициализацияИЗаполнение
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
Ответственный = Пользователи.ТекущийПользователь();
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли