Зарплата и кадры бюджетного учреждения. Версия 1.0.10.3. Информация об ошибках

  Код ошибки: 10059147  
  Дата публикации: 14.07.2010 17:16:40  
  Дата последнего изменения: 14.07.2010 0:00:00  
  Описание: Распределение НДФЛ по источникам не учитывает источники финансирования премий.  
  Способ исправления: В модуле набора записей регистра расчета БУДополнительныеНачисления, в процедуре СоздатьДвиженияПоНДФЛ,
в тексте запроса заменить строку

Начисления.ПериодРегистрации КАК ПериодРегистрации,

на

НАЧАЛОПЕРИОДА(Начисления.ПериодРегистрации, МЕСЯЦ) КАК ПериодРегистрации,
 
  Способ обхода: Устанавливать дату документа "премия" первым числом месяца расчетного периода.  
  Исправлено в релизе: 1.0.15  
 
  Код ошибки: 10058022  
  Дата публикации: 01.07.2010 15:50:15  
  Дата последнего изменения: 01.07.2010 0:00:00  
  Описание: В документе "Начисления по больничным листам" при распределении по источникам не учитываются источники финансирования по внутреннему совместительству: при наличии внутреннего совместительства, при начислении по больничному листу вся сумма распределяется на источники финансирования по основному месту работы.  
  Исправлено в релизе: 1.0.14  
 
  Код ошибки: 10055573  
  Дата публикации: 08.06.2010 15:20:42  
  Дата последнего изменения: 08.06.2010 0:00:00  
  Описание: В документе "Зарплата к выплате организаций", при выплате "Пособия по больничным листам", предварительный учет удержаний применяется и к оплате отпуска по беременности и родам.  
  Исправлено в релизе: 1.0.14  
 
  Код ошибки: 10054868  
  Дата публикации: 04.06.2010 17:43:10  
  Дата последнего изменения: 04.06.2010 0:00:00  
  Описание: Отчет "Свод начисленной зарплаты" неправильно группирует дополнительные начисления по месяцам при включенном отборе по статье финансирования: при наличии дополнительных начислений с разными датами начала внутри одного месяца: происходит задвоение группировок по такому месяцу.  
  Исправлено в релизе: 1.0.14  
 
  Код ошибки: 10055656  
  Дата публикации: 04.06.2010 17:40:51  
  Дата последнего изменения: 04.06.2010 0:00:00  
  Описание: В отчете "Табель рабочего времени" не отображаются часы отклонений, как требуется Инструкцией по бюджетному учету, а только их буквенные обозначения.  
 
  Код ошибки: 10052870  
  Дата публикации: 04.06.2010 17:39:57  
  Дата последнего изменения: 04.06.2010 0:00:00  
  Описание: В документе "Отражение зарплаты в бухучете" при формировани отражения страховых взносов не учитываются скидки.  
  Исправлено в релизе: 1.0.14  
 
  Код ошибки: 10052461  
  Дата публикации: 04.06.2010 17:38:50  
  Дата последнего изменения: 29.06.2010 0:00:00  
  Описание: При обмене с ББУ в бухгалтерию не передается информация о договоре ГПХ.  
  Планируется исправить в релизе: 1.0.15  
 
  Код ошибки: 10055203  
  Дата публикации: 01.06.2010 17:12:25  
  Дата последнего изменения: 01.06.2010 0:00:00  
  Описание: В документе "Перенос задолженности сотрудников организаций" устарела справка.  
  Исправлено в релизе: 1.0.14  
 
  Код ошибки: 10055099  
  Дата публикации: 01.06.2010 17:12:09  
  Дата последнего изменения: 01.06.2010 0:00:00  
  Описание: В документе "Регистрация разовых удержаний" не заполняется показатель ОВЗ в удержаниях.  
 
  Код ошибки: 10054998  
  Дата публикации: 01.06.2010 17:11:29  
  Дата последнего изменения: 01.06.2010 0:00:00  
  Описание: Не рассчитываются начисления военнослужащего за период с даты освобождения должности по дату исключения из списков части.  
  Способ обхода: В модуле документа ПриказОбИсключенииИзСписковЧасти в процедуре
ДобавитьСтрокуВДвиженияПоРегистрамСведений в строках 759 и 808
заменить

ВыборкаПоРаботникиОрганизации.ГрафикРаботыЗавершения

на

ВыборкаПоРаботникиОрганизации.ПрежнийГрафик
 
  Исправлено в релизе: 1.0.14  
 
  Код ошибки: 10051076  
  Дата публикации: 14.05.2010 15:27:26  
  Дата последнего изменения: 14.05.2010 0:00:00  
  Описание: В документе "Начисление зарплаты" отрицательный НДФЛ не распределяется по источникам финансирования в случае отсутствия удержанных налогов с начала года.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10050251  
  Дата публикации: 14.05.2010 15:24:45  
  Дата последнего изменения: 14.05.2010 0:00:00  
  Описание: В документе "Отражение зарплаты в бухучете" при печати в колонке "Операция" всегда проставляется КОСГУ дебетовой части проводки, а не КОСГУ назначения платежа (в соответствии с экономическим смыслом операции).  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10049429  
  Дата публикации: 14.05.2010 15:24:28  
  Дата последнего изменения: 14.05.2010 0:00:00  
  Описание: В документе "Начисление по больничному листу" распределение начислений по источникам всегда производится по базовым начислениям, независимо от настройки вида расчета.  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10052728  
  Дата публикации: 27.04.2010 16:37:20  
  Дата последнего изменения: 27.04.2010 0:00:00  
  Описание: В формах списка и выбора документов "Зарплата к выплате" не работает отбор по значению в текущей колонке для КОСГУ и статьи финансирования.  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10052066  
  Дата публикации: 27.04.2010 16:36:58  
  Дата последнего изменения: 12.05.2010 0:00:00  
  Описание: При проведении документов "Премии" и "Начисление единовременных пособий за счет ФСС" по обособленному подразделению с выделенным балансом неправильно заполняются регистры накопления "Взаиморасчеты с сотрудниками" и "Зарплата за месяц организаций": движения проводизводятся по головной организации.
В результате эти начисления не попадают в расчетные листки, расчетные ведомости и в расчет зарплаты к выплате по обособленному подразделению с выделенным балансом.
 
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10052621  
  Дата публикации: 27.04.2010 16:34:09  
  Дата последнего изменения: 27.04.2010 0:00:00  
  Описание: При расчете НДФЛ не работает настройка учета вычетов "Стандартные вычеты применяются в пределах месячного дохода налогоплательщика".  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10052157  
  Дата публикации: 20.04.2010 17:25:51  
  Дата последнего изменения: 20.04.2010 0:00:00  
  Описание: В документе "Регистрация разовых удержаний" при нажатии на кнопку "распределить по источникам" очищается распределение сторно-записей.  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10052175  
  Дата публикации: 20.04.2010 17:25:37  
  Дата последнего изменения: 20.04.2010 0:00:00  
  Описание: В документе "Регистрация разовых удержаний" при попытке редактирования распределения по источникам возникает ошибка:

{ОбщийМодуль.ОтражениеВУчетеКлиент(125)}: Ошибка при вызове метода контекста (НайтиСтроки): Несоответствие типов (параметр номер '1')
СтрокиОтражения = ТЧпоИФ.НайтиСтроки(КлючРасчета);
 
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10051736  
  Дата публикации: 20.04.2010 17:21:32  
  Дата последнего изменения: 20.04.2010 0:00:00  
  Описание: При распределении по источникам финансирования сторнированных начислений, вид дохода страховых взносов берется по текущему состоянию вида расчета.
Правильное поведение: вид дохода должен быть таким, как у сторнируемого расчета.
 
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10051412  
  Дата публикации: 19.04.2010 15:55:24  
  Дата последнего изменения: 19.04.2010 0:00:00  
  Описание: В печатной форме 0504403 не заполняется кассир, хотя в регистре сведений «Ответственные лица» он указан.  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10051944  
  Дата публикации: 19.04.2010 15:55:02  
  Дата последнего изменения: 19.04.2010 0:00:00  
  Описание: В формах списка и выбора документа "Приходный кассовый ордер" присутствует лишняя колонка "Вид операции".  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10051487  
  Дата публикации: 19.04.2010 15:54:26  
  Дата последнего изменения: 19.04.2010 0:00:00  
  Описание: Документ "Начисление зарплаты работникам" позволяет регистрировать единовременные пособия за счет ФСС, но при проведении документа не создает движений в регистрах "Расчеты по страховым взносам" и "Пособия социальному страхованию". В результате сумма в 4-ФСС неправильная.
Ожидаемое поведение: для ввода таких пособий используется специализиваронный документ "Начисление единовременных пособий за счет ФСС".
 
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10051948  
  Дата публикации: 19.04.2010 15:54:09  
  Дата последнего изменения: 19.04.2010 0:00:00  
  Описание: Регистр сведений "Шаблоны проводок" недоступен в интерфейсе.  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10049657  
  Дата публикации: 19.04.2010 15:53:56  
  Дата последнего изменения: 19.04.2010 0:00:00  
  Описание: В некоторых случаях неверно регистрируется отражение в учете дополнительных начислений.
В регистр "Отражение дополнительных начислений в бухучете сотрудников" всегда пишется 1 число месяца периода регистрации документа.
Должна же писаться дата внутри месяца периода регистрации,зависящая от даты документа, с учетом дат приема и/или увольнения сотрудника.
 
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10046577  
  Дата публикации: 13.04.2010 16:49:26  
  Дата последнего изменения: 13.04.2010 0:00:00  
  Описание: При заполнении начислений в кадровом перемещении не учитываются действующие плановые начисления.  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10051158  
  Дата публикации: 09.04.2010 20:45:47  
  Дата последнего изменения: 09.04.2010 0:00:00  
  Описание: В документе "Регистрация разовых начислений" для частично облагаемых НДФЛ начислений с произвольной формулой расчета, например, материальной помощи, автоматически не проставляется код вычета 503 и не рассчитывается сумма вычета.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10050995  
  Дата публикации: 09.04.2010 20:42:59  
  Дата последнего изменения: 09.04.2010 0:00:00  
  Описание: Неправильная проводка при печати реестра депонированных сумм: кредит счета печатается 201.04 (касса), а должно быть 304.02 (депонент).  
  Исправлено в релизе: 1.0.13  
 
  Код ошибки: 10050474  
  Дата публикации: 09.04.2010 20:04:03  
  Дата последнего изменения: 09.04.2010 0:00:00  
  Описание: В расчетных документах информирование об ошибках распределения по источникам ограничивается первой ошибочной строкой.
Ожидается, что информационное сообщение об ошибках будет содержать информацию о всех строках документа, в которых есть проблемы
 
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10046763  
  Дата публикации: 09.04.2010 20:03:42  
  Дата последнего изменения: 09.04.2010 0:00:00  
  Описание: Нет возможности отсторнировать документы по госслужащим: "Сохраняемое денежное содержание", "Расчет при увольнении госслужащего", "Начисление отпуска госслужащим".  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10050119  
  Дата публикации: 29.03.2010 16:26:03  
  Дата последнего изменения: 29.03.2010 0:00:00  
  Описание: Документы "Оплата праздничных и выходных дней" и "Оплата сверхурочных часов" не учитывают данные по распределению основного заработка, введенные документом "Ежемесячные сведения о бухучете зарплаты".  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10050018  
  Дата публикации: 29.03.2010 16:25:52  
  Дата последнего изменения: 29.03.2010 0:00:00  
  Описание: При заполнении начислений в кадровых документах неверно учитывается сведения о районном коэффициенте подразделения, обособленного подразделения и организации.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10046747  
  Дата публикации: 29.03.2010 16:25:36  
  Дата последнего изменения: 29.03.2010 0:00:00  
  Описание: В обработке "Анализ неявок" не удается ввести документы-начисления на основании документа "Отпуска организаций" с отпусками гос.служащих.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10046819  
  Дата публикации: 23.03.2010 17:13:12  
  Дата последнего изменения: 23.03.2010 0:00:00  
  Описание: Ведомость в кассу. При выводе срока оплаты не учитываются выходные дни.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10047676  
  Дата публикации: 19.03.2010 16:07:55  
  Дата последнего изменения: 19.03.2010 0:00:00  
  Описание: В документ "Ежемесячные сведения о бухучете зарплаты" не получается добавить военнослужащего, предлагается выбор только из числа сотрудников - гражданских лиц.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10048048  
  Дата публикации: 15.03.2010 19:05:48  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: Договор ГПХ проводит в бухучет плановых начислений только при наличии всех частей отражения (КОГСУ, статьи финансирования и статьи расходов.)
Между тем, бухучет плановых начислений позволяет указывать не все три реквизита.
Поэтому проверка на заполненность всех трех полей избыточна.
 
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10049147  
  Дата публикации: 15.03.2010 18:52:56  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: При формировании проводок по страховым взносам не учитывается скидка к доходам.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10048162  
  Дата публикации: 15.03.2010 18:47:41  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: Зарплата к выплате: проблемы при повторной выплате с характером, требующим документа-основания:
Выплачиваем по характеру выплаты, требующем документа-основания (напр, премии, разовые начисления), с предварительным учетом удержания.
При повторной выплате по этому же документу в суммы к выплате попадут предварительно удержанные (отложенные) суммы.
 
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10047439  
  Дата публикации: 15.03.2010 18:47:21  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: Добавлены виды операций по удержанию добровольных страховых взносов и по страховым взносам на дополнительное пенсионное обеспечение членов летных экипажей.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10046997  
  Дата публикации: 15.03.2010 18:46:48  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: Документ "Начисление отпуска", полученный копированием рассчитанного документа, после смены работника и проведения помещает в движения старого сотрудника.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10048029  
  Дата публикации: 15.03.2010 18:43:33  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: При автоматическом заполнении документа "Начисление страховых взносов" не рассчитывается скидка по материальной помощи.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10047861  
  Дата публикации: 15.03.2010 18:42:54  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: Материальная помощь с видом дохода "Облагается ЕСН, взносами в ПФР частично согласно пп. 15 п.1 ст. 238 НК РФ (материальная помощь)" в отчетах "Авансы по ЕСН" и "Декларация по ЕСН" попадает не только в строку 1100, предназначенную для этого вида дохода по ЕСН, но и в строки 1200 и 1300, в которые должны попадать другие данные по ст.2 и ст.3 гр.245.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10047270  
  Дата публикации: 15.03.2010 18:41:27  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: В документе "Начисление зарплаты" при смене операции не очищаются табличные части по источникам финансирования.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10044399  
  Дата публикации: 15.03.2010 18:41:13  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: Документ "Начисление зарплаты работникам" неправильно формирует доходы работника при наличии НДФЛ к зачету и отсутствии налога по статье:
был НДФЛ к зачету по какой-то статье. В очередной расчет з/п этот НДФЛ зачтен быть не может ввиду отсутствия налога по статье.
Но при формировании взаиморасчетов положенный к зачету налог считается зачитываемым и добавляется в доходы работника.
 
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10048745  
  Дата публикации: 10.03.2010 17:00:25  
  Дата последнего изменения: 10.03.2010 0:00:00  
  Описание: В документе-исправлении больничного сторнированные начисления исправляемого документа распределяются так же, как и начисления самого документа.
Если с момента расчета исправляемого документа произошли изменения, влияющие на отражение (в т.ч. в настройке среднего заработка), то распределение сторно-записей будет не таким, как в оригинале.
 
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10048036  
  Дата публикации: 03.03.2010 20:42:02  
  Дата последнего изменения: 03.03.2010 0:00:00  
  Описание: При проведении документа "Начисление зарплаты" не регистрируются в учете по НДФЛ рассчитанные вычеты на детей и имущественные вычеты.  
  Способ исправления: Заменить модуль документа НачислениеЗарплатыРаботникамОрганизаций следующим фрагментом:

//////////////////////////////////////////////////////////////////////////////////
//// ПЕРЕМЕННЫЕ МОДУЛЯ

// Хранит соответствие доходов и положенных по ним вычетов
Перем мСоответствиеДоходовИВычетов;

// Хранит информацию о видах расчета ПВР Дополнительные начисления
Перем мИнформацияОВидахРасчетаДоп;

////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

#Если Клиент Тогда

// Заполняет показатели
//
Функция ЗаполнитьПоказатели(ТекущийСотрудник, Источник) Экспорт

Если ТекущийСотрудник = Неопределено Тогда
Возврат Ложь;
КонецЕсли;

Если Начисления.Количество() = 0 И ДополнительныеНачисления.Количество() = 0 И Удержания.Количество() = 0 Тогда
Возврат Ложь;
КонецЕсли;

ТЗНачисления = Начисления.Выгрузить(,"Сотрудник,ВидРасчета");
ТЗДопНачисления = ДополнительныеНачисления.Выгрузить(,"Сотрудник,ВидРасчета");
ТЗУдержания = Удержания.Выгрузить(,"ФизЛицо,ВидРасчета");

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Начисления",ТЗНачисления);
Запрос.УстановитьПараметр("ДопНачисления",ТЗДопНачисления);
Запрос.УстановитьПараметр("Удержания",ТЗУдержания);
Запрос.УстановитьПараметр("ПарамДата",НачалоМесяца(ПериодНачисленияДатаНачала));
Запрос.УстановитьПараметр("ПарамГоловнаяОрганизация",ОбщегоНазначения.ГоловнаяОрганизация(Организация));

// получим временную таблицу с сотрудниками и видами расчетов
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Начисления.ВидРасчета КАК ВидРасчета,
| Начисления.Сотрудник
|ПОМЕСТИТЬ ВТНачисления
|ИЗ
| &Начисления КАК Начисления
|
|ИНДЕКСИРОВАТЬ ПО
| ВидРасчета";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Начисления.ВидРасчета КАК ВидРасчета,
| Начисления.Сотрудник
|ПОМЕСТИТЬ ВТДопНачисления
|ИЗ
| &ДопНачисления КАК Начисления
|
|ИНДЕКСИРОВАТЬ ПО
| ВидРасчета";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Удержания.ВидРасчета,
| Удержания.ФизЛицо КАК ФизЛицо
|ПОМЕСТИТЬ ВТУдержания
|ИЗ
| &Удержания КАК Удержания
|
|ИНДЕКСИРОВАТЬ ПО
| ФизЛицо";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СотрудникиОрганизаций.Ссылка КАК Сотрудник,
| СотрудникиОрганизаций.ВидДоговора,
| СотрудникиОрганизаций.Физлицо,
| СотрудникиОрганизаций.ВидЗанятости КАК ВидЗанятости
|ПОМЕСТИТЬ ВТСотрудники
|ИЗ
| Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|ГДЕ
| СотрудникиОрганизаций.Организация = &ПарамГоловнаяОрганизация
| И СотрудникиОрганизаций.Физлицо В
| (ВЫБРАТЬ
| Удержания.ФизЛицо КАК ФизЛицо
| ИЗ
| ВТУдержания КАК Удержания)
| И СотрудникиОрганизаций.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ
| РаботникиОсновноеМесто.Сотрудник КАК Сотрудник,
| СотрудникиОрганизаций.Физлицо КАК Физлицо,
| СотрудникиОрганизаций.ВидЗанятости КАК ВидЗанятости
|ПОМЕСТИТЬ ВТДанныеОРаботниках
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(
| &ПарамДата,
| Сотрудник В
| (ВЫБРАТЬ
| Сотрудники.Сотрудник
| ИЗ
| ВТСотрудники КАК Сотрудники)) КАК РаботникиОсновноеМесто
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСотрудники КАК СотрудникиОрганизаций
| ПО РаботникиОсновноеМесто.Сотрудник = СотрудникиОрганизаций.Сотрудник
|ГДЕ
| ВЫБОР
| КОГДА РаботникиОсновноеМесто.ПериодЗавершения <= &ПарамДата
| И РаботникиОсновноеМесто.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОсновноеМесто.ПричинаИзмененияСостоянияЗавершения
| ИНАЧЕ РаботникиОсновноеМесто.ПричинаИзмененияСостояния
| КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
|
|ИНДЕКСИРОВАТЬ ПО
| ВидЗанятости,
| Физлицо";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Показатели.Показатель КАК Показатель,
| Показатели.Показатель.ВидПоказателя КАК ВидПоказателя,
| Начисления.Сотрудник КАК Сотрудник
|ИЗ
| ВТНачисления КАК Начисления
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели
| ПО Начисления.ВидРасчета = Показатели.Ссылка
| И ((НЕ Показатели.Показатель.Предопределенный))
| И (Показатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.НеИзменяется))
| И (Показатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.ПустаяСсылка))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ОценочнаяШкалаЧисловая))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ОценочнаяШкалаПроцентная))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд))
|ГДЕ
| Показатели.Показатель ЕСТЬ НЕ NULL
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Показатели.Показатель,
| Показатели.Показатель.ВидПоказателя,
| ДопНачисления.Сотрудник
|ИЗ
| ВТДопНачисления КАК ДопНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели
| ПО ДопНачисления.ВидРасчета = Показатели.Ссылка
| И ((НЕ Показатели.Показатель.Предопределенный))
| И (Показатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.НеИзменяется))
| И (Показатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.ПустаяСсылка))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ОценочнаяШкалаЧисловая))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ОценочнаяШкалаПроцентная))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд))
|ГДЕ
| Показатели.Показатель ЕСТЬ НЕ NULL
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Показатели.Показатель,
| Показатели.Показатель.ВидПоказателя,
| Сотрудники.Сотрудник
|ИЗ
| ВТУдержания КАК Удержания
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели
| ПО Удержания.ВидРасчета = Показатели.Ссылка
| И ((НЕ Показатели.Показатель.Предопределенный))
| И (Показатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.НеИзменяется))
| И (Показатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.ПустаяСсылка))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ОценочнаяШкалаЧисловая))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ОценочнаяШкалаПроцентная))
| И (Показатели.Показатель.ТипПоказателя <> ЗНАЧЕНИЕ(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд))
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СписокСотрудников.Сотрудник КАК Сотрудник,
| СписокСотрудников.Физлицо КАК Физлицо
| ИЗ
| (ВЫБРАТЬ
| МАКСИМУМ(РаботникиОсновноеМесто.Сотрудник) КАК Сотрудник,
| РаботникиОсновноеМесто.Физлицо КАК Физлицо,
| 1 КАК Приоритет
| ИЗ
| ВТДанныеОРаботниках КАК РаботникиОсновноеМесто
| ГДЕ
| РаботникиОсновноеМесто.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|
| СГРУППИРОВАТЬ ПО
| РаботникиОсновноеМесто.Физлицо
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| МАКСИМУМ(РаботникиСовместительство.Сотрудник),
| РаботникиСовместительство.Физлицо,
| 2
| ИЗ
| ВТДанныеОРаботниках КАК РаботникиСовместительство
| ГДЕ
| РаботникиСовместительство.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
|
| СГРУППИРОВАТЬ ПО
| РаботникиСовместительство.Физлицо
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| МАКСИМУМ(СотрудникиДУ.Сотрудник),
| СотрудникиДУ.Физлицо,
| ВЫБОР
| КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
| ТОГДА 4
| ИНАЧЕ 5
| КОНЕЦ
| ИЗ
| ВТСотрудники КАК СотрудникиДУ
|
| СГРУППИРОВАТЬ ПО
| СотрудникиДУ.Физлицо,
| ВЫБОР
| КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
| ТОГДА 4
| ИНАЧЕ 5
| КОНЕЦ) КАК СписокСотрудников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СписокФизическихЛиц.Физлицо КАК Физлицо,
| МИНИМУМ(СписокФизическихЛиц.Приоритет) КАК Приоритет
| ИЗ
| (ВЫБРАТЬ
| РаботникиОсновноеМесто.Физлицо КАК Физлицо,
| 1 КАК Приоритет
| ИЗ
| ВТДанныеОРаботниках КАК РаботникиОсновноеМесто
| ГДЕ
| РаботникиОсновноеМесто.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| РаботникиСовместительство.Физлицо,
| 2
| ИЗ
| ВТДанныеОРаботниках КАК РаботникиСовместительство
| ГДЕ
| РаботникиСовместительство.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| СотрудникиДУ.Физлицо,
| ВЫБОР
| КОГДА СотрудникиДУ.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
| ТОГДА 4
| ИНАЧЕ 5
| КОНЕЦ
| ИЗ
| ВТСотрудники КАК СотрудникиДУ) КАК СписокФизическихЛиц
|
| СГРУППИРОВАТЬ ПО
| СписокФизическихЛиц.Физлицо) КАК СписокФизическихЛиц
| ПО СписокСотрудников.Физлицо = СписокФизическихЛиц.Физлицо
| И СписокСотрудников.Приоритет = СписокФизическихЛиц.Приоритет) КАК Сотрудники
| ПО Удержания.ФизЛицо = Сотрудники.Физлицо
|ГДЕ
| Показатели.Показатель ЕСТЬ НЕ NULL
| И Сотрудники.Сотрудник ЕСТЬ НЕ NULL ";

Результат = Запрос.Выполнить();
Если Результат.Пустой() Тогда
Возврат Ложь;
Иначе

ТаблицаЗапроса = Результат.Выгрузить();
Показатели = ТаблицаЗапроса.ВыгрузитьКолонку("Показатель");
Сотрудники = ТаблицаЗапроса.ВыгрузитьКолонку("Сотрудник");

ФормаВводаПоказателей = РегистрыСведений.ЗначенияПоказателейСхемМотивации.ПолучитьФорму("ФормаВводаЗначенийПоказателей");
ФормаВводаПоказателей.Организация = Организация;
ФормаВводаПоказателей.ПериодДействия = НачалоМесяца(ПериодНачисленияДатаНачала);
ФормаВводаПоказателей.мИсточник = Источник;

ФормаВводаПоказателей.ФормаАвтозаполнение(ТаблицаЗапроса, Сотрудники, Показатели);
ФормаВводаПоказателей.мСотрудникДляОткрытия = ТекущийСотрудник;
ФормаВводаПоказателей.Открыть();

Возврат Истина;

КонецЕсли;

КонецФункции //ЗаполнитьПоказатели

// Функция заполняет табличный документ "РасчетныйЛисток"
//
// Параметры:
// ФизЛицо - элемент справочника "ФизическиеЛица"
//
// Возвращаемое значение:
// Табличный документ с заполненным расчетным листком
//
Функция ЗаполнитьТаблицуРасчетногоЛистка(ФизЛицо) Экспорт

ЗапросРЛ = Новый Запрос;
ЗапросРЛ.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);
ЗапросРЛ.УстановитьПараметр("КонецПериодаРегистрации", КонецМесяца(ПериодРегистрации));
ЗапросРЛ.УстановитьПараметр("Расход", ВидДвиженияНакопления.Расход);
ЗапросРЛ.УстановитьПараметр("Организация", Организация);
ЗапросРЛ.УстановитьПараметр("ГоловнаяОрганизация", ОбщегоНазначения.ГоловнаяОрганизация(Организация));
ЗапросРЛ.УстановитьПараметр("Работник", ФизЛицо);
ЗапросРЛ.УстановитьПараметр("Ссылка", Ссылка);

Авансы = Новый Массив;
Авансы.Добавить(Перечисления.ХарактерВыплатыЗарплаты.АвансЗаПервуюПоловинуМесяца);
Авансы.Добавить(Перечисления.ХарактерВыплатыЗарплаты.ПлановыйАванс);
ЗапросРЛ.УстановитьПараметр("Аванс", Авансы);

//из запроса исключаем данные по регистратору - этот документ, если документ проведен и модифицирован
ИсключитьДанныеПоРегистратору = Проведен И Модифицированность() И ПериодНачисления <> Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца;
ЗапросРЛ.УстановитьПараметр("ПоВсемРегистраторам", Не ИсключитьДанныеПоРегистратору);

//добавляем данные в расчетный листок из документа, если он не проведен или проведен и модифицирован
ДобавитьДанныеИзДокумента = Модифицированность() Или Не Проведен Или ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца;

Если ДобавитьДанныеИзДокумента И ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца Тогда
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Работник",ФизЛицо);
Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("ПериодРегистрации",ПериодРегистрации);
Запрос.Текст =
"ВЫБРАТЬ
| НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК НачислениеЗарплатыРаботникамОрганизацийНачисления
|ГДЕ
| НачислениеЗарплатыРаботникамОрганизацийНачисления.Физлицо = &Работник
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.ПериодРегистрации = &ПериодРегистрации
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.ПериодНачисления = ЗНАЧЕНИЕ(Перечисление.ПериодНачисленияЗарплаты.ТекущийМесяц)
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.Проведен
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.Организация = &Организация";
ДобавитьДанныеИзДокумента = Запрос.Выполнить().Пустой();
КонецЕсли;

ТекстЗапроса =
"ВЫБРАТЬ
| НачисленияУдержания.ВидДвижения КАК ВидДвижения,
| НачисленияУдержания.НомерСтроки КАК НомерСтроки,
| НачисленияУдержания.Сотрудник КАК Сотрудник,
| НачисленияУдержания.ВидРасчета КАК ВидРасчета,
| НачисленияУдержания.ПорядокВидаРасчета КАК ПорядокВидаРасчета,
| НачисленияУдержания.ПериодДействияНачало КАК ПериодДействияНачало,
| НачисленияУдержания.ПериодДействияКонец КАК ПериодДействияКонец,
| НачисленияУдержания.ОтработаноДней КАК ОтработаноДней,
| НачисленияУдержания.ОтработаноЧасов КАК ОтработаноЧасов,
| НачисленияУдержания.ОплаченоДней КАК ОплаченоДней,
| НачисленияУдержания.ОплаченоЧасов КАК ОплаченоЧасов,
| НачисленияУдержания.Начисления КАК Начисления,
| НачисленияУдержания.Удержания КАК Удержания,
| Сальдо.СуммаВзаиморасчетовНачальныйОстаток КАК СуммаВзаиморасчетовНачальныйОстаток,
| Сальдо.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток,
| НачисленияУдержания.Регистратор,
| ПРЕДСТАВЛЕНИЕ(НачисленияУдержания.Регистратор) КАК ОписаниеРегистратора
|ИЗ
| (ВЫБРАТЬ
| ВЫБОР
| КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме
| ТОГДА 6
| ИНАЧЕ 1
| КОНЕЦ КАК ВидДвижения,
| ОсновныеНачисленияРаботниковОрганизации.Регистратор КАК Регистратор,
| ОсновныеНачисленияРаботниковОрганизации.ОбособленноеПодразделение КАК Организация,
| ОсновныеНачисленияРаботниковОрганизации.ПериодРегистрации КАК ПериодРегистрации,
| ОсновныеНачисленияРаботниковОрганизации.ФизЛицо КАК ФизЛицо,
| ОсновныеНачисленияРаботниковОрганизации.Сотрудник КАК Сотрудник,
| ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Наименование + ВЫБОР
| КОГДА ЕСТЬNULL(ОсновныеНачисленияРаботниковОрганизации.Сотрудник.ВидЗанятости, ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ПустаяСсылка)) = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| И ОсновныеНачисленияРаботниковОрганизации.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
| ТОГДА "" (по внутр. совмест-ву)""
| ИНАЧЕ """"
| КОНЕЦ КАК ВидРасчета,
| ""А"" + ОсновныеНачисленияРаботниковОрганизации.ВидРасчета.Код КАК ПорядокВидаРасчета,
| ОсновныеНачисленияРаботниковОрганизации.НомерСтроки КАК НомерСтроки,
| ОсновныеНачисленияРаботниковОрганизации.ПериодДействияНачало КАК ПериодДействияНачало,
| ОсновныеНачисленияРаботниковОрганизации.ПериодДействияКонец КАК ПериодДействияКонец,
| ОсновныеНачисленияРаботниковОрганизации.ОтработаноДней КАК ОтработаноДней,
| ОсновныеНачисленияРаботниковОрганизации.ОтработаноЧасов КАК ОтработаноЧасов,
| ВЫБОР
| КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
| ТОГДА ОсновныеНачисленияРаботниковОрганизации.ОплаченоДнейЧасов
| ИНАЧЕ 0
| КОНЕЦ КАК ОплаченоДней,
| ВЫБОР
| КОГДА ОсновныеНачисленияРаботниковОрганизации.ВидУчетаВремени <> ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
| ТОГДА ОсновныеНачисленияРаботниковОрганизации.ОплаченоДнейЧасов
| ИНАЧЕ 0
| КОНЕЦ КАК ОплаченоЧасов,
| ОсновныеНачисленияРаботниковОрганизации.Результат КАК Начисления,
| 0 КАК Удержания
| ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизации
| ГДЕ
| ОсновныеНачисленияРаботниковОрганизации.ПериодРегистрации МЕЖДУ &ПериодРегистрации И &КонецПериодаРегистрации
| И ОсновныеНачисленияРаботниковОрганизации.ОбособленноеПодразделение = &Организация
| И ОсновныеНачисленияРаботниковОрганизации.ФизЛицо = &Работник
| И (&ПоВсемРегистраторам
| ИЛИ ОсновныеНачисленияРаботниковОрганизации.Регистратор <> &Ссылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВЫБОР
| КОГДА ДополнительныеНачисленияРаботниковОрганизации.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме
| ТОГДА 7
| ИНАЧЕ 2
| КОНЕЦ,
| ДополнительныеНачисленияРаботниковОрганизации.Регистратор,
| ДополнительныеНачисленияРаботниковОрганизации.ОбособленноеПодразделение,
| НАЧАЛОПЕРИОДА(ДополнительныеНачисленияРаботниковОрганизации.ПериодРегистрации, МЕСЯЦ),
| ДополнительныеНачисленияРаботниковОрганизации.ФизЛицо,
| ДополнительныеНачисленияРаботниковОрганизации.Сотрудник,
| ДополнительныеНачисленияРаботниковОрганизации.ВидРасчета.Наименование + ВЫБОР
| КОГДА ЕСТЬNULL(ДополнительныеНачисленияРаботниковОрганизации.Сотрудник.ВидЗанятости, ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ПустаяСсылка)) = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| И ДополнительныеНачисленияРаботниковОрганизации.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ТрудовойДоговор)
| ТОГДА "" (по внутр. совмест-ву)""
| ИНАЧЕ """"
| КОНЕЦ,
| ""Б"" + ДополнительныеНачисленияРаботниковОрганизации.ВидРасчета.Код,
| NULL,
| ДополнительныеНачисленияРаботниковОрганизации.ПериодРегистрации,
| ДополнительныеНачисленияРаботниковОрганизации.ПериодРегистрации,
| NULL,
| NULL,
| ВЫБОР
| КОГДА ДополнительныеНачисленияРаботниковОрганизации.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
| ТОГДА ДополнительныеНачисленияРаботниковОрганизации.ОплаченоДнейЧасов
| ИНАЧЕ 0
| КОНЕЦ,
| ВЫБОР
| КОГДА ДополнительныеНачисленияРаботниковОрганизации.ВидУчетаВремени <> ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням)
| ТОГДА ДополнительныеНачисленияРаботниковОрганизации.ОплаченоДнейЧасов
| ИНАЧЕ 0
| КОНЕЦ,
| ДополнительныеНачисленияРаботниковОрганизации.Результат,
| 0
| ИЗ
| РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисленияРаботниковОрганизации
| ГДЕ
| ДополнительныеНачисленияРаботниковОрганизации.ПериодРегистрации МЕЖДУ &ПериодРегистрации И &КонецПериодаРегистрации
| И ДополнительныеНачисленияРаботниковОрганизации.ОбособленноеПодразделение = &Организация
| И ДополнительныеНачисленияРаботниковОрганизации.ФизЛицо = &Работник
| И (&ПоВсемРегистраторам
| ИЛИ ДополнительныеНачисленияРаботниковОрганизации.Регистратор <> &Ссылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| 4,
| УдержанияРаботниковОрганизации.Регистратор,
| УдержанияРаботниковОрганизации.ОбособленноеПодразделение,
| УдержанияРаботниковОрганизации.ПериодРегистрации,
| УдержанияРаботниковОрганизации.ФизЛицо,
| NULL,
| УдержанияРаботниковОрганизации.ВидРасчета.Наименование,
| ""А"" + УдержанияРаботниковОрганизации.ВидРасчета.Код,
| NULL,
| УдержанияРаботниковОрганизации.БазовыйПериодНачало,
| УдержанияРаботниковОрганизации.БазовыйПериодКонец,
| NULL,
| NULL,
| NULL,
| NULL,
| 0,
| УдержанияРаботниковОрганизации.Результат
| ИЗ
| РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизации
| ГДЕ
| УдержанияРаботниковОрганизации.ПериодРегистрации МЕЖДУ &ПериодРегистрации И &КонецПериодаРегистрации
| И УдержанияРаботниковОрганизации.ОбособленноеПодразделение = &Организация
| И УдержанияРаботниковОрганизации.ФизЛицо = &Работник
| И (&ПоВсемРегистраторам
| ИЛИ УдержанияРаботниковОрганизации.Регистратор <> &Ссылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| 3,
| НДФЛРасчетыСБюджетом.Регистратор,
| НДФЛРасчетыСБюджетом.ОбособленноеПодразделение,
| НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетом.Период, МЕСЯЦ),
| НДФЛРасчетыСБюджетом.ФизЛицо,
| NULL,
| ""НДФЛ исчисленный "" + ВЫБОР
| КОГДА НДФЛРасчетыСБюджетом.СтавкаНалогообложенияРезидента = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавкиНалогообложенияРезидента.Ставка13)
| ТОГДА ""по ставке 13(30)%""
| КОГДА НДФЛРасчетыСБюджетом.СтавкаНалогообложенияРезидента = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавкиНалогообложенияРезидента.Ставка09)
| ТОГДА ""по дивидендам""
| ИНАЧЕ ""по ставке 35%""
| КОНЕЦ,
| ""Б"",
| NULL,
| НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода, МЕСЯЦ),
| КОНЕЦПЕРИОДА(НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода, МЕСЯЦ),
| NULL,
| NULL,
| NULL,
| NULL,
| 0,
| СУММА(НДФЛРасчетыСБюджетом.Налог)
| ИЗ
| РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом
| ГДЕ
| НДФЛРасчетыСБюджетом.ВидСтроки = ЗНАЧЕНИЕ(Перечисление.НДФЛРасчетыСБюджетомВидСтроки.Начисление)
| И НДФЛРасчетыСБюджетом.ИсчисленоИзЗарплаты
| И НДФЛРасчетыСБюджетом.Период МЕЖДУ &ПериодРегистрации И &КонецПериодаРегистрации
| И НДФЛРасчетыСБюджетом.ОбособленноеПодразделение = &Организация
| И НДФЛРасчетыСБюджетом.ФизЛицо = &Работник
| И (&ПоВсемРегистраторам
| ИЛИ НДФЛРасчетыСБюджетом.Регистратор <> &Ссылка)
|
| СГРУППИРОВАТЬ ПО
| НДФЛРасчетыСБюджетом.ОбособленноеПодразделение,
| НДФЛРасчетыСБюджетом.СтавкаНалогообложенияРезидента,
| НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетом.Период, МЕСЯЦ),
| НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода, МЕСЯЦ),
| КОНЕЦПЕРИОДА(НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода, МЕСЯЦ),
| НДФЛРасчетыСБюджетом.ФизЛицо,
| НДФЛРасчетыСБюджетом.Регистратор
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| 8,
| Взаиморасчеты.Регистратор,
| Взаиморасчеты.Организация,
| НАЧАЛОПЕРИОДА(Взаиморасчеты.Период, МЕСЯЦ),
| Взаиморасчеты.Физлицо,
| NULL,
| ВЫБОР
| КОГДА Взаиморасчеты.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезКассу)
| ТОГДА ""Через кассу ""
| КОГДА Взаиморасчеты.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезБанк)
| ТОГДА ""Перечислено в банк ""
| ИНАЧЕ ""Способ выплаты не указан ""
| КОНЕЦ + ВЫБОР
| КОГДА Взаиморасчеты.ХарактерВыплаты В (&Аванс)
| ТОГДА ""(аванс)""
| КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.Зарплата)
| ТОГДА ""(под расчет)""
| КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.ПустаяСсылка)
| И Взаиморасчеты.СуммаВзаиморасчетов > 0
| ТОГДА ""(не указано)""
| КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.ПустаяСсылка)
| И Взаиморасчеты.СуммаВзаиморасчетов < 0
| ТОГДА ""(погашено задолженности)""
| ИНАЧЕ ""(межрасчет)""
| КОНЕЦ,
| ""Г"",
| NULL,
| НАЧАЛОПЕРИОДА(Взаиморасчеты.ПериодВзаиморасчетов, МЕСЯЦ),
| КОНЕЦПЕРИОДА(Взаиморасчеты.ПериодВзаиморасчетов, МЕСЯЦ),
| NULL,
| NULL,
| NULL,
| NULL,
| 0,
| СУММА(Взаиморасчеты.СуммаВзаиморасчетов)
| ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций КАК Взаиморасчеты
| ГДЕ
| Взаиморасчеты.ВидДвижения = &Расход
| И Взаиморасчеты.СуммаВзаиморасчетов <> 0
| И Взаиморасчеты.Период МЕЖДУ &ПериодРегистрации И &КонецПериодаРегистрации
| И Взаиморасчеты.Организация = &Организация
| И Взаиморасчеты.Физлицо = &Работник
| И (&ПоВсемРегистраторам
| ИЛИ Взаиморасчеты.Регистратор <> &Ссылка)
|
| СГРУППИРОВАТЬ ПО
| Взаиморасчеты.Организация,
| Взаиморасчеты.Физлицо,
| ВЫБОР
| КОГДА Взаиморасчеты.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезКассу)
| ТОГДА ""Через кассу ""
| КОГДА Взаиморасчеты.СпособВыплаты = ЗНАЧЕНИЕ(Перечисление.СпособыВыплатыЗарплаты.ЧерезБанк)
| ТОГДА ""Перечислено в банк ""
| ИНАЧЕ ""Способ выплаты не указан ""
| КОНЕЦ + ВЫБОР
| КОГДА Взаиморасчеты.ХарактерВыплаты В (&Аванс)
| ТОГДА ""(аванс)""
| КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.Зарплата)
| ТОГДА ""(под расчет)""
| КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.ПустаяСсылка)
| И Взаиморасчеты.СуммаВзаиморасчетов > 0
| ТОГДА ""(не указано)""
| КОГДА Взаиморасчеты.ХарактерВыплаты = ЗНАЧЕНИЕ(Перечисление.ХарактерВыплатыЗарплаты.ПустаяСсылка)
| И Взаиморасчеты.СуммаВзаиморасчетов < 0
| ТОГДА ""(погашено задолженности)""
| ИНАЧЕ ""(межрасчет)""
| КОНЕЦ,
| НАЧАЛОПЕРИОДА(Взаиморасчеты.Период, МЕСЯЦ),
| НАЧАЛОПЕРИОДА(Взаиморасчеты.ПериодВзаиморасчетов, МЕСЯЦ),
| КОНЕЦПЕРИОДА(Взаиморасчеты.ПериодВзаиморасчетов, МЕСЯЦ),
| Взаиморасчеты.Регистратор) КАК НачисленияУдержания
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СУММА(Сальдо.СуммаВзаиморасчетовНачальныйОстаток) КАК СуммаВзаиморасчетовНачальныйОстаток,
| СУММА(Сальдо.СуммаВзаиморасчетовКонечныйОстаток) КАК СуммаВзаиморасчетовКонечныйОстаток
| ИЗ
| (ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацииОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток КАК СуммаВзаиморасчетовНачальныйОстаток,
| ВзаиморасчетыСРаботникамиОрганизацииОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток
| ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.ОстаткиИОбороты(
| &ПериодРегистрации,
| &КонецПериодаРегистрации,
| Месяц,
| ,
| Организация = &Организация
| И ФизЛицо = &Работник) КАК ВзаиморасчетыСРаботникамиОрганизацииОстаткиИОбороты
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| НДФЛКЗачету.СуммаНДФЛКЗачетуНачальныйОстаток,
| НДФЛКЗачету.СуммаНДФЛКЗачетуКонечныйОстаток
| ИЗ
| РегистрНакопления.НДФЛКЗачету.ОстаткиИОбороты(
| &ПериодРегистрации,
| &КонецПериодаРегистрации,
| Месяц,
| ,
| Организация = &Организация
| И ФизЛицо = &Работник) КАК НДФЛКЗачету) КАК Сальдо) КАК Сальдо
| ПО (ИСТИНА)
|
|УПОРЯДОЧИТЬ ПО
| ВидДвижения,
| ПорядокВидаРасчета,
| ВидРасчета,
| ПериодДействияНачало";
ЗапросРЛ.Текст = ТекстЗапроса;
РезультатЗапроса = ЗапросРЛ.Выполнить();

Макет = ПолучитьМакет("РасчетныйЛисток");
ОбластьЗаголовокТЧ = Макет.ПолучитьОбласть("Заголовок");
ОбластьНачисленоУдержано = Макет.ПолучитьОбласть("НачисленоУдержано");
ОбластьНатурДоходыВыплаты = Макет.ПолучитьОбласть("НатурДоходыВыплаты");
ОбластьВсего = Макет.ПолучитьОбласть("Всего");
ОбластьНатуральныеДоходы = Макет.ПолучитьОбласть("НатуральныеДоходы");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");

КолонкаНачислено = 2;
КолонкаПериодНачислено = 3;
КолонкаОтработаноДней = 5;
КолонкаОтработаноЧасов = 6;
КолонкаОплаченоДней = 7;
КолонкаОплаченоЧасов = 8;
КолонкаСуммаНачислено = 9;
КолонкаУдержано = 11;
КолонкаПериодУдержано = 14;
КолонкаСуммаУдержано = 16;

Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);

НеНайденыЗаписиВЗапросе = Истина;
// В этот табличный документ будет собираться данные для РЛ
ВременныйТабличныйДокумент = Новый ТабличныйДокумент;

ФИОФизлица = Физлицо.Наименование;

Если ДобавитьДанныеИзДокумента Тогда
//к результату запроса необходимо добавить данные из табличных полей документа

СтруктураПоиска = Новый Структура("ФизЛицо",ФизЛицо);

ТаблицаРезультатовЗапроса = РезультатЗапроса.Выгрузить();
СуммаНаНачалоПериода = 0;
СуммаНаКонецПериода = 0;
Если ТаблицаРезультатовЗапроса.Количество()>0 Тогда
СуммаНаНачалоПериода = ТаблицаРезультатовЗапроса[0].СуммаВзаиморасчетовНачальныйОстаток;
Если НЕ ЗначениеЗаполнено(СуммаНаНачалоПериода) Тогда
СуммаНаНачалоПериода = 0;
КонецЕсли;
СуммаНаКонецПериода = СуммаНаНачалоПериода;
Иначе
ТЗ =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СУММА(Сальдо.СуммаВзаиморасчетовНачальныйОстаток) КАК СуммаВзаиморасчетовНачальныйОстаток,
| СУММА(Сальдо.СуммаВзаиморасчетовКонечныйОстаток) КАК СуммаВзаиморасчетовКонечныйОстаток
|ИЗ
| (ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацииОстаткиИОбороты.СуммаВзаиморасчетовНачальныйОстаток КАК СуммаВзаиморасчетовНачальныйОстаток,
| ВзаиморасчетыСРаботникамиОрганизацииОстаткиИОбороты.СуммаВзаиморасчетовКонечныйОстаток КАК СуммаВзаиморасчетовКонечныйОстаток
| ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.ОстаткиИОбороты(
| &ПериодРегистрации,
| &КонецПериодаРегистрации,
| ,
| ,
| Организация = &Организация
| И ФизЛицо = &Работник) КАК ВзаиморасчетыСРаботникамиОрганизацииОстаткиИОбороты
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| НДФЛКЗачету.СуммаНДФЛКЗачетуНачальныйОстаток,
| НДФЛКЗачету.СуммаНДФЛКЗачетуКонечныйОстаток
| ИЗ
| РегистрНакопления.НДФЛКЗачету.ОстаткиИОбороты(
| &ПериодРегистрации,
| &КонецПериодаРегистрации,
| ,
| ,
| Организация = &Организация
| И ФизЛицо = &Работник) КАК НДФЛКЗачету) КАК Сальдо";

Запрос = Новый Запрос(ТЗ);
Запрос.УстановитьПараметр("Работник", ФизЛицо);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);
Запрос.УстановитьПараметр("КонецПериодаРегистрации", КонецМесяца(ПериодРегистрации));
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() тогда
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Следующий() тогда
СуммаНаНачалоПериода = ?(Выборка.СуммаВзаиморасчетовНачальныйОстаток = NULL, 0, Выборка.СуммаВзаиморасчетовНачальныйОстаток);
СуммаНаКонецПериода = ?(Выборка.СуммаВзаиморасчетовКонечныйОстаток = NULL, 0, Выборка.СуммаВзаиморасчетовКонечныйОстаток);
СуммаНаКонецПериода = ?(Проведен, СуммаНаНачалоПериода, СуммаНаКонецПериода);
Иначе
СуммаНаНачалоПериода = 0;
СуммаНаКонецПериода = 0;
КонецЕсли;
Иначе
СуммаНаНачалоПериода = 0;
СуммаНаКонецПериода = 0;
КонецЕсли;
КонецЕсли;

ТекстПериода = Формат(ПериодРегистрации, "ДФ = 'ММММ гггг ''г.'''");

// Очистим временный табличный документ
ВременныйТабличныйДокумент.Очистить();

ВременныйТабличныйДокумент.Вывести(ОбластьЗаголовокТЧ);
ВременныйТабличныйДокумент.Вывести(ОбластьНачисленоУдержано);
ВысотаТаблицы = ВременныйТабличныйДокумент.ВысотаТаблицы + 1;
ВсегоНачисления = 0; КоличествоНачислений = 0;
ВсегоУдержания = 0; КоличествоУдержаний = 0;
ИтогиНачисленийИУдержанийВыведены = Ложь;

Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("парамФизЛицо", Физлицо);

ТекстЗапроса =
"ВЫБРАТЬ
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.ВидРасчета,
| ОсновныеНачисления.ДатаНачала,
| ОсновныеНачисления.ДатаОкончания,
| ОсновныеНачисления.Результат,
| ОсновныеНачисления.ОтработаноДней,
| ОсновныеНачисления.ОтработаноЧасов,
| ОсновныеНачисления.ОплаченоДнейЧасов
|ПОМЕСТИТЬ ВТ_ОсновныеНачисления
|ИЗ
| &ОсновныеНачисления КАК ОсновныеНачисления
|ГДЕ
| ОсновныеНачисления.Физлицо = &парамФизЛицо";

Запрос.УстановитьПараметр("ОсновныеНачисления", Начисления);
Запрос.Текст = ТекстЗапроса;
Запрос.Выполнить();

ТекстЗапроса =
"ВЫБРАТЬ
| ДополнительныеНачисления.Сотрудник,
| ДополнительныеНачисления.ВидРасчета,
| ДополнительныеНачисления.ДатаНачала,
| ДополнительныеНачисления.ДатаОкончания,
| ДополнительныеНачисления.Результат,
| ДополнительныеНачисления.ОплаченоДнейЧасов
|ПОМЕСТИТЬ ВТ_ДополнительныеНачисления
|ИЗ
| &ДополнительныеНачисления КАК ДополнительныеНачисления
|ГДЕ
| ДополнительныеНачисления.Физлицо = &парамФизЛицо";

Запрос.УстановитьПараметр("ДополнительныеНачисления", ДополнительныеНачисления);
Запрос.Текст = ТекстЗапроса;
Запрос.Выполнить();

ТекстЗапроса =
"ВЫБРАТЬ
| ДоговорыНаВыполнениеРабот.Сотрудник,
| ДоговорыНаВыполнениеРабот.ВидРасчета,
| ДоговорыНаВыполнениеРабот.ДатаНачала,
| ДоговорыНаВыполнениеРабот.ДатаОкончания,
| ДоговорыНаВыполнениеРабот.Результат
|ПОМЕСТИТЬ ВТ_ДоговорыНаВыполнениеРабот
|ИЗ
| &ДоговорыНаВыполнениеРабот КАК ДоговорыНаВыполнениеРабот
|ГДЕ
| ДоговорыНаВыполнениеРабот.Физлицо = &парамФизЛицо";

Запрос.УстановитьПараметр("ДоговорыНаВыполнениеРабот", ДоговорыНаВыполнениеРабот);
Запрос.Текст = ТекстЗапроса;
Запрос.Выполнить();

ТекстЗапроса =
"ВЫБРАТЬ
| Удержания.Физлицо,
| Удержания.ВидРасчета,
| Удержания.ДатаНачала,
| Удержания.ДатаОкончания,
| Удержания.Результат
|ПОМЕСТИТЬ ВТ_Удержания
|ИЗ
| &Удержания КАК Удержания
|ГДЕ
| Удержания.Физлицо = &парамФизЛицо";

Запрос.УстановитьПараметр("Удержания", Удержания);
Запрос.Текст = ТекстЗапроса;
Запрос.Выполнить();

ТекстЗапроса =
"ВЫБРАТЬ
| НДФЛ.Физлицо,
| НДФЛ.Налог,
| НДФЛ.МесяцНалоговогоПериода
|ПОМЕСТИТЬ ВТ_НДФЛ
|ИЗ
| &НДФЛ КАК НДФЛ
|ГДЕ
| НДФЛ.Физлицо = &парамФизЛицо";

Запрос.УстановитьПараметр("НДФЛ", НДФЛ);
Запрос.Текст = ТекстЗапроса;
Запрос.Выполнить();

ТекстЗапросаНачисления =
"ВЫБРАТЬ
| ""Начисления"" КАК Таблица,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.Сотрудник КАК Сотрудник,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.Наименование, ""<не указано>"") КАК ВидРасчетаНаименование,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.Код, ""Я"") КАК ВидРасчетаКод,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме, ЛОЖЬ) КАК ЯвляетсяДоходомВНатуральнойФорме,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.СпособРасчета КАК ВидРасчетаСпособРасчета,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.ВидВремени,
| ВЫБОР
| КОГДА НачислениеЗарплатыРаботникамОрганизацийНачисления.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| ТОГДА "" (по внутр. совмест-ву)""
| ИНАЧЕ """"
| КОНЕЦ КАК ВидЗанятости,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ДатаНачала,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ДатаОкончания,
| СУММА(НачислениеЗарплатыРаботникамОрганизацийНачисления.Результат) КАК Результат,
| СУММА(НачислениеЗарплатыРаботникамОрганизацийНачисления.ОтработаноДней) КАК ОтработаноДней,
| СУММА(НачислениеЗарплатыРаботникамОрганизацийНачисления.ОтработаноЧасов) КАК ОтработаноЧасов,
| СУММА(НачислениеЗарплатыРаботникамОрганизацийНачисления.ОплаченоДнейЧасов) КАК ОплаченоДнейЧасов,
| NULL КАК МесяцНалоговогоПериода,
| NULL КАК ПогашеноЗайма,
| NULL КАК МатериальнаяВыгода,
| NULL КАК НалогНаМатериальнуюВыгоду,
| NULL КАК СтавкаНалогообложенияМатвыгоды
|ИЗ
| ВТ_ОсновныеНачисления КАК НачислениеЗарплатыРаботникамОрганизацийНачисления
|
|СГРУППИРОВАТЬ ПО
| НачислениеЗарплатыРаботникамОрганизацийНачисления.Сотрудник,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ДатаНачала,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ДатаОкончания,
| ВЫБОР
| КОГДА НачислениеЗарплатыРаботникамОрганизацийНачисления.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| ТОГДА "" (по внутр. совмест-ву)""
| ИНАЧЕ """"
| КОНЕЦ,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.СпособРасчета,
| НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.ВидВремени,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.Наименование, ""<не указано>""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.Код, ""Я""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийНачисления.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме, ЛОЖЬ)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""ДополнительныеНачисления"",
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Сотрудник,
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета.Наименование, ""<не указано>""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета.Код, ""Я""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме, ЛОЖЬ),
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета.СпособРасчета,
| NULL,
| ВЫБОР
| КОГДА НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| ТОГДА "" (по внутр. совмест-ву)""
| ИНАЧЕ """"
| КОНЕЦ,
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ДатаНачала,
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ДатаОкончания,
| СУММА(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Результат),
| 0,
| 0,
| СУММА(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ОплаченоДнейЧасов),
| NULL,
| NULL,
| NULL,
| NULL,
| NULL
|ИЗ
| ВТ_ДополнительныеНачисления КАК НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления
|
|СГРУППИРОВАТЬ ПО
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ДатаНачала,
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета,
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Сотрудник,
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ДатаОкончания,
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета.СпособРасчета,
| ВЫБОР
| КОГДА НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| ТОГДА "" (по внутр. совмест-ву)""
| ИНАЧЕ """"
| КОНЕЦ,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета.Наименование, ""<не указано>""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме, ЛОЖЬ),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.ВидРасчета.Код, ""Я"")
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""ДоговорыНаВыполнениеРабот"",
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.Сотрудник,
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета.Наименование, ""<не указано>""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета.Код, ""Я""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме, ЛОЖЬ),
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета.СпособРасчета,
| NULL,
| ВЫБОР
| КОГДА НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| ТОГДА "" (по внутр. совмест-ву)""
| ИНАЧЕ """"
| КОНЕЦ,
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ДатаНачала,
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ДатаОкончания,
| СУММА(НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.Результат),
| 0,
| 0,
| 0,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL
|ИЗ
| ВТ_ДоговорыНаВыполнениеРабот КАК НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот
|
|СГРУППИРОВАТЬ ПО
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ДатаОкончания,
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета,
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ДатаНачала,
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.Сотрудник,
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета.СпособРасчета,
| ВЫБОР
| КОГДА НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| ТОГДА "" (по внутр. совмест-ву)""
| ИНАЧЕ """"
| КОНЕЦ,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета.Наименование, ""<не указано>""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета.ЯвляетсяДоходомВНатуральнойФорме, ЛОЖЬ),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.ВидРасчета.Код, ""Я"")
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""Удержания"",
| НачислениеЗарплатыРаботникамОрганизацийУдержания.ФизЛицо,
| НачислениеЗарплатыРаботникамОрганизацийУдержания.ВидРасчета,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийУдержания.ВидРасчета.Наименование, ""<не указано>""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийУдержания.ВидРасчета.Код, ""Я""),
| ЛОЖЬ,
| NULL,
| NULL,
| NULL,
| НачислениеЗарплатыРаботникамОрганизацийУдержания.ДатаНачала,
| НачислениеЗарплатыРаботникамОрганизацийУдержания.ДатаОкончания,
| СУММА(НачислениеЗарплатыРаботникамОрганизацийУдержания.Результат),
| 0,
| 0,
| 0,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL
|ИЗ
| ВТ_Удержания КАК НачислениеЗарплатыРаботникамОрганизацийУдержания
|
|СГРУППИРОВАТЬ ПО
| НачислениеЗарплатыРаботникамОрганизацийУдержания.ФизЛицо,
| НачислениеЗарплатыРаботникамОрганизацийУдержания.ВидРасчета,
| НачислениеЗарплатыРаботникамОрганизацийУдержания.ДатаНачала,
| НачислениеЗарплатыРаботникамОрганизацийУдержания.ДатаОкончания,
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийУдержания.ВидРасчета.Наименование, ""<не указано>""),
| ЕСТЬNULL(НачислениеЗарплатыРаботникамОрганизацийУдержания.ВидРасчета.Код, ""Я"")
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""НДФЛ"",
| НачислениеЗарплатыРаботникамОрганизацийНДФЛ.ФизЛицо,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| НачислениеЗарплатыРаботникамОрганизацийНДФЛ.Налог,
| NULL,
| NULL,
| NULL,
| НачислениеЗарплатыРаботникамОрганизацийНДФЛ.МесяцНалоговогоПериода,
| NULL,
| NULL,
| NULL,
| NULL
|ИЗ
| ВТ_НДФЛ КАК НачислениеЗарплатыРаботникамОрганизацийНДФЛ
|
|УПОРЯДОЧИТЬ ПО
| Сотрудник,
| Таблица";
Запрос.Текст = ТекстЗапросаНачисления;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("парамФизЛицо", Физлицо);

ВыборкаЗапросаПоСотрудникам = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

Пока ВыборкаЗапросаПоСотрудникам.Следующий() Цикл

Если ВыборкаЗапросаПоСотрудникам.Таблица = "Начисления" тогда

ВидУчетаВремени = ПроведениеРасчетов.ПолучитьВидУчетаВремени(ВыборкаЗапросаПоСотрудникам.ВидРасчетаСпособРасчета, ВыборкаЗапросаПоСотрудникам.ВидРасчетаВидВремени);

СтрокаТаблицы = ТаблицаРезультатовЗапроса.Добавить();

СтрокаТаблицы.ВидДвижения = ?(ВыборкаЗапросаПоСотрудникам.ЯвляетсяДоходомВНатуральнойФорме,6,1);
СтрокаТаблицы.ВидРасчета = ВыборкаЗапросаПоСотрудникам.ВидРасчетаНаименование + ВыборкаЗапросаПоСотрудникам.ВидЗанятости;
СтрокаТаблицы.ПорядокВидаРасчета = "А" + ВыборкаЗапросаПоСотрудникам.ВидРасчетаКод;
СтрокаТаблицы.ПериодДействияНачало = ВыборкаЗапросаПоСотрудникам.ДатаНачала;
СтрокаТаблицы.ПериодДействияКонец = КонецДня(ВыборкаЗапросаПоСотрудникам.ДатаОкончания);
СтрокаТаблицы.ОтработаноДней = ВыборкаЗапросаПоСотрудникам.ОтработаноДней;
СтрокаТаблицы.ОтработаноЧасов = ВыборкаЗапросаПоСотрудникам.ОтработаноЧасов;
СтрокаТаблицы.ОплаченоДней = ?(ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоДням, ВыборкаЗапросаПоСотрудникам.ОплаченоДнейЧасов, 0);
СтрокаТаблицы.ОплаченоЧасов = ?(ВидУчетаВремени <> Перечисления.ВидыУчетаВремени.ПоДням, ВыборкаЗапросаПоСотрудникам.ОплаченоДнейЧасов, 0);
СтрокаТаблицы.Начисления = ВыборкаЗапросаПоСотрудникам.Результат;
СтрокаТаблицы.Удержания = 0;
СтрокаТаблицы.Регистратор = Неопределено;

ИначеЕсли ВыборкаЗапросаПоСотрудникам.Таблица = "ДополнительныеНачисления" тогда

ВидУчетаВремени = ПроведениеРасчетов.ПолучитьВидУчетаВремени(ВыборкаЗапросаПоСотрудникам.ВидРасчетаСпособРасчета, Неопределено);

СтрокаТаблицы = ТаблицаРезультатовЗапроса.Добавить();

СтрокаТаблицы.ВидДвижения = ?(ВыборкаЗапросаПоСотрудникам.ЯвляетсяДоходомВНатуральнойФорме,7,2);
СтрокаТаблицы.ВидРасчета = ВыборкаЗапросаПоСотрудникам.ВидРасчетаНаименование + ВыборкаЗапросаПоСотрудникам.ВидЗанятости;
СтрокаТаблицы.ПорядокВидаРасчета = "А" + ВыборкаЗапросаПоСотрудникам.ВидРасчетаКод;
СтрокаТаблицы.ПериодДействияНачало = ПериодРегистрации;
СтрокаТаблицы.ПериодДействияКонец = ПериодРегистрации;
СтрокаТаблицы.ОтработаноДней = 0;
СтрокаТаблицы.ОтработаноЧасов = 0;
СтрокаТаблицы.ОплаченоДней = ?(ВидУчетаВремени = Перечисления.ВидыУчетаВремени.ПоДням, ВыборкаЗапросаПоСотрудникам.ОплаченоДнейЧасов, 0);
СтрокаТаблицы.ОплаченоЧасов = ?(ВидУчетаВремени <> Перечисления.ВидыУчетаВремени.ПоДням, ВыборкаЗапросаПоСотрудникам.ОплаченоДнейЧасов, 0);
СтрокаТаблицы.Начисления = ВыборкаЗапросаПоСотрудникам.Результат;
СтрокаТаблицы.Удержания = 0;
СтрокаТаблицы.Регистратор = Неопределено;

ИначеЕсли ВыборкаЗапросаПоСотрудникам.Таблица = "ДоговорыНаВыполнениеРабот" тогда
СтрокаТаблицы = ТаблицаРезультатовЗапроса.Добавить();

СтрокаТаблицы.ВидДвижения = ?(ВыборкаЗапросаПоСотрудникам.ЯвляетсяДоходомВНатуральнойФорме,7,2);
СтрокаТаблицы.ВидРасчета = ВыборкаЗапросаПоСотрудникам.ВидРасчетаНаименование;
СтрокаТаблицы.ПорядокВидаРасчета = "А" + ВыборкаЗапросаПоСотрудникам.ВидРасчетаКод;
СтрокаТаблицы.ПериодДействияНачало = ВыборкаЗапросаПоСотрудникам.ДатаНачала;
СтрокаТаблицы.ПериодДействияКонец = КонецДня(ВыборкаЗапросаПоСотрудникам.ДатаОкончания);
СтрокаТаблицы.ОтработаноДней = 0;
СтрокаТаблицы.ОтработаноЧасов = 0;
СтрокаТаблицы.ОплаченоДней = 0;
СтрокаТаблицы.ОплаченоЧасов = 0;
СтрокаТаблицы.Начисления = ВыборкаЗапросаПоСотрудникам.Результат;
СтрокаТаблицы.Удержания = 0;
СтрокаТаблицы.Регистратор = Неопределено;

ИначеЕсли ВыборкаЗапросаПоСотрудникам.Таблица = "НДФЛ" тогда

СтрокаТаблицы = ТаблицаРезультатовЗапроса.Добавить();

СтрокаТаблицы.ВидДвижения = 3;
СтрокаТаблицы.ВидРасчета = "НДФЛ исчисленный по ставке 13(30)%";
СтрокаТаблицы.ПорядокВидаРасчета = "Б";
СтрокаТаблицы.ПериодДействияНачало = ВыборкаЗапросаПоСотрудникам.МесяцНалоговогоПериода;
СтрокаТаблицы.ПериодДействияКонец = КонецДня(КонецМесяца(ВыборкаЗапросаПоСотрудникам.МесяцНалоговогоПериода));
СтрокаТаблицы.ОтработаноДней = 0;
СтрокаТаблицы.ОтработаноЧасов = 0;
СтрокаТаблицы.ОплаченоДней = 0;
СтрокаТаблицы.ОплаченоЧасов = 0;
СтрокаТаблицы.Начисления = 0;
СтрокаТаблицы.Удержания = ВыборкаЗапросаПоСотрудникам.Результат;
СтрокаТаблицы.Регистратор = Неопределено;


ИначеЕсли ВыборкаЗапросаПоСотрудникам.Таблица = "Удержания" тогда

СтрокаТаблицы = ТаблицаРезультатовЗапроса.Добавить();

СтрокаТаблицы.ВидДвижения = 4;
СтрокаТаблицы.ВидРасчета = ВыборкаЗапросаПоСотрудникам.ВидРасчетаНаименование;
СтрокаТаблицы.ПорядокВидаРасчета = "А" + ВыборкаЗапросаПоСотрудникам.ВидРасчетаКод;
СтрокаТаблицы.ПериодДействияНачало = ВыборкаЗапросаПоСотрудникам.ДатаНачала;
СтрокаТаблицы.ПериодДействияКонец = КонецДня(ВыборкаЗапросаПоСотрудникам.ДатаОкончания);
СтрокаТаблицы.ОтработаноДней = 0;
СтрокаТаблицы.ОтработаноЧасов = 0;
СтрокаТаблицы.ОплаченоДней = 0;
СтрокаТаблицы.ОплаченоЧасов = 0;
СтрокаТаблицы.Начисления = 0;
СтрокаТаблицы.Удержания = ВыборкаЗапросаПоСотрудникам.Результат;
СтрокаТаблицы.Регистратор = Неопределено;

КонецЕсли;

КонецЦикла;

ТаблицаРезультатовЗапроса.Сортировать("ВидДвижения, ПорядокВидаРасчета, ВидРасчета, ПериодДействияНачало");

Для Каждого СтрокаТаблицы Из ТаблицаРезультатовЗапроса Цикл

Если ЗначениеЗаполнено(СтрокаТаблицы.ПериодДействияКонец) Тогда
ДатаОкончанияПериода = СтрокаТаблицы.ПериодДействияКонец
Иначе
ДатаОкончанияПериода = КонецМесяца(СтрокаТаблицы.ПериодДействияНачало);
КонецЕсли;

Если СтрокаТаблицы.ВидДвижения < 3 Тогда
НомерСтроки = ВысотаТаблицы + КоличествоНачислений;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).Текст = СтрокаТаблицы.ВидРасчета;

Если СтрокаТаблицы.Регистратор <> Неопределено Тогда
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).Примечание.Текст = СтрокаТаблицы.ОписаниеРегистратора;
КонецЕсли;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).Текст = УправлениеОтчетами.ОписаниеПериода(СтрокаТаблицы.ПериодДействияНачало, ДатаОкончанияПериода);
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаОтработаноДней - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОтработаноДней).Текст = СтрокаТаблицы.ОтработаноДней;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОтработаноЧасов).Текст = СтрокаТаблицы.ОтработаноЧасов;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОплаченоДней).Текст = СтрокаТаблицы.ОплаченоДней;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОплаченоЧасов).Текст = СтрокаТаблицы.ОплаченоЧасов;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаСуммаНачислено).Текст = Формат(СтрокаТаблицы.Начисления,"ЧЦ=15; ЧДЦ=2");

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаСуммаНачислено).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаПериодУдержано - 1).Объединить();
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаСуммаУдержано - 1).Объединить();
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).Объединить();
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСправа = Линия;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСнизу = Линия;

КоличествоНачислений = КоличествоНачислений + 1;
ВсегоНачисления = ВсегоНачисления + СтрокаТаблицы.Начисления;
СуммаНаКонецПериода = СуммаНаКонецПериода + СтрокаТаблицы.Начисления;

ИначеЕсли СтрокаТаблицы.ВидДвижения < 6 Тогда

НомерСтроки = ВысотаТаблицы + КоличествоУдержаний;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).Текст = СтрокаТаблицы.ВидРасчета;

Если СтрокаТаблицы.Регистратор <> Неопределено Тогда
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).Примечание.Текст = СтрокаТаблицы.ОписаниеРегистратора;
КонецЕсли;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаПериодУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).Текст = УправлениеОтчетами.ОписаниеПериода(СтрокаТаблицы.ПериодДействияНачало, ДатаОкончанияПериода);
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаСуммаУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано).Текст = Формат(СтрокаТаблицы.Удержания,"ЧЦ=15; ЧДЦ=2");

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСправа = Линия;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСнизу = Линия;

КоличествоУдержаний = КоличествоУдержаний + 1;
ВсегоУдержания = ВсегоУдержания + СтрокаТаблицы.Удержания;
СуммаНаКонецПериода = СуммаНаКонецПериода - СтрокаТаблицы.Удержания;

Иначе

// подведем итоги раздела начислений и удержаний
// начнем раздел доходов в натуральной форме и выплат
Если Не ИтогиНачисленийИУдержанийВыведены Тогда

КолвоРасчетов = Макс(КоличествоНачислений,КоличествоУдержаний);

Если КолвоРасчетов > 0 Тогда
РасчертитьРасчетныйЛисток(ВременныйТабличныйДокумент,ВысотаТаблицы,КолвоРасчетов)
КонецЕсли;

ОбластьВсего.Параметры.ВсегоНачисления = ВсегоНачисления;
ОбластьВсего.Параметры.ВсегоУдержания = ВсегоУдержания;

ВременныйТабличныйДокумент.Вывести(ОбластьВсего);
ИтогиНачисленийИУдержанийВыведены = Не ИтогиНачисленийИУдержанийВыведены;

ВременныйТабличныйДокумент.Вывести(ОбластьНатурДоходыВыплаты);
ВысотаТаблицы = ВременныйТабличныйДокумент.ВысотаТаблицы + 1;
ВсегоНачисления = 0; КоличествоНачислений = 0;
ВсегоУдержания = 0; КоличествоУдержаний = 0;

КонецЕсли;

Если СтрокаТаблицы.ВидДвижения < 8 Тогда

НомерСтроки = ВысотаТаблицы + КоличествоНачислений;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).Текст = СтрокаТаблицы.ВидРасчета;

Если СтрокаТаблицы.Регистратор <> Неопределено Тогда
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).Примечание.Текст = СтрокаТаблицы.ОписаниеРегистратора;
КонецЕсли;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).Текст = УправлениеОтчетами.ОписаниеПериода(СтрокаТаблицы.ПериодДействияНачало, ДатаОкончанияПериода);
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаОтработаноДней - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОтработаноДней).Текст = СтрокаТаблицы.ОтработаноДней;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОтработаноЧасов).Текст = СтрокаТаблицы.ОтработаноЧасов;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОплаченоДней).Текст = СтрокаТаблицы.ОплаченоДней;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОплаченоЧасов).Текст = СтрокаТаблицы.ОплаченоЧасов;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаСуммаНачислено).Текст = Формат(СтрокаТаблицы.Начисления,"ЧЦ=15; ЧДЦ=2");

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаСуммаНачислено).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаУдержано - 1).Объединить();

КоличествоНачислений = КоличествоНачислений + 1;
ВсегоНачисления = ВсегоНачисления + СтрокаТаблицы.Начисления;
//СуммаНаКонецПериода = СуммаНаКонецПериода + СтрокаТаблицы.Начисления;

Иначе // остались выплаты

НомерСтроки = ВысотаТаблицы + КоличествоУдержаний;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).Текст = СтрокаТаблицы.ВидРасчета;

Если СтрокаТаблицы.Регистратор <> Неопределено Тогда
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).Примечание.Текст = СтрокаТаблицы.ОписаниеРегистратора;
КонецЕсли;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаПериодУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).Текст = УправлениеОтчетами.ОписаниеПериода(СтрокаТаблицы.ПериодДействияНачало, ДатаОкончанияПериода);
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаСуммаУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано).Текст = Формат(СтрокаТаблицы.Удержания,"ЧЦ=15; ЧДЦ=2");

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).Объединить();

КоличествоУдержаний = КоличествоУдержаний + 1;
ВсегоУдержания = ВсегоУдержания + СтрокаТаблицы.Удержания;
СуммаНаКонецПериода = СуммаНаКонецПериода - СтрокаТаблицы.Удержания;

КонецЕсли;
КонецЕсли;
КонецЦикла;

// расчертим линиями низ расчетного листками
КолвоРасчетов = Макс(КоличествоНачислений,КоличествоУдержаний);

Если КолвоРасчетов > 0 Тогда
РасчертитьРасчетныйЛисток(ВременныйТабличныйДокумент,ВысотаТаблицы,КолвоРасчетов)
КонецЕсли;

Если Не ИтогиНачисленийИУдержанийВыведены Тогда // есть только начисления и удержания
ОбластьВсего.Параметры.ВсегоНачисления = ВсегоНачисления;
ОбластьВсего.Параметры.ВсегоУдержания = ВсегоУдержания;
ВременныйТабличныйДокумент.Вывести(ОбластьВсего);

ИначеЕсли КолвоРасчетов > 0 Тогда // остались итоги по натуральным доходам и выплатам
ОбластьНатуральныеДоходы.Параметры.ВсегоНачисления = ВсегоНачисления;
ОбластьНатуральныеДоходы.Параметры.ВсегоУдержания = ВсегоУдержания;
ВременныйТабличныйДокумент.Вывести(ОбластьНатуральныеДоходы);

КонецЕсли;

Если СуммаНаНачалоПериода >= 0 Тогда
ОбластьПодвал.Параметры.ТекстДолгНаНачалоПериода = ОбщегоНазначения.ПреобразоватьСтрокуИнтерфейса("Долг за организацией на начало месяца: ");
ОбластьПодвал.Параметры.СуммаДолгНаНачалоПериода = СуммаНаНачалоПериода;
Иначе
ОбластьПодвал.Параметры.ТекстДолгНаНачалоПериода = "Долг за работником на начало месяца: ";
ОбластьПодвал.Параметры.СуммаДолгНаНачалоПериода = 0 - СуммаНаНачалоПериода;
КонецЕсли;

Если СуммаНаКонецПериода >= 0 Тогда
ОбластьПодвал.Параметры.ТекстДолгНаКонецПериода = ОбщегоНазначения.ПреобразоватьСтрокуИнтерфейса("Долг за организацией на конец месяца: ");
ОбластьПодвал.Параметры.СуммаДолгНаКонецПериода = СуммаНаКонецПериода;
Иначе
ОбластьПодвал.Параметры.ТекстДолгНаКонецПериода = "Долг за работником на конец месяца: ";
ОбластьПодвал.Параметры.СуммаДолгНаКонецПериода = 0 - СуммаНаКонецПериода;
КонецЕсли;

ВременныйТабличныйДокумент.Вывести(ОбластьПодвал);

Иначе //выводим в отчет только данные запроса
Выборка = РезультатЗапроса.Выбрать();
Если Выборка.Количество() = 0 Тогда
//нет данных в запросе
Возврат ВременныйТабличныйДокумент;
КонецЕсли;

ТекстПериода = Формат(ПериодРегистрации, "ДФ = 'ММММ гггг ''г.'''");

// Очистим временный табличный документ
ВременныйТабличныйДокумент.Очистить();

ВременныйТабличныйДокумент.Вывести(ОбластьЗаголовокТЧ);
ВременныйТабличныйДокумент.Вывести(ОбластьНачисленоУдержано);

ВысотаТаблицы = ВременныйТабличныйДокумент.ВысотаТаблицы + 1;

ВсегоНачисления = 0; КоличествоНачислений = 0;
ВсегоУдержания = 0; КоличествоУдержаний = 0;
ИтогиНачисленийИУдержанийВыведены = Ложь;

Пока Выборка.Следующий() Цикл

Если ЗначениеЗаполнено(Выборка.ПериодДействияКонец) Тогда
ДатаОкончанияПериода = Выборка.ПериодДействияКонец;

Иначе
ДатаОкончанияПериода = КонецМесяца(Выборка.ПериодДействияНачало);

КонецЕсли;

Если Выборка.ВидДвижения < 3 Тогда
НомерСтроки = ВысотаТаблицы + КоличествоНачислений;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).Текст = Выборка.ВидРасчета;
Если Выборка.Регистратор <> Ссылка Тогда
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).Примечание.Текст = Выборка.Регистратор;
КонецЕсли;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).Текст = УправлениеОтчетами.ОписаниеПериода(Выборка.ПериодДействияНачало, ДатаОкончанияПериода);
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаОтработаноДней - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОтработаноДней).Текст = Выборка.ОтработаноДней;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОтработаноЧасов).Текст = Выборка.ОтработаноЧасов;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОплаченоДней).Текст = Выборка.ОплаченоДней;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОплаченоЧасов).Текст = Выборка.ОплаченоЧасов;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаСуммаНачислено).Текст = Формат(Выборка.Начисления,"ЧЦ=15; ЧДЦ=2");
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаСуммаНачислено).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаУдержано - 1).Объединить();


ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаПериодУдержано - 1).Объединить();
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаСуммаУдержано - 1).Объединить();
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).Объединить();
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСправа = Линия;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСнизу = Линия;


КоличествоНачислений = КоличествоНачислений + 1;
ВсегоНачисления = ВсегоНачисления + Выборка.Начисления;

ИначеЕсли Выборка.ВидДвижения < 6 Тогда

НомерСтроки = ВысотаТаблицы + КоличествоУдержаний;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).Текст = Выборка.ВидРасчета;
Если Выборка.Регистратор <> Ссылка Тогда
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).Примечание.Текст = Выборка.Регистратор;
КонецЕсли;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаПериодУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).Текст = УправлениеОтчетами.ОписаниеПериода(Выборка.ПериодДействияНачало, ДатаОкончанияПериода);
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаСуммаУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано).Текст = Формат(Выборка.Удержания,"ЧЦ=15; ЧДЦ=2");
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).Объединить();
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСправа = Линия;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСнизу = Линия;

КоличествоУдержаний = КоличествоУдержаний + 1;
ВсегоУдержания = ВсегоУдержания + Выборка.Удержания;

Иначе

// подведем итоги раздела начислений и удержаний
// начнем раздел доходов в натуральной форме и выплат
Если Не ИтогиНачисленийИУдержанийВыведены Тогда

КолвоРасчетов = Макс(КоличествоНачислений,КоличествоУдержаний);

Если КолвоРасчетов > 0 Тогда
РасчертитьРасчетныйЛисток(ВременныйТабличныйДокумент,ВысотаТаблицы,КолвоРасчетов)
КонецЕсли;

ОбластьВсего.Параметры.ВсегоНачисления = ВсегоНачисления;
ОбластьВсего.Параметры.ВсегоУдержания = ВсегоУдержания;

ВременныйТабличныйДокумент.Вывести(ОбластьВсего);
ИтогиНачисленийИУдержанийВыведены = Не ИтогиНачисленийИУдержанийВыведены;

ВременныйТабличныйДокумент.Вывести(ОбластьНатурДоходыВыплаты);
ВысотаТаблицы = ВременныйТабличныйДокумент.ВысотаТаблицы + 1;
ВсегоНачисления = 0; КоличествоНачислений = 0;
ВсегоУдержания = 0; КоличествоУдержаний = 0;

КонецЕсли;

Если Выборка.ВидДвижения < 8 Тогда

НомерСтроки = ВысотаТаблицы + КоличествоНачислений;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).Текст = Выборка.ВидРасчета;
Если Выборка.Регистратор <> Ссылка Тогда
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).Примечание.Текст = Выборка.Регистратор;
КонецЕсли;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаНачислено).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).Текст = УправлениеОтчетами.ОписаниеПериода(Выборка.ПериодДействияНачало, ДатаОкончанияПериода);
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаПериодНачислено).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодНачислено, НомерСтроки, КолонкаОтработаноДней - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОтработаноДней).Текст = Выборка.ОтработаноДней;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОтработаноЧасов).Текст = Выборка.ОтработаноЧасов;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОплаченоДней).Текст = Выборка.ОплаченоДней;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаОплаченоЧасов).Текст = Выборка.ОплаченоЧасов;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаСуммаНачислено).Текст = Формат(Выборка.Начисления,"ЧЦ=15; ЧДЦ=2");
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаСуммаНачислено).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаНачислено, НомерСтроки, КолонкаУдержано - 1).Объединить();

КоличествоНачислений = КоличествоНачислений + 1;
ВсегоНачисления = ВсегоНачисления + Выборка.Начисления;

Иначе // остались выплаты

НомерСтроки = ВысотаТаблицы + КоличествоУдержаний;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).Текст = Выборка.ВидРасчета;
Если Выборка.Регистратор <> Ссылка Тогда
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).Примечание.Текст = Выборка.Регистратор;
КонецЕсли;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаУдержано , НомерСтроки, КолонкаПериодУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).Текст = УправлениеОтчетами.ОписаниеПериода(Выборка.ПериодДействияНачало, ДатаОкончанияПериода);
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаПериодУдержано).РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаПериодУдержано, НомерСтроки, КолонкаСуммаУдержано - 1).Объединить();

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано).Текст = Формат(Выборка.Удержания,"ЧЦ=15; ЧДЦ=2");
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано).ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).Объединить();

КоличествоУдержаний = КоличествоУдержаний + 1;
ВсегоУдержания = ВсегоУдержания + Выборка.Удержания;

ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСправа = Линия;
ВременныйТабличныйДокумент.Область(НомерСтроки, КолонкаСуммаУдержано, НомерСтроки, КолонкаСуммаУдержано + 1).ГраницаСнизу = Линия;

КонецЕсли;

КонецЕсли;

КонецЦикла;

// Данные для подвала
СуммаНаНачалоПериода = Выборка.СуммаВзаиморасчетовНачальныйОстаток;
СуммаНаКонецПериода = Выборка.СуммаВзаиморасчетовКонечныйОстаток;

// расчертим линиями низ расчетного листками
КолвоРасчетов = Макс(КоличествоНачислений,КоличествоУдержаний);

Если КолвоРасчетов > 0 Тогда
РасчертитьРасчетныйЛисток(ВременныйТабличныйДокумент,ВысотаТаблицы,КолвоРасчетов)
КонецЕсли;

Если Не ИтогиНачисленийИУдержанийВыведены Тогда // есть только начисления и удержания
ОбластьВсего.Параметры.ВсегоНачисления = ВсегоНачисления;
ОбластьВсего.Параметры.ВсегоУдержания = ВсегоУдержания;
ВременныйТабличныйДокумент.Вывести(ОбластьВсего);
ИначеЕсли КолвоРасчетов > 0 Тогда // остались итоги по натуральным доходам и выплатам
ОбластьНатуральныеДоходы.Параметры.ВсегоНачисления = ВсегоНачисления;
ОбластьНатуральныеДоходы.Параметры.ВсегоУдержания = ВсегоУдержания;
ВременныйТабличныйДокумент.Вывести(ОбластьНатуральныеДоходы);
КонецЕсли;

Если СуммаНаНачалоПериода = NULL Тогда

ОбластьПодвал.Параметры.ТекстДолгНаНачалоПериода = ОбщегоНазначения.ПреобразоватьСтрокуИнтерфейса("Долг за организацией на начало месяца: ");
ОбластьПодвал.Параметры.СуммаДолгНаНачалоПериода = 0;

Иначе

Если СуммаНаНачалоПериода >= 0 Тогда
ОбластьПодвал.Параметры.ТекстДолгНаНачалоПериода = ОбщегоНазначения.ПреобразоватьСтрокуИнтерфейса("Долг за организацией на начало месяца: ");
ОбластьПодвал.Параметры.СуммаДолгНаНачалоПериода = СуммаНаНачалоПериода;
Иначе
ОбластьПодвал.Параметры.ТекстДолгНаНачалоПериода = "Долг за работником на начало месяца: ";
ОбластьПодвал.Параметры.СуммаДолгНаНачалоПериода = 0 - СуммаНаНачалоПериода;
КонецЕсли;

КонецЕсли;

Если СуммаНаКонецПериода = NULL Тогда

ОбластьПодвал.Параметры.ТекстДолгНаКонецПериода = "Долг за работником на конец месяца: ";
ОбластьПодвал.Параметры.СуммаДолгНаКонецПериода = 0;

Иначе

Если СуммаНаКонецПериода >= 0 Тогда
ОбластьПодвал.Параметры.ТекстДолгНаКонецПериода = ОбщегоНазначения.ПреобразоватьСтрокуИнтерфейса("Долг за организацией на конец месяца: ");
ОбластьПодвал.Параметры.СуммаДолгНаКонецПериода = СуммаНаКонецПериода;
Иначе
ОбластьПодвал.Параметры.ТекстДолгНаКонецПериода = "Долг за работником на конец месяца: ";
ОбластьПодвал.Параметры.СуммаДолгНаКонецПериода = 0 - СуммаНаКонецПериода;
КонецЕсли;

КонецЕсли;

ВременныйТабличныйДокумент.Вывести(ОбластьПодвал);
КонецЕсли;

Возврат ВременныйТабличныйДокумент;
КонецФункции //ЗаполнитьТаблицуРасчетногоЛистка()

#КонецЕсли

// Выполняет автоматическое заполнение документа по данным документа и переданным параметрам
//
// Параметры:
// ПостроительЗапроса - построитель запроса, который используется для ограничения состава физлиц
// по которым выполняется заполнение документа
//
// Возвращаемое значение:
// Логическое - удалось ли выполнить автоматическое заполнение документа
//
Функция Автозаполнение(Запрос = Неопределено, РежимЗаполнения = Неопределено) Экспорт

ОчиститьТЧ();

Возврат ВыполнитьАвтозаполнение(ПериодНачисленияДатаНачала, ПериодНачисленияДатаОкончания, Запрос,,,, РежимЗаполнения);

КонецФункции // Автозаполнение()

// Выполняет автоматическое заполнение документа по данным документа и переданным параметрам
//
// Параметры:
// ПериодЗаполнения - период (дата - начало месяца) за который необходимо выполнить автозаполнение
// ПостроительЗапроса - построитель запроса, который используется для ограничения состава физлиц
// по которым выполняется заполнение документа
// ПерерассчитываемыйДокумент - перерассчитываемый документ для автозаполнения документа
// по перерассчитываемому начислению зарплаты
// Физлица - массив физлиц перерасчета
// РежимЗаполнения - строка, полнота заполнения по сотрудникам: по всем сотрудникам,
// по военнослужащим, по гражданским лицам.
//
// Возвращаемое значение:
// Логическое - удалось ли выполнить автоматическое заполнение документа
//
Функция ВыполнитьАвтозаполнение(НачалоПериодаЗаполнения, ОкончаниеПериодаЗаполнения, Запрос = Неопределено, ЭтоПерерасчет = Ложь, СписокФизЛиц = Неопределено, МассивСотрудники = Неопределено, РежимЗаполнения = Неопределено) Экспорт

РасчетЗарплатыОрганизацииПоОтветственным = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "РасчетЗарплатыОрганизацииПоОтветственным");
ГоловнаяОрганизация = ОбщегоНазначения.ГоловнаяОрганизация(Организация);

// готовим объект Запрос и
// определяем тексты условий ПоВсемПодразделениямОрганизации и УсловиеНаПодразделение.
Если Запрос = Неопределено Тогда

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

Если ЗначениеЗаполнено(ПодразделениеОрганизации) Тогда
ПоВсемПодразделениямОрганизации = Ложь;
Запрос.УстановитьПараметр("парамПодразделение", ПодразделениеОрганизации);
ТекстЗапросаПоПодразделениям =
"ВЫБРАТЬ
| ПодразделенияОрганизаций.Ссылка КАК Подразделение
|ПОМЕСТИТЬ ВТПодразделенияОтбора
|ИЗ
| Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
|ГДЕ
| ПодразделенияОрганизаций.Ссылка В ИЕРАРХИИ(&парамПодразделение)
|
|ИНДЕКСИРОВАТЬ ПО
| Подразделение";
Иначе
// подготовим временную таблицу с подразделениями
ПоВсемПодразделениямОрганизации = Истина;
ТекстЗапросаПоПодразделениям =
"ВЫБРАТЬ
| НЕОПРЕДЕЛЕНО КАК Подразделение
|ПОМЕСТИТЬ ВТПодразделенияОтбора";
КонецЕсли;


Если МассивСотрудники = Неопределено Тогда


Если ЗначениеЗаполнено(Ответственный) И РасчетЗарплатыОрганизацииПоОтветственным Тогда
ПоВсемПодразделениямОрганизации = Ложь;
Запрос.УстановитьПараметр("парамПользователь", Ответственный);
Запрос.УстановитьПараметр("парамНачало", НачалоПериодаЗаполнения);
ТекстЗапросаПоПодразделениям =
"ВЫБРАТЬ
| ПодразделенияОрганизаций.Ссылка КАК Подразделение
|ПОМЕСТИТЬ ВТПодразделенияОтбора
|ИЗ
| Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций
|ГДЕ
| ПодразделенияОрганизаций.Ссылка В ИЕРАРХИИ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Расчетчики.ПодразделениеОрганизации
| ИЗ
| РегистрСведений.РасчетчикиЗарплатыОрганизаций.СрезПоследних(&парамНачало) КАК Расчетчики
| ГДЕ
| Расчетчики.Пользователь = &парамПользователь)
|
|ИНДЕКСИРОВАТЬ ПО
| Подразделение";
КонецЕсли;

Если РасчетЗарплатыОрганизацииПоОтветственным И ЗначениеЗаполнено(Ответственный) Тогда
// Проверим ответственного - является ли он расчетчиком вообще и для заданного
// подразделения (если оно задано)
Запрос.УстановитьПараметр("парамПользователь" , Ответственный);
Запрос.УстановитьПараметр("парамНачало" , НачалоПериодаЗаполнения);
Если ПодразделениеОрганизации.Пустая() Тогда
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Расчетчики.ПодразделениеОрганизации
|ИЗ
| РегистрСведений.РасчетчикиЗарплатыОрганизаций.СрезПоследних(&парамНачало, ) КАК Расчетчики
|ГДЕ
| Расчетчики.Пользователь = &парамПользователь";
Если Запрос.Выполнить().Пустой() Тогда
ОбщегоНазначения.ОшибкаРасчета("Ответственный за этот документ не является расчетчиком ни одного из подразделений учреждения");
Возврат Ложь;
КонецЕсли;
Иначе
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Подразделения.Ссылка
|ИЗ
| Справочник.ПодразделенияОрганизаций КАК Подразделения
|ГДЕ
| Подразделения.Ссылка В ИЕРАРХИИ(&парамПодразделение)
| И Подразделения.Ссылка В ИЕРАРХИИ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Расчетчики.ПодразделениеОрганизации
| ИЗ
| РегистрСведений.РасчетчикиЗарплатыОрганизаций.СрезПоследних(&парамНачало) КАК Расчетчики
| ГДЕ
| Расчетчики.Пользователь = &парамПользователь)";
Запрос.УстановитьПараметр("парамПодразделение" , ПодразделениеОрганизации);
Если Запрос.Выполнить().Пустой() Тогда
ОбщегоНазначения.ОшибкаРасчета("Ответственный за этот документ не является расчетчиком для выбранного подразделения");
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Запрос.УстановитьПараметр("ФизЛица", СписокФизЛиц);
Запрос.УстановитьПараметр("ПоВсемФизЛицам", СписокФизЛиц = Неопределено);
Запрос.УстановитьПараметр("парамОрганизация", Организация);
Запрос.УстановитьПараметр("парамГоловнаяОрганизация",ГоловнаяОрганизация);
Запрос.УстановитьПараметр("парамНачало", НачалоПериодаЗаполнения);
Запрос.УстановитьПараметр("парамКонец", КонецДня(ОкончаниеПериодаЗаполнения));

ВидыДоговоровВоеннослужащих = Новый Массив;
ВидыДоговоровВоеннослужащих.Добавить(Перечисления.ВидыДоговоровСФизЛицами.ВоеннаяСлужбаПоКонтракту);
ВидыДоговоровВоеннослужащих.Добавить(Перечисления.ВидыДоговоровСФизЛицами.ВоеннаяСлужбаПоПризыву);
Запрос.УстановитьПараметр("ВидыДоговоровВоеннослужащих", ВидыДоговоровВоеннослужащих);

Если РежимЗаполнения = "ДействиеЗаполнитьПоВоеннослужащим" Тогда
УсловиеНаФизлица1 = "Сотрудник.ВидДоговора В (&ВидыДоговоровВоеннослужащих)";
УсловиеНаФизлица2 = "РаботникиОрганизации.Сотрудник.ВидДоговора В (&ВидыДоговоровВоеннослужащих)";
УсловиеНаФизлица3 = "Работники.Сотрудник.ВидДоговора В (&ВидыДоговоровВоеннослужащих)";
УсловиеНаФизлица4 = "ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.ВидДоговора В (&ВидыДоговоровВоеннослужащих)";
ИначеЕсли РежимЗаполнения = "ДействиеЗаполнитьПоГражданскимЛицам" Тогда
УсловиеНаФизлица1 = "Сотрудник.ВидДоговора НЕ В (&ВидыДоговоровВоеннослужащих)";
УсловиеНаФизлица2 = "РаботникиОрганизации.Сотрудник.ВидДоговора НЕ В (&ВидыДоговоровВоеннослужащих)";
УсловиеНаФизлица3 = "Работники.Сотрудник.ВидДоговора НЕ В (&ВидыДоговоровВоеннослужащих)";
УсловиеНаФизлица4 = "ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.ВидДоговора НЕ В (&ВидыДоговоровВоеннослужащих)";
Иначе
УсловиеНаФизлица1 = "&ПоВсемФизЛицам ИЛИ Сотрудник.ФизЛицо В (&ФизЛица)";
УсловиеНаФизлица2 = "&ПоВсемФизЛицам ИЛИ РаботникиОрганизации.Сотрудник.ФизЛицо В (&ФизЛица)";
УсловиеНаФизлица3 = "&ПоВсемФизЛицам ИЛИ Работники.Сотрудник.ФизЛицо В (&ФизЛица)";
УсловиеНаФизлица4 = "&ПоВсемФизЛицам ИЛИ ДоговорНаВыполнениеРаботСФизЛицом.ФизЛицо В (&ФизЛица)";
КонецЕсли;

ТекстЗапросаПоСпискуРаботников =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| РаботникиОрганизации.Сотрудник КАК Сотрудник,
| РаботникиОрганизации.Сотрудник.Физлицо КАК Физлицо
|ПОМЕСТИТЬ ВТСписокРаботников
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(
| &парамНачало,
| Организация = &парамГоловнаяОрганизация
| И (" + УсловиеНаФизлица1+ ")) КАК РаботникиОрганизации
|ГДЕ
| ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ПричинаИзмененияСостоянияЗавершения
| ИНАЧЕ РаботникиОрганизации.ПричинаИзмененияСостояния
| КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ОбособленноеПодразделениеЗавершения
| ИНАЧЕ РаботникиОрганизации.ОбособленноеПодразделение
| КОНЕЦ = &парамОрганизация
| И ВЫБОР
| КОГДА &ПоВсемПодразделениям
| ТОГДА ИСТИНА
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ПодразделениеОрганизацииЗавершения В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения)
| ИНАЧЕ РаботникиОрганизации.ПодразделениеОрганизации В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения)
| КОНЕЦ
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| РаботникиОрганизации.Сотрудник,
| РаботникиОрганизации.Сотрудник.Физлицо
|ИЗ
| РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
|ГДЕ
| РаботникиОрганизации.Период > &парамНачало
| И РаботникиОрганизации.Период <= &парамКонец
| И РаботникиОрганизации.Организация = &парамГоловнаяОрганизация
| И (" + УсловиеНаФизлица2+ ")
| И РаботникиОрганизации.ОбособленноеПодразделение = &парамОрганизация
| И (&ПоВсемПодразделениям
| ИЛИ РаботникиОрганизации.ПодразделениеОрганизации В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения))
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Работники.Сотрудник,
| Работники.Сотрудник.Физлицо
|ИЗ
| РегистрСведений.РаботникиОрганизаций КАК Работники
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК ПериодыПерекрытия
| ПО Работники.Сотрудник = ПериодыПерекрытия.Сотрудник
| И (ПериодыПерекрытия.Период <= Работники.ПериодЗавершения)
| И (ПериодыПерекрытия.Период > Работники.Период)
| И (ПериодыПерекрытия.Организация = &парамГоловнаяОрганизация)
|ГДЕ
| Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| И Работники.ПериодЗавершения > &парамНачало
| И Работники.ПериодЗавершения <= &парамКонец
| И Работники.Организация = &парамГоловнаяОрганизация
| И Работники.ОбособленноеПодразделениеЗавершения = &парамОрганизация
| И (" + УсловиеНаФизлица3+ ")
| И (&ПоВсемПодразделениям
| ИЛИ Работники.ПодразделениеОрганизацииЗавершения В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения))
| И ПериодыПерекрытия.Период ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник,
| ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо
|ИЗ
| Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом
|ГДЕ
| ДоговорНаВыполнениеРаботСФизЛицом.ДатаНачала <= &парамКонец
| И ДоговорНаВыполнениеРаботСФизЛицом.ДатаОкончания >= &парамНачало
| И ДоговорНаВыполнениеРаботСФизЛицом.Проведен
| И ДоговорНаВыполнениеРаботСФизЛицом.Организация = &парамОрганизация
| И (" + УсловиеНаФизлица4+ ")
| И (&ПоВсемПодразделениям
| ИЛИ ДоговорНаВыполнениеРаботСФизЛицом.ПодразделениеОрганизации В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения))
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";

Иначе

Запрос.УстановитьПараметр("Сотрудники", МассивСотрудники);
ТекстЗапросаПоСпискуРаботников =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| СотрудникиОрганизаций.Ссылка КАК Сотрудник,
| СотрудникиОрганизаций.Физлицо
|ПОМЕСТИТЬ ВТСписокРаботников
|ИЗ
| Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|ГДЕ
| СотрудникиОрганизаций.Ссылка В(&Сотрудники)
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";

КонецЕсли;

// создаем временную таблицу с подразделениями
Запрос.Текст = ТекстЗапросаПоПодразделениям;
Запрос.УстановитьПараметр("ПоВсемПодразделениям", ПоВсемПодразделениямОрганизации);
Запрос.Выполнить();

// создаем временную таблицу ВТСписокРаботников с сотрудниками, отобранными по подразделению или из переданного списка
//
// Поля:
// Сотрудник
// Физлицо
//
Запрос.Текст = ТекстЗапросаПоСпискуРаботников;
Запрос.Выполнить();


Иначе

// создаем временную таблицу ВТСписокРаботников с сотрудниками, отобранными по критериям пользователя
//
// Поля:
// Сотрудник
// Физлицо
//
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Выполнить();

// объявим временную таблицу - она должна присутствовать, но использоваться не будет
Запрос.Текст =
"ВЫБРАТЬ
| НЕОПРЕДЕЛЕНО КАК Подразделение
|ПОМЕСТИТЬ ВТПодразделенияОтбора";
Запрос.Выполнить();
Запрос.УстановитьПараметр("ПоВсемПодразделениям", Истина);

КонецЕсли;

// Установим параметры запроса
Запрос.УстановитьПараметр("парамПериодРегистрации" , ПериодРегистрации);
Запрос.УстановитьПараметр("парамНачало" , НачалоПериодаЗаполнения);
Запрос.УстановитьПараметр("парамКонец" , КонецДня(ОкончаниеПериодаЗаполнения));
Запрос.УстановитьПараметр("парамОрганизация" , Организация);
Запрос.УстановитьПараметр("парамГоловнаяОрганизация", ГоловнаяОрганизация);
Запрос.УстановитьПараметр("парамПодразделение" , ПодразделениеОрганизации);
Запрос.УстановитьПараметр("парамРегистратор" , Ссылка);
Запрос.УстановитьПараметр("парамНачалоМесяца" , НачалоМесяца(НачалоПериодаЗаполнения));
Запрос.УстановитьПараметр("парамДатаВалютногоУчета" , НачалоМесяца(НачалоПериодаЗаполнения));
Запрос.УстановитьПараметр("парамВалютаРегламентУчета" , Константы.ВалютаРегламентированногоУчета.Получить());
Запрос.УстановитьПараметр("парамМассивСпособовРасчетовБезВалюты" , ПроведениеРасчетовПереопределяемый.ПолучитьСписокСпособовРасчетаНеТребующихУказанияВалюты());
Запрос.УстановитьПараметр("Год",Год(НачалоПериодаЗаполнения));
Запрос.УстановитьПараметр("ЭтоПерерасчет", ЭтоПерерасчет);

СпособыРасчетаОтСтажа = Новый Массив;
СпособыРасчетаОтСтажа.Добавить(Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПоМесячнойТарифнойСтавкеПоЧасам);
СпособыРасчетаОтСтажа.Добавить(Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПоМесячнойТарифнойСтавкеПоДням);
СпособыРасчетаОтСтажа.Добавить(Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПоДневнойТарифнойСтавке);
СпособыРасчетаОтСтажа.Добавить(Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПоЧасовойТарифнойСтавке);
СпособыРасчетаОтСтажа.Добавить(Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПроцентом);
СпособыРасчетаОтСтажа.Добавить(Перечисления.СпособыРасчетаОплатыТруда.СевернаяНадбавка);
Запрос.УстановитьПараметр("СпособыРасчетаОтСтажа", СпособыРасчетаОтСтажа);

Если Ссылка.Пустая() Тогда
СcылкаОбъекта = Документы.НачислениеЗарплатыРаботникамОрганизаций.ПолучитьСсылку();
УстановитьСсылкуНового(СcылкаОбъекта);
Иначе
СcылкаОбъекта = Ссылка;
КонецЕсли;
Запрос.УстановитьПараметр("Ссылка", СcылкаОбъекта);

//ТаблицаДвиженийРаботниковТекст
//Описание:
// Выбирает список работников, отвечающих условиям отбора, числящихся на начало месяца и их движения за месяц.

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| &парамНачало КАК Период,
| РаботникиОрганизации.Сотрудник КАК Сотрудник,
| ИСТИНА КАК Подходит,
| ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ПодразделениеОрганизацииЗавершения
| ИНАЧЕ РаботникиОрганизации.ПодразделениеОрганизации
| КОНЕЦ КАК ПодразделениеОрганизации,
| ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ГрафикРаботыЗавершения
| ИНАЧЕ РаботникиОрганизации.ГрафикРаботы
| КОНЕЦ КАК ГрафикРаботы,
| ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ДолжностьЗавершения
| ИНАЧЕ РаботникиОрганизации.Должность
| КОНЕЦ КАК Должность
|ПОМЕСТИТЬ ВТДвиженияРаботников
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(
| &парамНачало,
| Сотрудник В
| (ВЫБРАТЬ
| ВТСписокРаботников.Сотрудник
| ИЗ
| ВТСписокРаботников КАК ВТСписокРаботников)) КАК РаботникиОрганизации
|ГДЕ
| ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ПричинаИзмененияСостоянияЗавершения
| ИНАЧЕ РаботникиОрганизации.ПричинаИзмененияСостояния
| КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ОбособленноеПодразделениеЗавершения
| ИНАЧЕ РаботникиОрганизации.ОбособленноеПодразделение
| КОНЕЦ = &парамОрганизация
| И ВЫБОР
| КОГДА &ПоВсемПодразделениям
| ТОГДА ИСТИНА
| КОГДА РаботникиОрганизации.ПериодЗавершения <= &парамНачало
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ПодразделениеОрганизацииЗавершения В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения)
| ИНАЧЕ РаботникиОрганизации.ПодразделениеОрганизации В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения)
| КОНЕЦ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| РаботникиОрганизации.Период,
| РаботникиОрганизации.Сотрудник,
| ВЫБОР
| КОГДА РаботникиОрганизации.ПричинаИзмененияСостояния <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И РаботникиОрганизации.ОбособленноеПодразделение = &парамОрганизация
| И (&ПоВсемПодразделениям
| ИЛИ РаботникиОрганизации.ПодразделениеОрганизации В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ,
| РаботникиОрганизации.ПодразделениеОрганизации,
| РаботникиОрганизации.ГрафикРаботы,
| РаботникиОрганизации.Должность
|ИЗ
| ВТСписокРаботников КАК СписокРаботников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
| ПО СписокРаботников.Сотрудник = РаботникиОрганизации.Сотрудник
|ГДЕ
| РаботникиОрганизации.Период > &парамНачало
| И РаботникиОрганизации.Период <= &парамКонец
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Работники.ПериодЗавершения,
| Работники.Сотрудник,
| ВЫБОР
| КОГДА Работники.ПричинаИзмененияСостоянияЗавершения <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И Работники.ОбособленноеПодразделениеЗавершения = &парамОрганизация
| И (&ПоВсемПодразделениям
| ИЛИ Работники.ПодразделениеОрганизацииЗавершения В
| (ВЫБРАТЬ
| Подразделения.Подразделение
| ИЗ
| ВТПодразделенияОтбора КАК Подразделения))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ,
| Работники.ПодразделениеОрганизацииЗавершения,
| Работники.ГрафикРаботыЗавершения,
| Работники.ДолжностьЗавершения
|ИЗ
| ВТСписокРаботников КАК СписокРаботников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК Работники
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК ПериодыПерекрытия
| ПО (ПериодыПерекрытия.Период <= Работники.ПериодЗавершения)
| И (ПериодыПерекрытия.Период > Работники.Период)
| И (ПериодыПерекрытия.Сотрудник = Работники.Сотрудник)
| ПО СписокРаботников.Сотрудник = Работники.Сотрудник
|ГДЕ
| Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| И Работники.ПериодЗавершения > &парамНачало
| И Работники.ПериодЗавершения <= &парамКонец
| И ПериодыПерекрытия.Период ЕСТЬ NULL
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| &парамНачало,
| ДоговорникиОрганизаций.Ссылка,
| ИСТИНА,
| NULL,
| NULL,
| NULL
|ИЗ
| ВТСписокРаботников КАК СписокРаботников
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СотрудникиОрганизаций КАК ДоговорникиОрганизаций
| ПО СписокРаботников.Сотрудник = ДоговорникиОрганизаций.Ссылка
|ГДЕ
| ДоговорникиОрганизаций.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.Подряда)
| ИЛИ ДоговорникиОрганизаций.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.Авторский)
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

// таблица ВТЗначенияПоказателей
//
// Поля:
// Сотрудник
// Показатель - введенный пользователем показатель
// Значение - значение показателя
// Валюта
//
Запрос.Текст =
"ВЫБРАТЬ
| Работники.Сотрудник КАК Сотрудник,
| Работники.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| ЗначенияПоказателейСхемМотивации.Показатель КАК Показатель,
| ЗначенияПоказателейСхемМотивации.Валюта,
| ЗначенияПоказателейСхемМотивации.Значение
|ПОМЕСТИТЬ ВТЗначенияПоказателей
|ИЗ
| ВТДвиженияРаботников КАК Работники
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Ежемесячно.Подразделение КАК Подразделение,
| Ежемесячно.Показатель КАК Показатель,
| Ежемесячно.Валюта КАК Валюта,
| Ежемесячно.Значение КАК Значение,
| Ежемесячно.Сотрудник КАК Сотрудник
| ИЗ
| РегистрСведений.ЗначенияПоказателейСхемМотивации КАК Ежемесячно
| ГДЕ
| Ежемесячно.Значение ЕСТЬ НЕ NULL
| И Ежемесячно.Организация = &парамОрганизация
| И Ежемесячно.ПериодДействия >= &парамНачало
| И Ежемесячно.ПериодДействия <= &парамКонец
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних.Подразделение,
| ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних.Показатель,
| ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних.Валюта,
| ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних.Значение,
| NULL
| ИЗ
| РегистрСведений.ПериодическиеЗначенияПоказателейСхемМотивации.СрезПоследних(&парамКонец, Организация = &парамОрганизация) КАК ПериодическиеЗначенияПоказателейСхемМотивацииСрезПоследних) КАК ЗначенияПоказателейСхемМотивации
| ПО (ВЫБОР
| КОГДА ЗначенияПоказателейСхемМотивации.Показатель.ВидПоказателя = ЗНАЧЕНИЕ(Перечисление.ВидыПоказателейСхемМотивации.Индивидуальный)
| ИЛИ ЗначенияПоказателейСхемМотивации.Показатель.ВидПоказателя ЕСТЬ NULL
| ТОГДА Работники.Сотрудник = ЗначенияПоказателейСхемМотивации.Сотрудник
| КОГДА ЗначенияПоказателейСхемМотивации.Показатель.ВидПоказателя = ЗНАЧЕНИЕ(Перечисление.ВидыПоказателейСхемМотивации.ПоПодразделению)
| ТОГДА Работники.ПодразделениеОрганизации = ЗначенияПоказателейСхемМотивации.Подразделение
| ИНАЧЕ ИСТИНА
| КОНЕЦ)
|
|ИНДЕКСИРОВАТЬ ПО
| Показатель
|";

Запрос.Выполнить();

// создание временных таблиц для последующего использования:
// ЗначенияПоказателей
// НеЗапрашиваемыеПриКадровыхПеремещениях
// ВводимыеВПлановыхНачисленияхПоказатели
// РаботникиИНачисления

Если ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет
ИЛИ ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНачислений
ИЛИ ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетУдержаний
ИЛИ ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНДФЛ Тогда

// таблица НеЗапрашиваемыеПриКадровыхПеремещениях
// выбираем показатели, которые не спрашиваем у пользователя в кадровых документах, а также все "тарифные ставки" и их в.р.;
// значения этих показателей будем искать в данных о плановых начислениях, но, возможно, при других видах расчета
//
// Поля:
// Ссылка - вид расчета
// Показатель
// НомерСтроки - номер строки показателя
// ЭтоТарифнаяСтавка - признак того. что Показатель является тарифной ставкой
//

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ОсновныеНачисленияОрганизацийПоказатели.Показатель КАК Показатель,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель.ВозможностьИзменения,
| ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки КАК НомерСтроки,
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ТОГДА ИСТИНА
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ТОГДА ИСТИНА
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ТОГДА ИСТИНА
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоТарифнаяСтавка
|ПОМЕСТИТЬ ВТНеЗапрашиваемыеПриКадровыхПеремещениях
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ОсновныеНачисленияОрганизацийПоказатели
|ГДЕ
| ((НЕ ОсновныеНачисленияОрганизацийПоказатели.ЗапрашиватьПриКадровыхПеремещениях)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка)
| И ОсновныеНачисленияОрганизацийПоказатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДополнительныеНачисленияОрганизацийПоказатели.Показатель,
| ДополнительныеНачисленияОрганизацийПоказатели.Показатель.ВозможностьИзменения,
| ДополнительныеНачисленияОрганизацийПоказатели.НомерСтроки,
| ДополнительныеНачисленияОрганизацийПоказатели.Ссылка,
| ВЫБОР
| КОГДА ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ТОГДА ИСТИНА
| КОГДА ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ТОГДА ИСТИНА
| КОГДА ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ТОГДА ИСТИНА
| КОГДА ДополнительныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|ИЗ
| ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК ДополнительныеНачисленияОрганизацийПоказатели
|ГДЕ
| ((НЕ ДополнительныеНачисленияОрганизацийПоказатели.ЗапрашиватьПриКадровыхПеремещениях)
| ИЛИ ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ИЛИ ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИЛИ ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ИЛИ ДополнительныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка)
| И ДополнительныеНачисленияОрганизацийПоказатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| УдержанияОрганизацийПоказатели.Показатель,
| УдержанияОрганизацийПоказатели.Показатель.ВозможностьИзменения,
| УдержанияОрганизацийПоказатели.НомерСтроки,
| УдержанияОрганизацийПоказатели.Ссылка,
| ВЫБОР
| КОГДА УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ТОГДА ИСТИНА
| КОГДА УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ТОГДА ИСТИНА
| КОГДА УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ТОГДА ИСТИНА
| КОГДА УдержанияОрганизацийПоказатели.Показатель.ТарифнаяСтавка
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|ИЗ
| ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК УдержанияОрганизацийПоказатели
|ГДЕ
| ((НЕ УдержанияОрганизацийПоказатели.ЗапрашиватьПриКадровыхПеремещениях)
| ИЛИ УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ИЛИ УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИЛИ УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ИЛИ УдержанияОрганизацийПоказатели.Показатель.ТарифнаяСтавка)
| И УдержанияОрганизацийПоказатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
|
|ИНДЕКСИРОВАТЬ ПО
| Показатель";
Запрос.Выполнить();

// таблица ВводимыеВПлановыхНачисленияхПоказатели
// виды расчета и показатели, значения которых находятся при этих в.р. в данных о плановых начислениях
//
// Поля:
// Ссылка - вид расчета
// Показатель
// НомерСтроки - номер строки показателя
//
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизаций.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА ОсновныеНачисленияОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоДням), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоЧасам))
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| КОГДА ОсновныеНачисленияОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок))
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| КОНЕЦ КАК Показатель,
| 1 КАК НомерСтроки,
| ИСТИНА КАК ЭтоТарифнаяСтавка
|ПОМЕСТИТЬ ВТВводимыеВПлановыхНачисленияхПоказатели
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
|ГДЕ
| ОсновныеНачисленияОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоДням), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоЧасам), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоДневнойТарифнойСтавке))
| И ОсновныеНачисленияОрганизаций.ЗачетОтработанногоВремени
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель,
| ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки,
| ИСТИНА
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ОсновныеНачисленияОрганизацийПоказатели
|ГДЕ
| (ОсновныеНачисленияОрганизацийПоказатели.Ссылка.ЗачетОтработанногоВремени
| И ОсновныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка
| И (НЕ ОсновныеНачисленияОрганизацийПоказатели.Показатель.Предопределенный)
| ИЛИ (ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)))
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель,
| ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки,
| ЛОЖЬ
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ОсновныеНачисленияОрганизацийПоказатели
|ГДЕ
| ОсновныеНачисленияОрганизацийПоказатели.Показатель В
| (ВЫБРАТЬ
| ВТНеЗапрашиваемыеПриКадровыхПеремещениях.Показатель
| ИЗ
| ВТНеЗапрашиваемыеПриКадровыхПеремещениях)
| И (НЕ ОсновныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка)
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка";

Запрос.Выполнить();

// РаботникиИНачисления
// Таблица движений работников с добавленными сведениями об их плановых начислениях
//
// Поля:
// Сотрудник
// ВидРасчета - плановое начисление
// Показатель1,...,6 - размеры показателей
// СпособРасчета - способ расчета начисления
// ГрафикРаботы - график сотрудника
// ВидГрафика, СуммированныйУчетРабочегоВремени, ДлительностьРабочейНедели - реквизиты графика сотрудника
//
// Описание:
//
// 1.
// 2.
//

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Работники.Сотрудник КАК Сотрудник,
| Работники.Сотрудник.Наименование КАК СотрудникНаименование,
| Работники.Сотрудник.Физлицо КАК Физлицо,
| ВЫБОР
| КОГДА Работники.Период >= НачисленияРаботниковОрганизации.Период
| ИЛИ НачисленияРаботниковОрганизации.Период ЕСТЬ NULL
| ТОГДА Работники.Период
| ИНАЧЕ НачисленияРаботниковОрганизации.Период
| КОНЕЦ КАК Период,
| Работники.Подходит,
| Работники.Период КАК ПериодРаботники,
| НачисленияРаботниковОрганизации.Период КАК ПериодНачисления,
| НачисленияРаботниковОрганизации.ОсновноеНачисление,
| НачисленияРаботниковОрганизации.ВидРасчета,
| НачисленияРаботниковОрганизации.ВидРасчета.НачисляетсяВЦеломЗаМесяц КАК НачисляетсяВЦеломЗаМесяц,
| НачисленияРаботниковОрганизации.ВидРасчета.Наименование,
| НачисленияРаботниковОрганизации.ВидРасчета.ВидСтажа,
| НачисленияРаботниковОрганизации.ВидРасчета.ТребуетВводаТарифногоРазряда,
| НачисленияРаботниковОрганизации.ВидРасчета.КоэффициентСтажа,
| НачисленияРаботниковОрганизации.ВидРасчета.СпособРасчета КАК СпособРасчета,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета ССЫЛКА ПланВидовРасчета.ОсновныеНачисленияОрганизаций
| ТОГДА НачисленияРаботниковОрганизации.ВидРасчета.ВидВремени
| ИНАЧЕ NULL
| КОНЕЦ КАК ВидВремени,
| НачисленияРаботниковОрганизации.Действие КАК Действие,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.Код2761)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код506)
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.Код2720)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код501)
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.Код2730)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код502)
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.Код2760)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код503)
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.Код2770)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код504)
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.КодДоходаНДФЛ = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.Код2790)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код507)
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.ПустаяСсылка)
| КОНЕЦ КАК КодВычета,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ТребуетВводаТарифногоРазряда
| ИЛИ НачисленияРаботниковОрганизации.ВидРасчета.ПроизвольнаяФормулаРасчета
| И (НачисленияРаботниковОрганизации.ТарифныйРазряд1 <> ЗНАЧЕНИЕ(Справочник.ТарифныеРазряды.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.ТарифныйРазряд1 ЕСТЬ НЕ NULL )
| ТОГДА ТарифныеСтавки1.Размер
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель1
| КОНЕЦ КАК Показатель1,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ПроизвольнаяФормулаРасчета
| И НачисленияРаботниковОрганизации.ТарифныйРазряд2 <> ЗНАЧЕНИЕ(Справочник.ТарифныеРазряды.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.ТарифныйРазряд2 ЕСТЬ НЕ NULL
| ТОГДА ТарифныеСтавки2.Размер
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель2
| КОНЕЦ КАК Показатель2,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ПроизвольнаяФормулаРасчета
| И НачисленияРаботниковОрганизации.ТарифныйРазряд3 <> ЗНАЧЕНИЕ(Справочник.ТарифныеРазряды.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.ТарифныйРазряд3 ЕСТЬ НЕ NULL
| ТОГДА ТарифныеСтавки3.Размер
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель3
| КОНЕЦ КАК Показатель3,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ПроизвольнаяФормулаРасчета
| И НачисленияРаботниковОрганизации.ТарифныйРазряд4 <> ЗНАЧЕНИЕ(Справочник.ТарифныеРазряды.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.ТарифныйРазряд4 ЕСТЬ НЕ NULL
| ТОГДА ТарифныеСтавки4.Размер
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель4
| КОНЕЦ КАК Показатель4,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ПроизвольнаяФормулаРасчета
| И НачисленияРаботниковОрганизации.ТарифныйРазряд5 <> ЗНАЧЕНИЕ(Справочник.ТарифныеРазряды.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.ТарифныйРазряд5 ЕСТЬ НЕ NULL
| ТОГДА ТарифныеСтавки5.Размер
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель5
| КОНЕЦ КАК Показатель5,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ПроизвольнаяФормулаРасчета
| И НачисленияРаботниковОрганизации.ТарифныйРазряд6 <> ЗНАЧЕНИЕ(Справочник.ТарифныеРазряды.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.ТарифныйРазряд6 ЕСТЬ НЕ NULL
| ТОГДА ТарифныеСтавки6.Размер
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель6
| КОНЕЦ КАК Показатель6,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ТребуетВводаТарифногоРазряда
| ТОГДА ТарифныеСтавки1.Валюта
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта1
| КОНЕЦ КАК Валюта1,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ТребуетВводаТарифногоРазряда
| ТОГДА ТарифныеСтавки2.Валюта
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта2
| КОНЕЦ КАК Валюта2,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ТребуетВводаТарифногоРазряда
| ТОГДА ТарифныеСтавки3.Валюта
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта3
| КОНЕЦ КАК Валюта3,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ТребуетВводаТарифногоРазряда
| ТОГДА ТарифныеСтавки4.Валюта
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта4
| КОНЕЦ КАК Валюта4,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ТребуетВводаТарифногоРазряда
| ТОГДА ТарифныеСтавки5.Валюта
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта5
| КОНЕЦ КАК Валюта5,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчета.ТребуетВводаТарифногоРазряда
| ТОГДА ТарифныеСтавки6.Валюта
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта6
| КОНЕЦ КАК Валюта6,
| НачисленияРаботниковОрганизации.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| Работники.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| Работники.ГрафикРаботы КАК ГрафикРаботы,
| ЕСТЬNULL(Работники.ГрафикРаботы.СуммированныйУчетРабочегоВремени, ЛОЖЬ) КАК СуммированныйУчетРабочегоВремени,
| ЕСТЬNULL(ВЫБОР
| КОГДА Работники.ГрафикРаботы.СокращенноеРабочееВремя
| И Работники.ГрафикРаботы.ГрафикПолногоРабочегоВремени <> ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка)
| ТОГДА Работники.ГрафикРаботы.ГрафикПолногоРабочегоВремени.ДлительностьРабочейНедели
| ИНАЧЕ Работники.ГрафикРаботы.ДлительностьРабочейНедели
| КОНЕЦ, 0) КАК ДлительностьРабочейНедели,
| Работники.ГрафикРаботы.ВидГрафика КАК ВидГрафика,
| Работники.Должность КАК Должность
|ПОМЕСТИТЬ ВТРаботникиИНачисления
|ИЗ
| ВТДвиженияРаботников КАК Работники
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| &парамНачало КАК Период,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчетаИзмерение.Код ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ОсновноеНачисление,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ДействиеЗавершения = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| ТОГДА НачисленияРаботниковОрганизации.ВидРасчета
| ИНАЧЕ НачисленияРаботниковОрганизации.ВидРасчетаЗавершения
| КОНЕЦ
| ИНАЧЕ НачисленияРаботниковОрганизации.ВидРасчета
| КОНЕЦ КАК ВидРасчета,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ДействиеЗавершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Действие
| КОНЕЦ КАК Действие,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Показатель1Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель1
| КОНЕЦ КАК Показатель1,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Показатель2Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель2
| КОНЕЦ КАК Показатель2,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Показатель3Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель3
| КОНЕЦ КАК Показатель3,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Показатель4Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель4
| КОНЕЦ КАК Показатель4,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Показатель5Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель5
| КОНЕЦ КАК Показатель5,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Показатель6Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель6
| КОНЕЦ КАК Показатель6,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Валюта1Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта1
| КОНЕЦ КАК Валюта1,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Валюта2Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта2
| КОНЕЦ КАК Валюта2,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Валюта3Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта3
| КОНЕЦ КАК Валюта3,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Валюта4Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта4
| КОНЕЦ КАК Валюта4,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Валюта5Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта5
| КОНЕЦ КАК Валюта5,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Валюта6Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта6
| КОНЕЦ КАК Валюта6,
| НачисленияРаботниковОрганизации.Сотрудник КАК Сотрудник,
| НачисленияРаботниковОрганизации.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ТарифныйРазряд1Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.ТарифныйРазряд1
| КОНЕЦ КАК ТарифныйРазряд1,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ТарифныйРазряд2Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.ТарифныйРазряд2
| КОНЕЦ КАК ТарифныйРазряд2,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ТарифныйРазряд3Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.ТарифныйРазряд3
| КОНЕЦ КАК ТарифныйРазряд3,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ТарифныйРазряд4Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.ТарифныйРазряд4
| КОНЕЦ КАК ТарифныйРазряд4,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ТарифныйРазряд5Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.ТарифныйРазряд5
| КОНЕЦ КАК ТарифныйРазряд5,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ТарифныйРазряд6Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.ТарифныйРазряд6
| КОНЕЦ КАК ТарифныйРазряд6
| ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(
| &парамНачало,
| ДокументОснование = ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| И Сотрудник В
| (ВЫБРАТЬ
| Работники.Сотрудник
| ИЗ
| ВТСписокРаботников КАК Работники)) КАК НачисленияРаботниковОрганизации
| ГДЕ
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ДействиеЗавершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Действие
| КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| НачисленияРаботниковОрганизации.Период,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчетаИзмерение.Код ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ,
| НачисленияРаботниковОрганизации.ВидРасчета,
| НачисленияРаботниковОрганизации.Действие,
| НачисленияРаботниковОрганизации.Показатель1,
| НачисленияРаботниковОрганизации.Показатель2,
| НачисленияРаботниковОрганизации.Показатель3,
| НачисленияРаботниковОрганизации.Показатель4,
| НачисленияРаботниковОрганизации.Показатель5,
| НачисленияРаботниковОрганизации.Показатель6,
| НачисленияРаботниковОрганизации.Валюта1,
| НачисленияРаботниковОрганизации.Валюта2,
| НачисленияРаботниковОрганизации.Валюта3,
| НачисленияРаботниковОрганизации.Валюта4,
| НачисленияРаботниковОрганизации.Валюта5,
| НачисленияРаботниковОрганизации.Валюта6,
| НачисленияРаботниковОрганизации.Сотрудник,
| НачисленияРаботниковОрганизации.ДатаНачалаСобытия,
| НачисленияРаботниковОрганизации.ТарифныйРазряд1,
| НачисленияРаботниковОрганизации.ТарифныйРазряд2,
| НачисленияРаботниковОрганизации.ТарифныйРазряд3,
| НачисленияРаботниковОрганизации.ТарифныйРазряд4,
| НачисленияРаботниковОрганизации.ТарифныйРазряд5,
| НачисленияРаботниковОрганизации.ТарифныйРазряд6
| ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО НачисленияРаботниковОрганизации.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
| ГДЕ
| НачисленияРаботниковОрганизации.Период > &парамНачало
| И НачисленияРаботниковОрганизации.Период <= &парамКонец
| И НачисленияРаботниковОрганизации.Организация = &парамГоловнаяОрганизация
| И НачисленияРаботниковОрганизации.ДокументОснование = ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| НачисленияРаботниковОрганизации.ПериодЗавершения,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ВидРасчетаИзмерение.Код ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ДействиеЗавершения = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| ТОГДА НачисленияРаботниковОрганизации.ВидРасчета
| ИНАЧЕ НачисленияРаботниковОрганизации.ВидРасчетаЗавершения
| КОНЕЦ,
| НачисленияРаботниковОрганизации.ДействиеЗавершения,
| НачисленияРаботниковОрганизации.Показатель1Завершения,
| НачисленияРаботниковОрганизации.Показатель2Завершения,
| НачисленияРаботниковОрганизации.Показатель3Завершения,
| НачисленияРаботниковОрганизации.Показатель4Завершения,
| НачисленияРаботниковОрганизации.Показатель5Завершения,
| НачисленияРаботниковОрганизации.Показатель6Завершения,
| НачисленияРаботниковОрганизации.Валюта1Завершения,
| НачисленияРаботниковОрганизации.Валюта2Завершения,
| НачисленияРаботниковОрганизации.Валюта3Завершения,
| НачисленияРаботниковОрганизации.Валюта4Завершения,
| НачисленияРаботниковОрганизации.Валюта5Завершения,
| НачисленияРаботниковОрганизации.Валюта6Завершения,
| НачисленияРаботниковОрганизации.Сотрудник,
| НачисленияРаботниковОрганизации.ДатаНачалаСобытия,
| НачисленияРаботниковОрганизации.ТарифныйРазряд1Завершения,
| НачисленияРаботниковОрганизации.ТарифныйРазряд2Завершения,
| НачисленияРаботниковОрганизации.ТарифныйРазряд3Завершения,
| НачисленияРаботниковОрганизации.ТарифныйРазряд4Завершения,
| НачисленияРаботниковОрганизации.ТарифныйРазряд5Завершения,
| НачисленияРаботниковОрганизации.ТарифныйРазряд6Завершения
| ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО НачисленияРаботниковОрганизации.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковПроверка
| ПО НачисленияРаботниковОрганизации.Сотрудник = НачисленияРаботниковПроверка.Сотрудник
| И НачисленияРаботниковОрганизации.ВидРасчетаИзмерение = НачисленияРаботниковПроверка.ВидРасчетаИзмерение
| И НачисленияРаботниковОрганизации.ДокументОснование = НачисленияРаботниковПроверка.ДокументОснование
| И (НачисленияРаботниковПроверка.Период > НачисленияРаботниковОрганизации.Период)
| И (НачисленияРаботниковПроверка.Период <= НачисленияРаботниковОрганизации.ПериодЗавершения)
| ГДЕ
| НачисленияРаботниковОрганизации.ПериодЗавершения >= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамКонец
| И НачисленияРаботниковОрганизации.Организация = &парамГоловнаяОрганизация
| И НачисленияРаботниковОрганизации.ДокументОснование = ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| И НачисленияРаботниковПроверка.Сотрудник ЕСТЬ NULL
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВЫБОР
| КОГДА ОкладыПоВоинскимИСпециальнымЗваниямСрезПоследних.Период >= &парамНачало
| ТОГДА ОкладыПоВоинскимИСпециальнымЗваниямСрезПоследних.Период
| ИНАЧЕ &парамНачало
| КОНЕЦ,
| ЛОЖЬ,
| ОсновныеНачисленияОрганизаций.Ссылка,
| ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать),
| ОкладыПоВоинскимИСпециальнымЗваниямСрезПоследних.Размер,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка),
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ТаблицаДвиженийРаботников.Сотрудник,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL
| ИЗ
| РегистрСведений.ВоинскиеИСпециальныеЗвания.СрезПоследних(
| &парамНачало,
| ФизЛицо В
| (ВЫБРАТЬ
| Работники.ФизЛицо
| ИЗ
| ВТСписокРаботников КАК Работники)) КАК ВоинскиеИСпециальныеЗванияСрезПоследних
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО ВоинскиеИСпециальныеЗванияСрезПоследних.ФизЛицо = ТаблицаДвиженийРаботников.ФизЛицо
| И (ТаблицаДвиженийРаботников.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ВоеннаяСлужбаПоКонтракту))
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОкладыПоВоинскимИСпециальнымЗваниям.СрезПоследних(&парамНачало, ) КАК ОкладыПоВоинскимИСпециальнымЗваниямСрезПоследних
| ПО ВоинскиеИСпециальныеЗванияСрезПоследних.Звание = ОкладыПоВоинскимИСпециальнымЗваниямСрезПоследних.Звание
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизаций.Ссылка КАК Ссылка
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ГДЕ
| ОсновныеНачисленияОрганизаций.ОтношениеКДенежномуСодержанию = ЗНАЧЕНИЕ(Перечисление.ОтношениеКДенежномуСодержанию.ОВЗ)) КАК ОсновныеНачисленияОрганизаций
| ПО (ИСТИНА)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВоинскиеИСпециальныеЗвания.Период,
| ЛОЖЬ,
| ОсновныеНачисленияОрганизаций.Ссылка,
| ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать),
| ОкладыПоВоинскимИСпециальнымЗваниямСрезПоследних.Размер,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка),
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ТаблицаДвиженийРаботников.Сотрудник,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL
| ИЗ
| РегистрСведений.ВоинскиеИСпециальныеЗвания КАК ВоинскиеИСпециальныеЗвания
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО ВоинскиеИСпециальныеЗвания.ФизЛицо = ТаблицаДвиженийРаботников.ФизЛицо
| И (ТаблицаДвиженийРаботников.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ВоеннаяСлужбаПоКонтракту))
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОкладыПоВоинскимИСпециальнымЗваниям.СрезПоследних(&парамНачало, ) КАК ОкладыПоВоинскимИСпециальнымЗваниямСрезПоследних
| ПО ВоинскиеИСпециальныеЗвания.Звание = ОкладыПоВоинскимИСпециальнымЗваниямСрезПоследних.Звание
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизаций.Ссылка КАК Ссылка
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ГДЕ
| ОсновныеНачисленияОрганизаций.ОтношениеКДенежномуСодержанию = ЗНАЧЕНИЕ(Перечисление.ОтношениеКДенежномуСодержанию.ОВЗ)) КАК ОсновныеНачисленияОрганизаций
| ПО (ИСТИНА)
| ГДЕ
| ВоинскиеИСпециальныеЗвания.Период > &парамНачало
| И ВоинскиеИСпециальныеЗвания.Период <= &парамКонец
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВЫБОР
| КОГДА ОкладыПоКласснымЧинамДипломатическимРангамСрезПоследних.Период >= &парамНачало
| ТОГДА ОкладыПоКласснымЧинамДипломатическимРангамСрезПоследних.Период
| ИНАЧЕ &парамНачало
| КОНЕЦ,
| ЛОЖЬ,
| ОсновныеНачисленияОрганизаций.Ссылка,
| ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать),
| ОкладыПоКласснымЧинамДипломатическимРангамСрезПоследних.Размер,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка),
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ТаблицаДвиженийРаботников.Сотрудник,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL
| ИЗ
| РегистрСведений.КлассныеЧиныДипломатическиеРангиФизлиц.СрезПоследних(
| &парамНачало,
| ФизЛицо В
| (ВЫБРАТЬ
| Работники.ФизЛицо
| ИЗ
| ВТСписокРаботников КАК Работники)) КАК КлассныеЧиныДипломатическиеРангиФизлицСрезПоследних
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО КлассныеЧиныДипломатическиеРангиФизлицСрезПоследних.ФизЛицо = ТаблицаДвиженийРаботников.ФизЛицо
| И (ТаблицаДвиженийРаботников.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ГосударственнаяСлужба))
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОкладыПоКласснымЧинамДипломатическимРангам.СрезПоследних(&парамНачало, ) КАК ОкладыПоКласснымЧинамДипломатическимРангамСрезПоследних
| ПО КлассныеЧиныДипломатическиеРангиФизлицСрезПоследних.КлассныйЧин = ОкладыПоКласснымЧинамДипломатическимРангамСрезПоследних.КлассныйЧин
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизаций.Ссылка КАК Ссылка
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ГДЕ
| ОсновныеНачисленияОрганизаций.ОтношениеКДенежномуСодержанию = ЗНАЧЕНИЕ(Перечисление.ОтношениеКДенежномуСодержанию.ОкладЗаКлассныйЧин)) КАК ОсновныеНачисленияОрганизаций
| ПО (ИСТИНА)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| КлассныеЧиныДипломатическиеРангиФизлиц.Период,
| ЛОЖЬ,
| ОсновныеНачисленияОрганизаций.Ссылка,
| ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать),
| ОкладыПоКласснымЧинамДипломатическимРангамСрезПоследних.Размер,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка),
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ТаблицаДвиженийРаботников.Сотрудник,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL
| ИЗ
| РегистрСведений.КлассныеЧиныДипломатическиеРангиФизлиц КАК КлассныеЧиныДипломатическиеРангиФизлиц
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО КлассныеЧиныДипломатическиеРангиФизлиц.ФизЛицо = ТаблицаДвиженийРаботников.ФизЛицо
| И (ТаблицаДвиженийРаботников.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ГосударственнаяСлужба))
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ОкладыПоКласснымЧинамДипломатическимРангам.СрезПоследних(&парамНачало, ) КАК ОкладыПоКласснымЧинамДипломатическимРангамСрезПоследних
| ПО КлассныеЧиныДипломатическиеРангиФизлиц.КлассныйЧин = ОкладыПоКласснымЧинамДипломатическимРангамСрезПоследних.КлассныйЧин
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизаций.Ссылка КАК Ссылка
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ГДЕ
| ОсновныеНачисленияОрганизаций.ОтношениеКДенежномуСодержанию = ЗНАЧЕНИЕ(Перечисление.ОтношениеКДенежномуСодержанию.ОкладЗаКлассныйЧин)) КАК ОсновныеНачисленияОрганизаций
| ПО (ИСТИНА)
| ГДЕ
| КлассныеЧиныДипломатическиеРангиФизлиц.Период > &парамНачало
| И КлассныеЧиныДипломатическиеРангиФизлиц.Период <= &парамКонец
| ) КАК НачисленияРаботниковОрганизации
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&парамКонец, ) КАК ТарифныеСтавки1
| ПО НачисленияРаботниковОрганизации.ТарифныйРазряд1 = ТарифныеСтавки1.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&парамКонец, ) КАК ТарифныеСтавки2
| ПО НачисленияРаботниковОрганизации.ТарифныйРазряд2 = ТарифныеСтавки2.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&парамКонец, ) КАК ТарифныеСтавки3
| ПО НачисленияРаботниковОрганизации.ТарифныйРазряд3 = ТарифныеСтавки3.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&парамКонец, ) КАК ТарифныеСтавки4
| ПО НачисленияРаботниковОрганизации.ТарифныйРазряд4 = ТарифныеСтавки4.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&парамКонец, ) КАК ТарифныеСтавки5
| ПО НачисленияРаботниковОрганизации.ТарифныйРазряд5 = ТарифныеСтавки5.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&парамКонец, ) КАК ТарифныеСтавки6
| ПО НачисленияРаботниковОрганизации.ТарифныйРазряд6 = ТарифныеСтавки6.ТарифныйРазряд
| ПО Работники.Сотрудник = НачисленияРаботниковОрганизации.Сотрудник
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник
|";

Запрос.Выполнить();

//получим все невводимые показатели
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СписокНачислений.Сотрудник КАК Сотрудник,
| СписокНачислений.Период,
| СписокНачислений.ПериодРаботники,
| СписокНачислений.ПериодНачисления,
| ВводимыеПоказатели.Показатель КАК Показатель,
| ВЫБОР
| КОГДА ВводимыеПоказатели.НомерСтроки = 1
| ТОГДА СписокНачислений.Показатель1
| КОГДА ВводимыеПоказатели.НомерСтроки = 2
| ТОГДА СписокНачислений.Показатель2
| КОГДА ВводимыеПоказатели.НомерСтроки = 3
| ТОГДА СписокНачислений.Показатель3
| КОГДА ВводимыеПоказатели.НомерСтроки = 4
| ТОГДА СписокНачислений.Показатель4
| КОГДА ВводимыеПоказатели.НомерСтроки = 5
| ТОГДА СписокНачислений.Показатель5
| КОГДА ВводимыеПоказатели.НомерСтроки = 6
| ТОГДА СписокНачислений.Показатель6
| КОНЕЦ КАК ЗначениеПоказателя
|ПОМЕСТИТЬ ВТЗначенияВводимыхКадровыхПоказателей
|ИЗ
| ВТРаботникиИНачисления КАК СписокНачислений
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТВводимыеВПлановыхНачисленияхПоказатели КАК ВводимыеПоказатели
| ПО СписокНачислений.ВидРасчета = ВводимыеПоказатели.Ссылка
|
|";
Запрос.Выполнить();

КонецЕсли;

// таблица Показатели
// видам начислений приписываются введенные пользователями для каждого сотрудника значения показателей
//
// Поля:
// ВидРасчета
// Сотрудник
// Показатель1,2,...,6 - значения соответствующих показателей
// Валюта
//

Если ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет Тогда

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиВидовРасчета.Ссылка КАК ВидРасчета,
| ПоказателиВидовРасчета.Показатель1.ТипПоказателя КАК ТипПоказателя1,
| ПоказателиВидовРасчета.Показатель2.ТипПоказателя КАК ТипПоказателя2,
| ПоказателиВидовРасчета.Показатель3.ТипПоказателя КАК ТипПоказателя3,
| ПоказателиВидовРасчета.Показатель4.ТипПоказателя КАК ТипПоказателя4,
| ПоказателиВидовРасчета.Показатель5.ТипПоказателя КАК ТипПоказателя5,
| ПоказателиВидовРасчета.Показатель6.ТипПоказателя КАК ТипПоказателя6,
| ПоказателиВидовРасчета.Показатель1 КАК Показатель1,
| ПоказателиВидовРасчета.Показатель2 КАК Показатель2,
| ПоказателиВидовРасчета.Показатель3 КАК Показатель3,
| ПоказателиВидовРасчета.Показатель4 КАК Показатель4,
| ПоказателиВидовРасчета.Показатель5 КАК Показатель5,
| ПоказателиВидовРасчета.Показатель6 КАК Показатель6,
| ПоказателиВидовРасчета.Показатель1.ВозможностьИзменения КАК ВозможностьИзменения1,
| ПоказателиВидовРасчета.Показатель2.ВозможностьИзменения КАК ВозможностьИзменения2,
| ПоказателиВидовРасчета.Показатель3.ВозможностьИзменения КАК ВозможностьИзменения3,
| ПоказателиВидовРасчета.Показатель4.ВозможностьИзменения КАК ВозможностьИзменения4,
| ПоказателиВидовРасчета.Показатель5.ВозможностьИзменения КАК ВозможностьИзменения5,
| ПоказателиВидовРасчета.Показатель6.ВозможностьИзменения КАК ВозможностьИзменения6
|ПОМЕСТИТЬ ВТПоказателиИВР
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизаций.Ссылка КАК Ссылка,
| Показатели1.Показатель КАК Показатель1,
| Показатели2.Показатель КАК Показатель2,
| Показатели3.Показатель КАК Показатель3,
| Показатели4.Показатель КАК Показатель4,
| Показатели5.Показатель КАК Показатель5,
| Показатели6.Показатель КАК Показатель6
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели1
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели1.Ссылка
| И (Показатели1.НомерСтроки = 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели2
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели2.Ссылка
| И (Показатели2.НомерСтроки = 2)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели3
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели3.Ссылка
| И (Показатели3.НомерСтроки = 3)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели4
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели4.Ссылка
| И (Показатели4.НомерСтроки = 4)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели5
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели5.Ссылка
| И (Показатели5.НомерСтроки = 5)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели6
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели6.Ссылка
| И (Показатели6.НомерСтроки = 6)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДополнительныеНачисленияОрганизаций.Ссылка,
| Показатели1.Показатель,
| Показатели2.Показатель,
| Показатели3.Показатель,
| Показатели4.Показатель,
| Показатели5.Показатель,
| Показатели6.Показатель
| ИЗ
| ПланВидовРасчета.ДополнительныеНачисленияОрганизаций КАК ДополнительныеНачисленияОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели1
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели1.Ссылка
| И (Показатели1.НомерСтроки = 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели2
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели2.Ссылка
| И (Показатели2.НомерСтроки = 2)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели3
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели3.Ссылка
| И (Показатели3.НомерСтроки = 3)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели4
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели4.Ссылка
| И (Показатели4.НомерСтроки = 4)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели5
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели5.Ссылка
| И (Показатели5.НомерСтроки = 5)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели6
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели6.Ссылка
| И (Показатели6.НомерСтроки = 6)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| УдержанияОрганизаций.Ссылка,
| Показатели1.Показатель,
| Показатели2.Показатель,
| Показатели3.Показатель,
| Показатели4.Показатель,
| Показатели5.Показатель,
| Показатели6.Показатель
| ИЗ
| ПланВидовРасчета.УдержанияОрганизаций КАК УдержанияОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели1
| ПО УдержанияОрганизаций.Ссылка = Показатели1.Ссылка
| И (Показатели1.НомерСтроки = 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели2
| ПО УдержанияОрганизаций.Ссылка = Показатели2.Ссылка
| И (Показатели2.НомерСтроки = 2)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели3
| ПО УдержанияОрганизаций.Ссылка = Показатели3.Ссылка
| И (Показатели3.НомерСтроки = 3)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели4
| ПО УдержанияОрганизаций.Ссылка = Показатели4.Ссылка
| И (Показатели4.НомерСтроки = 4)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели5
| ПО УдержанияОрганизаций.Ссылка = Показатели5.Ссылка
| И (Показатели5.НомерСтроки = 5)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели6
| ПО УдержанияОрганизаций.Ссылка = Показатели6.Ссылка
| И (Показатели6.НомерСтроки = 6)) КАК ПоказателиВидовРасчета
|
|ИНДЕКСИРОВАТЬ ПО
| Показатель1,
| Показатель2,
| Показатель3,
| Показатель4,
| Показатель5,
| Показатель6
|";


Запрос.Выполнить();

ИначеЕсли ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНачислений Тогда

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиВидовРасчета.Ссылка КАК ВидРасчета,
| ПоказателиВидовРасчета.Показатель1.ТипПоказателя КАК ТипПоказателя1,
| ПоказателиВидовРасчета.Показатель2.ТипПоказателя КАК ТипПоказателя2,
| ПоказателиВидовРасчета.Показатель3.ТипПоказателя КАК ТипПоказателя3,
| ПоказателиВидовРасчета.Показатель4.ТипПоказателя КАК ТипПоказателя4,
| ПоказателиВидовРасчета.Показатель5.ТипПоказателя КАК ТипПоказателя5,
| ПоказателиВидовРасчета.Показатель6.ТипПоказателя КАК ТипПоказателя6,
| ПоказателиВидовРасчета.Показатель1 КАК Показатель1,
| ПоказателиВидовРасчета.Показатель2 КАК Показатель2,
| ПоказателиВидовРасчета.Показатель3 КАК Показатель3,
| ПоказателиВидовРасчета.Показатель4 КАК Показатель4,
| ПоказателиВидовРасчета.Показатель5 КАК Показатель5,
| ПоказателиВидовРасчета.Показатель6 КАК Показатель6,
| ПоказателиВидовРасчета.Показатель1.ВозможностьИзменения КАК ВозможностьИзменения1,
| ПоказателиВидовРасчета.Показатель2.ВозможностьИзменения КАК ВозможностьИзменения2,
| ПоказателиВидовРасчета.Показатель3.ВозможностьИзменения КАК ВозможностьИзменения3,
| ПоказателиВидовРасчета.Показатель4.ВозможностьИзменения КАК ВозможностьИзменения4,
| ПоказателиВидовРасчета.Показатель5.ВозможностьИзменения КАК ВозможностьИзменения5,
| ПоказателиВидовРасчета.Показатель6.ВозможностьИзменения КАК ВозможностьИзменения6
|ПОМЕСТИТЬ ВТПоказателиИВР
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизаций.Ссылка КАК Ссылка,
| Показатели1.Показатель КАК Показатель1,
| Показатели2.Показатель КАК Показатель2,
| Показатели3.Показатель КАК Показатель3,
| Показатели4.Показатель КАК Показатель4,
| Показатели5.Показатель КАК Показатель5,
| Показатели6.Показатель КАК Показатель6
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели1
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели1.Ссылка
| И (Показатели1.НомерСтроки = 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели2
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели2.Ссылка
| И (Показатели2.НомерСтроки = 2)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели3
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели3.Ссылка
| И (Показатели3.НомерСтроки = 3)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели4
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели4.Ссылка
| И (Показатели4.НомерСтроки = 4)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели5
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели5.Ссылка
| И (Показатели5.НомерСтроки = 5)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК Показатели6
| ПО ОсновныеНачисленияОрганизаций.Ссылка = Показатели6.Ссылка
| И (Показатели6.НомерСтроки = 6)
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДополнительныеНачисленияОрганизаций.Ссылка,
| Показатели1.Показатель,
| Показатели2.Показатель,
| Показатели3.Показатель,
| Показатели4.Показатель,
| Показатели5.Показатель,
| Показатели6.Показатель
| ИЗ
| ПланВидовРасчета.ДополнительныеНачисленияОрганизаций КАК ДополнительныеНачисленияОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели1
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели1.Ссылка
| И (Показатели1.НомерСтроки = 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели2
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели2.Ссылка
| И (Показатели2.НомерСтроки = 2)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели3
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели3.Ссылка
| И (Показатели3.НомерСтроки = 3)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели4
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели4.Ссылка
| И (Показатели4.НомерСтроки = 4)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели5
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели5.Ссылка
| И (Показатели5.НомерСтроки = 5)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК Показатели6
| ПО ДополнительныеНачисленияОрганизаций.Ссылка = Показатели6.Ссылка
| И (Показатели6.НомерСтроки = 6)
|) КАК ПоказателиВидовРасчета
|
|ИНДЕКСИРОВАТЬ ПО
| Показатель1,
| Показатель2,
| Показатель3,
| Показатель4,
| Показатель5,
| Показатель6
|";
Запрос.Выполнить();
Иначе
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиВидовРасчета.Ссылка КАК ВидРасчета,
| ПоказателиВидовРасчета.Показатель1.ТипПоказателя КАК ТипПоказателя1,
| ПоказателиВидовРасчета.Показатель2.ТипПоказателя КАК ТипПоказателя2,
| ПоказателиВидовРасчета.Показатель3.ТипПоказателя КАК ТипПоказателя3,
| ПоказателиВидовРасчета.Показатель4.ТипПоказателя КАК ТипПоказателя4,
| ПоказателиВидовРасчета.Показатель5.ТипПоказателя КАК ТипПоказателя5,
| ПоказателиВидовРасчета.Показатель6.ТипПоказателя КАК ТипПоказателя6,
| ПоказателиВидовРасчета.Показатель1 КАК Показатель1,
| ПоказателиВидовРасчета.Показатель2 КАК Показатель2,
| ПоказателиВидовРасчета.Показатель3 КАК Показатель3,
| ПоказателиВидовРасчета.Показатель4 КАК Показатель4,
| ПоказателиВидовРасчета.Показатель5 КАК Показатель5,
| ПоказателиВидовРасчета.Показатель6 КАК Показатель6,
| ПоказателиВидовРасчета.Показатель1.ВозможностьИзменения КАК ВозможностьИзменения1,
| ПоказателиВидовРасчета.Показатель2.ВозможностьИзменения КАК ВозможностьИзменения2,
| ПоказателиВидовРасчета.Показатель3.ВозможностьИзменения КАК ВозможностьИзменения3,
| ПоказателиВидовРасчета.Показатель4.ВозможностьИзменения КАК ВозможностьИзменения4,
| ПоказателиВидовРасчета.Показатель5.ВозможностьИзменения КАК ВозможностьИзменения5,
| ПоказателиВидовРасчета.Показатель6.ВозможностьИзменения КАК ВозможностьИзменения6
|ПОМЕСТИТЬ ВТПоказателиИВР
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| УдержанияОрганизаций.Ссылка КАК Ссылка,
| Показатели1.Показатель КАК Показатель1,
| Показатели2.Показатель КАК Показатель2,
| Показатели3.Показатель КАК Показатель3,
| Показатели4.Показатель КАК Показатель4,
| Показатели5.Показатель КАК Показатель5,
| Показатели6.Показатель КАК Показатель6
| ИЗ
| ПланВидовРасчета.УдержанияОрганизаций КАК УдержанияОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели1
| ПО УдержанияОрганизаций.Ссылка = Показатели1.Ссылка
| И (Показатели1.НомерСтроки = 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели2
| ПО УдержанияОрганизаций.Ссылка = Показатели2.Ссылка
| И (Показатели2.НомерСтроки = 2)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели3
| ПО УдержанияОрганизаций.Ссылка = Показатели3.Ссылка
| И (Показатели3.НомерСтроки = 3)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели4
| ПО УдержанияОрганизаций.Ссылка = Показатели4.Ссылка
| И (Показатели4.НомерСтроки = 4)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели5
| ПО УдержанияОрганизаций.Ссылка = Показатели5.Ссылка
| И (Показатели5.НомерСтроки = 5)
| ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК Показатели6
| ПО УдержанияОрганизаций.Ссылка = Показатели6.Ссылка
| И (Показатели6.НомерСтроки = 6)) КАК ПоказателиВидовРасчета
|
|ИНДЕКСИРОВАТЬ ПО
| Показатель1,
| Показатель2,
| Показатель3,
| Показатель4,
| Показатель5,
| Показатель6";

Запрос.Выполнить();
КонецЕсли;

Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ВложеныйЗапрос.ВидРасчета КАК ВидРасчета,
| ВложеныйЗапрос.Сотрудник КАК Сотрудник,
| ВложеныйЗапрос.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| МАКСИМУМ(ВложеныйЗапрос.ТипПоказателя1) КАК ТипПоказателя1,
| МАКСИМУМ(ВложеныйЗапрос.ВозможностьИзменения1) КАК ВозможностьИзменения1,
| МАКСИМУМ(ВложеныйЗапрос.Показатель1) КАК Показатель1,
| МАКСИМУМ(ВложеныйЗапрос.ТипПоказателя2) КАК ТипПоказателя2,
| МАКСИМУМ(ВложеныйЗапрос.ВозможностьИзменения2) КАК ВозможностьИзменения2,
| МАКСИМУМ(ВложеныйЗапрос.Показатель2) КАК Показатель2,
| МАКСИМУМ(ВложеныйЗапрос.ТипПоказателя3) КАК ТипПоказателя3,
| МАКСИМУМ(ВложеныйЗапрос.ВозможностьИзменения3) КАК ВозможностьИзменения3,
| МАКСИМУМ(ВложеныйЗапрос.Показатель3) КАК Показатель3,
| МАКСИМУМ(ВложеныйЗапрос.ТипПоказателя4) КАК ТипПоказателя4,
| МАКСИМУМ(ВложеныйЗапрос.ВозможностьИзменения4) КАК ВозможностьИзменения4,
| МАКСИМУМ(ВложеныйЗапрос.Показатель4) КАК Показатель4,
| МАКСИМУМ(ВложеныйЗапрос.ТипПоказателя5) КАК ТипПоказателя5,
| МАКСИМУМ(ВложеныйЗапрос.ВозможностьИзменения5) КАК ВозможностьИзменения5,
| МАКСИМУМ(ВложеныйЗапрос.Показатель5) КАК Показатель5,
| МАКСИМУМ(ВложеныйЗапрос.ТипПоказателя6) КАК ТипПоказателя6,
| МАКСИМУМ(ВложеныйЗапрос.ВозможностьИзменения6) КАК ВозможностьИзменения6,
| МАКСИМУМ(ВложеныйЗапрос.Показатель6) КАК Показатель6,
| МАКСИМУМ(ВложеныйЗапрос.Валюта1) КАК Валюта1,
| МАКСИМУМ(ВложеныйЗапрос.Валюта2) КАК Валюта2,
| МАКСИМУМ(ВложеныйЗапрос.Валюта3) КАК Валюта3,
| МАКСИМУМ(ВложеныйЗапрос.Валюта4) КАК Валюта4,
| МАКСИМУМ(ВложеныйЗапрос.Валюта5) КАК Валюта5,
| МАКСИМУМ(ВложеныйЗапрос.Валюта6) КАК Валюта6
|ПОМЕСТИТЬ ВТПоказатели
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиИВР.ВидРасчета КАК ВидРасчета,
| ЗначенияПоказателей1.Сотрудник КАК Сотрудник,
| ЗначенияПоказателей1.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| ПоказателиИВР.ТипПоказателя1 КАК ТипПоказателя1,
| ПоказателиИВР.ВозможностьИзменения1 КАК ВозможностьИзменения1,
| ЗначенияПоказателей1.Значение КАК Показатель1,
| NULL КАК ТипПоказателя2,
| NULL КАК ВозможностьИзменения2,
| NULL КАК Показатель2,
| NULL КАК ТипПоказателя3,
| NULL КАК ВозможностьИзменения3,
| NULL КАК Показатель3,
| NULL КАК ТипПоказателя4,
| NULL КАК ВозможностьИзменения4,
| NULL КАК Показатель4,
| NULL КАК ТипПоказателя5,
| NULL КАК ВозможностьИзменения5,
| NULL КАК Показатель5,
| NULL КАК ТипПоказателя6,
| NULL КАК ВозможностьИзменения6,
| NULL КАК Показатель6,
| ЗначенияПоказателей1.Валюта КАК Валюта1,
| NULL КАК Валюта2,
| NULL КАК Валюта3,
| NULL КАК Валюта4,
| NULL КАК Валюта5,
| NULL КАК Валюта6
| ИЗ
| ВТПоказателиИВР КАК ПоказателиИВР
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияПоказателей КАК ЗначенияПоказателей1
| ПО ПоказателиИВР.Показатель1 = ЗначенияПоказателей1.Показатель
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиИВР.ВидРасчета,
| ЗначенияПоказателей2.Сотрудник,
| ЗначенияПоказателей2.ПодразделениеОрганизации,
| NULL,
| NULL,
| NULL,
| ПоказателиИВР.ТипПоказателя2,
| ПоказателиИВР.ВозможностьИзменения2,
| ЗначенияПоказателей2.Значение,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗначенияПоказателей2.Валюта,
| NULL,
| NULL,
| NULL,
| NULL
| ИЗ
| ВТПоказателиИВР КАК ПоказателиИВР
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияПоказателей КАК ЗначенияПоказателей2
| ПО ПоказателиИВР.Показатель2 = ЗначенияПоказателей2.Показатель
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиИВР.ВидРасчета,
| ЗначенияПоказателей3.Сотрудник,
| ЗначенияПоказателей3.ПодразделениеОрганизации,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ПоказателиИВР.ТипПоказателя3,
| ПоказателиИВР.ВозможностьИзменения3,
| ЗначенияПоказателей3.Значение,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗначенияПоказателей3.Валюта,
| NULL,
| NULL,
| NULL
| ИЗ
| ВТПоказателиИВР КАК ПоказателиИВР
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияПоказателей КАК ЗначенияПоказателей3
| ПО ПоказателиИВР.Показатель3 = ЗначенияПоказателей3.Показатель
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиИВР.ВидРасчета,
| ЗначенияПоказателей4.Сотрудник,
| ЗначенияПоказателей4.ПодразделениеОрганизации,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ПоказателиИВР.ТипПоказателя4,
| ПоказателиИВР.ВозможностьИзменения4,
| ЗначенияПоказателей4.Значение,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗначенияПоказателей4.Валюта,
| NULL,
| NULL
| ИЗ
| ВТПоказателиИВР КАК ПоказателиИВР
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияПоказателей КАК ЗначенияПоказателей4
| ПО ПоказателиИВР.Показатель4 = ЗначенияПоказателей4.Показатель
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиИВР.ВидРасчета,
| ЗначенияПоказателей5.Сотрудник,
| ЗначенияПоказателей5.ПодразделениеОрганизации,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ПоказателиИВР.ТипПоказателя5,
| ПоказателиИВР.ВозможностьИзменения5,
| ЗначенияПоказателей5.Значение,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗначенияПоказателей5.Валюта,
| NULL
| ИЗ
| ВТПоказателиИВР КАК ПоказателиИВР
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияПоказателей КАК ЗначенияПоказателей5
| ПО ПоказателиИВР.Показатель5 = ЗначенияПоказателей5.Показатель
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоказателиИВР.ВидРасчета,
| ЗначенияПоказателей6.Сотрудник,
| ЗначенияПоказателей6.ПодразделениеОрганизации,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ПоказателиИВР.ТипПоказателя6,
| ПоказателиИВР.ВозможностьИзменения6,
| ЗначенияПоказателей6.Значение,
| NULL,
| NULL,
| NULL,
| NULL,
| NULL,
| ЗначенияПоказателей6.Валюта
| ИЗ
| ВТПоказателиИВР КАК ПоказателиИВР
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЗначенияПоказателей КАК ЗначенияПоказателей6
| ПО ПоказателиИВР.Показатель6 = ЗначенияПоказателей6.Показатель) КАК ВложеныйЗапрос
|ГДЕ
| (ВложеныйЗапрос.Показатель1 <> 0
| ИЛИ ВложеныйЗапрос.Показатель2 <> 0
| ИЛИ ВложеныйЗапрос.Показатель3 <> 0
| ИЛИ ВложеныйЗапрос.Показатель4 <> 0
| ИЛИ ВложеныйЗапрос.Показатель5 <> 0
| ИЛИ ВложеныйЗапрос.Показатель6 <> 0)
|
|СГРУППИРОВАТЬ ПО
| ВложеныйЗапрос.ВидРасчета,
| ВложеныйЗапрос.Сотрудник,
| ВложеныйЗапрос.ПодразделениеОрганизации
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| ПодразделениеОрганизации,
| ВидРасчета
|";

Запрос.Выполнить();

МассивВалютСНезаданнымКурсом = Новый Соответствие;

// АВТОЗАПОЛНЕНИЕ ТЧ "Начисления", "ДополнительныеНачисления" и "ДоговорыНаВыполнениеРабот"
Если ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет
ИЛИ ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНачислений
ИЛИ ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНДФЛ Тогда

// таблица ОсновныеНачисления
// выборка сведений об уже выполненных начислениях за отработанное время - для выбрасывания
// ранее "обслуженных" работников
// Поля:
// Сотрудник,
// ПодразделениеОрганизации
//

Если ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца Тогда
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ЗарплатаЗаПервуюПоловинуМесяца.Сотрудник КАК Сотрудник,
| ТаблицаДвиженийРаботников.ПодразделениеОрганизации
|ПОМЕСТИТЬ ВТОсновныеНачисления
|ИЗ
| РегистрНакопления.ЗарплатаЗаПервуюПоловинуМесяца КАК ЗарплатаЗаПервуюПоловинуМесяца
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДвиженияРаботников КАК ТаблицаДвиженийРаботников
| ПО ЗарплатаЗаПервуюПоловинуМесяца.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
|ГДЕ
| ЗарплатаЗаПервуюПоловинуМесяца.Организация = &парамОрганизация
| И ЗарплатаЗаПервуюПоловинуМесяца.Регистратор <> &парамРегистратор
| И НАЧАЛОПЕРИОДА(ЗарплатаЗаПервуюПоловинуМесяца.Период, МЕСЯЦ) = &парамНачалоМесяца
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

Иначе
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ОсновныеНачисления.Сотрудник КАК Сотрудник,
| ОсновныеНачисления.ПодразделениеОрганизации КАК ПодразделениеОрганизации
|ПОМЕСТИТЬ ВТОсновныеНачисления
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисления
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДвиженияРаботников КАК ТаблицаДвиженийРаботников
| ПО ОсновныеНачисления.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
|ГДЕ
| ОсновныеНачисления.ПериодРегистрации = &парамПериодРегистрации
| И ОсновныеНачисления.ПериодДействияКонец <= &парамКонец
| И ОсновныеНачисления.ПериодДействияНачало >= &парамНачало
| И ОсновныеНачисления.Организация = &парамГоловнаяОрганизация
| И (ОсновныеНачисления.ВидРасчета.ЗачетОтработанногоВремени
| И ОсновныеНачисления.ВидРасчета.ЗачетНормыВремени
| ИЛИ ОсновныеНачисления.ВидРасчета = ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ОтпускПоУходуЗаРебенкомБезОплаты))
| И (НЕ ОсновныеНачисления.Сторно)
| И ОсновныеНачисления.Регистратор <> &парамРегистратор
| И ОсновныеНачисления.ОбособленноеПодразделение = &парамОрганизация
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();
КонецЕсли;

// НормаВремениПоСводнымИндивидуальнымГрафикам
// Сотрудники, для которых введены сводные данные об их графике
//
// Поля:
// Сотрудник
// ЧасовЗаМесяц - указанное пользователем значение
//

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| СписокРаботников.Сотрудник КАК Сотрудник,
| СводныеИндивидуальныеГрафики.Часов КАК ЧасовЗаМесяц
|ПОМЕСТИТЬ ВТНормаВремениПоСводнымИндивидуальнымГрафикам
|ИЗ
| ВТСписокРаботников КАК СписокРаботников
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики
| ПО СписокРаботников.Сотрудник = СводныеИндивидуальныеГрафики.Сотрудник
| И (СводныеИндивидуальныеГрафики.Месяц = &парамНачалоМесяца)
|ГДЕ
| СводныеИндивидуальныеГрафики.Сотрудник ЕСТЬ НЕ NULL
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

// НормаВремениПоЕжедневнымИндивидуальнымГрафикам
// Таблица сотрудников и нормы времени в часах, введенной индивидуальными графиками
//
// Поля:
// Сотрудник,
// ЧасовЗаМесяц - суммируем все часы рабочего времени
//
// Описание:
//
// выбираем данные из рег-ра ГрафикиРаботыПоВидамВремени,
// введенные доками ВводИндивидуальныхГрафиков, т.е. по строкам с выставленным флажком План

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СписокРаботников.Сотрудник КАК Сотрудник,
| СУММА(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение) КАК ЧасовЗаМесяц
|ПОМЕСТИТЬ ВТНормаВремениПоЕжедневнымИндивидуальнымГрафикам
|ИЗ
| ВТСписокРаботников КАК СписокРаботников
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
| ПО СписокРаботников.Сотрудник = ГрафикиРаботыПоВидамВремени.ГрафикРаботы
| И (ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням))
| И (ГрафикиРаботыПоВидамВремени.Месяц = &парамНачалоМесяца)
| И (ГрафикиРаботыПоВидамВремени.План)
|ГДЕ
| ГрафикиРаботыПоВидамВремени.ГрафикРаботы ЕСТЬ НЕ NULL
|
|СГРУППИРОВАТЬ ПО
| СписокРаботников.Сотрудник
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

// НормаВремениПоОбщимГрафикам
// Таблица сотрудников и нормы времени в часах по общим графикам
//
// Поля:
// Сотрудник,
// ЧасовЗаМесяц - суммируем все часы рабочего времени
//
// Описание:
//
// выбираем данные из рег-ра ГрафикиРаботыПоВидамВремени для общих графиков

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СписокРаботников.Сотрудник КАК Сотрудник,
| СписокРаботников.ГрафикРаботы,
| СУММА(ГрафикиРаботыПоВидамВремени.ДополнительноеЗначение) КАК ЧасовЗаМесяц
|ПОМЕСТИТЬ ВТНормаВремениПоОбщимГрафикам
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| СписокРаботников.Сотрудник КАК Сотрудник,
| ВЫБОР
| КОГДА СписокРаботников.ГрафикРаботы.СокращенноеРабочееВремя
| И СписокРаботников.ГрафикРаботы.ГрафикПолногоРабочегоВремени <> ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка)
| ТОГДА СписокРаботников.ГрафикРаботы.ГрафикПолногоРабочегоВремени
| ИНАЧЕ СписокРаботников.ГрафикРаботы
| КОНЕЦ КАК ГрафикРаботыНорма,
| СписокРаботников.ГрафикРаботы КАК ГрафикРаботы
| ИЗ
| ВТДвиженияРаботников КАК СписокРаботников) КАК СписокРаботников
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
| ПО (ГрафикиРаботыПоВидамВремени.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоДням))
| И (ГрафикиРаботыПоВидамВремени.Месяц = &парамНачалоМесяца)
| И (ГрафикиРаботыПоВидамВремени.План)
| И СписокРаботников.ГрафикРаботыНорма = ГрафикиРаботыПоВидамВремени.ГрафикРаботы
|ГДЕ
| ГрафикиРаботыПоВидамВремени.ГрафикРаботы ЕСТЬ НЕ NULL
|
|СГРУППИРОВАТЬ ПО
| СписокРаботников.Сотрудник,
| СписокРаботников.ГрафикРаботы
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ДатыСтажа.Сотрудник КАК Сотрудник,
| ДатыСтажа.Физлицо,
| ДатыСтажа.ПериодРаботники,
| ДатыСтажа.ПериодСеверногоСтажа КАК ДатаРегистрацииСеверногоСтажа,
| СведенияОСтажеРаботыНаСевере.ПорядокНачисленияСеверныхНадбавок,
| СведенияОСтажеРаботыНаСевере.НачальныйПроцентСевернойНадбавки,
| СведенияОСтажеРаботыНаСевере.СеверныйСтажМесяцев,
| СведенияОСтажеРаботыНаСевере.СеверныйСтажДней
|ПОМЕСТИТЬ ВТДанныеОСеверномСтаже
|ИЗ
| (ВЫБРАТЬ
| СписокНачислений.Сотрудник КАК Сотрудник,
| СписокНачислений.Физлицо КАК Физлицо,
| СписокНачислений.ПериодРаботники КАК ПериодРаботники,
| МАКСИМУМ(СведенияОСтажеРаботыНаСевере.Период) КАК ПериодСеверногоСтажа
| ИЗ
| ВТРаботникиИНачисления КАК СписокНачислений
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСтажеРаботыНаСевере КАК СведенияОСтажеРаботыНаСевере
| ПО СписокНачислений.Физлицо = СведенияОСтажеРаботыНаСевере.ФизЛицо
| И СписокНачислений.ПериодРаботники >= СведенияОСтажеРаботыНаСевере.Период
|
| СГРУППИРОВАТЬ ПО
| СписокНачислений.Сотрудник,
| СписокНачислений.Физлицо,
| СписокНачислений.ПериодРаботники) КАК ДатыСтажа
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СведенияОСтажеРаботыНаСевере КАК СведенияОСтажеРаботыНаСевере
| ПО ДатыСтажа.Физлицо = СведенияОСтажеРаботыНаСевере.ФизЛицо
| И ДатыСтажа.ПериодСеверногоСтажа = СведенияОСтажеРаботыНаСевере.Период
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

// РаботникиИНачисленияПоСхемамМотивации
// Таблица движений работников и сведениями об их плановых начислениях
// с добавленными значениями показателей, как введенными пользователями для расчета, так и
// выбранными из строк плановых начислений, содержащих тарифные ставки по "основным" начислениям работника
//
// Поля:
// Сотрудник
// ВидРасчета - плановое начисление
// Показатель1,...,6 - размеры показателей
// СпособРасчета - способ расчета начисления
// ОкладТариф - размер трифной ставки, если начисление ее содержит
// ГрафикРаботы - график сотрудника
// ВидГрафика, СуммированныйУчетРабочегоВремени, ДлительностьРабочейНедели - реквизиты графика сотрудника
//
// Описание:
//
// 1.
// 2.
//

Запрос.Текст =
"ВЫБРАТЬ
| СписокНачислений.Сотрудник КАК Сотрудник,
| СписокНачислений.СотрудникНаименование,
| СписокНачислений.Физлицо,
| СписокНачислений.ПодразделениеОрганизации,
| СписокНачислений.Подходит,
| СписокНачислений.Период,
| СписокНачислений.ПериодРаботники,
| СписокНачислений.ПериодНачисления,
| СписокНачислений.ОсновноеНачисление,
| СписокНачислений.ВидРасчета,
| СписокНачислений.ВидРасчетаНаименование,
| СписокНачислений.ВидРасчетаКоэффициентСтажа,
| СписокНачислений.ВидРасчетаВидСтажа,
| СписокНачислений.ВидРасчетаТребуетВводаТарифногоРазряда,
| СписокНачислений.СпособРасчета,
| СписокНачислений.НачисляетсяВЦеломЗаМесяц,
| СписокНачислений.ВидВремени,
| СписокНачислений.Действие,
| СписокНачислений.КодВычета,
| СписокНачислений.ДатаНачалаСобытия,
| СписокНачислений.ГрафикРаботы,
| СписокНачислений.СуммированныйУчетРабочегоВремени,
| СписокНачислений.ДлительностьРабочейНедели,
| СписокНачислений.ВидГрафика,
| ВЫБОР КОГДА СписокНачислений.Валюта1 ЕСТЬ NULL ИЛИ СписокНачислений.Валюта1 = Значение(Справочник.Валюты.ПустаяСсылка) ТОГДА ПоказателиВведенныеПриРасчете.Валюта1 ИНАЧЕ СписокНачислений.Валюта1 КОНЕЦ КАК Валюта1,
| ВЫБОР КОГДА СписокНачислений.Валюта2 ЕСТЬ NULL ИЛИ СписокНачислений.Валюта2 = Значение(Справочник.Валюты.ПустаяСсылка) ТОГДА ПоказателиВведенныеПриРасчете.Валюта2 ИНАЧЕ СписокНачислений.Валюта2 КОНЕЦ КАК Валюта2,
| ВЫБОР КОГДА СписокНачислений.Валюта3 ЕСТЬ NULL ИЛИ СписокНачислений.Валюта3 = Значение(Справочник.Валюты.ПустаяСсылка) ТОГДА ПоказателиВведенныеПриРасчете.Валюта3 ИНАЧЕ СписокНачислений.Валюта3 КОНЕЦ КАК Валюта3,
| ВЫБОР КОГДА СписокНачислений.Валюта4 ЕСТЬ NULL ИЛИ СписокНачислений.Валюта4 = Значение(Справочник.Валюты.ПустаяСсылка) ТОГДА ПоказателиВведенныеПриРасчете.Валюта4 ИНАЧЕ СписокНачислений.Валюта4 КОНЕЦ КАК Валюта4,
| ВЫБОР КОГДА СписокНачислений.Валюта5 ЕСТЬ NULL ИЛИ СписокНачислений.Валюта5 = Значение(Справочник.Валюты.ПустаяСсылка) ТОГДА ПоказателиВведенныеПриРасчете.Валюта5 ИНАЧЕ СписокНачислений.Валюта5 КОНЕЦ КАК Валюта5,
| ВЫБОР КОГДА СписокНачислений.Валюта6 ЕСТЬ NULL ИЛИ СписокНачислений.Валюта6 = Значение(Справочник.Валюты.ПустаяСсылка) ТОГДА ПоказателиВведенныеПриРасчете.Валюта6 ИНАЧЕ СписокНачислений.Валюта6 КОНЕЦ КАК Валюта6,
| ВЫБОР КОГДА СписокНачислений.Валюта1 ЕСТЬ NULL ИЛИ СписокНачислений.Валюта1 = Значение(Справочник.Валюты.ПустаяСсылка) ТОГДА
| ВЫБОР КОГДА ПоказателиВведенныеПриРасчете.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ ПВалюты1.Курс КОНЕЦ
| ИНАЧЕ
| ВЫБОР КОГДА СписокНачислений.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ Валюты1.Курс КОНЕЦ
| КОНЕЦ КАК КурсВалюты1,
| ВЫБОР КОГДА СписокНачислений.Валюта2 ЕСТЬ NULL ТОГДА
| ВЫБОР КОГДА ПоказателиВведенныеПриРасчете.Валюта2 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ ПВалюты2.Курс КОНЕЦ
| ИНАЧЕ
| ВЫБОР КОГДА СписокНачислений.Валюта2 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ Валюты2.Курс КОНЕЦ
| КОНЕЦ КАК КурсВалюты2,
| ВЫБОР КОГДА СписокНачислений.Валюта3 ЕСТЬ NULL ТОГДА
| ВЫБОР КОГДА ПоказателиВведенныеПриРасчете.Валюта3 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ ПВалюты3.Курс КОНЕЦ
| ИНАЧЕ
| ВЫБОР КОГДА СписокНачислений.Валюта3 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ Валюты3.Курс КОНЕЦ
| КОНЕЦ КАК КурсВалюты3,
| ВЫБОР КОГДА СписокНачислений.Валюта4 ЕСТЬ NULL ТОГДА
| ВЫБОР КОГДА ПоказателиВведенныеПриРасчете.Валюта4 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ ПВалюты4.Курс КОНЕЦ
| ИНАЧЕ
| ВЫБОР КОГДА СписокНачислений.Валюта4 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ Валюты4.Курс КОНЕЦ
| КОНЕЦ КАК КурсВалюты4,
| ВЫБОР КОГДА СписокНачислений.Валюта5 ЕСТЬ NULL ТОГДА
| ВЫБОР КОГДА ПоказателиВведенныеПриРасчете.Валюта5 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ ПВалюты5.Курс КОНЕЦ
| ИНАЧЕ
| ВЫБОР КОГДА СписокНачислений.Валюта5 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ Валюты5.Курс КОНЕЦ
| КОНЕЦ КАК КурсВалюты5,
| ВЫБОР КОГДА СписокНачислений.Валюта6 ЕСТЬ NULL ТОГДА
| ВЫБОР КОГДА ПоказателиВведенныеПриРасчете.Валюта6 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ ПВалюты6.Курс КОНЕЦ
| ИНАЧЕ
| ВЫБОР КОГДА СписокНачислений.Валюта6 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка)) ТОГДА 1 ИНАЧЕ Валюты6.Курс КОНЕЦ
| КОНЕЦ КАК КурсВалюты6,
| ВЫБОР
| КОГДА СписокНачислений.Показатель1 ЕСТЬ NULL
| И ПоказателиВведенныеПриРасчете.Показатель1 ЕСТЬ NULL
| ТОГДА 0
| КОГДА ПоказателиВведенныеПриРасчете.Показатель1 ЕСТЬ НЕ NULL
| ИЛИ (ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Периодически))
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 1
| ТОГДА
| ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель1
| ИНАЧЕ ПоказателиВведенныеПриРасчете.Показатель1 * ЕСТЬNULL(ПВалюты1.Курс / ПВалюты1.Кратность, 0)
| КОНЕЦ
| КОГДА (СписокНачислений.Показатель1 = 0
| ИЛИ СписокНачислений.Показатель1 ЕСТЬ NULL )
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 1
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 1)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель1 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель1
| КОГДА СписокНачислений.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель1
| ИНАЧЕ СписокНачислений.Показатель1 * ЕСТЬNULL(Валюты1.Курс / Валюты1.Кратность, 0)
| КОНЕЦ КАК Показатель1,
| ВЫБОР
| КОГДА СписокНачислений.Показатель2 ЕСТЬ NULL
| И ПоказателиВведенныеПриРасчете.Показатель2 ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ NULL
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.НомерСтроки <> 2)
| ТОГДА 0
| КОГДА ПоказателиВведенныеПриРасчете.Показатель2 ЕСТЬ НЕ NULL
| ИЛИ (ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Периодически))
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 2
| ТОГДА
| ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Валюта2 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель2
| ИНАЧЕ ПоказателиВведенныеПриРасчете.Показатель2 * ЕСТЬNULL(ПВалюты2.Курс / ПВалюты2.Кратность, 0)
| КОНЕЦ
| КОГДА (СписокНачислений.Показатель2 = 0
| ИЛИ СписокНачислений.Показатель2 ЕСТЬ NULL )
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 2
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 2)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель2 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель2
| КОГДА СписокНачислений.Валюта2 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель2
| ИНАЧЕ СписокНачислений.Показатель2 * ЕСТЬNULL(Валюты2.Курс / Валюты2.Кратность, 0)
| КОНЕЦ КАК Показатель2,
| ВЫБОР
| КОГДА СписокНачислений.Показатель3 ЕСТЬ NULL
| И ПоказателиВведенныеПриРасчете.Показатель3 ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ NULL
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.НомерСтроки <> 3)
| ТОГДА 0
| КОГДА ПоказателиВведенныеПриРасчете.Показатель3 ЕСТЬ НЕ NULL
| ИЛИ (ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Периодически))
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 3
| ТОГДА
| ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Валюта3 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель3
| ИНАЧЕ ПоказателиВведенныеПриРасчете.Показатель3 * ЕСТЬNULL(ПВалюты3.Курс / ПВалюты3.Кратность, 0)
| КОНЕЦ
| КОГДА СписокНачислений.Показатель3 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 3
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 3)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель3 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель3
| КОГДА СписокНачислений.Валюта3 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель3
| ИНАЧЕ СписокНачислений.Показатель3 * ЕСТЬNULL(Валюты3.Курс / Валюты3.Кратность, 0)
| КОНЕЦ КАК Показатель3,
| ВЫБОР
| КОГДА СписокНачислений.Показатель4 ЕСТЬ NULL
| И ПоказателиВведенныеПриРасчете.Показатель4 ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ NULL
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.НомерСтроки <> 4)
| ТОГДА 0
| КОГДА ПоказателиВведенныеПриРасчете.Показатель4 ЕСТЬ НЕ NULL
| ИЛИ (ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Периодически))
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 4
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель4
| КОГДА СписокНачислений.Показатель4 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 4
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 4)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель4 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА
| ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Валюта4 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель4
| ИНАЧЕ ПоказателиВведенныеПриРасчете.Показатель4 * ЕСТЬNULL(ПВалюты3.Курс / ПВалюты4.Кратность, 0)
| КОНЕЦ
| КОГДА СписокНачислений.Валюта4 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель4
| ИНАЧЕ СписокНачислений.Показатель4 * ЕСТЬNULL(Валюты4.Курс / Валюты4.Кратность, 0)
| КОНЕЦ КАК Показатель4,
| ВЫБОР
| КОГДА СписокНачислений.Показатель5 ЕСТЬ NULL
| И ПоказателиВведенныеПриРасчете.Показатель5 ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ NULL
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.НомерСтроки <> 5)
| ТОГДА 0
| КОГДА ПоказателиВведенныеПриРасчете.Показатель5 ЕСТЬ НЕ NULL
| ИЛИ (ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Периодически))
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 5
| ТОГДА
| ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Валюта5 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель5
| ИНАЧЕ ПоказателиВведенныеПриРасчете.Показатель5 * ЕСТЬNULL(ПВалюты5.Курс / ПВалюты5.Кратность, 0)
| КОНЕЦ
| КОГДА СписокНачислений.Показатель5 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 5
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 5)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель5 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель5
| КОГДА СписокНачислений.Валюта5 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель5
| ИНАЧЕ СписокНачислений.Показатель5 * ЕСТЬNULL(Валюты5.Курс / Валюты5.Кратность, 0)
| КОНЕЦ КАК Показатель5,
| ВЫБОР
| КОГДА СписокНачислений.Показатель6 ЕСТЬ NULL
| И ПоказателиВведенныеПриРасчете.Показатель6 ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ NULL
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.НомерСтроки <> 6)
| ТОГДА 0
| КОГДА ПоказателиВведенныеПриРасчете.Показатель6 ЕСТЬ НЕ NULL
| ИЛИ (ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Периодически))
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 6
| ТОГДА
| ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Валюта6 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель6
| ИНАЧЕ ПоказателиВведенныеПриРасчете.Показатель6 * ЕСТЬNULL(ПВалюты3.Курс / ПВалюты6.Кратность, 0)
| КОНЕЦ
| КОГДА СписокНачислений.Показатель6 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 6
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 6)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель6 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель6
| КОГДА СписокНачислений.Валюта6 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель6
| ИНАЧЕ СписокНачислений.Показатель6 * ЕСТЬNULL(Валюты6.Курс / Валюты6.Кратность, 0)
| КОНЕЦ КАК Показатель6,
| ПоказательТарифнойСтавки.Показатель КАК ВидТарифнойСтавки,
| ВЫБОР
| КОГДА ПоказательТарифнойСтавки.НомерСтроки = 1
| ТОГДА ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Показатель1 ЕСТЬ НЕ NULL
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель1
| КОГДА СписокНачислений.Показатель1 = 0
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 1
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель1 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель1
| КОГДА СписокНачислений.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель1
| ИНАЧЕ СписокНачислений.Показатель1 * ЕСТЬNULL(Валюты1.Курс / Валюты1.Кратность, 0)
| КОНЕЦ
| КОГДА ПоказательТарифнойСтавки.НомерСтроки = 2
| ТОГДА ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Показатель2 ЕСТЬ НЕ NULL
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель2
| КОГДА СписокНачислений.Показатель2 = 0
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 2
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель2 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель2
| КОГДА СписокНачислений.Валюта2 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель2
| ИНАЧЕ СписокНачислений.Показатель2 * ЕСТЬNULL(Валюты2.Курс / Валюты2.Кратность, 0)
| КОНЕЦ
| КОГДА ПоказательТарифнойСтавки.НомерСтроки = 3
| ТОГДА ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Показатель3 ЕСТЬ НЕ NULL
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель3
| КОГДА СписокНачислений.Показатель3 = 0
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 3
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель3 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель3
| КОГДА СписокНачислений.Валюта3 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель3
| ИНАЧЕ СписокНачислений.Показатель3 * ЕСТЬNULL(Валюты3.Курс / Валюты3.Кратность, 0)
| КОНЕЦ
| КОГДА ПоказательТарифнойСтавки.НомерСтроки = 4
| ТОГДА ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Показатель4 ЕСТЬ НЕ NULL
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель4
| КОГДА СписокНачислений.Показатель4 = 0
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 4
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель4 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель4
| КОГДА СписокНачислений.Валюта4 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель4
| ИНАЧЕ СписокНачислений.Показатель4 * ЕСТЬNULL(Валюты4.Курс / Валюты4.Кратность, 0)
| КОНЕЦ
| КОГДА ПоказательТарифнойСтавки.НомерСтроки = 5
| ТОГДА ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Показатель5 ЕСТЬ НЕ NULL
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель5
| КОГДА СписокНачислений.Показатель5 = 0
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 5
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель5 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель5
| КОГДА СписокНачислений.Валюта5 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель5
| ИНАЧЕ СписокНачислений.Показатель5 * ЕСТЬNULL(Валюты5.Курс / Валюты5.Кратность, 0)
| КОНЕЦ
| КОГДА ПоказательТарифнойСтавки.НомерСтроки = 6
| ТОГДА ВЫБОР
| КОГДА ПоказателиВведенныеПриРасчете.Показатель6 ЕСТЬ НЕ NULL
| ТОГДА ПоказателиВведенныеПриРасчете.Показатель6
| КОГДА СписокНачислений.Показатель6 = 0
| И (ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 6
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ЭтоТарифнаяСтавка)
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| КОГДА СписокНачислений.Показатель6 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ТОГДА СписокНачислений.Показатель6
| КОГДА СписокНачислений.Валюта6 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель6
| ИНАЧЕ СписокНачислений.Показатель6 * ЕСТЬNULL(Валюты6.Курс / Валюты6.Кратность, 0)
| КОНЕЦ
| ИНАЧЕ 0
| КОНЕЦ КАК ОкладТариф
|ПОМЕСТИТЬ ВТРаботникиИНачисленияПоСхемамМотивации
|ИЗ
| ВТРаботникиИНачисления КАК СписокНачислений
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПоказатели КАК ПоказателиВведенныеПриРасчете
| ПО СписокНачислений.ВидРасчета = ПоказателиВведенныеПриРасчете.ВидРасчета
| И (СписокНачислений.Сотрудник = ПоказателиВведенныеПриРасчете.Сотрудник
| )
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| НеВводимыеПоказатели.Ссылка КАК Ссылка,
| НеВводимыеПоказатели.НомерСтроки КАК НомерСтроки,
| НеВводимыеПоказатели.Показатель КАК Показатель,
| НеВводимыеПоказатели.ПоказательВозможностьИзменения КАК ПоказательВозможностьИзменения,
| НеВводимыеПоказатели.ЭтоТарифнаяСтавка КАК ЭтоТарифнаяСтавка,
| СУММА(ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя) КАК ЗначениеПоказателя,
| ЗначенияВводимыхКадровыхПоказателей.Сотрудник КАК Сотрудник,
| ЗначенияВводимыхКадровыхПоказателей.Период,
| ЗначенияВводимыхКадровыхПоказателей.ПериодРаботники,
| ЗначенияВводимыхКадровыхПоказателей.ПериодНачисления
| ИЗ
| ВТНеЗапрашиваемыеПриКадровыхПеремещениях КАК НеВводимыеПоказатели
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТЗначенияВводимыхКадровыхПоказателей КАК ЗначенияВводимыхКадровыхПоказателей
| ПО НеВводимыеПоказатели.Показатель = ЗначенияВводимыхКадровыхПоказателей.Показатель
| ГДЕ
| ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя <> 0
|
| СГРУППИРОВАТЬ ПО
| НеВводимыеПоказатели.Ссылка,
| НеВводимыеПоказатели.НомерСтроки,
| НеВводимыеПоказатели.Показатель,
| НеВводимыеПоказатели.ПоказательВозможностьИзменения,
| НеВводимыеПоказатели.ЭтоТарифнаяСтавка,
| ЗначенияВводимыхКадровыхПоказателей.Сотрудник,
| ЗначенияВводимыхКадровыхПоказателей.Период,
| ЗначенияВводимыхКадровыхПоказателей.ПериодРаботники,
| ЗначенияВводимыхКадровыхПоказателей.ПериодНачисления
| ) КАК ЗначенияВводимыхКадровыхПоказателей
| ПО СписокНачислений.Сотрудник = ЗначенияВводимыхКадровыхПоказателей.Сотрудник
| И КОНЕЦПЕРИОДА(СписокНачислений.Период, МЕСЯЦ) = КОНЕЦПЕРИОДА(ЗначенияВводимыхКадровыхПоказателей.Период, МЕСЯЦ)
| И СписокНачислений.ВидРасчета = ЗначенияВводимыхКадровыхПоказателей.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК ПВалюты1
| ПО (ПВалюты1.Период = &парамДатаВалютногоУчета)
| И ПоказателиВведенныеПриРасчете.Валюта1 = ПВалюты1.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК ПВалюты2
| ПО (ПВалюты2.Период = &парамДатаВалютногоУчета)
| И ПоказателиВведенныеПриРасчете.Валюта2 = ПВалюты2.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК ПВалюты3
| ПО (ПВалюты3.Период = &парамДатаВалютногоУчета)
| И ПоказателиВведенныеПриРасчете.Валюта3 = ПВалюты3.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК ПВалюты4
| ПО (ПВалюты4.Период = &парамДатаВалютногоУчета)
| И ПоказателиВведенныеПриРасчете.Валюта4 = ПВалюты4.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК ПВалюты5
| ПО (ПВалюты5.Период = &парамДатаВалютногоУчета)
| И ПоказателиВведенныеПриРасчете.Валюта5 = ПВалюты5.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК ПВалюты6
| ПО (ПВалюты6.Период = &парамДатаВалютногоУчета)
| И ПоказателиВведенныеПриРасчете.Валюта6 = ПВалюты6.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты1
| ПО (Валюты1.Период = &парамДатаВалютногоУчета)
| И СписокНачислений.Валюта1 = Валюты1.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты2
| ПО (Валюты2.Период = &парамДатаВалютногоУчета)
| И СписокНачислений.Валюта2 = Валюты2.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты3
| ПО (Валюты3.Период = &парамДатаВалютногоУчета)
| И СписокНачислений.Валюта3 = Валюты3.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты4
| ПО (Валюты4.Период = &парамДатаВалютногоУчета)
| И СписокНачислений.Валюта4 = Валюты4.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты5
| ПО (Валюты5.Период = &парамДатаВалютногоУчета)
| И СписокНачислений.Валюта5 = Валюты5.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты6
| ПО (Валюты6.Период = &парамДатаВалютногоУчета)
| И СписокНачислений.Валюта6 = Валюты6.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ ВТВводимыеВПлановыхНачисленияхПоказатели КАК ПоказательТарифнойСтавки
| ПО СписокНачислений.ВидРасчета = ПоказательТарифнойСтавки.Ссылка
| И (ПоказательТарифнойСтавки.Показатель В (ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная), ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая), ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)))
|ГДЕ
| ВЫБОР
| КОГДА СписокНачислений.Подходит
| ТОГДА (НЕ СписокНачислений.ВидРасчета ЕСТЬ NULL )
| ИНАЧЕ ИСТИНА
| КОНЕЦ
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник
|";
Запрос.Выполнить();

ЗапросПризнаковАвтоНачисленийПоТабелю = Новый Запрос;
ЗапросПризнаковАвтоНачисленийПоТабелю.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ГДЕ
| ОсновныеНачисленияОрганизаций.АвтоНачислятьПоТабелю
| И ОсновныеНачисленияОрганизаций.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаНочныеЧасы))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК АвтоНачислятьПоТабелюНочные,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ГДЕ
| ОсновныеНачисленияОрганизаций.АвтоНачислятьПоТабелю
| И ОсновныеНачисленияОрганизаций.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаВечерниеЧасы))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК АвтоНачислятьПоТабелюВечерние";

ВыборкаПризнаковАвтоначисления = ЗапросПризнаковАвтоНачисленийПоТабелю.Выполнить().Выбрать();
ВыборкаПризнаковАвтоначисления.Следующий();

// ДанныеПроизводственногоКалендаряЗаМесяц
// Данные производственного календаря за месяц
//
// Поля:
// ЧислоРабочихДней,
// ЧислоПредпраздничныхДней
//
// Описание:
//
// выбираем данные из рег-ра РегламентированныйПроизводственныйКалендарь за месяц, в который сотрудник работал

Запрос.Текст =
"ВЫБРАТЬ
| МЕСЯЦ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря) КАК МесяцКалендаря,
| СУММА(ВЫБОР
| КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК ЧислоРабочихДней,
| СУММА(ВЫБОР
| КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК ЧислоПредпраздничныхДней
|ПОМЕСТИТЬ ВТДанныеПроизводственногоКалендаряЗаМесяц
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
| РегламентированныйПроизводственныйКалендарь.Год = &Год
|
|СГРУППИРОВАТЬ ПО
| МЕСЯЦ(РегламентированныйПроизводственныйКалендарь.ДатаКалендаря)";
Запрос.Выполнить();

//Основной текст запроса
ОсновнойТекстЗапроса =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДвиженияРаботников.Сотрудник КАК Сотрудник,
| ДвиженияРаботников.Период КАК Период,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы
| ГДЕ
| ГрафикиРаботы.Месяц = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И ГрафикиРаботы.ГрафикРаботы = ДвиженияРаботников.Сотрудник)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьИндГрафик,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрСведений.СводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики
| ГДЕ
| СводныеИндивидуальныеГрафики.Месяц = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И СводныеИндивидуальныеГрафики.Сотрудник = ДвиженияРаботников.Сотрудник)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьИндСводнГрафик,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
| ГДЕ
| РабочееВремяРаботниковОрганизаций.Период = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И РабочееВремяРаботниковОрганизаций.Сотрудник = ДвиженияРаботников.Сотрудник)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьСводнТабель,";

Если ВыборкаПризнаковАвтоначисления.АвтоНачислятьПоТабелюНочные Тогда
ОсновнойТекстЗапроса = ОсновнойТекстЗапроса + "
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы
| ГДЕ
| ГрафикиРаботы.Месяц = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И ГрафикиРаботы.ГрафикРаботы = ДвиженияРаботников.Сотрудник
| И ГрафикиРаботы.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоНочнымЧасам)
| И ГрафикиРаботы.ОсновноеЗначение <> 0)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьНочныеИндГрафик,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрСведений.СводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики
| ГДЕ
| СводныеИндивидуальныеГрафики.Месяц = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И СводныеИндивидуальныеГрафики.Сотрудник = ДвиженияРаботников.Сотрудник
| И СводныеИндивидуальныеГрафики.ЧасовНочных <> 0)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьНочныеИндСводнГрафик,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
| ГДЕ
| РабочееВремяРаботниковОрганизаций.Период = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И РабочееВремяРаботниковОрганизаций.Сотрудник = ДвиженияРаботников.Сотрудник
| И РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаНочныеЧасы)
| И РабочееВремяРаботниковОрганизаций.Часов <> 0)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьНочныеСводнТабель,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы
| ГДЕ
| ГрафикиРаботы.Месяц = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И ГрафикиРаботы.ГрафикРаботы = ДвиженияРаботников.ГрафикРаботы
| И ГрафикиРаботы.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоНочнымЧасам)
| И ГрафикиРаботы.ОсновноеЗначение <> 0)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьНочныеОбщГрафик,";
Иначе
ОсновнойТекстЗапроса = ОсновнойТекстЗапроса + "
| ЛОЖЬ КАК ЕстьНочныеИндГрафик,
| ЛОЖЬ КАК ЕстьНочныеИндСводнГрафик,
| ЛОЖЬ КАК ЕстьНочныеСводнТабель,
| ЛОЖЬ КАК ЕстьНочныеОбщГрафик,";
КонецЕсли;

Если ВыборкаПризнаковАвтоначисления.АвтоНачислятьПоТабелюВечерние Тогда
ОсновнойТекстЗапроса = ОсновнойТекстЗапроса + "
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы
| ГДЕ
| ГрафикиРаботы.Месяц = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И ГрафикиРаботы.ГрафикРаботы = ДвиженияРаботников.Сотрудник
| И ГрафикиРаботы.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоВечернимЧасам)
| И ГрафикиРаботы.ОсновноеЗначение <> 0)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьВечерниеИндГрафик,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрСведений.СводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики
| ГДЕ
| СводныеИндивидуальныеГрафики.Месяц = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И СводныеИндивидуальныеГрафики.Сотрудник = ДвиженияРаботников.Сотрудник
| И СводныеИндивидуальныеГрафики.ЧасовВечерних <> 0)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьВечерниеИндСводнГрафик,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрНакопления.РабочееВремяРаботниковОрганизаций КАК РабочееВремяРаботниковОрганизаций
| ГДЕ
| РабочееВремяРаботниковОрганизаций.Период = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И РабочееВремяРаботниковОрганизаций.Сотрудник = ДвиженияРаботников.Сотрудник
| И РабочееВремяРаботниковОрганизаций.ВидИспользованияРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаВечерниеЧасы)
| И РабочееВремяРаботниковОрганизаций.Часов <> 0)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьВечерниеСводнТабель,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботы
| ГДЕ
| ГрафикиРаботы.Месяц = НАЧАЛОПЕРИОДА(ДвиженияРаботников.Период, МЕСЯЦ)
| И ГрафикиРаботы.ГрафикРаботы = ДвиженияРаботников.ГрафикРаботы
| И ГрафикиРаботы.ВидУчетаВремени = ЗНАЧЕНИЕ(Перечисление.ВидыУчетаВремени.ПоВечернимЧасам)
| И ГрафикиРаботы.ОсновноеЗначение <> 0)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЕстьВечерниеОбщГрафик";
Иначе
ОсновнойТекстЗапроса = ОсновнойТекстЗапроса + "
| ЛОЖЬ КАК ЕстьВечерниеИндГрафик,
| ЛОЖЬ КАК ЕстьВечерниеИндСводнГрафик,
| ЛОЖЬ КАК ЕстьВечерниеСводнТабель,
| ЛОЖЬ КАК ЕстьВечерниеОбщГрафик";
КонецЕсли;

ОсновнойТекстЗапроса = ОсновнойТекстЗапроса + "
|ПОМЕСТИТЬ ВТСведенияОНочныхВечерних
|ИЗ
| ВТДвиженияРаботников КАК ДвиженияРаботников
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СписокНачислений.Сотрудник КАК Сотрудник,
| СписокНачислений.СотрудникНаименование КАК СотрудникНаименование,
| СписокНачислений.Физлицо КАК Физлицо,
| СписокНачислений.ПодразделениеОрганизации,
| СписокНачислений.Подходит,
| СписокНачислений.Период,
| СписокНачислений.ПериодРаботники КАК ПериодРаботники,
| СписокНачислений.ПериодНачисления КАК ПериодНачисления,
| СписокНачислений.ОсновноеНачисление КАК ОсновноеНачисление,
| СписокНачислений.ВидРасчета КАК ВидРасчета,
| СписокНачислений.ВидРасчетаНаименование,
| ЕСТЬNULL(СписокНачислений.ВидРасчетаТребуетВводаТарифногоРазряда, ЛОЖЬ) КАК ТребуетВводаТарифногоРазряда,
| СписокНачислений.СпособРасчета,
| ЕСТЬNULL(СписокНачислений.НачисляетсяВЦеломЗаМесяц, ЛОЖЬ) КАК НачисляетсяВЦеломЗаМесяц,
| СписокНачислений.ВидВремени,
| СписокНачислений.Действие,
| СписокНачислений.КодВычета,
| СписокНачислений.ДатаНачалаСобытия,
| СписокНачислений.ГрафикРаботы,
| СписокНачислений.СуммированныйУчетРабочегоВремени,
| СписокНачислений.Валюта1,
| СписокНачислений.Валюта2,
| СписокНачислений.Валюта3,
| СписокНачислений.Валюта4,
| СписокНачислений.Валюта5,
| СписокНачислений.Валюта6,
| СписокНачислений.КурсВалюты1,
| СписокНачислений.КурсВалюты2,
| СписокНачислений.КурсВалюты3,
| СписокНачислений.КурсВалюты4,
| СписокНачислений.КурсВалюты5,
| СписокНачислений.КурсВалюты6,
| СписокНачислений.ВидТарифнойСтавки,
| ВЫБОР
| КОГДА СписокНачислений.ВидТарифнойСтавки = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ТОГДА СписокНачислений.ОкладТариф
| КОГДА СписокНачислений.ВидТарифнойСтавки = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ТОГДА ВЫРАЗИТЬ(ВЫБОР
| КОГДА ЕСТЬNULL(ВариантыВстроенныхАлгоритмовРасчетаЗарплаты.ПорядокПересчетаМесячнойСтавкиВЧасовую, ЗНАЧЕНИЕ(Перечисление.ПорядкиПересчетаМесячнойСтавкиВЧасовую.ПоСреднемуКоличествуЧасовВМесяце)) = ЗНАЧЕНИЕ(Перечисление.ПорядкиПересчетаМесячнойСтавкиВЧасовую.ПоСреднемуКоличествуЧасовВМесяце)
| ТОГДА ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеПроизводственногоКалендаря.ЧислоРабочихДней, 0) = 0
| ТОГДА 0
| КОГДА СписокНачислений.ДлительностьРабочейНедели = 0
| ТОГДА 0
| ИНАЧЕ СписокНачислений.ОкладТариф / (СписокНачислений.ДлительностьРабочейНедели / 5 * (ЕСТЬNULL(ДанныеПроизводственногоКалендаря.ЧислоРабочихДней, 0) + ЕСТЬNULL(ДанныеПроизводственногоКалендаря.ЧислоПредпраздничныхДней, 0)) - ЕСТЬNULL(ДанныеПроизводственногоКалендаря.ЧислоПредпраздничныхДней, 0)) * 12
| КОНЕЦ
| КОГДА ЕСТЬNULL(ВариантыВстроенныхАлгоритмовРасчетаЗарплаты.ПорядокПересчетаМесячнойСтавкиВЧасовую, ЗНАЧЕНИЕ(Перечисление.ПорядкиПересчетаМесячнойСтавкиВЧасовую.ПоСреднемуКоличествуЧасовВМесяце)) = ЗНАЧЕНИЕ(Перечисление.ПорядкиПересчетаМесячнойСтавкиВЧасовую.ПоМесячнойНормеПоПроизводственномуКалендарю)
| ТОГДА ВЫБОР
| КОГДА ЕСТЬNULL(ДанныеПроизводственногоКалендаряЗаМесяц.ЧислоРабочихДней, 0) = 0
| ТОГДА 0
| КОГДА СписокНачислений.ДлительностьРабочейНедели = 0
| ТОГДА 0
| ИНАЧЕ СписокНачислений.ОкладТариф / (СписокНачислений.ДлительностьРабочейНедели / 5 * (ЕСТЬNULL(ДанныеПроизводственногоКалендаряЗаМесяц.ЧислоРабочихДней, 0) + ЕСТЬNULL(ДанныеПроизводственногоКалендаряЗаМесяц.ЧислоПредпраздничныхДней, 0)) - ЕСТЬNULL(ДанныеПроизводственногоКалендаряЗаМесяц.ЧислоПредпраздничныхДней, 0))
| КОНЕЦ
| КОГДА ВЫБОР
| КОГДА НормаВремениПоСводнымИндивидуальнымГрафикам.Сотрудник ЕСТЬ НЕ NULL
| ТОГДА НормаВремениПоСводнымИндивидуальнымГрафикам.ЧасовЗаМесяц
| КОГДА НормаВремениПоЕжедневнымИндивидуальнымГрафикам.Сотрудник ЕСТЬ НЕ NULL
| ТОГДА НормаВремениПоЕжедневнымИндивидуальнымГрафикам.ЧасовЗаМесяц
| ИНАЧЕ ЕСТЬNULL(НормаВремениПоОбщимГрафикам.ЧасовЗаМесяц, 0)
| КОНЕЦ = 0
| ТОГДА 0
| ИНАЧЕ СписокНачислений.ОкладТариф / ВЫБОР
| КОГДА НормаВремениПоСводнымИндивидуальнымГрафикам.Сотрудник ЕСТЬ НЕ NULL
| ТОГДА НормаВремениПоСводнымИндивидуальнымГрафикам.ЧасовЗаМесяц
| КОГДА НормаВремениПоЕжедневнымИндивидуальнымГрафикам.Сотрудник ЕСТЬ НЕ NULL
| ТОГДА НормаВремениПоЕжедневнымИндивидуальнымГрафикам.ЧасовЗаМесяц
| ИНАЧЕ ЕСТЬNULL(НормаВремениПоОбщимГрафикам.ЧасовЗаМесяц, 0)
| КОНЕЦ
| КОНЕЦ КАК ЧИСЛО(15, 3))
| КОГДА СписокНачислений.ВидТарифнойСтавки = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ТОГДА ВЫРАЗИТЬ(ВЫБОР
| КОГДА СписокНачислений.ДлительностьРабочейНедели = 0
| ТОГДА 0
| ИНАЧЕ СписокНачислений.ОкладТариф / СписокНачислений.ДлительностьРабочейНедели * ВЫБОР
| КОГДА СписокНачислений.ВидГрафика = ЗНАЧЕНИЕ(Перечисление.ВидыРабочихГрафиков.Шестидневка)
| ТОГДА 6
| ИНАЧЕ 5
| КОНЕЦ
| КОНЕЦ КАК ЧИСЛО(15, 3))
| ИНАЧЕ 0
| КОНЕЦ КАК ЧасоваяТарифнаяСтавка,
| СписокНачислений.Показатель1,
| СписокНачислений.Показатель2,
| СписокНачислений.Показатель3,
| СписокНачислений.Показатель4,
| СписокНачислений.Показатель5,
| СписокНачислений.Показатель6,
| СведенияОСтажеРаботыНаСевере.ДатаРегистрацииСеверногоСтажа,
| СведенияОСтажеРаботыНаСевере.ПорядокНачисленияСеверныхНадбавок,
| СведенияОСтажеРаботыНаСевере.НачальныйПроцентСевернойНадбавки,
| СведенияОСтажеРаботыНаСевере.СеверныйСтажМесяцев,
| СведенияОСтажеРаботыНаСевере.СеверныйСтажДней,
| СписокНачислений.ВидРасчетаВидСтажа,
| ШкалаКоэффициентовСтажа.Величина КАК КоэффициентСтажа,
| ШкалаСледКоэффициентовСтажа.Величина КАК СледКоэффициентСтажа,
| ВЫБОР
| КОГДА (НЕ ШкалаСледКоэффициентовСтажа.Величина ЕСТЬ NULL )
| ТОГДА ВЫБОР
| КОГДА ДЕНЬ(Стажи.ДатаОтсчета) > Стажи.РазмерДней
| ТОГДА ДЕНЬ(Стажи.ДатаОтсчета) - Стажи.РазмерДней
| ИНАЧЕ ДЕНЬ(ДОБАВИТЬКДАТЕ(&парамНачало, ДЕНЬ, -1)) - (Стажи.РазмерДней - ДЕНЬ(Стажи.ДатаОтсчета))
| КОНЕЦ
| КОНЕЦ КАК ДеньСменыКоэффициентаСтажа,
| ВЫБОР
| КОГДА &ЭтоПерерасчет
| ТОГДА ЛОЖЬ
| КОГДА ОсновныеНачисления.Сотрудник ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК УжеПроведен,
| ВЫБОР
| КОГДА СведенияОНочныхВечерних.ЕстьИндГрафик
| ТОГДА СведенияОНочныхВечерних.ЕстьНочныеИндГрафик
| КОГДА СведенияОНочныхВечерних.ЕстьСводнТабель
| ТОГДА СведенияОНочныхВечерних.ЕстьНочныеСводнТабель
| КОГДА СведенияОНочныхВечерних.ЕстьИндСводнГрафик
| ТОГДА СведенияОНочныхВечерних.ЕстьНочныеИндСводнГрафик
| ИНАЧЕ СведенияОНочныхВечерних.ЕстьНочныеОбщГрафик
| КОНЕЦ КАК ЕстьНочные,
| ВЫБОР
| КОГДА СведенияОНочныхВечерних.ЕстьИндГрафик
| ТОГДА СведенияОНочныхВечерних.ЕстьВечерниеИндГрафик
| КОГДА СведенияОНочныхВечерних.ЕстьСводнТабель
| ТОГДА СведенияОНочныхВечерних.ЕстьВечерниеСводнТабель
| КОГДА СведенияОНочныхВечерних.ЕстьИндСводнГрафик
| ТОГДА СведенияОНочныхВечерних.ЕстьВечерниеИндСводнГрафик
| ИНАЧЕ СведенияОНочныхВечерних.ЕстьВечерниеОбщГрафик
| КОНЕЦ КАК ЕстьВечерние
|ИЗ
| ВТРаботникиИНачисленияПоСхемамМотивации КАК СписокНачислений
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОСеверномСтаже КАК СведенияОСтажеРаботыНаСевере
| ПО СписокНачислений.Сотрудник = СведенияОСтажеРаботыНаСевере.Сотрудник
| И СписокНачислений.ПериодРаботники = СведенияОСтажеРаботыНаСевере.ПериодРаботники
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица.Стажи КАК Стажи
| ПО СписокНачислений.ВидРасчетаВидСтажа = Стажи.ВидСтажа
| И СписокНачислений.Физлицо = Стажи.Ссылка
| И (СписокНачислений.СпособРасчета В (&СпособыРасчетаОтСтажа))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШкалаКоэффициентовСтажа КАК ШкалаКоэффициентовСтажа
| ПО СписокНачислений.ВидРасчетаКоэффициентСтажа = ШкалаКоэффициентовСтажа.КоэффициентСтажа
| И (СписокНачислений.СпособРасчета В (&СпособыРасчетаОтСтажа))
| И (Стажи.РазмерМесяцев + РАЗНОСТЬДАТ(Стажи.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&парамНачало, ДЕНЬ, Стажи.РазмерДней), МЕСЯЦ) - ВЫБОР
| КОГДА ДЕНЬ(Стажи.ДатаОтсчета) > ДЕНЬ(ДОБАВИТЬКДАТЕ(&парамНачало, ДЕНЬ, Стажи.РазмерДней))
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ >= ШкалаКоэффициентовСтажа.СтажС)
| И (Стажи.РазмерМесяцев + РАЗНОСТЬДАТ(Стажи.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&парамНачало, ДЕНЬ, Стажи.РазмерДней), МЕСЯЦ) - ВЫБОР
| КОГДА ДЕНЬ(Стажи.ДатаОтсчета) > ДЕНЬ(ДОБАВИТЬКДАТЕ(&парамНачало, ДЕНЬ, Стажи.РазмерДней))
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ < ВЫБОР
| КОГДА ШкалаКоэффициентовСтажа.СтажПо = 0
| ТОГДА 999999
| ИНАЧЕ ШкалаКоэффициентовСтажа.СтажПо
| КОНЕЦ)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ШкалаКоэффициентовСтажа КАК ШкалаСледКоэффициентовСтажа
| ПО СписокНачислений.ВидРасчетаКоэффициентСтажа = ШкалаСледКоэффициентовСтажа.КоэффициентСтажа
| И (СписокНачислений.СпособРасчета В (&СпособыРасчетаОтСтажа))
| И (Стажи.РазмерМесяцев + РАЗНОСТЬДАТ(Стажи.ДатаОтсчета, ДОБАВИТЬКДАТЕ(&парамНачало, ДЕНЬ, Стажи.РазмерДней), МЕСЯЦ) - ВЫБОР
| КОГДА ДЕНЬ(Стажи.ДатаОтсчета) >= ДЕНЬ(ДОБАВИТЬКДАТЕ(&парамНачало, ДЕНЬ, Стажи.РазмерДней))
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ = ШкалаКоэффициентовСтажа.СтажПо - 1)
| И (ШкалаСледКоэффициентовСтажа.НомерСтрокиШкалы = ШкалаКоэффициентовСтажа.НомерСтрокиШкалы + 1)
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СУММА(ВЫБОР
| КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Рабочий)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК ЧислоРабочихДней,
| СУММА(ВЫБОР
| КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = ЗНАЧЕНИЕ(Перечисление.ВидыДнейПроизводственногоКалендаря.Предпраздничный)
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ) КАК ЧислоПредпраздничныхДней
| ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
| ГДЕ
| РегламентированныйПроизводственныйКалендарь.Год = &Год) КАК ДанныеПроизводственногоКалендаря
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеПроизводственногоКалендаряЗаМесяц КАК ДанныеПроизводственногоКалендаряЗаМесяц
| ПО МЕСЯЦ(СписокНачислений.Период) = ДанныеПроизводственногоКалендаряЗаМесяц.МесяцКалендаря
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНормаВремениПоСводнымИндивидуальнымГрафикам КАК НормаВремениПоСводнымИндивидуальнымГрафикам
| ПО СписокНачислений.Сотрудник = НормаВремениПоСводнымИндивидуальнымГрафикам.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНормаВремениПоЕжедневнымИндивидуальнымГрафикам КАК НормаВремениПоЕжедневнымИндивидуальнымГрафикам
| ПО СписокНачислений.Сотрудник = НормаВремениПоЕжедневнымИндивидуальнымГрафикам.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНормаВремениПоОбщимГрафикам КАК НормаВремениПоОбщимГрафикам
| ПО СписокНачислений.Сотрудник = НормаВремениПоОбщимГрафикам.Сотрудник
| И СписокНачислений.ГрафикРаботы = НормаВремениПоОбщимГрафикам.ГрафикРаботы
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ВариантыВстроенныхАлгоритмовРасчетаЗарплаты КАК ВариантыВстроенныхАлгоритмовРасчетаЗарплаты
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ ВТОсновныеНачисления КАК ОсновныеНачисления
| ПО СписокНачислений.Сотрудник = ОсновныеНачисления.Сотрудник
| И СписокНачислений.ПодразделениеОрганизации = ОсновныеНачисления.ПодразделениеОрганизации
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСведенияОНочныхВечерних КАК СведенияОНочныхВечерних
| ПО СписокНачислений.Сотрудник = СведенияОНочныхВечерних.Сотрудник
| И СписокНачислений.ПериодРаботники = СведенияОНочныхВечерних.Период
|
|УПОРЯДОЧИТЬ ПО
| СотрудникНаименование,
| Сотрудник,
| ПериодРаботники,
| ПериодНачисления,
| ОсновноеНачисление УБЫВ,
| ВидРасчета";


Запрос.Текст = ОсновнойТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();

НачисленияВыборка = РезультатЗапроса.Выбрать();

ТЗНачисления = СформироватьТаблицуНачислений(НачисленияВыборка, ОкончаниеПериодаЗаполнения, РезультатЗапроса.Выгрузить(), МассивВалютСНезаданнымКурсом);

Если МассивВалютСНезаданнымКурсом.Количество() > 0 Тогда
ТЗНачисления.Очистить();
КонецЕсли;

// для заполнения табличной части НДФЛ

РаботникиДляРасчетаНДФЛ = Новый Соответствие;

ТипОсновныхНачислений = Тип("ПланВидовРасчетаСсылка.ОсновныеНачисленияОрганизаций");

НаборЗаписейДляПроверки = РегистрыРасчета.ОсновныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();

НаборЗаписейДляПроверки.Отбор.Регистратор.Значение = СcылкаОбъекта;

СтрокаПолейОсновныхНачислений = "Сотрудник,Физлицо,ВидРасчета,Показатель1,Показатель2,Показатель3,Показатель4,Показатель5,Показатель6,ДатаНачала,ДатаОкончания,ПодразделениеОрганизации";
СтрокаПолейДополнительныхНачислений = "Сотрудник,Физлицо,ВидРасчета,Показатель1,Показатель2,Показатель3,Показатель4,Показатель5,Показатель6,,КодВычета,ДатаНачала,ДатаОкончания,ПодразделениеОрганизации";
Для Каждого НачислениеИзТаблицыЗначений Из ТЗНачисления Цикл

РаботникиДляРасчетаНДФЛ.Вставить(НачислениеИзТаблицыЗначений.Физлицо, 0);

Если ВидОперации <> Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНДФЛ Тогда

Если ТипЗнч(НачислениеИзТаблицыЗначений.ВидРасчета) = ТипОсновныхНачислений Тогда

НоваяСтрока = Начисления.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,НачислениеИзТаблицыЗначений,СтрокаПолейОсновныхНачислений); //Сотрудник,ВидРасчета,Размер,Показатель2,Показатель3,ДатаНачала,ДатаОкончания,ПодразделениеОрганизации
НоваяСтрока.Авторасчет = Истина;
НоваяСтрока.ДатаНачалаСобытия = ?(ЗначениеЗаполнено(НачислениеИзТаблицыЗначений.ДатаНачалаСобытия),НачислениеИзТаблицыЗначений.ДатаНачалаСобытия,НачислениеИзТаблицыЗначений.ДатаНачала);
Если НоваяСтрока.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ПособиеПоУходуЗаРебенкомДо1_5Лет Тогда
НоваяСтрока.ПериодРасчетаСреднегоЗаработкаНачало = ДобавитьМесяц(НачалоМесяца(НоваяСтрока.ДатаНачалаСобытия), -12);
НоваяСтрока.ПериодРасчетаСреднегоЗаработкаОкончание = НачалоМесяца(НоваяСтрока.ДатаНачалаСобытия) - 1;
КонецЕсли;

Движение = НаборЗаписейДляПроверки.Добавить();

// свойства
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.ВидРасчета = НачислениеИзТаблицыЗначений.ВидРасчета;
Движение.ПериодДействияНачало = НачислениеИзТаблицыЗначений.ДатаНачала;
Движение.ПериодДействияКонец = НачислениеИзТаблицыЗначений.ДатаОкончания;

// измерения
Движение.Сотрудник = НачислениеИзТаблицыЗначений.Сотрудник;
Движение.Физлицо = НачислениеИзТаблицыЗначений.Физлицо;
Движение.Организация = ГоловнаяОрганизация;

// реквизиты поддержки графика
Движение.ГрафикРаботы = НачислениеИзТаблицыЗначений.ГрафикРаботы;
Движение.ВидУчетаВремени = ПроведениеРасчетов.ПолучитьВидУчетаВремени(НачислениеИзТаблицыЗначений.СпособРасчета, НачислениеИзТаблицыЗначений.ВидВремени, НачислениеИзТаблицыЗначений.СуммированныйУчетРабочегоВремени);
Движение.ДатаНачалаСобытия = НачислениеИзТаблицыЗначений.ДатаНачала;
Движение.Авторасчет = Истина;

Иначе

НоваяСтрока = ДополнительныеНачисления.Добавить();
НоваяСтрока.Авторасчет = Истина;
ЗаполнитьЗначенияСвойств(НоваяСтрока,НачислениеИзТаблицыЗначений,СтрокаПолейДополнительныхНачислений); //Сотрудник,ВидРасчета,Размер,КодВычета,ДатаНачала,ДатаОкончания,ПодразделениеОрганизации

КонецЕсли;

КонецЕсли;

КонецЦикла;

// выполним удаление строк табличной части, которые соответствуют полностью вытесняемым видам расчета
// проверку выполним через фактический период действия
Если ВидОперации <> Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНДФЛ Тогда

НачатьТранзакцию();

НаборЗаписейДляПроверки.ОбменДанными.Загрузка = Истина;
НаборЗаписейДляПроверки.Записать(Истина, Ложь, Истина, Ложь);

ЗапросПроверки = Новый Запрос(
"ВЫБРАТЬ
| Начисления.Сотрудник,
| Начисления.ВидРасчета,
| Начисления.ДатаНачала,
| Начисления.ДатаОкончания,
| Начисления.НомерСтроки
|ПОМЕСТИТЬ ВТНачисления
|ИЗ &парамНачисления КАК Начисления
|ИНДЕКСИРОВАТЬ ПО Сотрудник, ВидРасчета;
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| Начисления.НомерСтроки КАК НомерСтроки
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизации
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ФактическийПериодДействия(Регистратор = &парамСсылка) КАК ОсновныеНачисленияРаботниковОрганизацииФактическийПериодДействия
| ПО ОсновныеНачисленияРаботниковОрганизации.НомерСтроки = ОсновныеНачисленияРаботниковОрганизацииФактическийПериодДействия.НомерСтроки
| И ОсновныеНачисленияРаботниковОрганизации.Регистратор = ОсновныеНачисленияРаботниковОрганизацииФактическийПериодДействия.Регистратор
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНачисления КАК Начисления
| ПО (Начисления.Сотрудник = ОсновныеНачисленияРаботниковОрганизации.Сотрудник)
| И (Начисления.ВидРасчета = ОсновныеНачисленияРаботниковОрганизации.ВидРасчета)
| И (Начисления.ДатаНачала = ОсновныеНачисленияРаботниковОрганизации.ПериодДействияНачало)
| И (КОНЕЦПЕРИОДА(Начисления.ДатаОкончания, День) = КОНЕЦПЕРИОДА(ОсновныеНачисленияРаботниковОрганизации.ПериодДействияКонец, День))
|ГДЕ
| ОсновныеНачисленияРаботниковОрганизации.Регистратор = &парамСсылка
| И ОсновныеНачисленияРаботниковОрганизацииФактическийПериодДействия.Регистратор ЕСТЬ NULL
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки УБЫВ");


ЗапросПроверки.УстановитьПараметр("парамСсылка", СcылкаОбъекта);
ЗапросПроверки.УстановитьПараметр("парамНачисления", Начисления.Выгрузить());
СтрокиКУдалению = ЗапросПроверки.Выполнить().Выгрузить();
// удалим проверочный набор записей
НаборЗаписейДляПроверки.Очистить();
НаборЗаписейДляПроверки.Записать(Истина, Ложь, Истина, Ложь);

ЗафиксироватьТранзакцию();

Для Каждого СтрокаТЗ Из СтрокиКУдалению Цикл
Начисления.Удалить(СтрокаТЗ.НомерСтроки - 1);
КонецЦикла;

КонецЕсли;
// конец удаления строк табличной части, которые соответствуют полностью вытесняемым видам расчета

// работающие по договорам подряда
ОсновнойТекстЗапроса =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СписокНачислений.Сотрудник КАК Сотрудник,
| СписокНачислений.СотрудникФизлицо КАК Физлицо,
| СписокНачислений.СотрудникНаименование КАК СотрудникНаименование,
| СписокНачислений.ВидРасчета КАК ВидРасчета,
| СписокНачислений.ПериодНачисления КАК ДатаНачала,
| ЕСТЬNULL(СписокНачислений.ДатаОкончания, &парамКонец) КАК ДатаОкончания,
| СписокНачислений.ДокументОснование КАК ДокументОснование,
| СписокНачислений.Подходит,
| СписокНачислений.ВидРасчета.Наименование КАК ВидРасчетаНаименование,
| СписокНачислений.ДокументОснование.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| СписокНачислений.ДокументОснование.КодВычета КАК КодВычета,
| ВЫБОР
| КОГДА СписокНачислений.Показатель1 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель1
| ИНАЧЕ СписокНачислений.Показатель1 * ЕСТЬNULL(Валюты1.Курс / Валюты1.Кратность, 0)
| КОНЕЦ КАК Размер,
| ВЫБОР
| КОГДА СписокНачислений.Показатель1 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель1
| ИНАЧЕ СписокНачислений.Показатель1 * ЕСТЬNULL(Валюты1.Курс / Валюты1.Кратность, 0)
| КОНЕЦ КАК Результат,
| ВЫБОР
| КОГДА СписокНачислений.Показатель1 ЕСТЬ NULL
| ТОГДА 0
| КОГДА СписокНачислений.ДокументОснование.КодВычета <> ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код405)
| ТОГДА 0
| КОГДА СписокНачислений.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА СписокНачислений.Показатель1 * ЕСТЬNULL(СведенияОСкидках.НормативЗатрат, 0) / 100
| ИНАЧЕ СписокНачислений.Показатель1 * ЕСТЬNULL(Валюты1.Курс / Валюты1.Кратность, 0) * ЕСТЬNULL(СведенияОСкидках.НормативЗатрат, 0) / 100
| КОНЕЦ КАК СуммаВычета
|ИЗ
| (ВЫБРАТЬ
| Работники.Сотрудник КАК Сотрудник,
| Работники.Сотрудник.Физлицо КАК СотрудникФизлицо,
| Работники.Сотрудник.Наименование КАК СотрудникНаименование,
| НачисленияРаботниковОрганизации.ДокументОснование КАК ДокументОснование,
| НачисленияРаботниковОрганизации.ВидРасчета КАК ВидРасчета,
| Работники.Подходит КАК Подходит,
| НачисленияРаботниковОрганизации.Период КАК ПериодНачисления,
| МИНИМУМ(ДатыОкончанияНачисленияРаботниковОрганизации.ДатаОкончания) КАК ДатаОкончания,
| НачисленияРаботниковОрганизации.Показатель1 КАК Показатель1,
| НачисленияРаботниковОрганизации.Валюта1 КАК Валюта1
| ИЗ
| ВТДвиженияРаботников КАК Работники
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| НачисленияРаботниковОрганизации.Период КАК Период,
| НачисленияРаботниковОрганизации.ВидРасчетаИзмерение КАК ВидРасчета,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Показатель1Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Показатель1
| КОНЕЦ КАК Показатель1,
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.Валюта1Завершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Валюта1
| КОНЕЦ КАК Валюта1,
| НачисленияРаботниковОрганизации.ДокументОснование КАК ДокументОснование,
| НачисленияРаботниковОрганизации.Сотрудник КАК Сотрудник
| ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(
| &парамНачало,
| ДокументОснование <> ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| И Сотрудник В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ДвиженияРаботников.Сотрудник
| ИЗ
| ВТСписокРаботников КАК ДвиженияРаботников)) КАК НачисленияРаботниковОрганизации
| ГДЕ
| ВЫБОР
| КОГДА НачисленияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И НачисленияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА НачисленияРаботниковОрганизации.ДействиеЗавершения
| ИНАЧЕ НачисленияРаботниковОрганизации.Действие
| КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| НачисленияРаботниковОрганизации.Период,
| НачисленияРаботниковОрганизации.ВидРасчетаИзмерение,
| НачисленияРаботниковОрганизации.Показатель1,
| НачисленияРаботниковОрганизации.Валюта1,
| НачисленияРаботниковОрганизации.ДокументОснование,
| НачисленияРаботниковОрганизации.Сотрудник
| ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО НачисленияРаботниковОрганизации.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
| ГДЕ
| НачисленияРаботниковОрганизации.Период > &парамНачало
| И НачисленияРаботниковОрганизации.Период <= &парамКонец
| И НачисленияРаботниковОрганизации.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| НачисленияРаботниковОрганизации.ПериодЗавершения,
| НачисленияРаботниковОрганизации.ВидРасчетаИзмерение,
| НачисленияРаботниковОрганизации.Показатель1Завершения,
| НачисленияРаботниковОрганизации.Валюта1Завершения,
| НачисленияРаботниковОрганизации.ДокументОснование,
| НачисленияРаботниковОрганизации.Сотрудник
| ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО НачисленияРаботниковОрганизации.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковПроверка
| ПО НачисленияРаботниковОрганизации.Сотрудник = НачисленияРаботниковПроверка.Сотрудник
| И НачисленияРаботниковОрганизации.ВидРасчетаИзмерение = НачисленияРаботниковПроверка.ВидРасчетаИзмерение
| И НачисленияРаботниковОрганизации.ДокументОснование = НачисленияРаботниковПроверка.ДокументОснование
| И (НачисленияРаботниковПроверка.Период > НачисленияРаботниковОрганизации.Период)
| И (НачисленияРаботниковПроверка.Период <= НачисленияРаботниковОрганизации.ПериодЗавершения)
| ГДЕ
| НачисленияРаботниковОрганизации.ПериодЗавершения МЕЖДУ &парамНачало И &парамКонец
| И НачисленияРаботниковОрганизации.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.ДействиеЗавершения <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
| И НачисленияРаботниковПроверка.Сотрудник ЕСТЬ NULL ) КАК НачисленияРаботниковОрганизации
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ДОБАВИТЬКДАТЕ(НачисленияРаботниковОрганизации.Период, ДЕНЬ, -1) КАК ДатаОкончания,
| НачисленияРаботниковОрганизации.ВидРасчетаИзмерение КАК ВидРасчетаИзмерение,
| НачисленияРаботниковОрганизации.ДокументОснование КАК ДокументОснование,
| НачисленияРаботниковОрганизации.Сотрудник КАК Сотрудник
| ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО НачисленияРаботниковОрганизации.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
| ГДЕ
| НачисленияРаботниковОрганизации.Период >= &парамНачало
| И НачисленияРаботниковОрганизации.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ВЫБОР
| КОГДА ДОБАВИТЬКДАТЕ(НачисленияРаботниковОрганизации.ПериодЗавершения, ДЕНЬ, -1) > &парамКонец
| ТОГДА &парамКонец
| ИНАЧЕ ДОБАВИТЬКДАТЕ(НачисленияРаботниковОрганизации.ПериодЗавершения, ДЕНЬ, -1)
| КОНЕЦ,
| НачисленияРаботниковОрганизации.ВидРасчетаИзмерение,
| НачисленияРаботниковОрганизации.ДокументОснование,
| НачисленияРаботниковОрганизации.Сотрудник
| ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДвиженияРаботников КАК ТаблицаДвиженийРаботников
| ПО НачисленияРаботниковОрганизации.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций КАК НачисленияРаботниковПроверка
| ПО НачисленияРаботниковОрганизации.Сотрудник = НачисленияРаботниковПроверка.Сотрудник
| И НачисленияРаботниковОрганизации.ВидРасчетаИзмерение = НачисленияРаботниковПроверка.ВидРасчетаИзмерение
| И НачисленияРаботниковОрганизации.ДокументОснование = НачисленияРаботниковПроверка.ДокументОснование
| И (НачисленияРаботниковПроверка.Период > НачисленияРаботниковОрганизации.Период)
| И (НачисленияРаботниковПроверка.Период <= НачисленияРаботниковОрганизации.ПериодЗавершения)
| ГДЕ
| НачисленияРаботниковОрганизации.ПериодЗавершения >= &парамНачало
| И НачисленияРаботниковОрганизации.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| И НачисленияРаботниковОрганизации.ДействиеЗавершения <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать)
| И НачисленияРаботниковПроверка.Сотрудник ЕСТЬ NULL ) КАК ДатыОкончанияНачисленияРаботниковОрганизации
| ПО НачисленияРаботниковОрганизации.Сотрудник = ДатыОкончанияНачисленияРаботниковОрганизации.Сотрудник
| И НачисленияРаботниковОрганизации.ВидРасчета = ДатыОкончанияНачисленияРаботниковОрганизации.ВидРасчетаИзмерение
| И НачисленияРаботниковОрганизации.ДокументОснование = ДатыОкончанияНачисленияРаботниковОрганизации.ДокументОснование
| И НачисленияРаботниковОрганизации.Период <= ДатыОкончанияНачисленияРаботниковОрганизации.ДатаОкончания
| ПО (Работники.Подходит)
| И Работники.Сотрудник = НачисленияРаботниковОрганизации.Сотрудник
|
| СГРУППИРОВАТЬ ПО
| Работники.Сотрудник,
| Работники.Сотрудник.Физлицо,
| Работники.Сотрудник.Наименование,
| Работники.Подходит,
| НачисленияРаботниковОрганизации.ДокументОснование,
| НачисленияРаботниковОрганизации.ВидРасчета,
| НачисленияРаботниковОрганизации.Период,
| НачисленияРаботниковОрганизации.Показатель1,
| НачисленияРаботниковОрганизации.Валюта1) КАК СписокНачислений
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты1
| ПО (Валюты1.Период = &парамДатаВалютногоУчета)
| И СписокНачислений.Валюта1 = Валюты1.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисления.Сотрудник КАК Сотрудник,
| ОсновныеНачисления.ПериодРегистрации КАК ПериодРегистрации,
| ОсновныеНачисления.ДокументОснование КАК ДокументОснование
| ИЗ
| РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисления
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК ТаблицаДвиженийРаботников
| ПО ОсновныеНачисления.Сотрудник = ТаблицаДвиженийРаботников.Сотрудник
| ГДЕ
| ОсновныеНачисления.ПериодРегистрации = &парамПериодРегистрации
| И ОсновныеНачисления.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| И ОсновныеНачисления.Регистратор <> &парамРегистратор
| И (НЕ ОсновныеНачисления.Сторно)
| И ОсновныеНачисления.ОбособленноеПодразделение = &парамОрганизация) КАК ОсновныеНачисления
| ПО СписокНачислений.Сотрудник = ОсновныеНачисления.Сотрудник
| И СписокНачислений.ДокументОснование = ОсновныеНачисления.ДокументОснование
| И СписокНачислений.ПериодНачисления = ОсновныеНачисления.ПериодРегистрации
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НДФЛВычетыПоДоходам.СрезПоследних(&парамНачало, ) КАК СведенияОСкидках
| ПО СписокНачислений.ВидРасчета.КодДоходаНДФЛ = СведенияОСкидках.КодДохода
|ГДЕ
| СписокНачислений.Подходит
| И ВЫБОР
| КОГДА СписокНачислений.ДокументОснование ЕСТЬ NULL
| ТОГДА ЛОЖЬ
| КОГДА СписокНачислений.ДокументОснование.Организация = &парамОрганизация
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
| И ВЫБОР
| КОГДА &ЭтоПерерасчет
| ТОГДА ИСТИНА
| КОГДА ОсновныеНачисления.Сотрудник ЕСТЬ NULL
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|
|УПОРЯДОЧИТЬ ПО
| СотрудникНаименование,
| ДокументОснование,
| ДатаНачала";

Запрос.Текст = ОсновнойТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();

Если МассивСотрудники = Неопределено Тогда
ДоговорыНаВыполнениеРабот.Загрузить(РезультатЗапроса.Выгрузить());
Для каждого СтрокаТЧ Из ДоговорыНаВыполнениеРабот Цикл
РаботникиДляРасчетаНДФЛ.Вставить(СтрокаТЧ.Физлицо, 0);
КонецЦикла;
ЗаполнитьОтражениеДоговоров();
Иначе
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = ДоговорыНаВыполнениеРабот.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока,Выборка);
ЗаполнитьОтражениеДоговора(НоваяСтрока);
РаботникиДляРасчетаНДФЛ.Вставить(НоваяСтрока.Физлицо, 0);
КонецЦикла;
КонецЕсли;

// Очистим необходимость перезаполнения по заполненным работникам
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СписокРаботников.Сотрудник
|ИЗ
| ВТСписокРаботников КАК СписокРаботников";
ПроведениеРасчетов.УдалитьСведенияОПерезаполненииДокумента(Ссылка,Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Сотрудник"));

КонецЕсли;

// АВТОЗАПОЛНЕНИЕ ТЧ "Удержания"
Если (ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет И Не ЗначениеЗаполнено(ПерерассчитываемыйДокумент)) ИЛИ
ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетУдержаний Тогда

ТекстЗапросаУдержаний =
"ВЫБРАТЬ
| УдержанияРаботниковОрганизации.Физлицо КАК Физлицо,
| УдержанияРаботниковОрганизации.Период КАК Период,
| УдержанияРаботниковОрганизации.ВидРасчета КАК ВидРасчета,
| УдержанияРаботниковОрганизации.Действие КАК Действие,
| УдержанияРаботниковОрганизации.ДокументОснование КАК ДокументОснование,
| УдержанияРаботниковОрганизации.Валюта1 КАК Валюта1,
| УдержанияРаботниковОрганизации.Валюта2 КАК Валюта2,
| УдержанияРаботниковОрганизации.Валюта3 КАК Валюта3,
| УдержанияРаботниковОрганизации.Валюта4 КАК Валюта4,
| УдержанияРаботниковОрганизации.Валюта5 КАК Валюта5,
| УдержанияРаботниковОрганизации.Валюта6 КАК Валюта6,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА 1
| ИНАЧЕ Валюты1.Курс
| КОНЕЦ КАК КурсВалюты1,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Валюта2 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА 1
| ИНАЧЕ Валюты2.Курс
| КОНЕЦ КАК КурсВалюты2,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Валюта3 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА 1
| ИНАЧЕ Валюты3.Курс
| КОНЕЦ КАК КурсВалюты3,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Валюта4 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА 1
| ИНАЧЕ Валюты4.Курс
| КОНЕЦ КАК КурсВалюты4,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Валюта5 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА 1
| ИНАЧЕ Валюты5.Курс
| КОНЕЦ КАК КурсВалюты5,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Валюта6 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА 1
| ИНАЧЕ Валюты6.Курс
| КОНЕЦ КАК КурсВалюты6,
| ВЫБОР
| КОГДА Показатели.Показатель1 ЕСТЬ НЕ NULL
| И Показатели.Показатель1 <> 0
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ТОГДА Показатели.Показатель1
| КОГДА УдержанияРаботниковОрганизации.Показатель1 ЕСТЬ NULL
| ИЛИ УдержанияРаботниковОрганизации.Показатель1 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 1
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| ИНАЧЕ ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Показатель1 ЕСТЬ NULL
| ТОГДА 0
| КОГДА УдержанияРаботниковОрганизации.ВидРасчета.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ИЛИ УдержанияРаботниковОрганизации.Валюта1 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА УдержанияРаботниковОрганизации.Показатель1
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель1 * ЕСТЬNULL(Валюты1.Курс / Валюты1.Кратность, 0)
| КОНЕЦ
| КОНЕЦ КАК Показатель1,
| ВЫБОР
| КОГДА Показатели.Показатель2 ЕСТЬ НЕ NULL
| И Показатели.Показатель2 <> 0
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ТОГДА Показатели.Показатель2
| КОГДА УдержанияРаботниковОрганизации.Показатель2 ЕСТЬ NULL
| ИЛИ УдержанияРаботниковОрганизации.Показатель2 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 2
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| ИНАЧЕ ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Показатель2 ЕСТЬ NULL
| ТОГДА 0
| КОГДА УдержанияРаботниковОрганизации.ВидРасчета.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ИЛИ УдержанияРаботниковОрганизации.Валюта2 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА УдержанияРаботниковОрганизации.Показатель2
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель2 * ЕСТЬNULL(Валюты2.Курс / Валюты2.Кратность, 0)
| КОНЕЦ
| КОНЕЦ КАК Показатель2,
| ВЫБОР
| КОГДА Показатели.Показатель3 ЕСТЬ НЕ NULL
| И Показатели.Показатель3 <> 0
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ТОГДА Показатели.Показатель3
| КОГДА УдержанияРаботниковОрганизации.Показатель3 ЕСТЬ NULL
| ИЛИ УдержанияРаботниковОрганизации.Показатель3 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 3
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| ИНАЧЕ ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Показатель3 ЕСТЬ NULL
| ТОГДА 0
| КОГДА УдержанияРаботниковОрганизации.ВидРасчета.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ИЛИ УдержанияРаботниковОрганизации.Валюта3 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА УдержанияРаботниковОрганизации.Показатель3
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель3 * ЕСТЬNULL(Валюты3.Курс / Валюты3.Кратность, 0)
| КОНЕЦ
| КОНЕЦ КАК Показатель3,
| ВЫБОР
| КОГДА Показатели.Показатель4 ЕСТЬ НЕ NULL
| И Показатели.Показатель4 <> 0
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ТОГДА Показатели.Показатель4
| КОГДА УдержанияРаботниковОрганизации.Показатель4 ЕСТЬ NULL
| ИЛИ УдержанияРаботниковОрганизации.Показатель4 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 4
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| ИНАЧЕ ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Показатель4 ЕСТЬ NULL
| ТОГДА 0
| КОГДА УдержанияРаботниковОрганизации.ВидРасчета.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ИЛИ УдержанияРаботниковОрганизации.Валюта4 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА УдержанияРаботниковОрганизации.Показатель4
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель4 * ЕСТЬNULL(Валюты4.Курс / Валюты4.Кратность, 0)
| КОНЕЦ
| КОНЕЦ КАК Показатель4,
| ВЫБОР
| КОГДА Показатели.Показатель5 ЕСТЬ НЕ NULL
| И Показатели.Показатель5 <> 0
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ТОГДА Показатели.Показатель5
| КОГДА УдержанияРаботниковОрганизации.Показатель5 ЕСТЬ NULL
| ИЛИ УдержанияРаботниковОрганизации.Показатель5 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 5
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| ИНАЧЕ ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Показатель5 ЕСТЬ NULL
| ТОГДА 0
| КОГДА УдержанияРаботниковОрганизации.ВидРасчета.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ИЛИ УдержанияРаботниковОрганизации.Валюта5 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА УдержанияРаботниковОрганизации.Показатель5
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель5 * ЕСТЬNULL(Валюты5.Курс / Валюты5.Кратность, 0)
| КОНЕЦ
| КОНЕЦ КАК Показатель5,
| ВЫБОР
| КОГДА Показатели.Показатель6 ЕСТЬ НЕ NULL
| И Показатели.Показатель6 <> 0
| ИЛИ ЗначенияВводимыхКадровыхПоказателей.ПоказательВозможностьИзменения = ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
| ТОГДА Показатели.Показатель6
| КОГДА УдержанияРаботниковОрганизации.Показатель6 ЕСТЬ NULL
| ИЛИ УдержанияРаботниковОрганизации.Показатель6 = 0
| И ЗначенияВводимыхКадровыхПоказателей.Показатель <> ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| И ЗначенияВводимыхКадровыхПоказателей.Показатель ЕСТЬ НЕ NULL
| И ЗначенияВводимыхКадровыхПоказателей.НомерСтроки = 6
| ТОГДА ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя
| ИНАЧЕ ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.Показатель6 ЕСТЬ NULL
| ТОГДА 0
| КОГДА УдержанияРаботниковОрганизации.ВидРасчета.СпособРасчета В (&парамМассивСпособовРасчетовБезВалюты)
| ИЛИ УдержанияРаботниковОрганизации.Валюта6 В (&парамВалютаРегламентУчета, ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка))
| ТОГДА УдержанияРаботниковОрганизации.Показатель6
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель6 * ЕСТЬNULL(Валюты6.Курс / Валюты6.Кратность, 0)
| КОНЕЦ
| КОНЕЦ КАК Показатель6,
| УдержанияРаботниковОрганизации.Физлицо.Наименование КАК ФизлицоНаименование
|ИЗ
| (ВЫБРАТЬ
| &парамНачало КАК Период,
| УдержанияРаботниковОрганизации.ВидРасчета КАК ВидРасчета,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.ДействиеЗавершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Действие
| КОНЕЦ КАК Действие,
| УдержанияРаботниковОрганизации.ДокументОснование КАК ДокументОснование,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Показатель1Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель1
| КОНЕЦ КАК Показатель1,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Показатель2Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель2
| КОНЕЦ КАК Показатель2,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Показатель3Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель3
| КОНЕЦ КАК Показатель3,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Показатель4Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель4
| КОНЕЦ КАК Показатель4,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Показатель5Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель5
| КОНЕЦ КАК Показатель5,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Показатель6Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Показатель6
| КОНЕЦ КАК Показатель6,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Валюта1Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Валюта1
| КОНЕЦ КАК Валюта1,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Валюта2Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Валюта2
| КОНЕЦ КАК Валюта2,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Валюта3Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Валюта3
| КОНЕЦ КАК Валюта3,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Валюта4Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Валюта4
| КОНЕЦ КАК Валюта4,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Валюта5Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Валюта5
| КОНЕЦ КАК Валюта5,
| ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА УдержанияРаботниковОрганизации.Валюта6Завершения
| ИНАЧЕ УдержанияРаботниковОрганизации.Валюта6
| КОНЕЦ КАК Валюта6,
| УдержанияРаботниковОрганизации.ФизЛицо КАК Физлицо
| ИЗ
| РегистрСведений.ПлановыеУдержанияРаботниковОрганизаций.СрезПоследних(
| &парамНачало,
| Организация = &парамГоловнаяОрганизация
| И ФизЛицо В
| (ВЫБРАТЬ
| СписокРаботников.ФизЛицо
| ИЗ
| ВТСписокРаботников КАК СписокРаботников)) КАК УдержанияРаботниковОрганизации
| ГДЕ
| УдержанияРаботниковОрганизации.Действие <> ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Прекратить)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| УдержанияРаботниковОрганизации.Период,
| УдержанияРаботниковОрганизации.ВидРасчета,
| УдержанияРаботниковОрганизации.Действие,
| УдержанияРаботниковОрганизации.ДокументОснование,
| УдержанияРаботниковОрганизации.Показатель1,
| УдержанияРаботниковОрганизации.Показатель2,
| УдержанияРаботниковОрганизации.Показатель3,
| УдержанияРаботниковОрганизации.Показатель4,
| УдержанияРаботниковОрганизации.Показатель5,
| УдержанияРаботниковОрганизации.Показатель6,
| УдержанияРаботниковОрганизации.Валюта1,
| УдержанияРаботниковОрганизации.Валюта2,
| УдержанияРаботниковОрганизации.Валюта3,
| УдержанияРаботниковОрганизации.Валюта4,
| УдержанияРаботниковОрганизации.Валюта5,
| УдержанияРаботниковОрганизации.Валюта6,
| УдержанияРаботниковОрганизации.ФизЛицо
| ИЗ
| РегистрСведений.ПлановыеУдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК СписокРаботников
| ПО УдержанияРаботниковОрганизации.ФизЛицо = СписокРаботников.Физлицо
| ГДЕ
| УдержанияРаботниковОрганизации.Период > &парамНачало
| И УдержанияРаботниковОрганизации.Период <= &парамКонец
| И УдержанияРаботниковОрганизации.Организация = &парамГоловнаяОрганизация
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| УдержанияРаботниковОрганизации.ПериодЗавершения,
| УдержанияРаботниковОрганизации.ВидРасчета,
| УдержанияРаботниковОрганизации.ДействиеЗавершения,
| УдержанияРаботниковОрганизации.ДокументОснование,
| УдержанияРаботниковОрганизации.Показатель1Завершения,
| УдержанияРаботниковОрганизации.Показатель2Завершения,
| УдержанияРаботниковОрганизации.Показатель3Завершения,
| УдержанияРаботниковОрганизации.Показатель4Завершения,
| УдержанияРаботниковОрганизации.Показатель5Завершения,
| УдержанияРаботниковОрганизации.Показатель6Завершения,
| УдержанияРаботниковОрганизации.Валюта1Завершения,
| УдержанияРаботниковОрганизации.Валюта2Завершения,
| УдержанияРаботниковОрганизации.Валюта3Завершения,
| УдержанияРаботниковОрганизации.Валюта4Завершения,
| УдержанияРаботниковОрганизации.Валюта5Завершения,
| УдержанияРаботниковОрганизации.Валюта6Завершения,
| УдержанияРаботниковОрганизации.ФизЛицо
| ИЗ
| РегистрСведений.ПлановыеУдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизации
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТСписокРаботников КАК СписокРаботников
| ПО УдержанияРаботниковОрганизации.ФизЛицо = СписокРаботников.Физлицо
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПлановыеУдержанияРаботниковОрганизаций КАК УдержанияРаботниковОрганизацииПроверка
| ПО (УдержанияРаботниковОрганизацииПроверка.Организация = УдержанияРаботниковОрганизации.Организация)
| И (УдержанияРаботниковОрганизацииПроверка.ФизЛицо = УдержанияРаботниковОрганизации.ФизЛицо)
| И (УдержанияРаботниковОрганизацииПроверка.ВидРасчета = УдержанияРаботниковОрганизации.ВидРасчета)
| И (УдержанияРаботниковОрганизацииПроверка.ДокументОснование = УдержанияРаботниковОрганизации.ДокументОснование)
| И (УдержанияРаботниковОрганизацииПроверка.Период > УдержанияРаботниковОрганизации.Период)
| И (УдержанияРаботниковОрганизацииПроверка.Период <= УдержанияРаботниковОрганизации.ПериодЗавершения)
| ГДЕ
| УдержанияРаботниковОрганизации.ПериодЗавершения >= &парамНачало
| И УдержанияРаботниковОрганизации.ПериодЗавершения <= &парамКонец
| И УдержанияРаботниковОрганизации.Организация = &парамГоловнаяОрганизация
| И УдержанияРаботниковОрганизацииПроверка.ФизЛицо ЕСТЬ NULL ) КАК УдержанияРаботниковОрганизации
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты1
| ПО (Валюты1.Период = &парамДатаВалютногоУчета)
| И УдержанияРаботниковОрганизации.Валюта1 = Валюты1.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты2
| ПО (Валюты2.Период = &парамДатаВалютногоУчета)
| И УдержанияРаботниковОрганизации.Валюта2 = Валюты2.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты3
| ПО (Валюты3.Период = &парамДатаВалютногоУчета)
| И УдержанияРаботниковОрганизации.Валюта3 = Валюты3.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты4
| ПО (Валюты4.Период = &парамДатаВалютногоУчета)
| И УдержанияРаботниковОрганизации.Валюта4 = Валюты4.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты5
| ПО (Валюты5.Период = &парамДатаВалютногоУчета)
| И УдержанияРаботниковОрганизации.Валюта5 = Валюты5.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалютДляРасчетовСПерсоналом КАК Валюты6
| ПО (Валюты6.Период = &парамДатаВалютногоУчета)
| И УдержанияРаботниковОрганизации.Валюта6 = Валюты6.Валюта
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПоказатели КАК Показатели
| ПО УдержанияРаботниковОрганизации.Физлицо = Показатели.Сотрудник.Физлицо
| И УдержанияРаботниковОрганизации.ВидРасчета = Показатели.ВидРасчета
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| НеВводимыеПоказатели.Ссылка КАК Ссылка,
| НеВводимыеПоказатели.НомерСтроки КАК НомерСтроки,
| НеВводимыеПоказатели.Показатель КАК Показатель,
| НеВводимыеПоказатели.Показатель.ВозможностьИзменения КАК ПоказательВозможностьИзменения,
| СУММА(ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя) КАК ЗначениеПоказателя,
| ЗначенияВводимыхКадровыхПоказателей.Сотрудник.ФизЛицо КАК ФизЛицо,
| ЗначенияВводимыхКадровыхПоказателей.Период КАК Период
| ИЗ
| ВТНеЗапрашиваемыеПриКадровыхПеремещениях КАК НеВводимыеПоказатели
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТЗначенияВводимыхКадровыхПоказателей КАК ЗначенияВводимыхКадровыхПоказателей
| ПО НеВводимыеПоказатели.Показатель = ЗначенияВводимыхКадровыхПоказателей.Показатель
| ГДЕ
| ЗначенияВводимыхКадровыхПоказателей.ЗначениеПоказателя <> 0
|
| СГРУППИРОВАТЬ ПО
| НеВводимыеПоказатели.Ссылка,
| НеВводимыеПоказатели.НомерСтроки,
| НеВводимыеПоказатели.Показатель,
| НеВводимыеПоказатели.Показатель.ВозможностьИзменения,
| ЗначенияВводимыхКадровыхПоказателей.Сотрудник.ФизЛицо,
| ЗначенияВводимыхКадровыхПоказателей.Период) КАК ЗначенияВводимыхКадровыхПоказателей
| ПО УдержанияРаботниковОрганизации.Физлицо = ЗначенияВводимыхКадровыхПоказателей.ФизЛицо
| И (КОНЕЦПЕРИОДА(УдержанияРаботниковОрганизации.Период, МЕСЯЦ) = КОНЕЦПЕРИОДА(ЗначенияВводимыхКадровыхПоказателей.Период, МЕСЯЦ))
| И УдержанияРаботниковОрганизации.ВидРасчета = ЗначенияВводимыхКадровыхПоказателей.Ссылка";

// если не перерасчет - проверяем проведенность в расчетном периоде
Если Не ЭтоПерерасчет Тогда
ТекстЗапросаУдержаний = ТекстЗапросаУдержаний + "
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| УдержанияРаботников.ФизЛицо КАК ФизЛицо,
| УдержанияРаботников.ВидРасчета КАК ВидРасчета,
| УдержанияРаботников.ДокументОснование КАК ДокументОснование
| ИЗ
| РегистрРасчета.УдержанияРаботниковОрганизаций КАК УдержанияРаботников
| ГДЕ
| УдержанияРаботников.ПериодРегистрации = &парамПериодРегистрации
| И УдержанияРаботников.ФизЛицо В
| (ВЫБРАТЬ
| СписокРаботников.Физлицо
| ИЗ
| ВТСписокРаботников КАК СписокРаботников)
| И УдержанияРаботников.ОбособленноеПодразделение = &парамОрганизация
| И УдержанияРаботников.Регистратор <> &парамРегистратор
| И НАЧАЛОПЕРИОДА(УдержанияРаботников.БазовыйПериодНачало, МЕСЯЦ) = &парамПериодРегистрации) КАК ЗарегистрированныеУдержанияРаботников
| ПО УдержанияРаботниковОрганизации.Физлицо = ЗарегистрированныеУдержанияРаботников.ФизЛицо
| И УдержанияРаботниковОрганизации.ВидРасчета = ЗарегистрированныеУдержанияРаботников.ВидРасчета
| И (ЗарегистрированныеУдержанияРаботников.ДокументОснование = ВЫБОР
| КОГДА УдержанияРаботниковОрганизации.ДокументОснование ССЫЛКА Документ.ИсполнительныйЛист
| ТОГДА УдержанияРаботниковОрганизации.ДокументОснование
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.ИсполнительныйЛист.ПустаяСсылка)
| КОНЕЦ)
|ГДЕ
| ЗарегистрированныеУдержанияРаботников.ФизЛицо ЕСТЬ NULL ";

КонецЕсли;

ТекстЗапросаУдержаний = ТекстЗапросаУдержаний + "
|
|УПОРЯДОЧИТЬ ПО
| ФизлицоНаименование,
| Физлицо,
| ДокументОснование,
| ВидРасчета,
| УдержанияРаботниковОрганизации.Период";

Запрос.Текст = ТекстЗапросаУдержаний;
УдержанияВыборка = Запрос.Выполнить().Выбрать();

ТЗУдержания = СформироватьТаблицуУдержаний(УдержанияВыборка, ОкончаниеПериодаЗаполнения, МассивВалютСНезаданнымКурсом);

Если МассивВалютСНезаданнымКурсом.Количество() > 0 Тогда
ТЗУдержания.Очистить();
КонецЕсли;

СтруктураПоиска = Новый Структура("Сторно,ФизЛицо,ВидРасчета,ДокументОснование,ДатаНачала", Ложь);
Для каждого СтрокаУдержания Из ТЗУдержания Цикл
ЗаполнитьЗначенияСвойств(СтруктураПоиска,СтрокаУдержания);
Если Удержания.НайтиСтроки(СтруктураПоиска).Количество() = 0 Тогда
ЗаполнитьЗначенияСвойств(Удержания.Добавить(),СтрокаУдержания)
КонецЕсли;
КонецЦикла;

КонецЕсли;

Если МассивВалютСНезаданнымКурсом.Количество() > 0 Тогда
МассивРасшифровки = Новый Массив;
МассивРасшифровки.Добавить("ОткрытьФормуСписка");
МассивРасшифровки.Добавить("РегистрыСведений.КурсыВалютДляРасчетовСПерсоналом");

Расшифровки = Новый Массив;
Расшифровки.Добавить(Новый Структура("Представление,Расшифровка", "Заполните курс валют" + " ", МассивРасшифровки));

Для Каждого КлючЗначение Из МассивВалютСНезаданнымКурсом Цикл
ОбщегоНазначения.ВывестиИнформациюОбОшибке("Для расчетного периода не задан курс валюты " + КлючЗначение.Ключ,,,Перечисления.ВидыСообщений.Ошибка, Расшифровки);
КонецЦикла;

Возврат Ложь;

КонецЕсли;


// АВТОЗАПОЛНЕНИЕ ТЧ "НДФЛ"
Если ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет ИЛИ
ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНДФЛ Тогда

Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| НДФЛСведенияОДоходах.ФизЛицо
|ИЗ
| РегистрНакопления.НДФЛСведенияОДоходах КАК НДФЛСведенияОДоходах
|ГДЕ
| НДФЛСведенияОДоходах.ФизЛицо В
| (ВЫБРАТЬ
| СписокРаботников.Физлицо
| ИЗ
| ВТСписокРаботников КАК СписокРаботников)
| И НДФЛСведенияОДоходах.ПериодРегистрации = &парамПериодРегистрации
| И НДФЛСведенияОДоходах.ОбособленноеПодразделение = &парамОрганизация
| И НДФЛСведенияОДоходах.Регистратор <> &Ссылка";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
РаботникиДляРасчетаНДФЛ.Вставить(Выборка.Физлицо, 0);
КонецЦикла;

// заполним НДФЛ
СтруктураПоиска = Новый Структура("ФизЛицо,МесяцНалоговогоПериода");
Для Каждого Элемент Из РаботникиДляРасчетаНДФЛ Цикл
СтруктураПоиска.ФизЛицо = Элемент.Ключ;
СтруктураПоиска.МесяцНалоговогоПериода = НачалоМесяца(ПериодРегистрации);
Если НДФЛ.НайтиСтроки(СтруктураПоиска).Количество() = 0 Тогда
ЗаполнитьЗначенияСвойств(НДФЛ.Добавить(),СтруктураПоиска)
КонецЕсли;
КонецЦикла;

КонецЕсли;

Возврат Истина;

КонецФункции

Функция ПолучитьДокументыРасчетаЗаВесьМесяц() Экспорт

Если ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца Тогда
// проверим, можно ли произвести расчет - поищем "мешающие" документы
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Запрос.УстановитьПараметр("ПериодРегистрации",ПериодРегистрации);
Запрос.УстановитьПараметр("СотрудникиОснНачислений", Начисления.ВыгрузитьКолонку("Сотрудник"));
Запрос.УстановитьПараметр("СотрудникиДопНачислений", ДополнительныеНачисления.ВыгрузитьКолонку("Сотрудник"));

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка,
| ПРЕДСТАВЛЕНИЕ(НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка) КАК Представление
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК НачислениеЗарплатыРаботникамОрганизацийНачисления
|ГДЕ
| НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.ПериодРегистрации = &ПериодРегистрации
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.ПериодНачисления = ЗНАЧЕНИЕ(Перечисление.ПериодНачисленияЗарплаты.ТекущийМесяц)
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка <> &Ссылка
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка.Проведен
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Сотрудник В(&СотрудникиОснНачислений)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Ссылка,
| ПРЕДСТАВЛЕНИЕ(НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Ссылка)
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДополнительныеНачисления КАК НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления
|ГДЕ
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Ссылка.ПериодРегистрации = &ПериодРегистрации
| И НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Ссылка.ПериодНачисления = ЗНАЧЕНИЕ(Перечисление.ПериодНачисленияЗарплаты.ТекущийМесяц)
| И НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Ссылка <> &Ссылка
| И НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Ссылка.Проведен
| И НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Сотрудник В(&СотрудникиДопНачислений)";

Возврат Запрос.Выполнить().Выгрузить()
Иначе
Возврат Новый Массив
КонецЕсли;

КонецФункции

// Заполняет документ-исправление по переданному списку сотрудников
//
Процедура ЗаполнитьПоПерерассчитываемомуДокументу(ИсходныйДокумент, Знач Сотрудники = Неопределено) Экспорт

ПерерассчитываемыйДокумент = ИсходныйДокумент.Ссылка;

Если ТипЗнч(ПерерассчитываемыйДокумент) = Тип("ДокументСсылка.НачислениеЗарплатыРаботникамОрганизаций") Тогда

// выполним заполнение по всем табличным частям документа
// и получим список сотрудников для перезаполнения

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("ПерерассчитываемыйДокумент", ПерерассчитываемыйДокумент);

Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);
Запрос.УстановитьПараметр("Сотрудники", Сотрудники);
Запрос.УстановитьПараметр("ПоВсемСотрудникам", Сотрудники = Неопределено);

Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Если Сотрудники = "ПоДаннымПерерасчета" Тогда

Исправления = ПроведениеРасчетов.ПолучитьДокументИсправление(ПерерассчитываемыйДокумент, "КритерийОтбора");
Запрос.УстановитьПараметр("Исправления", Исправления);

Запрос.Текст =
"ВЫБРАТЬ
| НачислениеЗарплатыРаботникамОрганизацийНачисления.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТСотрудникиИсправлений
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК НачислениеЗарплатыРаботникамОрганизацийНачисления
|ГДЕ
| НачислениеЗарплатыРаботникамОрганизацийНачисления.Ссылка В(&Исправления)
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.Сторно
| И НачислениеЗарплатыРаботникамОрганизацийНачисления.СторнируемыйДокумент = &ПерерассчитываемыйДокумент
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Сотрудник
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДополнительныеНачисления КАК НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления
|ГДЕ
| НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Ссылка В(&Исправления)
| И НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.Сторно
| И НачислениеЗарплатыРаботникамОрганизацийДополнительныеНачисления.СторнируемыйДокумент = &ПерерассчитываемыйДокумент
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.Сотрудник
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДоговорыНаВыполнениеРабот КАК НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот
|ГДЕ
| НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.Ссылка В(&Исправления)
| И НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.Сторно
| И НачислениеЗарплатыРаботникамОрганизацийДоговорыНаВыполнениеРабот.СторнируемыйДокумент = &ПерерассчитываемыйДокумент
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СотрудникиОрганизаций.Сотрудник,
| СотрудникиОрганизаций.Физлицо КАК Физлицо
|ПОМЕСТИТЬ ВТФизлицаПерерасчета
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК СотрудникиОрганизаций
|ГДЕ
| СотрудникиОрганизаций.Ссылка = &ПерерассчитываемыйДокумент
| И СотрудникиОрганизаций.Физлицо В
| (ВЫБРАТЬ
| Перерасчет.ФизЛицо
| ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ПерерасчетОсновныхНачислений КАК Перерасчет
| ГДЕ
| Перерасчет.ОбъектПерерасчета = &ПерерассчитываемыйДокумент
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаполнениеПлановыхНачислений.Сотрудник.Физлицо
| ИЗ
| РегистрСведений.ЗаполнениеПлановыхНачислений КАК ЗаполнениеПлановыхНачислений
| ГДЕ
| ЗаполнениеПлановыхНачислений.ОбъектЗаполнения = &ПерерассчитываемыйДокумент)
| И (НЕ СотрудникиОрганизаций.Сотрудник В
| (ВЫБРАТЬ
| Начисления.Сотрудник
| ИЗ
| ВТСотрудникиИсправлений КАК Начисления))
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| СотрудникиОрганизаций.Сотрудник,
| СотрудникиОрганизаций.Физлицо
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДополнительныеНачисления КАК СотрудникиОрганизаций
|ГДЕ
| СотрудникиОрганизаций.Ссылка = &ПерерассчитываемыйДокумент
| И СотрудникиОрганизаций.Физлицо В
| (ВЫБРАТЬ
| Перерасчет.ФизЛицо
| ИЗ
| РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций.ПерерасчетДополнительныхНачислений КАК Перерасчет
| ГДЕ
| Перерасчет.ОбъектПерерасчета = &ПерерассчитываемыйДокумент
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаполнениеПлановыхНачислений.Сотрудник.Физлицо
| ИЗ
| РегистрСведений.ЗаполнениеПлановыхНачислений КАК ЗаполнениеПлановыхНачислений
| ГДЕ
| ЗаполнениеПлановыхНачислений.ОбъектЗаполнения = &ПерерассчитываемыйДокумент)
| И (НЕ СотрудникиОрганизаций.Сотрудник В
| (ВЫБРАТЬ
| Начисления.Сотрудник
| ИЗ
| ВТСотрудникиИсправлений КАК Начисления))
|
|ИНДЕКСИРОВАТЬ ПО
| Физлицо";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ
| СотрудникиОрганизаций.Сотрудник
|ИЗ
| ВТФизлицаПерерасчета КАК СотрудникиОрганизаций";
Сотрудники = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Сотрудник");
Запрос.УстановитьПараметр("Сотрудники", Сотрудники);

ИначеЕсли Сотрудники <> Неопределено Тогда

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СотрудникиОрганизаций.Физлицо КАК Физлицо
|ПОМЕСТИТЬ ВТФизлицаПерерасчета
|ИЗ
| Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|ГДЕ
| СотрудникиОрганизаций.Ссылка В(&Сотрудники)
|
|ИНДЕКСИРОВАТЬ ПО
| Физлицо";
Запрос.Выполнить();

Иначе

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| НЕОПРЕДЕЛЕНО КАК Физлицо
|ПОМЕСТИТЬ ВТФизлицаПерерасчета";
Запрос.Выполнить();

КонецЕсли;

Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Сотрудник,
| Начисления.Физлицо,
| Начисления.ВидРасчета,
| Начисления.ДатаНачала,
| Начисления.ДатаОкончания,
| Начисления.Показатель1,
| Начисления.Показатель2,
| Начисления.Показатель3,
| Начисления.Показатель4,
| Начисления.Показатель5,
| Начисления.Показатель6,
| Начисления.ПодразделениеОрганизации,
| -Начисления.Результат - ЕСТЬNULL(СУММА(СторноНачисления.Результат), 0) КАК Результат,
| -Начисления.ОплаченоДнейЧасов - ЕСТЬNULL(СУММА(СторноНачисления.ОплаченоДнейЧасов), 0) КАК ОплаченоДнейЧасов,
| -Начисления.ОтработаноДней - ЕСТЬNULL(СУММА(СторноНачисления.ОтработаноДней), 0) КАК ОтработаноДней,
| -Начисления.ОтработаноЧасов - ЕСТЬNULL(СУММА(СторноНачисления.ОтработаноЧасов), 0) КАК ОтработаноЧасов,
| -Начисления.ОтработаноДнейПоПятидневке - ЕСТЬNULL(СУММА(СторноНачисления.ОтработаноДнейПоПятидневке), 0) КАК ОтработаноДнейПоПятидневке,
| -Начисления.ОтработаноЧасовПоПятидневке - ЕСТЬNULL(СУММА(СторноНачисления.ОтработаноЧасовПоПятидневке), 0) КАК ОтработаноЧасовПоПятидневке,
| -Начисления.НормаДней - ЕСТЬNULL(СУММА(СторноНачисления.НормаДней), 0) КАК НормаДней,
| -Начисления.НормаЧасов - ЕСТЬNULL(СУММА(СторноНачисления.НормаЧасов), 0) КАК НормаЧасов,
| -Начисления.НормаДнейПоПятидневке - ЕСТЬNULL(СУММА(СторноНачисления.НормаДнейПоПятидневке), 0) КАК НормаДнейПоПятидневке,
| -Начисления.НормаЧасовПоПятидневке - ЕСТЬNULL(СУММА(СторноНачисления.НормаЧасовПоПятидневке), 0) КАК НормаЧасовПоПятидневке,
| Начисления.ПериодРасчетаСреднегоЗаработкаНачало,
| Начисления.ПериодРасчетаСреднегоЗаработкаОкончание,
| Начисления.ДатаНачалаСобытия,
| ИСТИНА КАК Сторно,
| &ПерерассчитываемыйДокумент КАК СторнируемыйДокумент
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК Начисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК СторноНачисления
| ПО Начисления.Сотрудник = СторноНачисления.Сотрудник
| И Начисления.ВидРасчета = СторноНачисления.ВидРасчета
| И (СторноНачисления.ПериодДействияНачало МЕЖДУ Начисления.ДатаНачала И Начисления.ДатаОкончания)
| И (СторноНачисления.ПериодДействияКонец МЕЖДУ Начисления.ДатаНачала И Начисления.ДатаОкончания)
| И (СторноНачисления.ПериодРегистрации > Начисления.Ссылка.ПериодРегистрации)
| И (СторноНачисления.ПериодРегистрации <= &ПериодРегистрации)
| И (СторноНачисления.СторнируемыйДокумент = Начисления.Ссылка)
|ГДЕ
| Начисления.Ссылка = &ПерерассчитываемыйДокумент
| И (НЕ Начисления.Сторно)
| И (&ПоВсемСотрудникам
| ИЛИ Начисления.Сотрудник В (&Сотрудники))
| И Начисления.Ссылка.Проведен
|
|СГРУППИРОВАТЬ ПО
| Начисления.Сотрудник,
| Начисления.Физлицо,
| Начисления.ВидРасчета,
| Начисления.ДатаНачала,
| Начисления.ДатаОкончания,
| Начисления.Показатель1,
| Начисления.Показатель2,
| Начисления.Показатель3,
| Начисления.Показатель4,
| Начисления.Показатель5,
| Начисления.Показатель6,
| Начисления.ПодразделениеОрганизации,
| Начисления.ПериодРасчетаСреднегоЗаработкаНачало,
| Начисления.ПериодРасчетаСреднегоЗаработкаОкончание,
| Начисления.ДатаНачалаСобытия,
| Начисления.Результат,
| Начисления.ОплаченоДнейЧасов,
| Начисления.ОтработаноДней,
| Начисления.ОтработаноЧасов,
| Начисления.ОтработаноДнейПоПятидневке,
| Начисления.ОтработаноЧасовПоПятидневке,
| Начисления.НормаДней,
| Начисления.НормаЧасов,
| Начисления.НормаДнейПоПятидневке,
| Начисления.НормаЧасовПоПятидневке";

Выборка = Запрос.Выполнить().Выбрать();
Сотрудники = Новый Массив;
Пока Выборка.Следующий() Цикл
// сторно-строка
ЗаполнитьЗначенияСвойств(Начисления.Добавить(), Выборка);
Если Сотрудники.Найти(Выборка.Сотрудник) = Неопределено Тогда
Сотрудники.Добавить(Выборка.Сотрудник);
КонецЕсли;
КонецЦикла;
// выполним запрос к ДополнительныеНачисления
Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Сотрудник,
| Начисления.Физлицо,
| Начисления.ВидРасчета,
| Начисления.ДатаНачала,
| Начисления.ДатаОкончания,
| Начисления.Показатель1,
| Начисления.Показатель2,
| Начисления.Показатель3,
| Начисления.Показатель4,
| Начисления.Показатель5,
| Начисления.Показатель6,
| -Начисления.Результат КАК Результат,
| Начисления.ПодразделениеОрганизации,
| Начисления.КодВычета,
| ВЫБОР
| КОГДА Начисления.КодВычета = ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.МатпомощьПриРожденииРебенка)
| ТОГДА Начисления.СуммаВычета
| ИНАЧЕ -Начисления.СуммаВычета
| КОНЕЦ КАК СуммаВычета,
| Начисления.СуммаВычета КАК ИсходнаяСуммаВычета,
| ИСТИНА КАК Сторно,
| &ПерерассчитываемыйДокумент КАК СторнируемыйДокумент,
| Начисления.ДатаНачалаСобытия,
| Начисления.ПериодРасчетаСреднегоЗаработкаОкончание,
| Начисления.ПериодРасчетаСреднегоЗаработкаНачало,
| -Начисления.ОплаченоДнейЧасов КАК ОплаченоДнейЧасов
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДополнительныеНачисления КАК Начисления
|ГДЕ
| Начисления.Ссылка = &ПерерассчитываемыйДокумент
| И (НЕ Начисления.Сторно)
| И (&ПоВсемСотрудникам
| ИЛИ Начисления.Сотрудник В (&Сотрудники))
| И Начисления.Ссылка.Проведен";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// сторно-строка
ЗаполнитьЗначенияСвойств(ДополнительныеНачисления.Добавить(), Выборка);
// обычная строка
ОбычнаяСтрока = ДополнительныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(ОбычнаяСтрока,Выборка);
ОбычнаяСтрока.Сторно = Ложь;
ОбычнаяСтрока.Результат = -ОбычнаяСтрока.Результат;
ОбычнаяСтрока.ОплаченоДнейЧасов = -ОбычнаяСтрока.ОплаченоДнейЧасов;
ОбычнаяСтрока.СуммаВычета = Выборка.ИсходнаяСуммаВычета;
ОбычнаяСтрока.СторнируемыйДокумент = Неопределено;
Если Сотрудники.Найти(Выборка.Сотрудник) = Неопределено Тогда
Сотрудники.Добавить(Выборка.Сотрудник);
КонецЕсли;
КонецЦикла;

// выполним запрос к ДоговорыНаВыполнениеРабот
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ДоговорыНаВыполнениеРабот.Сотрудник,
| ДоговорыНаВыполнениеРабот.Физлицо,
| ДоговорыНаВыполнениеРабот.ВидРасчета,
| ДоговорыНаВыполнениеРабот.ДатаНачала,
| ДоговорыНаВыполнениеРабот.ДатаОкончания,
| ДоговорыНаВыполнениеРабот.Размер,
| ДоговорыНаВыполнениеРабот.ПодразделениеОрганизации,
| ДоговорыНаВыполнениеРабот.КодВычета,
| -ДоговорыНаВыполнениеРабот.СуммаВычета КАК СуммаВычета,
| -ДоговорыНаВыполнениеРабот.Результат КАК Результат,
| ИСТИНА КАК Сторно,
| &ПерерассчитываемыйДокумент КАК СторнируемыйДокумент,
| ДоговорыНаВыполнениеРабот.ДокументОснование,
| ДоговорыНаВыполнениеРабот.КОСГУ,
| ДоговорыНаВыполнениеРабот.СтатьяФинансирования,
| ДоговорыНаВыполнениеРабот.СтатьяРасходов
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДоговорыНаВыполнениеРабот КАК ДоговорыНаВыполнениеРабот
|ГДЕ
| ДоговорыНаВыполнениеРабот.Ссылка = &ПерерассчитываемыйДокумент
| И (НЕ ДоговорыНаВыполнениеРабот.Сторно)
| И (&ПоВсемСотрудникам
| ИЛИ ДоговорыНаВыполнениеРабот.Сотрудник В (&Сотрудники))
| И ДоговорыНаВыполнениеРабот.Ссылка.Проведен";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// сторно-строка
ЗаполнитьЗначенияСвойств(ДоговорыНаВыполнениеРабот.Добавить(), Выборка);
Если Сотрудники.Найти(Выборка.Сотрудник) = Неопределено Тогда
Сотрудники.Добавить(Выборка.Сотрудник);
КонецЕсли;
КонецЦикла;


// Таблицы отражения
ОтражениеВУчете.ЗаполнитьТЧОтраженияПоПерерассчитываемымСотрудникам(НачисленияПоИФ, ПерерассчитываемыйДокумент.НачисленияПоИФ, Сотрудники);
ОтражениеВУчете.ЗаполнитьТЧОтраженияПоПерерассчитываемымСотрудникам(ДополнительныеНачисленияПоИФ, ПерерассчитываемыйДокумент.ДополнительныеНачисленияПоИФ, Сотрудники);


ЗапросПериод = Новый Запрос;
ЗапросПериод.Текст =
"ВЫБРАТЬ
| НачислениеЗарплатыРаботникамОрганизаций.ПериодНачисленияДатаНачала,
| НачислениеЗарплатыРаботникамОрганизаций.ПериодНачисленияДатаОкончания,
| НачислениеЗарплатыРаботникамОрганизаций.Организация,
| НачислениеЗарплатыРаботникамОрганизаций.ПодразделениеОрганизации,
| НачислениеЗарплатыРаботникамОрганизаций.ВидОперации
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций КАК НачислениеЗарплатыРаботникамОрганизаций
|ГДЕ
| НачислениеЗарплатыРаботникамОрганизаций.Ссылка = &ПерерассчитываемыйДокумент";

ЗапросПериод.УстановитьПараметр("ПерерассчитываемыйДокумент", ПерерассчитываемыйДокумент);
Выборка = ЗапросПериод.Выполнить().Выбрать();
Выборка.Следующий();

ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПрошлыйПериод;
ЗаполнитьЗначенияСвойств(ЭтотОбъект,Выборка);

Иначе

ЗапросПериод = Новый Запрос;
ЗапросПериод.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ОсновныеНачисленияРаботниковОрганизаций.ПериодРегистрации
|ПОМЕСТИТЬ ВТПериод
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
|ГДЕ
| ОсновныеНачисленияРаботниковОрганизаций.Регистратор = &ПерерассчитываемыйДокумент
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ ПЕРВЫЕ 1
| НАЧАЛОПЕРИОДА(ДополнительныеНачисленияРаботниковОрганизаций.ПериодРегистрации, МЕСЯЦ)
|ИЗ
| РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисленияРаботниковОрганизаций
|ГДЕ
| ДополнительныеНачисленияРаботниковОрганизаций.Регистратор = &ПерерассчитываемыйДокумент
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПереносДанных.Организация,
| ПрошлыйПериод.ПериодРегистрации КАК ПериодНачисленияДатаНачала,
| КОНЕЦПЕРИОДА(ПрошлыйПериод.ПериодРегистрации, МЕСЯЦ) КАК ПериодНачисленияДатаОкончания
|ИЗ
| Документ.ПереносДанных КАК ПереносДанных
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПериод КАК ПрошлыйПериод
| ПО (ИСТИНА)
|ГДЕ
| ПереносДанных.Ссылка = &ПерерассчитываемыйДокумент";

ЗапросПериод.УстановитьПараметр("ПерерассчитываемыйДокумент", ПерерассчитываемыйДокумент);
Выборка = ЗапросПериод.Выполнить().Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(ЭтотОбъект,Выборка);
ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет;
ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПрошлыйПериод;

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("ПерерассчитываемыйДокумент", ПерерассчитываемыйДокумент);

Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);
Запрос.УстановитьПараметр("Сотрудники", Сотрудники);
Запрос.УстановитьПараметр("ПоВсемСотрудникам", Сотрудники = Неопределено);

Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

// временная таблица ВТФизлицаПерерасчета
Если Сотрудники <> Неопределено Тогда

ЗапросТекст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СотрудникиОрганизаций.Физлицо КАК Физлицо
|ПОМЕСТИТЬ ВТФизлицаПерерасчета
|ИЗ
| Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
|ГДЕ
| СотрудникиОрганизаций.Ссылка В(&Сотрудники)
|
|ИНДЕКСИРОВАТЬ ПО
| Физлицо";

Иначе

ЗапросТекст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| НЕОПРЕДЕЛЕНО КАК Физлицо
|ПОМЕСТИТЬ ВТФизлицаПерерасчета";

КонецЕсли;
Запрос.Текст = ЗапросТекст;
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Сотрудник,
| Начисления.ФизЛицо,
| Начисления.ВидРасчета,
| Начисления.ПериодДействияНачало КАК ДатаНачала,
| Начисления.ПериодДействияКонец КАК ДатаОкончания,
| Начисления.Показатель1,
| Начисления.Показатель2,
| Начисления.Показатель3,
| Начисления.Показатель4,
| Начисления.Показатель5,
| Начисления.Показатель6,
| Начисления.ПодразделениеОрганизации,
| -Начисления.Результат - ЕСТЬNULL(СУММА(СторноНачисления.Результат), 0) КАК Результат,
| -Начисления.ОплаченоДнейЧасов - ЕСТЬNULL(СУММА(СторноНачисления.ОплаченоДнейЧасов), 0) КАК ОплаченоДнейЧасов,
| -Начисления.ОтработаноДней - ЕСТЬNULL(СУММА(СторноНачисления.ОтработаноДней), 0) КАК ОтработаноДней,
| -Начисления.ОтработаноЧасов - ЕСТЬNULL(СУММА(СторноНачисления.ОтработаноЧасов), 0) КАК ОтработаноЧасов,
| -Начисления.ОтработаноДнейПоПятидневке - ЕСТЬNULL(СУММА(СторноНачисления.ОтработаноДнейПоПятидневке), 0) КАК ОтработаноДнейПоПятидневке,
| -Начисления.ОтработаноЧасовПоПятидневке - ЕСТЬNULL(СУММА(СторноНачисления.ОтработаноЧасовПоПятидневке), 0) КАК ОтработаноЧасовПоПятидневке,
| -Начисления.НормаДней - ЕСТЬNULL(СУММА(СторноНачисления.НормаДней), 0) КАК НормаДней,
| -Начисления.НормаЧасов - ЕСТЬNULL(СУММА(СторноНачисления.НормаЧасов), 0) КАК НормаЧасов,
| -Начисления.НормаДнейПоПятидневке - ЕСТЬNULL(СУММА(СторноНачисления.НормаДнейПоПятидневке), 0) КАК НормаДнейПоПятидневке,
| -Начисления.НормаЧасовПоПятидневке - ЕСТЬNULL(СУММА(СторноНачисления.НормаЧасовПоПятидневке), 0) КАК НормаЧасовПоПятидневке,
| Начисления.ПериодРасчетаСреднегоЗаработкаНачало,
| Начисления.ПериодРасчетаСреднегоЗаработкаОкончание,
| Начисления.ДатаНачалаСобытия,
| ИСТИНА КАК Сторно,
| Начисления.Регистратор КАК СторнируемыйДокумент
|ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК Начисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК СторноНачисления
| ПО Начисления.Сотрудник = СторноНачисления.Сотрудник
| И Начисления.ВидРасчета = СторноНачисления.ВидРасчета
| И (СторноНачисления.ПериодДействияНачало МЕЖДУ Начисления.ПериодДействияНачало И Начисления.ПериодДействияКонец)
| И (СторноНачисления.ПериодДействияКонец МЕЖДУ Начисления.ПериодДействияНачало И Начисления.ПериодДействияКонец)
| И (СторноНачисления.ПериодРегистрации > Начисления.ПериодРегистрации)
| И (СторноНачисления.ПериодРегистрации <= &ПериодРегистрации)
| И (СторноНачисления.СторнируемыйДокумент = Начисления.Регистратор)
|ГДЕ
| Начисления.Регистратор = &ПерерассчитываемыйДокумент
| И (НЕ Начисления.Сторно)
| И (&ПоВсемСотрудникам
| ИЛИ Начисления.Сотрудник В (&Сотрудники))
|
|СГРУППИРОВАТЬ ПО
| Начисления.Регистратор,
| Начисления.Сотрудник,
| Начисления.ФизЛицо,
| Начисления.ВидРасчета,
| Начисления.ПериодДействияНачало,
| Начисления.ПериодДействияКонец,
| Начисления.Показатель1,
| Начисления.Показатель2,
| Начисления.Показатель3,
| Начисления.Показатель4,
| Начисления.Показатель5,
| Начисления.Показатель6,
| Начисления.ПодразделениеОрганизации,
| Начисления.ПериодРасчетаСреднегоЗаработкаНачало,
| Начисления.ПериодРасчетаСреднегоЗаработкаОкончание,
| Начисления.ДатаНачалаСобытия,
| Начисления.Результат,
| Начисления.ОплаченоДнейЧасов,
| Начисления.ОтработаноДней,
| Начисления.ОтработаноЧасов,
| Начисления.ОтработаноДнейПоПятидневке,
| Начисления.ОтработаноЧасовПоПятидневке,
| Начисления.НормаДней,
| Начисления.НормаЧасов,
| Начисления.НормаДнейПоПятидневке,
| Начисления.НормаЧасовПоПятидневке";

Выборка = Запрос.Выполнить().Выбрать();
Сотрудники = Новый Массив;
Пока Выборка.Следующий() Цикл
// сторно-строка
ЗаполнитьЗначенияСвойств(Начисления.Добавить(), Выборка);
Если Сотрудники.Найти(Выборка.Сотрудник) = Неопределено Тогда
Сотрудники.Добавить(Выборка.Сотрудник);
КонецЕсли;
КонецЦикла;

Запрос.Текст =
"ВЫБРАТЬ
| Соответствие.КодВычета,
| Соответствие.КодДохода
|ПОМЕСТИТЬ ВТСоответствиеДоходовИВычетов
|ИЗ
| &ТаблицаСоответствияДоходовИВычетов КАК Соответствие";
Запрос.УстановитьПараметр("ТаблицаСоответствияДоходовИВычетов",ПроведениеРасчетов.ПолучитьТаблицуСоответствияДоходовИВычетов());
Запрос.Выполнить();

// выполним запрос к ДополнительныеНачисления
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеНачисления.Регистратор КАК Регистратор,
| ДополнительныеНачисления.Сотрудник КАК Сотрудник,
| ДополнительныеНачисления.ФизЛицо,
| ДополнительныеНачисления.ВидРасчета КАК ВидРасчета,
| ДополнительныеНачисления.БазовыйПериодНачало КАК ДатаНачала,
| ДополнительныеНачисления.БазовыйПериодКонец КАК ДатаОкончания,
| ДополнительныеНачисления.Показатель1,
| ДополнительныеНачисления.Показатель2,
| ДополнительныеНачисления.Показатель3,
| ДополнительныеНачисления.Показатель4,
| ДополнительныеНачисления.Показатель5,
| ДополнительныеНачисления.Показатель6,
| ДополнительныеНачисления.ПодразделениеОрганизации,
| ДополнительныеНачисления.Результат,
| ДополнительныеНачисления.ОплаченоДнейЧасов,
| ДополнительныеНачисления.СкидкаПриНалогообложении КАК СуммаВычета,
| ДополнительныеНачисления.ПериодРасчетаСреднегоЗаработкаНачало,
| ДополнительныеНачисления.ПериодРасчетаСреднегоЗаработкаОкончание,
| ДополнительныеНачисления.ДатаНачалаСобытия,
| ДополнительныеНачисления.ДокументОснование,
| ВЫБОР
| КОГДА ДополнительныеНачисления.ДокументОснование = ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)
| ТОГДА СоответствиеДоходовИВычетов.КодВычета
| ИНАЧЕ ДополнительныеНачисления.ДокументОснование.КодВычета
| КОНЕЦ КАК КодВычета
|ПОМЕСТИТЬ ВТСтрокиДополнительныхНачислений
|ИЗ
| РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСоответствиеДоходовИВычетов КАК СоответствиеДоходовИВычетов
| ПО ДополнительныеНачисления.ВидРасчета.КодДоходаНДФЛ = СоответствиеДоходовИВычетов.КодДохода
|ГДЕ
| (НЕ ДополнительныеНачисления.Сторно)
| И ДополнительныеНачисления.Регистратор = &ПерерассчитываемыйДокумент
| И (&ПоВсемСотрудникам
| ИЛИ ДополнительныеНачисления.Сотрудник В (&Сотрудники))
|
|ИНДЕКСИРОВАТЬ ПО
| ВидРасчета";
Запрос.Выполнить();

Запрос.Текст =
"ВЫБРАТЬ
| Начисления.Сотрудник,
| Начисления.Физлицо,
| Начисления.ВидРасчета,
| Начисления.ДатаНачала,
| Начисления.ДатаОкончания,
| Начисления.Показатель1,
| Начисления.Показатель2,
| Начисления.Показатель3,
| Начисления.Показатель4,
| Начисления.Показатель5,
| Начисления.Показатель6,
| -Начисления.Результат КАК Результат,
| Начисления.ПодразделениеОрганизации,
| Начисления.КодВычета,
| ВЫБОР
| КОГДА Начисления.КодВычета = ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.МатпомощьПриРожденииРебенка)
| ТОГДА Начисления.СуммаВычета
| ИНАЧЕ -Начисления.СуммаВычета
| КОНЕЦ КАК СуммаВычета,
| Начисления.СуммаВычета КАК ИсходнаяСуммаВычета,
| ИСТИНА КАК Сторно,
| Начисления.Регистратор КАК СторнируемыйДокумент,
| Начисления.ДатаНачалаСобытия,
| Начисления.ПериодРасчетаСреднегоЗаработкаОкончание,
| Начисления.ПериодРасчетаСреднегоЗаработкаНачало,
| -Начисления.ОплаченоДнейЧасов КАК ОплаченоДнейЧасов
|ИЗ
| ВТСтрокиДополнительныхНачислений КАК Начисления
|ГДЕ
| Начисления.ДокументОснование = ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// сторно-строка
ЗаполнитьЗначенияСвойств(ДополнительныеНачисления.Добавить(), Выборка);
// обычная строка
ОбычнаяСтрока = ДополнительныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(ОбычнаяСтрока,Выборка);
ОбычнаяСтрока.Сторно = Ложь;
ОбычнаяСтрока.Результат = -ОбычнаяСтрока.Результат;
ОбычнаяСтрока.ОплаченоДнейЧасов = -ОбычнаяСтрока.ОплаченоДнейЧасов;
ОбычнаяСтрока.СуммаВычета = Выборка.ИсходнаяСуммаВычета;
ОбычнаяСтрока.СторнируемыйДокумент = Неопределено;
Если Сотрудники.Найти(Выборка.Сотрудник) = Неопределено Тогда
Сотрудники.Добавить(Выборка.Сотрудник);
КонецЕсли;
КонецЦикла;

// выполним запрос к ДоговорыНаВыполнениеРабот
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ДоговорыНаВыполнениеРабот.Сотрудник,
| ДоговорыНаВыполнениеРабот.Физлицо,
| ДоговорыНаВыполнениеРабот.ВидРасчета,
| ДоговорыНаВыполнениеРабот.ДатаНачала,
| ДоговорыНаВыполнениеРабот.ДатаОкончания,
| ДоговорыНаВыполнениеРабот.Результат КАК Размер,
| ДоговорыНаВыполнениеРабот.ПодразделениеОрганизации,
| ДоговорыНаВыполнениеРабот.КодВычета,
| -ДоговорыНаВыполнениеРабот.СуммаВычета КАК СуммаВычета,
| -ДоговорыНаВыполнениеРабот.Результат КАК Результат,
| ИСТИНА КАК Сторно,
| ДоговорыНаВыполнениеРабот.Регистратор КАК СторнируемыйДокумент,
| ДоговорыНаВыполнениеРабот.ДокументОснование
|ИЗ
| ВТСтрокиДополнительныхНачислений КАК ДоговорыНаВыполнениеРабот
|ГДЕ
| ДоговорыНаВыполнениеРабот.ДокументОснование <> ЗНАЧЕНИЕ(Документ.ДоговорНаВыполнениеРаботСФизЛицом.ПустаяСсылка)";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// сторно-строка
ЗаполнитьЗначенияСвойств(ДоговорыНаВыполнениеРабот.Добавить(), Выборка);
Если Сотрудники.Найти(Выборка.Сотрудник) = Неопределено Тогда
Сотрудники.Добавить(Выборка.Сотрудник);
КонецЕсли;
КонецЦикла;
ЗаполнитьОтражениеДоговоров();

КонецЕсли;

ВыполнитьАвтозаполнение(ПериодНачисленияДатаНачала, ПериодНачисленияДатаОкончания, , Истина, , Сотрудники);

КонецПроцедуры // ЗаполнитьПоПерерассчитываемомуДокументу()

// Процедура выполняет автозаполнение табличных частей только по переданным сотрудникам,
// остальные строки табличных частей документа остаются нетронутыми.
//
// Параметры: МассивСотрудников - Массив сотрудников организации, по которым нужно сделать перезаполнение документа.
Процедура ВыполнитьПерезаполнениеДокумента(МассивСотрудников, МассивФизЛиц) Экспорт

// сохраним табличные данные в таблицы значений
ТаблицаНачисления = Начисления.Выгрузить();
ТаблицаДополнительныеНачисления = ДополнительныеНачисления.Выгрузить();
ТаблицаДоговорыНаВыполнениеРабот = ДоговорыНаВыполнениеРабот.Выгрузить();
ТаблицаУдержания = Удержания.Выгрузить();
ТаблицаНДФЛ = НДФЛ.Выгрузить();

// Удалим из таблиц сотрудников которых нужно перезаполнить.

// Удаляем из таблицы начисления
ИндексСтроки = ТаблицаНачисления.Количество()-1;
Пока ИндексСтроки >= 0 Цикл
Если МассивСотрудников.Найти(ТаблицаНачисления[ИндексСтроки].Сотрудник) <> Неопределено Тогда
ТаблицаНачисления.Удалить(ИндексСтроки);
КонецЕсли;
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;

// Удаляем из таблицы дополнительные начисления
ИндексСтроки = ТаблицаДополнительныеНачисления.Количество() - 1;
Пока ИндексСтроки >=0 Цикл
Если МассивСотрудников.Найти(ТаблицаДополнительныеНачисления[ИндексСтроки].Сотрудник) <> Неопределено Тогда
ТаблицаДополнительныеНачисления.Удалить(ИндексСтроки);
КонецЕсли;
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;

// Удаляем из таблицы договоры на выполнение работ
ИндексСтроки = ТаблицаДоговорыНаВыполнениеРабот.Количество() - 1;
Пока ИндексСтроки >=0 Цикл
Если МассивСотрудников.Найти(ТаблицаДоговорыНаВыполнениеРабот[ИндексСтроки].Сотрудник) <> Неопределено Тогда
ТаблицаДоговорыНаВыполнениеРабот.Удалить(ИндексСтроки);
КонецЕсли;
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;

// Удаляем из таблицы Удержания.
ИндексСтроки = ТаблицаУдержания.Количество() - 1;
Пока ИндексСтроки >=0 Цикл
Если МассивФизЛиц.Найти(ТаблицаУдержания[ИндексСтроки].ФизЛицо) <> Неопределено Тогда
ТаблицаУдержания.Удалить(ИндексСтроки);
КонецЕсли;
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;

// Удаляем из таблицы НДФЛ
ИндексСтроки = ТаблицаНДФЛ.Количество() - 1;
Пока ИндексСтроки >=0 Цикл
Если МассивФизЛиц.Найти(ТаблицаНДФЛ[ИндексСтроки].ФизЛицо) <> Неопределено Тогда
ТаблицаНДФЛ.Удалить(ИндексСтроки);
КонецЕсли;
ИндексСтроки = ИндексСтроки - 1;
КонецЦикла;

//Очищаем таблицы документа
ОчиститьТЧ();

// Выполняем автозаполенение и расчет
ВыполнитьАвтоЗаполнение(ПериодНачисленияДатаНачала,ПериодНачисленияДатаОкончания,,,,МассивСотрудников);
Записать();
РассчитатьВсе();

//Добавляем в документ сотрудников из временных таблиц значений
ДописатьСтрокиИзТаблицыВТаблицу(ТаблицаНачисления, Начисления);
ДописатьСтрокиИзТаблицыВТаблицу(ТаблицаДополнительныеНачисления, ДополнительныеНачисления);
ДописатьСтрокиИзТаблицыВТаблицу(ТаблицаНДФЛ, НДФЛ);
ДописатьСтрокиИзТаблицыВТаблицу(ТаблицаУдержания, Удержания);
Если Проведен Тогда
Записать(РежимЗаписиДокумента.Проведение);
Иначе
Записать();
КонецЕсли;

// удалять записи о перезаполнении из регистра не будем - они были удалены при автозаполнении

КонецПроцедуры // ВыполнитьПерезаполнениеПоВыбраннымСотрудникам()

// Процедура рассчитывает ресурсы для начислений
// и заполняет реквизит Результат соотвтествующих табличных частей документа
//
Функция РассчитатьНачисления(ШапкаДокумента = Неопределено, ВыборкаПоНачислениям = Неопределено, ВыборкаПоДопНачислениям = Неопределено, Физлицо = Неопределено, КомментироватьРасчет = Ложь) Экспорт

//массивы для хранения индексов строк табличных частей,
//используются для расчета по одному сотруднику
Если Физлицо = Неопределено Тогда
МассивИндексыСтрокНачисления = Неопределено;
МассивИндексыСтрокДополнительныеНачисления = Неопределено;
Иначе
МассивИндексыСтрокНачисления = Новый Массив();
МассивИндексыСтрокДополнительныеНачисления = Новый Массив();
КонецЕсли;

Отказ = Ложь;

Если ШапкаДокумента = Неопределено Тогда

// Перечитаем объект и соберем данные для заполнения наборов записей регистров
НачатьТранзакцию();
Прочитать();
ШапкаДокумента = ПолучитьШапкуДокумента();
ВыборкаПоНачислениям = СформироватьЗапросПоНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, Начисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
ВыборкаПоДопНачислениям = СформироватьЗапросПоДопНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, ДополнительныеНачисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
ЗафиксироватьТранзакцию();

КонецЕсли;


// Создадим рабочие наборы записей
НаборОсновныеНачисления = РегистрыРасчета.ОсновныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборОсновныеНачисления.Отбор.Регистратор.Значение = Ссылка;

НаборДопНачисления = РегистрыРасчета.ДополнительныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборДопНачисления.Отбор.Регистратор.Значение = Ссылка;

НаборРасчетСреднего = РегистрыРасчета.РасчетСреднегоЗаработка.СоздатьНаборЗаписей();
НаборРасчетСреднего.Отбор.Регистратор.Значение = Ссылка;

ЗаписиДоходовНДФЛ = РегистрыНакопления.НДФЛСведенияОДоходах.СоздатьНаборЗаписей();
ЗаписиДоходовНДФЛ.Отбор.Регистратор.Значение = Ссылка;

// Если встретим почасовое отклонение, то записываем движения в регистр ВнутрисменноеВремяРаботниковОрганизаций
НаборЗаписейРабочееВремя = РегистрыНакопления.ВнутрисменноеВремяРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборЗаписейРабочееВремя.Отбор.Регистратор.Значение = Ссылка;

Пока ВыборкаПоНачислениям.Следующий() Цикл
ПроверитьЗаполнениеСтрокиНачисления(ВыборкаПоНачислениям, Отказ);
Если НЕ Отказ Тогда
// Заполним записи в наборах записей регистров
ДобавитьСтрокуОсновныхНачислений(ВыборкаПоНачислениям, ШапкаДокумента, НаборОсновныеНачисления);
ДобавитьСтрокуРабочегоВремени(ВыборкаПоНачислениям, ШапкаДокумента, НаборЗаписейРабочееВремя);

Если НЕ (Физлицо = Неопределено) Тогда
МассивИндексыСтрокНачисления.Добавить(ВыборкаПоНачислениям.НомерСтроки-1);
КонецЕсли;

КонецЕсли;
КонецЦикла;

мСоответствиеДоходовИВычетов = ПроведениеРасчетов.ПолучитьСоответствиеДоходовИВычетов();
Пока ВыборкаПоДопНачислениям.Следующий() Цикл
ПроверитьЗаполнениеСтрокиДопНачисления(ВыборкаПоДопНачислениям, Отказ);
Если НЕ Отказ Тогда
// Заполним записи в наборах записей регистров
ДобавитьСтрокуДопНачислений(ВыборкаПоДопНачислениям, ШапкаДокумента, НаборДопНачисления);

Если НЕ Физлицо = Неопределено Тогда
МассивИндексыСтрокДополнительныеНачисления.Добавить(ВыборкаПоДопНачислениям.НомерСтроки-1);
КонецЕсли;

КонецЕсли;
КонецЦикла;

Если Отказ Тогда

// Удаляем движения
Для Каждого Набор Из Движения Цикл
Если ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.ОсновныеНачисленияРаботниковОрганизаций") Тогда
// Удаляем движения
Набор.Очистить();
Набор.Записать(Истина, Ложь, Истина, Ложь);
ИначеЕсли ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.ДополнительныеНачисленияРаботниковОрганизаций")
или ТипЗнч(Набор)=Тип("РегистрНакопленияНаборЗаписей.ВнутрисменноеВремяРаботниковОрганизаций")
или ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.РасчетСреднегоЗаработка") Тогда

// Удаляем движения
Набор.Очистить();
Набор.Записать();
КонецЕсли;
КонецЦикла;

Возврат Не Отказ;
КонецЕсли;

НаборЗаписейРабочееВремя.Записать();

// Получим дополнительные записи, имеющие признак сторно, которые необходимо добавить
// в текущий набор для того, чтобы в результате сохранения получился максимальный
// фактический период действия
ТаблицаСторноЗаписей = НаборОсновныеНачисления.ПолучитьДополнение();
ТаблицаСторноЗаписей.Колонки.Удалить("СторнируемыйДокумент");
ТаблицаСторноЗаписей.Колонки.Регистратор.Имя = "СторнируемыйДокумент";
ИндексПоследнейСтроки = ШапкаДокумента.НачисленияКоличествоСтрок;
Для каждого СтрокаСторно Из ТаблицаСторноЗаписей Цикл
// Заполним записи в наборе записей регистра
// и в табличной части
ДобавитьСтрокуСторно(НаборОсновныеНачисления, Начисления, СтрокаСторно);
Если Не Физлицо = Неопределено Тогда
//добавим в массив строк новые строки сторно
МассивИндексыСтрокНачисления.Добавить(ИндексПоследнейСтроки);
//индекс начинается с нуля, а номер строки с 1
ИндексПоследнейСтроки = ИндексПоследнейСтроки +1;
КонецЕсли;
КонецЦикла;

ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("ОсновныеНачисленияРаботниковОрганизаций", НаборОсновныеНачисления, ЗаписиДоходовНДФЛ, НаборРасчетСреднего, ШапкаДокумента.ГоловнаяОрганизация, ШапкаДокумента.ОбособленноеПодразделение, Начисления, Ложь, МассивИндексыСтрокНачисления, Физлицо, КомментироватьРасчет);
ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("ДополнительныеНачисленияРаботниковОрганизаций", НаборДопНачисления, ЗаписиДоходовНДФЛ, НаборРасчетСреднего, ШапкаДокумента.ГоловнаяОрганизация, ШапкаДокумента.ОбособленноеПодразделение, ДополнительныеНачисления, Ложь, МассивИндексыСтрокДополнительныеНачисления, Физлицо, КомментироватьРасчет);

ПроведениеРасчетов.СкорректироватьНормируемыеВычетыПоНДФЛ(ЭтотОбъект);


///////////////
// Распределяем начисления по источникам финансирования

НаборОсновныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
НаборДопНачисления.Записать(Истина, Ложь, Истина, Ложь);
РаспределитьНачисленияПоИФ();

// Конец распределения начислений по источникам финансирования
///////////////

Если КомментироватьРасчет Тогда
// Удаляем движения, но для комментирования расчета НДФЛ оставляем движения по начислениям
Для Каждого Набор Из Движения Цикл

Если ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.ОсновныеНачисленияРаботниковОрганизаций") Тогда

Если ВидОперации <> Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет Тогда

// Удаляем движения
Набор.Очистить();
Набор.Записать(Истина, Ложь, Истина, Ложь);

КонецЕсли;

ИначеЕсли ТипЗнч(Набор)=Тип("РегистрНакопленияНаборЗаписей.ВнутрисменноеВремяРаботниковОрганизаций")
или ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.РасчетСреднегоЗаработка") Тогда

// Удаляем движения
Набор.Очистить();
Набор.Записать();

ИначеЕсли ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.ДополнительныеНачисленияРаботниковОрганизаций") Тогда

Если ВидОперации <> Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет Тогда

// Удаляем движения
Набор.Очистить();
Набор.Записать();
КонецЕсли;

КонецЕсли;
КонецЦикла;

Иначе
// Удаляем движения
Для Каждого Набор Из Движения Цикл
Если ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.ОсновныеНачисленияРаботниковОрганизаций") Тогда

// Удаляем движения
Набор.Очистить();
Набор.Записать(Истина, Ложь, Истина, Ложь);

ИначеЕсли ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.ДополнительныеНачисленияРаботниковОрганизаций")
или ТипЗнч(Набор)=Тип("РегистрНакопленияНаборЗаписей.ВнутрисменноеВремяРаботниковОрганизаций")
или ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.РасчетСреднегоЗаработка") Тогда

// Удаляем движения
Набор.Очистить();
Набор.Записать();

КонецЕсли;
КонецЦикла;

КонецЕсли;

Возврат Не Отказ;

КонецФункции // РассчитатьНачисления()

// Процедура рассчитывает НДФЛ
// и заполняет реквизиты табличной части
//
Процедура РассчитатьНДФЛ(Физлицо = Неопределено, КомментироватьРасчет = Ложь) Экспорт

// Получим реквизиты шапки из запроса
ШапкаДокумента = ПолучитьШапкуДокумента();

Отказ = Ложь;
ВыборкаПоНачислениям = СформироватьЗапросПоНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, Начисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
Пока ВыборкаПоНачислениям.Следующий() Цикл
ПроверитьЗаполнениеСтрокиНачисления(ВыборкаПоНачислениям, Отказ);
КонецЦикла;
Если Отказ Тогда
Возврат;
КонецЕсли;

НаборНДФЛСведенияОДоходах = Движения.НДФЛСведенияОДоходах;

// Сохраним движения по регистру доходов
ТаблицаДоходов = НаборНДФЛСведенияОДоходах.Выгрузить();

// сформируем и запишем доходы НДФЛ по начислениям документа
НаборНДФЛСведенияОДоходах.Очистить();

СформироватьДоходыПоКодамНДФЛ(ШапкаДокумента, НаборНДФЛСведенияОДоходах); // по начислениям

// запишем доходы НДФЛ по начислениям документа
НаборНДФЛСведенияОДоходах.Записать();

// Составим текст запроса для выбора списка физлиц, по которым надо считать НДФЛ
Если НЕ (Физлицо = Неопределено) Тогда
СписокФизлицТекст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Работники.Физлицо КАК Физлицо
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛ КАК Работники
|
|ГДЕ
| Работники.Ссылка = &парамРегистратор и Работники.Физлицо = &парамФизлицо";

ДополнительныеПараметрыЗапросаНДФЛ = Новый Структура;
ДополнительныеПараметрыЗапросаНДФЛ.Вставить("парамФизлицо", Физлицо);
Иначе
СписокФизлицТекст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Работники.Физлицо КАК Физлицо
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛ КАК Работники
|
|ГДЕ
| Работники.Ссылка = &парамРегистратор";

ДополнительныеПараметрыЗапросаНДФЛ = Неопределено;
КонецЕсли;

// получение результата НДФЛ по ставке 13 процентов
// для него передается Организация, период и ссылка на регистратор
ВыборкаПодразделений = "";
ДанныеНДФЛ = ПроведениеРасчетов.ПолучитьДанныеНДФЛПоРегистратору(Неопределено, Неопределено, ПериодРегистрации, Организация, ШапкаДокумента.ГоловнаяОрганизация, Ссылка, СписокФизлицТекст, ДополнительныеПараметрыЗапросаНДФЛ, , КомментироватьРасчет, ВыборкаПодразделений);
Если ДанныеНДФЛ <> Неопределено Тогда
Если НЕ (Физлицо = Неопределено) Тогда
// считаем одно физлицо
ФизлицаСписок = Новый СписокЗначений;
ФизлицаСписок.Добавить(Физлицо);
Иначе
// считаем всех
ФизлицаСписок = НеОпределено;
КонецЕсли;
ЗаполнитьНаборЗаписейПоДаннымНДФЛ(, ДанныеНДФЛ, ШапкаДокумента, ,ФизлицаСписок, КомментироватьРасчет, ВыборкаПодразделений);
КонецЕсли;

///////////////
// Распределяем НДФЛ по источникам финансирования

РаспределитьНДФЛПоИФ(ШапкаДокумента, Физлицо);

// Конец распределения удержаний по источникам финансирования
///////////////

// Восстановим состояние регистра доходов
НаборНДФЛСведенияОДоходах.Загрузить(ТаблицаДоходов);
НаборНДФЛСведенияОДоходах.Записать();

КонецПроцедуры // РассчитатьНДФЛ

// Процедура рассчитывает ресурсы удержаний и заполняет
// реквизиты Результат табличной части документа
//
Процедура РассчитатьУдержания(ШапкаДокумента = Неопределено, ВыборкаПоУдержаниям = Неопределено, Физлицо = Неопределено, КомментироватьРасчет = Ложь) Экспорт

Отказ = Ложь;

Если Физлицо = Неопределено Тогда
МассивИндексыСтрокУдержания = Неопределено;
Иначе
МассивИндексыСтрокУдержания = Новый Массив();
КонецЕсли;

Если ШапкаДокумента = Неопределено Тогда

// Перечитаем объект и соберем данные для заполнения наборов записей регистров
НачатьТранзакцию();
Прочитать();
ШапкаДокумента = ПолучитьШапкуДокумента();
ВыборкаПоУдержаниям = СформироватьЗапросПоУдержания(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, Удержания.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
ЗафиксироватьТранзакцию();

КонецЕсли;

НаборУдержания = РегистрыРасчета.УдержанияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборУдержания.Отбор.Регистратор.Значение = Ссылка;

НаборНДФЛРасчетыСБюджетом = РегистрыНакопления.НДФЛРасчетыСБюджетом.СоздатьНаборЗаписей();
НаборНДФЛРасчетыСБюджетом.Отбор.Регистратор.Значение = Ссылка;

НаборОсновныеНачисления = РегистрыРасчета.ОсновныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборОсновныеНачисления.Отбор.Регистратор.Значение = Ссылка;

НаборДопНачисления = РегистрыРасчета.ДополнительныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборДопНачисления.Отбор.Регистратор.Значение = Ссылка;

// сформируем движения основных начислений по данным табличной части
ВыборкаПоНачислениям = СформироватьЗапросПоНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, Начисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
Пока ВыборкаПоНачислениям.Следующий() Цикл
ПроверитьЗаполнениеСтрокиНачисления(ВыборкаПоНачислениям, Отказ);
Если НЕ Отказ Тогда
ДобавитьСтрокуОсновныхНачислений(ВыборкаПоНачислениям, ШапкаДокумента, НаборОсновныеНачисления);
КонецЕсли;
КонецЦикла;

мСоответствиеДоходовИВычетов = ПроведениеРасчетов.ПолучитьСоответствиеДоходовИВычетов();
ВыборкаПоДоговорам = СформироватьЗапросПоДоговорам(ШапкаДокумента).Выбрать();
Пока ВыборкаПоДоговорам.Следующий() Цикл
ПроверитьЗаполнениеСтрокиДоговора(ВыборкаПоДоговорам, Отказ);
Если НЕ Отказ Тогда
ДобавитьСтрокуДоговора(ВыборкаПоДоговорам, ШапкаДокумента, НаборДопНачисления);
КонецЕсли;
КонецЦикла;

// сформируем движения дополнительных начислений по данным табличной части
ВыборкаПоДопНачислениям = СформироватьЗапросПоДопНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, ДополнительныеНачисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
Пока ВыборкаПоДопНачислениям.Следующий() Цикл
ПроверитьЗаполнениеСтрокиДопНачисления(ВыборкаПоДопНачислениям, Отказ);
Если НЕ Отказ Тогда
ДобавитьСтрокуДопНачислений(ВыборкаПоДопНачислениям, ШапкаДокумента, НаборДопНачисления);
КонецЕсли;
КонецЦикла;

// сформируем движения НДФЛ по данным табличной части
ПроверитьЗаполнениеНДФЛ(Отказ, ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка));
ЗаполнитьНаборЗаписейНДФЛПоНачислениям(ШапкаДокумента, НаборНДФЛРасчетыСБюджетом);

// сформируем движения удержаний по данным табличной части без записи (запись делается процедурой РассчитатьЗаписиРегистраРасчета)
Пока ВыборкаПоУдержаниям.Следующий() Цикл
ПроверитьЗаполнениеСтрокиУдержания(ВыборкаПоУдержаниям, Отказ);
Если НЕ Отказ Тогда
ДобавитьСтрокуУдержаний(ВыборкаПоУдержаниям, ШапкаДокумента, НаборУдержания);
Если НЕ Физлицо = Неопределено Тогда
МассивИндексыСтрокУдержания.Добавить(ВыборкаПоУдержаниям.НомерСтроки - 1);
КонецЕсли;
КонецЕсли;
КонецЦикла;

Если Отказ Тогда
Возврат;
КонецЕсли;

// перед тем как начать расчет, сформированные движения надо записать -
// по ним чуть позже будем получать дополнительные данные для расчетов
Для Каждого Набор Из Движения Цикл
ПроверяемыйТип = ТипЗнч(Набор);
Если ПроверяемыйТип = Тип("РегистрРасчетаНаборЗаписей.ОсновныеНачисленияРаботниковОрганизаций") Тогда
НаборОсновныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
ИначеЕсли ПроверяемыйТип = Тип("РегистрРасчетаНаборЗаписей.ДополнительныеНачисленияРаботниковОрганизаций") Тогда
НаборДопНачисления.Записать();
ИначеЕсли ПроверяемыйТип = Тип("РегистрНакопленияНаборЗаписей.НДФЛРасчетыСБюджетом") Тогда
НаборНДФЛРасчетыСБюджетом.Записать();
КонецЕсли;
КонецЦикла;

// удержания - в последнюю очередь
ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("УдержанияРаботниковОрганизаций", НаборУдержания, , , ШапкаДокумента.ГоловнаяОрганизация, ШапкаДокумента.ОбособленноеПодразделение, Удержания, , МассивИндексыСтрокУдержания, Физлицо, КомментироватьРасчет);

///////////////
// Распределяем удержания по источникам финансирования

НаборУдержания.Записать(Истина, Ложь, Истина, Ложь);
РаспределитьУдержанияПоИФ(ШапкаДокумента, ФизЛицо);

// Конец распределения удержаний по источникам финансирования
///////////////

// Удаляем движения
Для Каждого Набор Из Движения Цикл
ПроверяемыйТип = ТипЗнч(Набор);
Если ПроверяемыйТип = Тип("РегистрРасчетаНаборЗаписей.ОсновныеНачисленияРаботниковОрганизаций") Тогда
НаборОсновныеНачисления.Очистить();
НаборОсновныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
ИначеЕсли ПроверяемыйТип = Тип("РегистрРасчетаНаборЗаписей.ДополнительныеНачисленияРаботниковОрганизаций") Тогда
НаборДопНачисления.Очистить();
НаборДопНачисления.Записать();
ИначеЕсли ПроверяемыйТип = Тип("РегистрНакопленияНаборЗаписей.НДФЛРасчетыСБюджетом") Тогда
НаборНДФЛРасчетыСБюджетом.Очистить();
НаборНДФЛРасчетыСБюджетом.Записать();
ИначеЕсли ПроверяемыйТип = Тип("РегистрРасчетаНаборЗаписей.УдержанияРаботниковОрганизаций") Тогда
НаборУдержания.Очистить();
НаборУдержания.Записать();
КонецЕсли;
КонецЦикла;

КонецПроцедуры // РассчитатьУдержания()

// Процедура рассчитывает ресурсы всех наборов записей и заполняет
// реквизиты Результат всех табличных частей документа
//
Процедура РассчитатьВсе(Физлицо = Неопределено, КомментироватьРасчет = Ложь) Экспорт

// Перечитаем объект и соберем данные для заполнения наборов записей регистров

Если КомментироватьРасчет Тогда
// удаление промежуточных движений выполняется не так как при "нормальном" расчете
НачатьТранзакцию();
Прочитать();
ШапкаДокумента = ПолучитьШапкуДокумента();
ВыборкаПоНачислениям = СформироватьЗапросПоНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, Начисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
ВыборкаПоДопНачислениям = СформироватьЗапросПоДопНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, ДополнительныеНачисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
ВыборкаПоУдержаниям = СформироватьЗапросПоУдержания(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, Удержания.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();

НачисленияРассчитаны = РассчитатьНачисления(ШапкаДокумента, ВыборкаПоНачислениям, ВыборкаПоДопНачислениям, Физлицо, КомментироватьРасчет);
Если НачисленияРассчитаны Тогда
Записать(); // для расчета НДФЛ нужно записать результаты расчета начислений
РассчитатьНДФЛ(Физлицо, КомментироватьРасчет);
Записать(); // для расчета удержаний нужно записать результаты расчета НДФЛ
РассчитатьУдержания(ШапкаДокумента, ВыборкаПоУдержаниям, Физлицо, КомментироватьРасчет);
КонецЕсли;

// Удаляем движения по начислениям - ранее они не удалялисьь для комментирования
// расчета НДФЛ и удержаний
Для Каждого Набор Из Движения Цикл
Если ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.ОсновныеНачисленияРаботниковОрганизаций") Тогда

// Удаляем движения
Набор.Очистить();
Набор.Записать(Истина, Ложь, Истина, Ложь);

ИначеЕсли ТипЗнч(Набор)=Тип("РегистрРасчетаНаборЗаписей.ДополнительныеНачисленияРаботниковОрганизаций") Тогда

// Удаляем движения
Набор.Очистить();
Набор.Записать();

КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();

Иначе
НачатьТранзакцию();
Прочитать();
ШапкаДокумента = ПолучитьШапкуДокумента();
ВыборкаПоНачислениям = СформироватьЗапросПоНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, Начисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
ВыборкаПоДопНачислениям = СформироватьЗапросПоДопНачисления(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, ДополнительныеНачисления.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
ВыборкаПоУдержаниям = СформироватьЗапросПоУдержания(ШапкаДокумента, ?(Физлицо = Неопределено, Неопределено, Удержания.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо)))).Выбрать();
ЗафиксироватьТранзакцию();

НачисленияРассчитаны = РассчитатьНачисления(ШапкаДокумента, ВыборкаПоНачислениям, ВыборкаПоДопНачислениям,Физлицо);
Если НачисленияРассчитаны Тогда
Записать(); // для расчета НДФЛ нужно записать результаты расчета начислений
РассчитатьНДФЛ(Физлицо);
Записать(); // для расчета удержаний нужно записать результаты расчета НДФЛ
РассчитатьУдержания(ШапкаДокумента, ВыборкаПоУдержаниям, Физлицо);
КонецЕсли;

КонецЕсли;

КонецПроцедуры // Рассчитать()

// Выполняет перерасчет по заданному списку физлиц
// Если передан пустой список физлиц - перерасчет не проводится
// Если в качестве списка физлиц передан не массив, а Неопределено - перерасчет по всем физлицам
// регистратора по которым требуется перерасчет
//
// Параметры
// Физлица - список значений - ссылки на физлиц
// Возвращаемое значение
// Нет
//
Процедура Перерассчитать(Физлица = Неопределено) Экспорт

// проверим можно ли что-то делать с документом
ОписаниеПричиныОтказа = "";
Если ПроведениеРасчетов.ДокументНельзяИзменятьЗаднимЧислом(Ссылка, ОписаниеПричиныОтказа) Тогда
ВызватьИсключение(ОписаниеПричиныОтказа);
КонецЕсли;

Если Не ПроведениеРасчетов.НеобходимостьПерерасчета(Ссылка) Тогда
Возврат
КонецЕсли;

// получим список перерассчитываемых физлиц
ФизлицаСписок = Новый СписокЗначений;
Если Физлица = Неопределено Тогда

// таблица ФизлицаДляПерерасчета
// Список физлиц по которым необходимо выполнить перерасчет
// Поля:
// ФизЛицо
// Описание:
// Получает список неповторяющихся физлиц по которым есть записи
// перерасчета в одной из таблиц перерасчета - по основным или дополнительным начислениям
//
ФизлицаДляПерерасчетаТекст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| Перерасчет.ФизЛицо
|ИЗ
| (ВЫБРАТЬ
| Перерасчет.ФизЛицо
| ИЗ
| РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций.ПерерасчетОсновныхНачислений КАК Перерасчет
| ГДЕ
| Перерасчет.ОбъектПерерасчета = &парамРегистратор
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Перерасчет.ФизЛицо
| ИЗ
| РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций.ПерерасчетДополнительныхНачислений КАК Перерасчет
| ГДЕ
| Перерасчет.ОбъектПерерасчета = &парамРегистратор) КАК Перерасчет";

Запрос = Новый Запрос(ФизлицаДляПерерасчетаТекст);
Запрос.УстановитьПараметр("парамРегистратор", Ссылка);
ФизлицаСписок.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("ФизЛицо"));

Иначе

ФизлицаСписок = Физлица;

КонецЕсли;

// если не перерассчитываем никого - возврат
Если ФизлицаСписок.Количество()=0 Тогда
Возврат
КонецЕсли;

// текст выбора списка физлиц для перерасчета НДФЛ
СписокФизЛицДляРасчетаНДФЛТекст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ФизическиеЛица.Ссылка КАК Физлицо
|ИЗ
| Справочник.ФизическиеЛица КАК ФизическиеЛица
|
|ГДЕ
| ФизическиеЛица.Ссылка В(&парамФизлицаПерерасчета)";

ДополнительныеПараметрыЗапросаНДФЛ = Новый Структура;
ДополнительныеПараметрыЗапросаНДФЛ.Вставить("парамФизлицаПерерасчета", ФизлицаСписок);

// читаем все данные
НачатьТранзакцию();
Прочитать();
ШапкаДокумента = ПолучитьШапкуДокумента();
Движения.ОсновныеНачисленияРаботниковОрганизаций.Прочитать();
Движения.ДополнительныеНачисленияРаботниковОрганизаций.Прочитать();
Движения.УдержанияРаботниковОрганизаций.Прочитать();
Движения.НДФЛСведенияОДоходах.Прочитать();
Движения.ВзаиморасчетыСРаботникамиОрганизаций.Прочитать();
Движения.НДФЛРасчетыСБюджетом.Прочитать();
ЗафиксироватьТранзакцию();

////////////////////////////////////////////////////////////////////////
// Основные, дополнительные начисления и сведения о доходах НДФЛ

// сначала удалим сведения о доходах НДФЛ по перерассчитываемым физлицам
НДФЛСведенияОДоходах = Движения.НДФЛСведенияОДоходах;
ПоследнееДвижение = НДФЛСведенияОДоходах.Количество()-1;
Для Сч = 0 По ПоследнееДвижение Цикл
// удалим записи по всем физлицам полученного списка
// обходим в обратном порядке
Если ФизлицаСписок.НайтиПоЗначению(НДФЛСведенияОДоходах[ПоследнееДвижение - Сч].Физлицо) <> Неопределено Тогда
НДФЛСведенияОДоходах.Удалить(ПоследнееДвижение - Сч);
КонецЕсли;
КонецЦикла;

// перерассчитываем записи начислений
// при этом передаем не только набор записей регистра расчета, но и набор записей регистра
// накопления со сведениями об отработанном времени
// а также таблицу значений в которую будет заполнять движения для НДФЛСведенияОДоходах
ДвиженияНДФЛСведенияОДоходах = Движения.НДФЛСведенияОДоходах.Выгрузить();// фактически - создаем структуру таблицы значений
ПроведениеРасчетовПереопределяемый.ПереРассчитатьЗаписиРегистраРасчета("ОсновныеНачисленияРаботниковОрганизаций", Движения.ОсновныеНачисленияРаботниковОрганизаций, Физлица, ДвиженияНДФЛСведенияОДоходах, Движения.РасчетСреднегоЗаработка, ШапкаДокумента.ГоловнаяОрганизация, ШапкаДокумента.ОбособленноеПодразделение, Начисления);
// запишем без выполнения пересчета фактического периода действия
Движения.ОсновныеНачисленияРаботниковОрганизаций.Записать(Истина, Истина);

ПроведениеРасчетовПереопределяемый.ПереРассчитатьЗаписиРегистраРасчета("ДополнительныеНачисленияРаботниковОрганизаций", Движения.ДополнительныеНачисленияРаботниковОрганизаций, Физлица, ДвиженияНДФЛСведенияОДоходах, Движения.РасчетСреднегоЗаработка, ШапкаДокумента.ГоловнаяОрганизация, ШапкаДокумента.ОбособленноеПодразделение);

// запишем набор
Движения.ДополнительныеНачисленияРаботниковОрганизаций.Записать(Истина, Истина);
ДополнительныеНачисления.Очистить();
Для каждого СтрокаДвижения Из Движения.ДополнительныеНачисленияРаботниковОрганизаций Цикл
Если Не ЗначениеЗаполнено(СтрокаДвижения.ДокументОснование) Тогда
СтрокаНачисления = ДополнительныеНачисления.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаНачисления,СтрокаДвижения);
СтрокаНачисления.ДатаНачала = СтрокаДвижения.БазовыйПериодНачало;
СтрокаНачисления.ДатаОкончания = СтрокаДвижения.БазовыйПериодКонец;
КонецЕсли;
КонецЦикла;

// запишем движения по доходам НДФЛ, которые формируются при ПереРассчитатьЗаписиРегистраРасчета
ПроведениеРасчетов.СвернутьДвиженияНДФЛСведенияОДоходах(ДвиженияНДФЛСведенияОДоходах);
Движения.НДФЛСведенияОДоходах.Загрузить(ДвиженияНДФЛСведенияОДоходах);
Движения.НДФЛСведенияОДоходах.Записать();

////////////////////////////////////////////////////////////////////////
// НДФЛ Расчеты с бюджетом

// перезаполним данные по исчисленному НДФЛ
// сначала удалим сведения об исчисленном НДФЛ по перерассчитываемым физлицам
ДвиженияНДФЛРасчетыСБюджетом = Движения.НДФЛРасчетыСБюджетом;
ПоследнееДвижение = ДвиженияНДФЛРасчетыСБюджетом.Количество()-1;
Для Сч = 0 По ПоследнееДвижение Цикл
// удалим записи по всем физлицам полученного списка
// обходим в обратном порядке
Если ФизлицаСписок.НайтиПоЗначению(ДвиженияНДФЛРасчетыСБюджетом[ПоследнееДвижение - Сч].Физлицо) <> Неопределено Тогда
ДвиженияНДФЛРасчетыСБюджетом.Удалить(ПоследнееДвижение - Сч);
КонецЕсли;
КонецЦикла;

// перезаполним данные по исчисленному НДФЛ в табличной части
// сначала удалим сведения об исчисленном НДФЛ по перерассчитываемым физлицам
// удаляем строки после получения данных для расчета НДФЛ!!
ПоследнееДвижение = НДФЛ.Количество()-1;
Для Сч = 0 По ПоследнееДвижение Цикл
// удалим записи по всем физлицам полученного списка
// обходим в обратном порядке
Если ФизлицаСписок.НайтиПоЗначению(НДФЛ[ПоследнееДвижение - Сч].Физлицо) <> Неопределено Тогда
НДФЛ.Удалить(ПоследнееДвижение - Сч);
КонецЕсли;
КонецЦикла;

// получение результата НДФЛ по ставке 13 процентов
// для него передается Организация, период, ссылка на регистратор и список физлиц
ВыборкаПодразделений = "";
ДанныеНДФЛ = ПроведениеРасчетов.ПолучитьДанныеНДФЛПоРегистратору(Неопределено, Неопределено, ПериодРегистрации, Организация, ШапкаДокумента.ГоловнаяОрганизация, Ссылка, СписокФизЛицДляРасчетаНДФЛТекст, ДополнительныеПараметрыЗапросаНДФЛ, Истина, , ВыборкаПодразделений);

Если ДанныеНДФЛ <> Неопределено Тогда
ЗаполнитьНаборЗаписейПоДаннымНДФЛ(Движения.НДФЛРасчетыСБюджетом, ДанныеНДФЛ, ШапкаДокумента, Истина, ФизлицаСписок, , ВыборкаПодразделений);
КонецЕсли;
Движения.НДФЛРасчетыСБюджетом.Записать();

// Распределяем НДФЛ по источникам финансирования
РаспределитьНДФЛПоИФ(ШапкаДокумента, Физлица);

////////////////////////////////////////////////////////////////////////
// удержания работников

// в конце - перерасчет удержаний, так как им могут понадобиться данные расчета НДФЛ
ПроведениеРасчетовПереопределяемый.ПереРассчитатьЗаписиРегистраРасчета("УдержанияРаботниковОрганизаций", Движения.УдержанияРаботниковОрганизаций, Физлица, , , ШапкаДокумента.ГоловнаяОрганизация, ШапкаДокумента.ОбособленноеПодразделение, Удержания);
// запишем
Движения.УдержанияРаботниковОрганизаций.Записать(Истина, Истина);

// записываем документ перед вызовом процедур, использующих данные таблиц документа
Записать();

////////////////////////////////////////////////////////////////////////
// взаиморасчеты с работниками

// сначала удалим сведения о взаиморасчетах с работниками
ВзаиморасчетыСРаботникамиОрганизаций = Движения.ВзаиморасчетыСРаботникамиОрганизаций;
ПоследнееДвижение = ВзаиморасчетыСРаботникамиОрганизаций.Количество()-1;
Для Сч = 0 По ПоследнееДвижение Цикл
// удалим записи по всем физлицам полученного списка
// обходим в обратном порядке
Если ФизлицаСписок.НайтиПоЗначению(ВзаиморасчетыСРаботникамиОрганизаций[ПоследнееДвижение - Сч].Физлицо) <> Неопределено Тогда
ВзаиморасчетыСРаботникамиОрганизаций.Удалить(ПоследнееДвижение - Сч);
КонецЕсли;
КонецЦикла;

// теперь сформируем начисления к выплате по начислениям документа для перерассчитываемых работников
СформироватьВзаиморасчетыСРаботниками(Истина, Физлица);
Движения.ВзаиморасчетыСРаботникамиОрганизаций.Записать();

////////////////////////////////////////////////////////////////////////
// Удалим записи перерасчета по которым выполнен перерасчет
ПроведениеРасчетов.УдалитьСведенияОПерерасчетеДокумента(Ссылка);

КонецПроцедуры // Перерассчитать()

Процедура ОчиститьТЧ() Экспорт

Начисления.Очистить();
ДополнительныеНачисления.Очистить();
ДоговорыНаВыполнениеРабот.Очистить();
Удержания.Очистить();
НДФЛ.Очистить();

НачисленияПоИФ.Очистить();
ДополнительныеНачисленияПоИФ.Очистить();
УдержанияПоИФ.Очистить();
НДФЛПоИФ.Очистить();

КонецПроцедуры // ОчиститьТЧ()

/////////

// Распределяет начисления документа по источникам финансирования
//
Процедура РаспределитьНачисленияПоИсточникамФинансирования() Экспорт

// Получаем шапку документа
ШапкаДокумента = ПолучитьШапкуДокумента();

// получаем начисления документа
ВыборкаПоНачислениямОсн = СформироватьЗапросПоНачисления(ШапкаДокумента).Выбрать();
ВыборкаПоНачислениямДоп = СформироватьЗапросПоДопНачисления(ШапкаДокумента).Выбрать();

Отказ = Ложь;
// Заголовок для сообщений об ошибках проведения.
Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);
// проверяем заполнения реквизитов шапки
ПроверитьЗаполнениеШапки(ШапкаДокумента, Отказ, Заголовок);
// проверяем заполнение начислений
ПроверитьЗаполнениеНачислений(ШапкаДокумента, ВыборкаПоНачислениямОсн, Отказ, Заголовок);
ПроверитьЗаполнениеДополнительныхНачислений(ШапкаДокумента, ВыборкаПоНачислениямДоп, Отказ, Заголовок);

Если Отказ Тогда
Возврат
КонецЕсли;

// Создаем набор записей регистра расчета
НаборЗаписейОсн = РегистрыРасчета.ОсновныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборЗаписейОсн.Отбор.Регистратор.Установить(Ссылка);
НаборЗаписейДоп = РегистрыРасчета.ДополнительныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборЗаписейДоп.Отбор.Регистратор.Установить(Ссылка);

// создаем движения по начислениям
ЗаполнитьДвижениеПоОсновнымНачислениям(НаборЗаписейОсн, ШапкаДокумента, ВыборкаПоНачислениямОсн, Истина);
ЗаполнитьДвижениеПоДополнительнымНачислениям(НаборЗаписейДоп, ШапкаДокумента, ВыборкаПоНачислениямДоп, Истина);

// Сохраняем набор записей
//НаборЗаписейОсн.Записать();
//НаборЗаписейДоп.Записать();
НаборЗаписейОсн.Записать(Истина, Ложь, Истина, Ложь);
НаборЗаписейДоп.Записать(Истина, Ложь, Истина, Ложь);

// Распределяем движения документа
РаспределитьНачисленияПоИФ();
ЗаполнитьОтражениеДоговоров(ШапкаДокумента);

// Чистим за собой
НаборЗаписейОсн.Очистить();
НаборЗаписейОсн.Записать(Истина, Ложь, Истина, Ложь);
НаборЗаписейДоп.Очистить();
НаборЗаписейДоп.Записать();

КонецПроцедуры

Процедура ЗаполнитьОтражениеДоговора(Договор) Экспорт

ШапкаДокумента = ПолучитьШапкуДокумента();

Строки = Новый Массив();
Строки.Добавить(Договор);

// Выгружаем строку ТЧ в таблицу значений
ТаблицаДоговоров = ДоговорыНаВыполнениеРабот.Выгрузить(Строки);

// Заполняем таблицу отражением по настройкам
ОтражениеВУчете.ЗаполнитьНачисленияИсточникамиФинансирования(
ТаблицаДоговоров,
"ДатаНачала",
Новый Структура("ОбособленноеПодразделение",ШапкаДокумента.ОбособленноеПодразделение));

Если ЗначениеЗаполнено(Договор.ДокументОснование) Тогда

ЗаполнитьЗначенияСвойств(Договор, Договор.ДокументОснование.ПолучитьОбъект(), "КОСГУ, СтатьяФинансирования, СтатьяРасходов");

Иначе

Договор.КОСГУ = Справочники.КОСГУ.ПустаяСсылка();
Договор.СтатьяФинансирования = Справочники.СтатьиФинансирования.ПустаяСсылка();
Договор.СтатьяРасходов = Справочники.СтатьиРасходов.ПустаяСсылка();

КонецЕсли;

Настройка = ТаблицаДоговоров.Найти(Договор.НомерСтроки, "НомерСтроки");

Если НЕ ЗначениеЗаполнено(Договор.КОСГУ) Тогда
Договор.КОСГУ = Настройка.КОСГУ
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Договор.СтатьяФинансирования) Тогда
Договор.СтатьяФинансирования = Настройка.СтатьяФинансирования
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Договор.СтатьяРасходов) Тогда
Договор.СтатьяРасходов = Настройка.СтатьяРасходов
КонецЕсли;

КонецПроцедуры

// Процедура распределяет существующий НДФЛ документа по источникам финансирования
//
Процедура РаспределитьНДФЛПоИсточникамФинансирования() Экспорт

// Получим реквизиты шапки из запроса
ШапкаДокумента = ПолучитьШапкуДокумента();

Отказ = Ложь;
// Заголовок для сообщений об ошибках проведения.
Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);
// проверяем заполнения реквизитов шапки
ПроверитьЗаполнениеШапки(ШапкаДокумента, Отказ, Заголовок);
// проверяем заполнение начислений
ПроверитьЗаполнениеНДФЛ(Отказ, Заголовок);

Если Отказ Тогда
Возврат
КонецЕсли;

НаборНДФЛСведенияОДоходах = Движения.НДФЛСведенияОДоходах;

// Сохраним движения по регистру доходов
ТаблицаДоходов = НаборНДФЛСведенияОДоходах.Выгрузить();

// сформируем и запишем доходы НДФЛ по начислениям документа
НаборНДФЛСведенияОДоходах.Очистить();
СформироватьДоходыПоКодамНДФЛ(ШапкаДокумента, НаборНДФЛСведенияОДоходах); // по начислениям
НаборНДФЛСведенияОДоходах.Записать();

// Определим распределение НДФЛ по ИФ
РаспределитьНДФЛПоИФ(ШапкаДокумента);

// Восстановим состояние регистра доходов
НаборНДФЛСведенияОДоходах.Загрузить(ТаблицаДоходов);
НаборНДФЛСведенияОДоходах.Записать();

КонецПроцедуры // РаспределитьНДФЛПоИсточникамФинансирования

// Распределяет начисления документа по источникам финансирования
//
Процедура РаспределитьУдержанияПоИсточникамФинансирования() Экспорт

// Получаем шапку документа
ШапкаДокумента = ПолучитьШапкуДокумента();

// получаем начисления документа
ВыборкаПоУдержаниям = СформироватьЗапросПоУдержания(ШапкаДокумента).Выбрать();

Отказ = Ложь;
// Заголовок для сообщений об ошибках проведения.
Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);
// проверяем заполнения реквизитов шапки
ПроверитьЗаполнениеШапки(ШапкаДокумента, Отказ, Заголовок);
// проверяем заполнение начислений
ПроверитьЗаполнениеУдержаний(ШапкаДокумента, ВыборкаПоУдержаниям, Отказ, Заголовок);

Если Отказ Тогда
Возврат
КонецЕсли;

// Создаем набор записей регистра расчета
НаборЗаписей = РегистрыРасчета.УдержанияРаботниковОрганизаций.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);

// создаем движения по удержаниям
ЗаполнитьДвижениеПоУдержаниям(НаборЗаписей, ШапкаДокумента, ВыборкаПоУдержаниям, Истина);

// Сохраняем набор записей
НаборЗаписей.Записать();

// Распределяем удержания документа
РаспределитьУдержанияПоИФ(ШапкаДокумента);

// Чистим за собой
НаборЗаписей.Очистить();
НаборЗаписей.Записать();

КонецПроцедуры

Процедура РаспределитьПоИсточникамФинансирования() Экспорт

РаспределитьНачисленияПоИсточникамФинансирования();
РаспределитьНДФЛПоИсточникамФинансирования();
РаспределитьУдержанияПоИсточникамФинансирования();

КонецПроцедуры

/////////

// Возвращает ключ связи основного начисления с его распределением
// в виде структуры с полями связи
//
// Параметры:
// СтрокаНачисления - строка начисления
//
// Возвращаемое значение:
// Структура
//
Функция ПолучитьКлючОтраженияНачисления(СтрокаНачисления) Экспорт

Ключ =
Новый Структура(
"Сотрудник,
|ФизЛицо,
|ВидРасчета,
|ПериодДействияНачало,
|ПериодДействияКонец,
|ПодразделениеОрганизации,
|Сторно");

Если ЗначениеЗаполнено(СтрокаНачисления) Тогда
Ключ.Сотрудник = СтрокаНачисления.Сотрудник;
Ключ.ФизЛицо = СтрокаНачисления.ФизЛицо;
Ключ.ВидРасчета = СтрокаНачисления.ВидРасчета;
Ключ.ПериодДействияНачало = СтрокаНачисления.ДатаНачала;
Ключ.ПериодДействияКонец = КонецДня(СтрокаНачисления.ДатаОкончания);
Ключ.ПодразделениеОрганизации = СтрокаНачисления.ПодразделениеОрганизации;
Ключ.Сторно = СтрокаНачисления.Сторно;
Иначе
Ключ.Сотрудник = Справочники.СотрудникиОрганизаций.ПустаяСсылка();
Ключ.ФизЛицо = Справочники.ФизическиеЛица.ПустаяСсылка();
Ключ.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка();
Ключ.ПериодДействияНачало = '00010101';
Ключ.ПериодДействияКонец = '00010101';
Ключ.ПодразделениеОрганизации = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка();
Ключ.Сторно = Неопределено;
КонецЕсли;

Возврат Ключ

КонецФункции

// Возвращает ключ связи основного начисления с его распределением
// в виде структуры с полями связи
//
// Параметры:
// СтрокаНачисления - строка начисления
//
// Возвращаемое значение:
// Структура
//
Функция ПолучитьКлючОтраженияДополнительногоНачисления(СтрокаНачисления) Экспорт

Ключ =
Новый Структура(
"Сотрудник,
|ФизЛицо,
|ВидРасчета,
//|БазовыйПериодНачало,
//|БазовыйПериодКонец,
|ПодразделениеОрганизации,
|Сторно");

Если ЗначениеЗаполнено(СтрокаНачисления) Тогда
Ключ.Сотрудник = СтрокаНачисления.Сотрудник;
Ключ.ФизЛицо = СтрокаНачисления.ФизЛицо;
Ключ.ВидРасчета = СтрокаНачисления.ВидРасчета;
//Ключ.БазовыйПериодНачало = СтрокаНачисления.ДатаНачала;
//Ключ.БазовыйПериодКонец = ?(Не ЗначениеЗаполнено(СтрокаНачисления.ДатаОкончания), СтрокаНачисления.ДатаОкончания, КонецДня(СтрокаНачисления.ДатаОкончания));
Ключ.ПодразделениеОрганизации = СтрокаНачисления.ПодразделениеОрганизации;
Ключ.Сторно = СтрокаНачисления.Сторно;
Иначе
Ключ.Сотрудник = Справочники.СотрудникиОрганизаций.ПустаяСсылка();
Ключ.ФизЛицо = Справочники.ФизическиеЛица.ПустаяСсылка();
Ключ.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка();
//Ключ.БазовыйПериодНачало = '00010101';
//Ключ.БазовыйПериодКонец = '00010101';
Ключ.ПодразделениеОрганизации = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка();
Ключ.Сторно = Неопределено;
КонецЕсли;

Возврат Ключ

КонецФункции

// Возвращает ключ связи НДФЛ с его отражением
// в виде структуры с полями связи
//
// Параметры:
// СтрокаНачисления - строка начисления
//
// Возвращаемое значение:
// Структура
//
Функция ПолучитьКлючОтраженияНДФЛ(СтрокаУдержания) Экспорт

Ключ =
Новый Структура(
"ФизЛицо,
|МесяцНалоговогоПериода");

Если ЗначениеЗаполнено(СтрокаУдержания) Тогда
Ключ.ФизЛицо = СтрокаУдержания.ФизЛицо;
Ключ.МесяцНалоговогоПериода = СтрокаУдержания.МесяцНалоговогоПериода;
Иначе
Ключ.ФизЛицо = Справочники.ФизическиеЛица.ПустаяСсылка();
Ключ.МесяцНалоговогоПериода = '00010101';
КонецЕсли;

Возврат Ключ

КонецФункции

// Возвращает ключ связи удержания с его отражением
// в виде структуры с полями связи
//
// Параметры:
// СтрокаНачисления - строка начисления
//
// Возвращаемое значение:
// Структура
//
Функция ПолучитьКлючОтраженияУдержания(СтрокаУдержания) Экспорт

Ключ =
Новый Структура(
"ФизЛицо,
|ВидРасчета,
|Сторно");

Если ЗначениеЗаполнено(СтрокаУдержания) Тогда
Ключ.ФизЛицо = СтрокаУдержания.ФизЛицо;
Ключ.ВидРасчета = СтрокаУдержания.ВидРасчета;
Ключ.Сторно = СтрокаУдержания.Сторно;
Иначе
Ключ.ФизЛицо = Справочники.ФизическиеЛица.ПустаяСсылка();
Ключ.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ПустаяСсылка();
Ключ.Сторно = Неопределено;
КонецЕсли;

Возврат Ключ

КонецФункции

// Возвращает данные начисления
//
// Параметры:
// СтрокаНачисления - строка ТЧ Начисления
//
Функция ПолучитьДанныеНачисления(СтрокаНачисления) Экспорт

Строки = Новый Массив();
Строки.Добавить(СтрокаНачисления);

Возврат СформироватьЗапросПоНачисления(ПолучитьШапкуДокумента(), Строки).Выгрузить()[0];

КонецФункции

// Возвращает данные начисления
//
// Параметры:
// СтрокаНачисления - строка ТЧ Начисления
//
Функция ПолучитьДанныеДополнительногоНачисления(СтрокаНачисления) Экспорт

Строки = Новый Массив();
Строки.Добавить(СтрокаНачисления);

Возврат СформироватьЗапросПоДопНачисления(ПолучитьШапкуДокумента(), Строки).Выгрузить()[0];

КонецФункции

// Возвращает данные удержания
//
// Параметры:
// СтрокаНачисления - строка ТЧ Начисления
//
Функция ПолучитьДанныеУдержания(СтрокаУдержания) Экспорт

Строки = Новый Массив();
Строки.Добавить(СтрокаУдержания);

Возврат СформироватьЗапросПоУдержания(ПолучитьШапкуДокумента(), Строки).Выгрузить()[0];

КонецФункции

// Возвращает данные удержания
//
// Параметры:
// СтрокаНачисления - строка ТЧ Начисления
//
Функция ПолучитьДанныеНДФЛ(СтрокаНДФЛ) Экспорт

ДанныеНДФЛ = Новый Структура(
"НомерСтроки,
|ФизЛицо,
|МесяцНалоговогоПериода,
|СтавкаНалогообложенияРезидента");

ЗаполнитьЗначенияСвойств(ДанныеНДФЛ, СтрокаНДФЛ);

СтавкаНалогообложенияРезидента = Перечисления.НДФЛСтавкиНалогообложенияРезидента.Ставка13;

Возврат ДанныеНДФЛ;

КонецФункции

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ

//Выполняет автоматическое заполнение показателей в строке
//
Процедура ЗаполнитьПоказателиСтроки(Сотрудник, ВидРасчета, НомерСтроки, Подразделение = Неопределено, ГоловнаяОрганизация, ИмяТЧ = "", ДатаНачала) Экспорт

Запрос = Новый Запрос;

Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

Запрос.УстановитьПараметр("парамНачало" , НачалоМесяца(ДатаНачала));
Запрос.УстановитьПараметр("парамКонец" , КонецДня(ПериодНачисленияДатаОкончания));
Запрос.УстановитьПараметр("парамОрганизация" , Организация);
Запрос.УстановитьПараметр("парамГоловнаяОрганизация", ГоловнаяОрганизация);
Запрос.УстановитьПараметр("парамПодразделение" , Подразделение);

Запрос.УстановитьПараметр("ВидРасчета",ВидРасчета);
Запрос.УстановитьПараметр("Сотрудник",Сотрудник);

Запрос.УстановитьПараметр("Организация",Организация);
Запрос.УстановитьПараметр("Подразделение",Подразделение);
Запрос.УстановитьПараметр("ПарамДатаОкончания",ПериодНачисленияДатаНачала);

Запрос.УстановитьПараметр("парамДатаВалютногоУчета" , НачалоМесяца(ПериодНачисленияДатаНачала));
Запрос.УстановитьПараметр("парамВалютаРегламентУчета" , Константы.ВалютаРегламентированногоУчета.Получить());

Запрос.УстановитьПараметр("парамПериодРегистрации" , ДатаНачала);


Если ИмяТЧ = "Начисления" Тогда
ИмяТаблицыВР = "ОсновныеНачисленияОрганизаций";
Запрос.УстановитьПараметр("ФизЛицо",Сотрудник.ФизЛицо);
ИначеЕсли ИмяТЧ = "ДополнительныеНачисления" Тогда
ИмяТаблицыВР = "ДополнительныеНачисленияОрганизаций";
Запрос.УстановитьПараметр("ФизЛицо",Сотрудник.ФизЛицо);
ИначеЕсли ИмяТЧ = "УдержанияОрганизаций" Тогда
ИмяТаблицыВР = "УдержанияОрганизаций";
Запрос.УстановитьПараметр("ФизЛицо",Сотрудник);
КонецЕсли;


Запрос.Текст = "
|ВЫБРАТЬ
| ВР.Показатель КАК Показатель,
| ВР.НомерСтроки,
| ВР.Ссылка
|ПОМЕСТИТЬ ВТПоказатели
|ИЗ
| ПланВидовРасчета."+ИмяТаблицыВР+".Показатели КАК ВР
|ГДЕ
| ВР.Ссылка = &ВидРасчета
| И ВР.Ссылка.ПроизвольнаяФормулаРасчета
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ВР.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоДням), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоЧасам))
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| КОГДА ВР.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок))
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| КОГДА ВР.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоДневнойТарифнойСтавке)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИНАЧЕ Значение(Справочник.ПоказателиСхемМотивации.ПустаяСсылка)
| КОНЕЦ КАК Показатель,
| 1,
| ВР.Ссылка
|ИЗ
| ПланВидовРасчета."+ИмяТаблицыВР+" КАК ВР
|ГДЕ
| ВР.Ссылка = &ВидРасчета
| И НЕ ВР.ПроизвольнаяФормулаРасчета;

|ВЫБРАТЬ
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки = 1
| ТОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель1,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки = 2
| ТОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель2,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки = 3
| ТОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель3,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки = 4
| ТОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель4,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки = 5
| ТОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель5,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки = 6
| ТОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель6
|ПОМЕСТИТЬ ВТОсновныеНачисленияОрганизацийПоказатели
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ОсновныеНачисленияОрганизацийПоказатели
|ГДЕ
| ОсновныеНачисленияОрганизацийПоказатели.Показатель В (ВЫБРАТЬ Показатель ИЗ ВТПоказатели)
|
|СГРУППИРОВАТЬ ПО
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка
|ИНДЕКСИРОВАТЬ ПО
| Ссылка;
|ВЫБРАТЬ
| УдержанияОрганизацийПоказатели.Ссылка,
| МАКСИМУМ(ВЫБОР
| КОГДА УдержанияОрганизацийПоказатели.НомерСтроки = 1
| ТОГДА УдержанияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель1,
| МАКСИМУМ(ВЫБОР
| КОГДА УдержанияОрганизацийПоказатели.НомерСтроки = 2
| ТОГДА УдержанияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель2,
| МАКСИМУМ(ВЫБОР
| КОГДА УдержанияОрганизацийПоказатели.НомерСтроки = 3
| ТОГДА УдержанияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель3,
| МАКСИМУМ(ВЫБОР
| КОГДА УдержанияОрганизацийПоказатели.НомерСтроки = 4
| ТОГДА УдержанияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель4,
| МАКСИМУМ(ВЫБОР
| КОГДА УдержанияОрганизацийПоказатели.НомерСтроки = 5
| ТОГДА УдержанияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель5,
| МАКСИМУМ(ВЫБОР
| КОГДА УдержанияОрганизацийПоказатели.НомерСтроки = 6
| ТОГДА УдержанияОрганизацийПоказатели.Показатель
| ИНАЧЕ NULL
| КОНЕЦ) КАК Показатель6
|ПОМЕСТИТЬ ВТУдержанияОрганизацийПоказатели
|ИЗ
| ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК УдержанияОрганизацийПоказатели
|ГДЕ
| УдержанияОрганизацийПоказатели.Показатель В (ВЫБРАТЬ Показатель ИЗ ВТПоказатели)
|
|СГРУППИРОВАТЬ ПО
| УдержанияОрганизацийПоказатели.Ссылка
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|;
|
|
|ВЫБРАТЬ
| ОсновныеНачисленияОрганизацийПоказатели.Показатель КАК Показатель,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель.ВозможностьИзменения,
| ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки КАК НомерСтроки,
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ТОГДА ИСТИНА
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ТОГДА ИСТИНА
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ТОГДА ИСТИНА
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЭтоТарифнаяСтавка
|ПОМЕСТИТЬ ВТНеЗапрашиваемыеПриКадровыхПеремещениях
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ОсновныеНачисленияОрганизацийПоказатели
|ГДЕ
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка = &ВидРасчета
| И ((НЕ ОсновныеНачисленияОрганизацийПоказатели.ЗапрашиватьПриКадровыхПеремещениях)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ИЛИ ОсновныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка)
| И ОсновныеНачисленияОрганизацийПоказатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| ДополнительныеНачисленияОрганизацийПоказатели.Показатель,
| ДополнительныеНачисленияОрганизацийПоказатели.Показатель.ВозможностьИзменения,
| ДополнительныеНачисленияОрганизацийПоказатели.НомерСтроки,
| ДополнительныеНачисленияОрганизацийПоказатели.Ссылка,
| ВЫБОР
| КОГДА ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ТОГДА ИСТИНА
| КОГДА ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ТОГДА ИСТИНА
| КОГДА ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ТОГДА ИСТИНА
| КОГДА ДополнительныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|ИЗ
| ПланВидовРасчета.ДополнительныеНачисленияОрганизаций.Показатели КАК ДополнительныеНачисленияОрганизацийПоказатели
|ГДЕ
| ДополнительныеНачисленияОрганизацийПоказатели.Ссылка = &ВидРасчета
| И ((НЕ ДополнительныеНачисленияОрганизацийПоказатели.ЗапрашиватьПриКадровыхПеремещениях)
| ИЛИ ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ИЛИ ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИЛИ ДополнительныеНачисленияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ИЛИ ДополнительныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка)
| И ДополнительныеНачисленияОрганизацийПоказатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ
| УдержанияОрганизацийПоказатели.Показатель,
| УдержанияОрганизацийПоказатели.Показатель.ВозможностьИзменения,
| УдержанияОрганизацийПоказатели.НомерСтроки,
| УдержанияОрганизацийПоказатели.Ссылка,
| ВЫБОР
| КОГДА УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ТОГДА ИСТИНА
| КОГДА УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ТОГДА ИСТИНА
| КОГДА УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ТОГДА ИСТИНА
| КОГДА УдержанияОрганизацийПоказатели.Показатель.ТарифнаяСтавка
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ
|ИЗ
| ПланВидовРасчета.УдержанияОрганизаций.Показатели КАК УдержанияОрганизацийПоказатели
|ГДЕ
| УдержанияОрганизацийПоказатели.Ссылка = &ВидРасчета
| И ((НЕ УдержанияОрганизацийПоказатели.ЗапрашиватьПриКадровыхПеремещениях)
| ИЛИ УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| ИЛИ УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИЛИ УдержанияОрганизацийПоказатели.Показатель = ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ИЛИ УдержанияОрганизацийПоказатели.Показатель.ТарифнаяСтавка)
| И УдержанияОрганизацийПоказатели.Показатель.ВозможностьИзменения <> ЗНАЧЕНИЕ(Перечисление.ИзменениеПоказателейСхемМотивации.Ежемесячно)
|
|ИНДЕКСИРОВАТЬ ПО
| Показатель
|;
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизаций.Ссылка КАК Ссылка,
| ВЫБОР
| КОГДА ОсновныеНачисленияОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоДням), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоЧасам))
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| КОГДА ОсновныеНачисленияОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок))
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| КОНЕЦ КАК Показатель,
| 1 КАК НомерСтроки,
| ИСТИНА КАК ЭтоТарифнаяСтавка
|ПОМЕСТИТЬ ВТВводимыеВПлановыхНачисленияхПоказатели
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ЛЕВОЕ СОЕДИНЕНИЕ(
| ВЫБРАТЬ
| Показатели.ЭтоТарифнаяСтавка
| ИЗ
| ВТНеЗапрашиваемыеПриКадровыхПеремещениях КАК Показатели
| ГДЕ
| Показатели.ЭтоТарифнаяСтавка) КАК ТекущиеПоказатели
| ПО ТекущиеПоказатели.ЭтоТарифнаяСтавка

|ГДЕ
| ОсновныеНачисленияОрганизаций.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоДням), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоЧасам), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоДневнойТарифнойСтавке))
| И ОсновныеНачисленияОрганизаций.ЗачетОтработанногоВремени
| И ТекущиеПоказатели.ЭтоТарифнаяСтавка ЕСТЬ НЕ NULL
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ВР.Ссылка,
| Значение(Справочник.ПоказателиСхемМотивации.ПустаяСсылка),
| 1,
| Ложь
|ИЗ
| ПланВидовРасчета."+ИмяТаблицыВР+" КАК ВР
|ГДЕ
| ВР.Ссылка = &ВидРасчета
| И НЕ ВР.ПроизвольнаяФормулаРасчета
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель,
| ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки,
| ИСТИНА
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ОсновныеНачисленияОрганизацийПоказатели
|ГДЕ
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка.ЗачетОтработанногоВремени
| И ОсновныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка
| И (НЕ ОсновныеНачисленияОрганизацийПоказатели.Показатель.Предопределенный)
|
|ОБЪЕДИНИТЬ
|
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ОсновныеНачисленияОрганизацийПоказатели.Ссылка,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель,
| ОсновныеНачисленияОрганизацийПоказатели.НомерСтроки,
| ЛОЖЬ
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций.Показатели КАК ОсновныеНачисленияОрганизацийПоказатели
|ГДЕ
| ОсновныеНачисленияОрганизацийПоказатели.Показатель В
| (ВЫБРАТЬ
| ВТНеЗапрашиваемыеПриКадровыхПеремещениях.Показатель
| ИЗ
| ВТНеЗапрашиваемыеПриКадровыхПеремещениях)
| И (НЕ ОсновныеНачисленияОрганизацийПоказатели.Показатель.ТарифнаяСтавка)
|
|ИНДЕКСИРОВАТЬ ПО
| Ссылка
|
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| Начисления.ВидРасчета КАК ВидРасчета,
| ВЫБОР
| КОГДА Начисления.ВидРасчета.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоДням), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоМесячнойТарифнойСтавкеПоЧасам))
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаМесячная)
| КОГДА Начисления.ВидРасчета.СпособРасчета В (ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоЧасовойТарифнойСтавке), ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.СдельныйЗаработок))
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаЧасовая)
| КОГДА Начисления.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПоДневнойТарифнойСтавке)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ПоказателиСхемМотивации.ТарифнаяСтавкаДневная)
| ИНАЧЕ ОсновныеНачисленияОрганизацийПоказатели.Показатель1
| КОНЕЦ КАК ППоказатель1,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель2 КАК ППоказатель2,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель3 КАК ППоказатель3,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель4 КАК ППоказатель4,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель5 КАК ППоказатель5,
| ОсновныеНачисленияОрганизацийПоказатели.Показатель6 КАК ППоказатель6,
| ВЫБОР
| КОГДА Начисления.ВидРасчета.ПроизвольнаяФормулаРасчета ТОГДА
| ВЫБОР
| КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель1.ТипПоказателя = Значение(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд)
| ТОГДА ТарифныеРазряды1.Размер
| ИНАЧЕ Начисления.Показатель1
| КОНЕЦ
| КОГДА Начисления.ВидРасчета.ТребуетВводаТарифногоРазряда
| ТОГДА ТарифныеРазряды1.Размер
| ИНАЧЕ Начисления.Показатель1
| КОНЕЦ КАК Показатель1,
| ВЫБОР КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель2.ТипПоказателя = Значение(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд)
| ТОГДА ТарифныеРазряды2.Размер
| ИНАЧЕ Начисления.Показатель2
| КОНЕЦ КАК Показатель2,
| ВЫБОР КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель3.ТипПоказателя = Значение(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд)
| ТОГДА ТарифныеРазряды3.Размер
| ИНАЧЕ Начисления.Показатель3
| КОНЕЦ КАК Показатель3,
| ВЫБОР КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель4.ТипПоказателя = Значение(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд)
| ТОГДА ТарифныеРазряды4.Размер
| ИНАЧЕ Начисления.Показатель4
| КОНЕЦ КАК Показатель4,
| ВЫБОР КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель5.ТипПоказателя = Значение(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд)
| ТОГДА ТарифныеРазряды5.Размер
| ИНАЧЕ Начисления.Показатель5
| КОНЕЦ КАК Показатель5,
| ВЫБОР КОГДА ОсновныеНачисленияОрганизацийПоказатели.Показатель6.ТипПоказателя = Значение(Перечисление.ТипыПоказателейСхемМотивации.ТарифныйРазряд)
| ТОГДА ТарифныеРазряды6.Размер
| ИНАЧЕ Начисления.Показатель6
| КОНЕЦ КАК Показатель6,

| Начисления.Валюта1,
| Начисления.Валюта2,
| Начисления.Валюта3,
| Начисления.Валюта4,
| Начисления.Валюта5,
| Начисления.Валюта6
|ПОМЕСТИТЬ ВТПлановые6
|ИЗ
| РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(
| &ПарамПериодРегистрации,
| Организация = &ПарамОрганизация";
Если ИмяТЧ = "УдержанияОрганизаций" Тогда
Запрос.Текст = Запрос.Текст + "
| И Сотрудник.ФизЛицо = &Сотрудник";
Иначе
Запрос.Текст = Запрос.Текст + "
| И Сотрудник = &Сотрудник";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
| И ВидРасчета В
| (ВЫБРАТЬ
| ВТВводимыеВПлановыхНачисленияхПоказатели.Ссылка
| ИЗ
| ВТВводимыеВПлановыхНачисленияхПоказатели)) КАК Начисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&ПарамДатаОкончания, ) КАК ТарифныеРазряды1
| ПО Начисления.ТарифныйРазряд1 = ТарифныеРазряды1.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&ПарамДатаОкончания, ) КАК ТарифныеРазряды2
| ПО Начисления.ТарифныйРазряд2 = ТарифныеРазряды2.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&ПарамДатаОкончания, ) КАК ТарифныеРазряды3
| ПО Начисления.ТарифныйРазряд3 = ТарифныеРазряды3.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&ПарамДатаОкончания, ) КАК ТарифныеРазряды4
| ПО Начисления.ТарифныйРазряд4 = ТарифныеРазряды4.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&ПарамДатаОкончания, ) КАК ТарифныеРазряды5
| ПО Начисления.ТарифныйРазряд5 = ТарифныеРазряды5.ТарифныйРазряд
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РазмерТарифныхСтавок.СрезПоследних(&ПарамДатаОкончания, ) КАК ТарифныеРазряды6
| ПО Начисления.ТарифныйРазряд6 = ТарифныеРазряды6.ТарифныйРазряд
|
| ЛЕВОЕ СОЕДИНЕНИЕ ВТОсновныеНачисленияОрганизацийПоказатели КАК ОсновныеНачисленияОрганизацийПоказатели
| ПО Начисления.ВидРасчета = ОсновныеНачисленияОрганизацийПоказатели.Ссылка

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

КонецПроцедуры //ЗаполнитьПоказателиСтроки


// Выполняет формирование таблицы значений для загрузки ее в табличную часть Начисления
// Параметры:
// Начисления - выборка результатат запроса
// ПериодЗаполнения - дата периода для которого выполняем заполнение документа
//
// Возвращаемое значение:
// таблица значений
//
Функция СформироватьТаблицуНачислений(Начисления, ОкончаниеПериодаЗаполнения, ВремТЗНачисления, МассивВалютСНезаданнымКурсом)

ТЗНачисления = Новый ТаблицаЗначений();
ТЗНачисления.Колонки.Добавить("Сотрудник");
ТЗНачисления.Колонки.Добавить("Физлицо");
ТЗНачисления.Колонки.Добавить("ВидРасчета");
ТЗНачисления.Колонки.Добавить("КодВычета");
ТЗНачисления.Колонки.Добавить("Основное"); // Признак основного начисления
ТЗНачисления.Колонки.Добавить("Показатель1");
ТЗНачисления.Колонки.Добавить("Показатель2");
ТЗНачисления.Колонки.Добавить("Показатель3");
ТЗНачисления.Колонки.Добавить("Показатель4");
ТЗНачисления.Колонки.Добавить("Показатель5");
ТЗНачисления.Колонки.Добавить("Показатель6");
ТЗНачисления.Колонки.Добавить("Размер");
ТЗНачисления.Колонки.Добавить("ДатаНачала", ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.ДатаВремя));
ТЗНачисления.Колонки.Добавить("ДатаНачалаСобытия", ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.ДатаВремя));
ТЗНачисления.Колонки.Добавить("ДатаОкончания", ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.ДатаВремя));
ТЗНачисления.Колонки.Добавить("ПодразделениеОрганизации");

// для заполнения графика и вида учета времени
ТЗНачисления.Колонки.Добавить("ГрафикРаботы");
ТЗНачисления.Колонки.Добавить("СуммированныйУчетРабочегоВремени");
ТЗНачисления.Колонки.Добавить("СпособРасчета");
ТЗНачисления.Колонки.Добавить("ВидВремени");

// Массив незакрытых строк таблицы значений, т.е. тех, которым не проставлена дата окончания
НезакрытыеСтроки = Новый Массив;
// Текущие значения полей выборки для отслеживания изменения работника и даты назначения
ТекущийСотрудник = Справочники.СотрудникиОрганизаций.ПустаяСсылка();
ТекущаяДатаНазначения = '00010101';
ТекущаяЧасоваяСтавкаОсновногоНачисления = 0;

// признаки того, что вечерние или ночные часы введены по плановым начислениям
ЕстьПлановаяДоплатаЗаНочные = Ложь;
ЕстьПлановаяДоплатаЗаВечерние = Ложь;
СтрокиНачисленийТекущегоНазначения = Новый Массив;
СтрокиВечернихТекущегоНазначения = Новый Массив;
СтрокиНочныхТекущегоНазначения = Новый Массив;

ДоплатыЗаНочныеВечерниеЧасы = ПолучитьДоплатыЗаНочныеВечерние();
ДоплатаЗаНочные = ДоплатыЗаНочныеВечерниеЧасы.ДоплатаЗаНочныеЧасы;
ДоплатаЗаВечерние = ДоплатыЗаНочныеВечерниеЧасы.ДоплатаЗаВечерниеЧасы;
ПроцентДоплатыЗаНочныеЧасы = ДоплатыЗаНочныеВечерниеЧасы.ПроцентДоплатыЗаНочныеЧасы;
ПроцентДоплатыЗаВечерниеЧасы = ДоплатыЗаНочныеВечерниеЧасы.ПроцентДоплатыЗаВечерниеЧасы;

Пока Начисления.Следующий() Цикл

Если Начисления.Сотрудник <> ТекущийСотрудник Тогда

// закрываем незакрытые строки начислений предыдущего работника концом месяца
ЗакрытьСтроки(ТЗНачисления, НезакрытыеСтроки, ОкончаниеПериодаЗаполнения);

Если ЕстьПлановаяДоплатаЗаНочные Тогда
// удаляем те строки ночных часов, которые введены на основании табеля
Для Каждого Строка Из СтрокиНочныхТекущегоНазначения Цикл
ТЗНачисления.Удалить(Строка);
КонецЦикла;
КонецЕсли;
Если ЕстьПлановаяДоплатаЗаВечерние Тогда
// удаляем те строки вечерних часов, которые введены на основании табеля
Для Каждого Строка Из СтрокиВечернихТекущегоНазначения Цикл
ТЗНачисления.Удалить(Строка);
КонецЦикла;
КонецЕсли;

// меняется текущий работник и дата его движения
ТекущийСотрудник = Начисления.Сотрудник;
ТекущаяДатаНазначения = Начисления.ПериодРаботники;
ТекущаяЧасоваяСтавкаОсновногоНачисления = 0;
СтрокиНачисленийТекущегоНазначения.Очистить();
СтрокиВечернихТекущегоНазначения.Очистить();
СтрокиНочныхТекущегоНазначения.Очистить();
ЕстьПлановаяДоплатаЗаНочные = Ложь;
ЕстьПлановаяДоплатаЗаВечерние = Ложь;

ИначеЕсли Начисления.ПериодРаботники <> ТекущаяДатаНазначения И (Начисления.НачисляетсяВЦеломЗаМесяц = Null Или (НЕ Начисления.НачисляетсяВЦеломЗаМесяц)) Тогда

Для каждого СтрокаТекущегоНазначения Из СтрокиНачисленийТекущегоНазначения Цикл

ИндексСтроки = 0;
Для каждого СтрокаМассива Из НезакрытыеСтроки Цикл
Если СтрокаМассива = СтрокаТекущегоНазначения Тогда
НезакрытыеСтроки.Удалить(ИндексСтроки);
Прервать;
Иначе
ИндексСтроки = ИндексСтроки + 1;
КонецЕсли;
КонецЦикла;

КонецЦикла;

// закрываем все строки предыдущего назначения датой предшествующей новому назначению
ЗакрытьСтроки(ТЗНачисления, СтрокиНачисленийТекущегоНазначения, Начисления.ПериодРаботники - 1);

// меняется текущая дата движения работника
ТекущаяДатаНазначения = Начисления.ПериодРаботники;

КонецЕсли;

Если НЕ Начисления.Подходит ИЛИ Начисления.УжеПроведен Тогда
// пропускаем такие записи: они уже введена другими документами или соответствуют окончанию назначения работника
Продолжить;
КонецЕсли;

Если Начисления.Действие <> Перечисления.ВидыДействияСНачислением.Прекратить И НЕ Начисления.ТребуетВводаТарифногоРазряда Тогда
Для Сч = 1 По 6 Цикл
Если ЗначениеЗаполнено(Начисления["Валюта"+Сч]) И (Начисления["КурсВалюты"+Сч] = NULL ИЛИ Начисления["КурсВалюты"+Сч] = 0) Тогда
МассивВалютСНезаданнымКурсом[Начисления["Валюта"+ Сч]] = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;

// Расчет размера начисления
// для вечерних и ночных часов размер в регистре плановых начислений сожержит процент оплаты от тарифа/оклада
Если Начисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаВечерниеЧасы ИЛИ Начисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаНочныеЧасы Тогда

Показатель1 = Начисления.Показатель1 / 100 * ТекущаяЧасоваяСтавкаОсновногоНачисления;
Показатель2 = 0;
Показатель3 = 0;
Показатель4 = 0;
Показатель5 = 0;
Показатель6 = 0;

Иначе

// расчета не требуется
Показатель1 = Начисления.Показатель1;
Показатель2 = Начисления.Показатель2;
Показатель3 = Начисления.Показатель3;
Показатель4 = Начисления.Показатель4;
Показатель5 = Начисления.Показатель5;
Показатель6 = Начисления.Показатель6;

КонецЕсли;

// признак того, что вечерние и/или ночные часы введены по плановым начислениям
Если Начисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаВечерниеЧасы Тогда
ЕстьПлановаяДоплатаЗаВечерние = Истина;
// удалим строки с веченими начислениями, введенными на основании графика, из
// всех массивос строк
Для Каждого Строка Из СтрокиВечернихТекущегоНазначения Цикл
Для Счетчик = 0 По НезакрытыеСтроки.ВГраница() Цикл
Если ТЗНачисления.Индекс(НезакрытыеСтроки[Счетчик]) = ТЗНачисления.Индекс(Строка) Тогда
// нашли строку с вечерними, введенными на основании графика
НезакрытыеСтроки.Удалить(Счетчик);
Прервать;
КонецЕсли;
КонецЦикла;
Для Счетчик = 0 По СтрокиНачисленийТекущегоНазначения.ВГраница() Цикл
Если ТЗНачисления.Индекс(СтрокиНачисленийТекущегоНазначения[Счетчик]) = ТЗНачисления.Индекс(Строка) Тогда
// нашли строку с вечерними, введенными на основании графика
СтрокиНачисленийТекущегоНазначения.Удалить(Счетчик);
Прервать;
КонецЕсли;
КонецЦикла;
ТЗНачисления.Удалить(Строка);

КонецЦикла;
СтрокиВечернихТекущегоНазначения.Очистить();
КонецЕсли;
Если Начисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаНочныеЧасы Тогда
ЕстьПлановаяДоплатаЗаНочные = Истина;
// удалим строки с ночными начислениями, введенными на основании графика, из
// всех массивос строк
Для Каждого Строка Из СтрокиНочныхТекущегоНазначения Цикл
Для Счетчик = 0 По НезакрытыеСтроки.ВГраница() Цикл
Если ТЗНачисления.Индекс(НезакрытыеСтроки[Счетчик]) = ТЗНачисления.Индекс(Строка) Тогда
// нашли строку с вечерними, введенными на основании графика
НезакрытыеСтроки.Удалить(Счетчик);
Прервать;
КонецЕсли;
КонецЦикла;
Для Счетчик = 0 По СтрокиНачисленийТекущегоНазначения.ВГраница() Цикл
Если ТЗНачисления.Индекс(СтрокиНачисленийТекущегоНазначения[Счетчик]) = ТЗНачисления.Индекс(Строка) Тогда
// нашли строку с вечерними, введенными на основании графика
СтрокиНачисленийТекущегоНазначения.Удалить(Счетчик);
Прервать;
КонецЕсли;
КонецЦикла;
ТЗНачисления.Удалить(Строка);

КонецЦикла;
СтрокиНочныхТекущегоНазначения.Очистить();
КонецЕсли;

// Сохраним размер основного начисления для расчета размера оплаты ночных и вечерних часов
// (основное начисление в выборке должно идти раньше других видов расчета)
Если Начисления.ОсновноеНачисление и Начисления.ВидРасчета <> Неопределено Тогда
ТекущаяЧасоваяСтавкаОсновногоНачисления = Начисления.ЧасоваяТарифнаяСтавка;
КонецЕсли;

// Найдем такой же вид расчета среди незакрытых строк с целью завершения его действия
Строки = Новый Массив;
НайтиСредиНезакрытых(НезакрытыеСтроки, Начисления.ОсновноеНачисление, Начисления.ВидРасчета, Строки);
ПрерватьОбход = Ложь;
Если Строки.Количество() > 0 Тогда
// нашли
Для каждого Строка Из Строки Цикл
Если Строка.ДатаНачала = Начисления.Период Тогда
Если Начисления.Действие = Перечисления.ВидыДействияСНачислением.Прекратить Тогда
ИндексСтроки = НезакрытыеСтроки.Найти(Строка);
НезакрытыеСтроки.Удалить(ИндексСтроки);
ИндексСтроки = 0;
Для каждого СтрокаМассива Из СтрокиНачисленийТекущегоНазначения Цикл
Если СтрокаМассива = Строка Тогда
СтрокиНачисленийТекущегоНазначения.Удалить(ИндексСтроки);
Прервать;
Иначе
ИндексСтроки = ИндексСтроки + 1;
КонецЕсли;
КонецЦикла;
ТЗНачисления.Удалить(Строка);
Иначе
// если дата та же - новую строку в формируемую таблицу значений не вводим, а меняем данные
// и оставляем строку "незакрытой"
Строка.ВидРасчета = Начисления.ВидРасчета;// вид расчета необходимо переопределять для основного начисления
Строка.ПодразделениеОрганизации = Начисления.ПодразделениеОрганизации;
Строка.СпособРасчета = Начисления.СпособРасчета;
Строка.ГрафикРаботы = Начисления.ГрафикРаботы;
Строка.ДатаНачалаСобытия = Начисления.ДатаНачалаСобытия;
Строка.СуммированныйУчетРабочегоВремени = Начисления.СуммированныйУчетРабочегоВремени;
Строка.Показатель1 = Показатель1;
Строка.Показатель2 = Показатель2;
Строка.Показатель3 = Показатель3;
Строка.Показатель4 = Показатель4;
Строка.Показатель5 = Показатель5;
Строка.Показатель6 = Показатель6;

Если Начисления.ОсновноеНачисление Тогда
// если это ОсновноеНачисление, то нужно подменить данные и в тех строках
// ночных и вечерних, которые введены не основании графика
Для Каждого Строка Из СтрокиВечернихТекущегоНазначения Цикл
Для Каждого НезакрытаяСтрока Из НезакрытыеСтроки Цикл
Если ТЗНачисления.Индекс(НезакрытаяСтрока) = ТЗНачисления.Индекс(Строка) Тогда
// нашли строку с вечерними, введенными на основании графика
Строка.Показатель1 = (Начисления.ЧасоваяТарифнаяСтавка * ПроцентДоплатыЗаВечерниеЧасы) / 100;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого Строка Из СтрокиНочныхТекущегоНазначения Цикл
Для Каждого НезакрытаяСтрока Из НезакрытыеСтроки Цикл
Если ТЗНачисления.Индекс(НезакрытаяСтрока) = ТЗНачисления.Индекс(Строка) Тогда
// нашли строку с ночными, введенными на основании графика
Строка.Показатель1 = (Начисления.ЧасоваяТарифнаяСтавка * ПроцентДоплатыЗаНочныеЧасы) / 100;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;

КонецЕсли;
ПрерватьОбход = Истина;
ИначеЕсли Начисления.НачисляетсяВЦеломЗаМесяц = Null Или (НЕ Начисления.НачисляетсяВЦеломЗаМесяц) Тогда

Если (Не ЗначениеЗаполнено(Строка.ДатаОкончания) Или Строка.ДатаОкончания > Начисления.Период-1) И Начисления.Период <> НачалоМесяца(Строка.ДатаНачала) Тогда
Строка.ДатаОкончания = Начисления.Период-1;
ИначеЕсли Начисления.Период = НачалоМесяца(Строка.ДатаНачала) Тогда
Строка.ДатаОкончания = ОкончаниеПериодаЗаполнения;
КонецЕсли;
ИндексСтроки = НезакрытыеСтроки.Найти(Строка);
НезакрытыеСтроки.Удалить(ИндексСтроки);

Если Начисления.ОсновноеНачисление Тогда
// если это ОсновноеНачисление, то нужно закрыть и те строки
// ночных и вечерних, которые введены не основании графика
Для Каждого СтрокаДоплаты Из СтрокиВечернихТекущегоНазначения Цикл
Для Каждого НезакрытаяСтрока Из НезакрытыеСтроки Цикл
Если ТЗНачисления.Индекс(НезакрытаяСтрока) = ТЗНачисления.Индекс(СтрокаДоплаты) Тогда
// нашли строку с вечерними, введенными на основании графика
Если (Не ЗначениеЗаполнено(СтрокаДоплаты.ДатаОкончания) Или СтрокаДоплаты.ДатаОкончания > Начисления.Период-1) И Начисления.Период <> НачалоМесяца(СтрокаДоплаты.ДатаНачала) Тогда
СтрокаДоплаты.ДатаОкончания = Начисления.Период-1;
ИначеЕсли Начисления.Период = НачалоМесяца(СтрокаДоплаты.ДатаНачала) Тогда
СтрокаДоплаты.ДатаОкончания = ОкончаниеПериодаЗаполнения;
КонецЕсли;
ИндексСтроки = НезакрытыеСтроки.Найти(СтрокаДоплаты);
НезакрытыеСтроки.Удалить(ИндексСтроки);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого СтрокаДоплаты Из СтрокиНочныхТекущегоНазначения Цикл
Для Каждого НезакрытаяСтрока Из НезакрытыеСтроки Цикл
Если ТЗНачисления.Индекс(НезакрытаяСтрока) = ТЗНачисления.Индекс(СтрокаДоплаты) Тогда
// нашли строку с ночными, введенными на основании графика
Если (Не ЗначениеЗаполнено(СтрокаДоплаты.ДатаОкончания) Или СтрокаДоплаты.ДатаОкончания > Начисления.Период-1) И Начисления.Период <> НачалоМесяца(СтрокаДоплаты.ДатаНачала) Тогда
СтрокаДоплаты.ДатаОкончания = Начисления.Период-1;
ИначеЕсли Начисления.Период = НачалоМесяца(СтрокаДоплаты.ДатаНачала) Тогда
СтрокаДоплаты.ДатаОкончания = ОкончаниеПериодаЗаполнения;
КонецЕсли;
ИндексСтроки = НезакрытыеСтроки.Найти(СтрокаДоплаты);
НезакрытыеСтроки.Удалить(ИндексСтроки);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;

ИначеЕсли Начисления.ПериодНачисления = Начисления.Период Тогда

Строка.ДатаОкончания = ОкончаниеПериодаЗаполнения;
// удаляем из массива незакрытых - если пользователем был изменен размер начисления
Если Начисления.Действие = Перечисления.ВидыДействияСНачислением.Изменить Тогда
ИндексСтроки = НезакрытыеСтроки.Найти(Строка);
НезакрытыеСтроки.Удалить(ИндексСтроки);
КонецЕсли;

Если Начисления.ОсновноеНачисление Тогда
// если это ОсновноеНачисление, то нужно закрыть и те строки
// ночных и вечерних, которые введены не основании графика
Для Каждого СтрокаДоплаты Из СтрокиВечернихТекущегоНазначения Цикл
Для Каждого НезакрытаяСтрока Из НезакрытыеСтроки Цикл
Если ТЗНачисления.Индекс(НезакрытаяСтрока) = ТЗНачисления.Индекс(СтрокаДоплаты) Тогда
// нашли строку с вечерними, введенными на основании графика
СтрокаДоплаты.ДатаОкончания = ОкончаниеПериодаЗаполнения;
// удаляем из массива незакрытых - если пользователем был изменен размер начисления
Если Начисления.Действие = Перечисления.ВидыДействияСНачислением.Изменить Тогда
ИндексСтроки = НезакрытыеСтроки.Найти(СтрокаДоплаты);
НезакрытыеСтроки.Удалить(ИндексСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого СтрокаДоплаты Из СтрокиНочныхТекущегоНазначения Цикл
Для Каждого НезакрытаяСтрока Из НезакрытыеСтроки Цикл
Если ТЗНачисления.Индекс(НезакрытаяСтрока) = ТЗНачисления.Индекс(СтрокаДоплаты) Тогда
// нашли строку с ночными, введенными на основании графика
СтрокаДоплаты.ДатаОкончания = ОкончаниеПериодаЗаполнения;
// удаляем из массива незакрытых - если пользователем был изменен размер начисления
Если Начисления.Действие = Перечисления.ВидыДействияСНачислением.Изменить Тогда
ИндексСтроки = НезакрытыеСтроки.Найти(СтрокаДоплаты);
НезакрытыеСтроки.Удалить(ИндексСтроки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;

Иначе
ПрерватьОбход = Истина;
КонецЕсли;
КонецЦикла;
КонецЕсли;

Если ПрерватьОбход Или Начисления.Действие = Перечисления.ВидыДействияСНачислением.Прекратить Тогда
Продолжить;
ИначеЕсли Начисления.НачисляетсяВЦеломЗаМесяц Тогда

// проверем не введено ли данное начисление уже
СтрокаПоиска= Новый Структура;
СтрокаПоиска.Вставить("Сотрудник", Начисления.Сотрудник);
СтрокаПоиска.Вставить("ВидРасчета", Начисления.ВидРасчета);

НайденныеСтроки = ТЗНачисления.НайтиСтроки(СтрокаПоиска);

Если НайденныеСтроки.Количество() > 0 Тогда
Продолжить;
КонецЕсли;

КонецЕсли;

// Добавим новую строку начислений
НоваяСтрока = ТЗНачисления.Добавить();
НоваяСтрока.Сотрудник = Начисления.Сотрудник;
НоваяСтрока.Физлицо = Начисления.Физлицо;
НоваяСтрока.ВидРасчета = Начисления.ВидРасчета;
НоваяСтрока.КодВычета = Начисления.КодВычета;
Если ПроведениеРасчетов.ЭтоРасчетСеверныхНадбавок(Начисления.СпособРасчета) И Начисления.ДатаРегистрацииСеверногоСтажа <> Null Тогда
// получим массив процентов северных надбавок с датами их действия для нашего периода
ПроцентыСевернойНадбавки = ПроведениеРасчетов.ПолучитьПроцентыСевернойНадбавкиЗаПериод(
Начисления.ДатаРегистрацииСеверногоСтажа,
Начисления.ПорядокНачисленияСеверныхНадбавок,
Начисления.НачальныйПроцентСевернойНадбавки,
Начисления.СеверныйСтажМесяцев,
Начисления.СеверныйСтажДней,
Начисления.Период,
ОкончаниеПериодаЗаполнения);
НоваяСтрока.Показатель1 = ПроцентыСевернойНадбавки[0].Процент;
ИначеЕсли ПроведениеРасчетов.ЭтоРасчетОтСтажа(Начисления.СпособРасчета) Тогда
Если Начисления.КоэффициентСтажа = Null Тогда
КоэффициентСтажа = 0;

ОбщегоНазначения.КомментарийРасчета("Для " + Начисления.СотрудникНаименование + ", вид расчета """ + Начисления.ВидРасчетаНаименование+ """ не подобран размер начисления в зависимости от стажа """ + Начисления.ВидРасчетаВидСтажа + """ Размер принят равным нулю.", , Начисления.ФизЛицо, Начисления.ФизЛицо, Перечисления.ВидыСообщений.Ошибка);

Иначе
КоэффициентСтажа = Начисления.КоэффициентСтажа;
КонецЕсли;
НоваяСтрока.Показатель1 = КоэффициентСтажа;
Иначе
НоваяСтрока.Показатель1 = Показатель1;
НоваяСтрока.Показатель2 = Показатель2;
НоваяСтрока.Показатель3 = Показатель3;
НоваяСтрока.Показатель4 = Показатель4;
НоваяСтрока.Показатель5 = Показатель5;
НоваяСтрока.Показатель6 = Показатель6;
КонецЕсли;
НоваяСтрока.Основное = Начисления.ОсновноеНачисление;
НоваяСтрока.ДатаНачала = Начисления.Период;
НоваяСтрока.ДатаНачалаСобытия = Начисления.ДатаНачалаСобытия;
Если Начисления.НачисляетсяВЦеломЗаМесяц Тогда
НоваяСтрока.ДатаОкончания = ОкончаниеПериодаЗаполнения;
КонецЕсли;
НоваяСтрока.ПодразделениеОрганизации = Начисления.ПодразделениеОрганизации;
НоваяСтрока.СпособРасчета = Начисления.СпособРасчета;
НоваяСтрока.ВидВремени = Начисления.ВидВремени;
НоваяСтрока.ГрафикРаботы = Начисления.ГрафикРаботы;
НоваяСтрока.СуммированныйУчетРабочегоВремени = Начисления.СуммированныйУчетРабочегоВремени;

Если Не Начисления.НачисляетсяВЦеломЗаМесяц Тогда
НезакрытыеСтроки.Добавить(НоваяСтрока);
СтрокиНачисленийТекущегоНазначения.Добавить(НоваяСтрока);
КонецЕсли;

// Добавим начисления по ночным и вечерним, если требуется и если это - основной вид расчета
Если Начисления.ОсновноеНачисление И Начисления.ЕстьНочные И НЕ ЕстьПлановаяДоплатаЗаНочные Тогда
НоваяСтрока = ТЗНачисления.Добавить();
НоваяСтрока.Сотрудник = Начисления.Сотрудник;
НоваяСтрока.Физлицо = Начисления.Физлицо;
НоваяСтрока.ВидРасчета = ДоплатаЗаНочные;
НоваяСтрока.Показатель1 = (Начисления.ЧасоваяТарифнаяСтавка * ПроцентДоплатыЗаНочныеЧасы) / 100;
НоваяСтрока.Основное = Ложь;
НоваяСтрока.ДатаНачала = Начисления.Период;
НоваяСтрока.ПодразделениеОрганизации = Начисления.ПодразделениеОрганизации;
НоваяСтрока.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ДоплатаЗаНочныеЧасы;
НоваяСтрока.ВидВремени = Перечисления.ВидыУчетаВремени.ПоНочнымЧасам;
НоваяСтрока.ГрафикРаботы = Начисления.ГрафикРаботы;
НоваяСтрока.СуммированныйУчетРабочегоВремени = Начисления.СуммированныйУчетРабочегоВремени;

НезакрытыеСтроки.Добавить(НоваяСтрока);
СтрокиНачисленийТекущегоНазначения.Добавить(НоваяСтрока);
СтрокиНочныхТекущегоНазначения.Добавить(НоваяСтрока);

КонецЕсли;

Если Начисления.ОсновноеНачисление И Начисления.ЕстьВечерние И НЕ ЕстьПлановаяДоплатаЗаВечерние Тогда
НоваяСтрока = ТЗНачисления.Добавить();
НоваяСтрока.Сотрудник = Начисления.Сотрудник;
НоваяСтрока.Физлицо = Начисления.Физлицо;
НоваяСтрока.ВидРасчета = ДоплатаЗаВечерние;
НоваяСтрока.Показатель1 = (Начисления.ЧасоваяТарифнаяСтавка * ПроцентДоплатыЗаВечерниеЧасы) / 100;
НоваяСтрока.Основное = Ложь;
НоваяСтрока.ДатаНачала = Начисления.Период;
НоваяСтрока.ПодразделениеОрганизации = Начисления.ПодразделениеОрганизации;
НоваяСтрока.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ДоплатаЗаВечерниеЧасы;
НоваяСтрока.ВидВремени = Перечисления.ВидыУчетаВремени.ПоВечернимЧасам;
НоваяСтрока.ГрафикРаботы = Начисления.ГрафикРаботы;
НоваяСтрока.СуммированныйУчетРабочегоВремени = Начисления.СуммированныйУчетРабочегоВремени;

НезакрытыеСтроки.Добавить(НоваяСтрока);
СтрокиНачисленийТекущегоНазначения.Добавить(НоваяСтрока);
СтрокиВечернихТекущегоНазначения.Добавить(НоваяСтрока);

КонецЕсли;

Если Начисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаВечерниеЧасы ИЛИ Начисления.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаНочныеЧасы
ИЛИ Начисления.ВидРасчета = ДоплатаЗаНочные ИЛИ Начисления.ВидРасчета = ДоплатаЗаВечерние Тогда

СтрокаДоплаты = НоваяСтрока;

Отбор = Новый Структура();
Отбор.Вставить("Сотрудник", Начисления.Сотрудник);
Отбор.Вставить("Физлицо", Начисления.Физлицо);
Отбор.Вставить("ОсновноеНачисление", Истина);
Строки = ВремТЗНачисления.НайтиСтроки(Отбор);

ОтборДоплаты = Новый Структура();
ОтборДоплаты.Вставить("Сотрудник", Начисления.Сотрудник);
ОтборДоплаты.Вставить("Физлицо", Начисления.Физлицо);
ОтборДоплаты.Вставить("ВидРасчета", Начисления.ВидРасчета);
СтрокиДоплаты = ВремТЗНачисления.НайтиСтроки(ОтборДоплаты);


Если Строки.Количество() > 1 И СтрокиДоплаты.Количество() < 2 Тогда

КоличествоСтрок = Строки.Количество();
НомерСтр = 0;
ДатаНачала = СтрокаДоплаты.ДатаНачала;
Для Каждого СтрокаТЗНачисления Из Строки Цикл
НомерСтр = НомерСтр + 1;
Если НомерСтр > 1 Тогда

Если ДатаНачала >= СтрокаТЗНачисления.Период Тогда
ИндексСтрокиНезакрытые = НезакрытыеСтроки.Найти(СтрокаДоплаты);
НезакрытыеСтроки.Удалить(ИндексСтрокиНезакрытые);

ИндексСтрокиТекНазнач = СтрокиНачисленийТекущегоНазначения.Найти(СтрокаДоплаты);
СтрокиНачисленийТекущегоНазначения.Удалить(ИндексСтрокиТекНазнач);

ИндексСтроки = ТЗНачисления.Найти(СтрокаДоплаты);
ТЗНачисления.Удалить(ИндексСтроки);
ИначеЕсли НомерСтр = 2 Тогда
// если не удаляем строку доплаты, то "закроем" ее (ставим дату окончания)
СтрокаДоплаты.ДатаОкончания = СтрокаТЗНачисления.Период - 1;

ИндексСтрокиНезакрытые = НезакрытыеСтроки.Найти(СтрокаДоплаты);
НезакрытыеСтроки.Удалить(ИндексСтрокиНезакрытые);

КонецЕсли;

СтрокаДоплаты = ТЗНачисления.Добавить();
СтрокаДоплаты.Сотрудник = СтрокаТЗНачисления.Сотрудник;
СтрокаДоплаты.Физлицо = СтрокаТЗНачисления.Физлицо;
СтрокаДоплаты.ВидРасчета = Начисления.ВидРасчета;
СтрокаДоплаты.КодВычета = Начисления.КодВычета;
СтрокаДоплаты.Показатель1 = Начисления.Показатель1 / 100 * СтрокаТЗНачисления.ЧасоваяТарифнаяСтавка;
СтрокаДоплаты.Основное = Начисления.ОсновноеНачисление;
СтрокаДоплаты.ДатаНачала = СтрокаТЗНачисления.Период;
СтрокаДоплаты.ДатаНачалаСобытия = СтрокаТЗНачисления.ДатаНачалаСобытия;
СтрокаДоплаты.ПодразделениеОрганизации = СтрокаТЗНачисления.ПодразделениеОрганизации;
СтрокаДоплаты.СпособРасчета = Начисления.СпособРасчета;
СтрокаДоплаты.ВидВремени = Начисления.ВидВремени;
СтрокаДоплаты.ГрафикРаботы = Начисления.ГрафикРаботы;
СтрокаДоплаты.СуммированныйУчетРабочегоВремени = Начисления.СуммированныйУчетРабочегоВремени;

ДатаНачала = СтрокаДоплаты.ДатаНачала;

НезакрытыеСтроки.Добавить(СтрокаДоплаты);
СтрокиНачисленийТекущегоНазначения.Добавить(СтрокаДоплаты);

КонецЕсли;
КонецЦикла;
ИначеЕсли Строки.Количество() > 1 Тогда
Для Каждого СтрокаТЗДопНачисления Из СтрокиДоплаты Цикл
Если СтрокаТЗДопНачисления.Период = НоваяСтрока.ДатаНачала Тогда
Для Каждого СтрокаТЗНачисления Из Строки Цикл
Если СтрокаТЗНачисления.Период = НоваяСтрока.ДатаНачала Тогда
НоваяСтрока.Показатель1 = Начисления.Показатель1 / 100 * СтрокаТЗНачисления.ЧасоваяТарифнаяСтавка;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;

Если ПроведениеРасчетов.ЭтоРасчетОтСтажа(Начисления.СпособРасчета) И Начисления.ДеньСменыКоэффициентаСтажа <> Null Тогда
// установим дату окончания предыдущего расчета от стажа
Если День(КонецМесяца(Начисления.Период)) >= Начисления.ДеньСменыКоэффициентаСтажа Тогда
ДатаСменыКоэффициентаСтажа = Дата(Год(Начисления.Период), Месяц(Начисления.Период), Начисления.ДеньСменыКоэффициентаСтажа) - 1;
Если ДатаСменыКоэффициентаСтажа > НоваяСтрока.ДатаНачала Тогда
НоваяСтрока.ДатаОкончания = ДатаСменыКоэффициентаСтажа;
// ... и введем еще один
ДопНоваяСтрока = ТЗНачисления.Добавить();
ДопНоваяСтрока.Сотрудник = Начисления.Сотрудник;
ДопНоваяСтрока.Физлицо = Начисления.Физлицо;
ДопНоваяСтрока.ВидРасчета = Начисления.ВидРасчета;
ДопНоваяСтрока.КодВычета = Начисления.КодВычета;
ДопНоваяСтрока.Показатель1 = Начисления.СледКоэффициентСтажа;
ДопНоваяСтрока.Основное = Начисления.ОсновноеНачисление;
ДопНоваяСтрока.ДатаНачала = ДатаСменыКоэффициентаСтажа + 1;
ДопНоваяСтрока.ДатаНачалаСобытия = Начисления.ДатаНачалаСобытия;
ДопНоваяСтрока.ПодразделениеОрганизации = Начисления.ПодразделениеОрганизации;
ДопНоваяСтрока.СпособРасчета = Начисления.СпособРасчета;
ДопНоваяСтрока.ГрафикРаботы = Начисления.ГрафикРаботы;
ДопНоваяСтрока.СуммированныйУчетРабочегоВремени = Начисления.СуммированныйУчетРабочегоВремени;

НезакрытыеСтроки.Добавить(ДопНоваяСтрока);
СтрокиНачисленийТекущегоНазначения.Добавить(ДопНоваяСтрока);
Иначе // период записи начиался после дня изменения коэффициента стажа - запишем в ту же запись новое значение
НоваяСтрока.Показатель1 = Начисления.СледКоэффициентСтажа;
КонецЕсли;
КонецЕсли;
ИначеЕсли ПроведениеРасчетов.ЭтоРасчетСеверныхНадбавок(Начисления.СпособРасчета) И Начисления.ДатаРегистрацииСеверногоСтажа <> Null Тогда
Если ПроцентыСевернойНадбавки.Количество() > 1 Тогда
Если ПроцентыСевернойНадбавки[0].Процент <= 0 Тогда

НоваяСтрока.ДатаНачала = Дата(Год(Начисления.Период), Месяц(Начисления.Период), День(ПроцентыСевернойНадбавки[1].Период));
НоваяСтрока.Показатель1 = ПроцентыСевернойНадбавки[1].Процент;

Иначе

// установим дату окончания предыдущего расчета от стажа
НоваяСтрока.ДатаОкончания = Дата(Год(Начисления.Период), Месяц(Начисления.Период), День(ПроцентыСевернойНадбавки[1].Период)) - 1;

// ... и введем дополнительную
// предполагаем, что в течение одного расчетного периода (месяца) не может произойти несколько
// изменений процента северной надбавки
ДопНоваяСтрока = ТЗНачисления.Добавить();
ДопНоваяСтрока.Сотрудник = Начисления.Сотрудник;
ДопНоваяСтрока.Физлицо = Начисления.Физлицо;
ДопНоваяСтрока.ВидРасчета = Начисления.ВидРасчета;
ДопНоваяСтрока.КодВычета = Начисления.КодВычета;
ДопНоваяСтрока.Показатель1 = ПроцентыСевернойНадбавки[1].Процент;
ДопНоваяСтрока.Основное = Начисления.ОсновноеНачисление;
ДопНоваяСтрока.ДатаНачала = Дата(Год(Начисления.Период), Месяц(Начисления.Период), День(ПроцентыСевернойНадбавки[1].Период));
ДопНоваяСтрока.ДатаНачалаСобытия = Начисления.ДатаНачалаСобытия;
ДопНоваяСтрока.ПодразделениеОрганизации = Начисления.ПодразделениеОрганизации;
ДопНоваяСтрока.СпособРасчета = Начисления.СпособРасчета;
ДопНоваяСтрока.ГрафикРаботы = Начисления.ГрафикРаботы;
ДопНоваяСтрока.СуммированныйУчетРабочегоВремени = Начисления.СуммированныйУчетРабочегоВремени;

НезакрытыеСтроки.Добавить(ДопНоваяСтрока);
СтрокиНачисленийТекущегоНазначения.Добавить(ДопНоваяСтрока);

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

КонецЦикла;

// закрываем незакрытые строки по последнему работнику концом месяца
ЗакрытьСтроки(ТЗНачисления, НезакрытыеСтроки, ОкончаниеПериодаЗаполнения);

Возврат ТЗНачисления;

КонецФункции

// Выполняет формирование таблицы значений для загрузки ее в табличную часть Удержания
// Параметры:
// Удержания - выборка результатат запроса
// ПериодЗаполнения - дата периода для которого выполняем заполнение документа
//
// Возвращаемое значение:
// таблица значений
//
Функция СформироватьТаблицуУдержаний(Удержания, ОкончаниеПериодаЗаполнения, МассивВалютСНезаданнымКурсом)

ТЗУдержания = Новый ТаблицаЗначений();
ТЗУдержания.Колонки.Добавить("Физлицо");
ТЗУдержания.Колонки.Добавить("ВидРасчета");
ТЗУдержания.Колонки.Добавить("Показатель1");
ТЗУдержания.Колонки.Добавить("Показатель2");
ТЗУдержания.Колонки.Добавить("Показатель3");
ТЗУдержания.Колонки.Добавить("Показатель4");
ТЗУдержания.Колонки.Добавить("Показатель5");
ТЗУдержания.Колонки.Добавить("Показатель6");
ТЗУдержания.Колонки.Добавить("ДатаНачала", ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.ДатаВремя));
ТЗУдержания.Колонки.Добавить("ДатаОкончания", ОбщегоНазначения.ПолучитьОписаниеТиповДаты(ЧастиДаты.ДатаВремя));
ТЗУдержания.Колонки.Добавить("ДокументОснование");
ТЗУдержания.Колонки.Добавить("Авторасчет");

// Массив незакрытых строк таблицы значений, т.е. тех, которым не проставлена дата окончания
НезакрытыеСтроки = Новый Массив;
ТекущееФизлицо = Справочники.ФизическиеЛица.ПустаяСсылка();

Пока Удержания.Следующий() Цикл

Для Сч = 1 По 6 Цикл
Если ЗначениеЗаполнено(Удержания["Валюта"+Сч]) И (Удержания["КурсВалюты"+Сч] = NULL ИЛИ Удержания["КурсВалюты"+Сч] = 0) Тогда
МассивВалютСНезаданнымКурсом[Удержания["Валюта"+ Сч]] = Истина;
КонецЕсли;
КонецЦикла;

Если Удержания.Физлицо <> ТекущееФизлицо Тогда
// закрываем строки концом месяца
ЗакрытьСтроки(ТЗУдержания, НезакрытыеСтроки, ОкончаниеПериодаЗаполнения);
ТекущееФизлицо = Удержания.Физлицо;
Иначе
// найдем такой же вид расчета по тому же основанию среди незакрытых строк
Строка = Неопределено;
ИндексСтроки = Неопределено;
НайтиСредиНезакрытыхУдержаний(НезакрытыеСтроки, Удержания.ВидРасчета, Удержания.ДокументОснование, Строка, ИндексСтроки);
Если Строка <> Неопределено Тогда
// нашли
Если Строка.ДатаНачала = Удержания.Период Тогда
// если дата та же - меняем данные
// не вводим новую строку в формируемую таблицу значений
// и оставляем "незакрытой"
Строка.Показатель1 = Удержания.Показатель1;
Строка.Показатель2 = Удержания.Показатель2;
Строка.Показатель3 = Удержания.Показатель3;
Строка.Показатель4 = Удержания.Показатель4;
Строка.Показатель5 = Удержания.Показатель5;
Строка.Показатель6 = Удержания.Показатель6;
Продолжить;
Иначе
// иначе - "закрываем" строку и удаляем из массива незакрытых
Строка.ДатаОкончания = Удержания.Период-1;
НезакрытыеСтроки.Удалить(ИндексСтроки);
КонецЕсли;
КонецЕсли;
КонецЕсли;

Если Удержания.Действие = Перечисления.ВидыДействияСНачислением.Прекратить Тогда
Продолжить;
КонецЕсли;

НоваяСтрока = ТЗУдержания.Добавить();
НоваяСтрока.Физлицо = Удержания.Физлицо;
НоваяСтрока.ВидРасчета = Удержания.ВидРасчета;
НоваяСтрока.Показатель1 = Удержания.Показатель1;
НоваяСтрока.Показатель2 = Удержания.Показатель2;
НоваяСтрока.Показатель3 = Удержания.Показатель3;
НоваяСтрока.Показатель4 = Удержания.Показатель4;
НоваяСтрока.Показатель5 = Удержания.Показатель5;
НоваяСтрока.Показатель6 = Удержания.Показатель6;
НоваяСтрока.ДатаНачала = Удержания.Период;
НоваяСтрока.ДокументОснование = Удержания.ДокументОснование;
НоваяСтрока.Авторасчет = Истина;
НезакрытыеСтроки.Добавить(НоваяСтрока);

КонецЦикла;
// закрываем строки концом месяца
ЗакрытьСтроки(ТЗУдержания, НезакрытыеСтроки, ОкончаниеПериодаЗаполнения);
Возврат ТЗУдержания;

КонецФункции // СформироватьТаблицуУдержаний()

// процедура дописывать строки в таблицуИсточник из таблицы Приемник.
// Обе таблицы должны иметь одинаковую структуру колонок, иначе возникнет ошибка.
Процедура ДописатьСтрокиИзТаблицыВТаблицу(ТаблицаИсточник, ТаблицаПриемник)

Для Каждого СтрокаТаблицыИсточника Из ТаблицаИсточник Цикл
ЗаполнитьЗначенияСвойств(ТаблицаПриемник.Добавить(), СтрокаТаблицыИсточника);
КонецЦикла;

КонецПроцедуры // ДописатьСтрокиИзТаблицыВТаблицу()

// Заполняет набор записей по переданным данным расчета НДФЛ
//
// Параметры:
// НаборЗаписей - набор записей регистра НДФЛРасчетыСБюджетом
// ДанныеНДФЛ - таблица значений - данные расчета НДФЛ
//
// Возвращаемое значение:
// Нет
//
Процедура ЗаполнитьНаборЗаписейПоДаннымНДФЛ(НаборЗаписей, ДанныеНДФЛ, ВыборкаПоШапкеДокумента, Перерасчет = Ложь, ФизлицаСписок = Неопределено, КомментироватьРасчет = Ложь, ВыборкаПодразделений)

УжеИсчислили = 0;
УжеПрименилиЛичный = 0;
УжеПрименилиДетский = 0;
УжеПрименилиДетскийДвойные = 0;
УжеПрименилиДетскийИнвалидов = 0;
УжеПрименилиДетскийИнвалидовДвойные = 0;
УжеПрименилиДетскийДвойныеВторые = 0;
УжеПрименилиДетскийИнвалидовДвойныеВторые = 0;

ТекущееФизлицо = Справочники.ФизическиеЛица.ПустаяСсылка();
ТекущийГод = 0;
СтруктураПоиска = Новый Структура("Физлицо, МесяцНалоговогоПериода");

// строим соответствие физлиц, по которым считается НДФЛ и индексов их строк табличной части НДФЛ
РаботникиДляРасчетаНДФЛ = Новый Соответствие;
РасчетПоФизлицу = Ложь;

Если ФизлицаСписок <> Неопределено И Не Перерасчет Тогда

// расчет по одному физлицу
РасчетПоФизлицу = Истина;
РаботникиДляРасчетаНДФЛ.Вставить(ФизлицаСписок[0].Значение);
СтруктураПоиска = Новый Структура("ФизЛицо", ФизлицаСписок[0].Значение);
// запоминаем позицию физлица в табличной части
ИндексСтрокиТаблицыНДФЛ = НеОпределено;
МассивСтрок = НДФЛ.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаТабличнойЧасти Из МассивСтрок Цикл
Если ИндексСтрокиТаблицыНДФЛ = НеОпределено Тогда
ИндексСтрокиТаблицыНДФЛ = СтрокаТабличнойЧасти.НомерСтроки - 1;
КонецЕсли;
НДФЛ.Удалить(СтрокаТабличнойЧасти);
КонецЦикла;
Если ИндексСтрокиТаблицыНДФЛ = НеОпределено Тогда
ИндексСтрокиТаблицыНДФЛ = 0;
КонецЕсли;

ИначеЕсли ФизлицаСписок <> Неопределено И Перерасчет Тогда
// это перерасчет
Для Каждого ЭлементСписка Из ФизлицаСписок Цикл
РаботникиДляРасчетаНДФЛ.Вставить(ЭлементСписка.Значение);
КонецЦикла;
Иначе //расчет всего документа
Для Каждого Строка Из НДФЛ Цикл
РаботникиДляРасчетаНДФЛ.Вставить(Строка.Физлицо);
КонецЦикла;
// очистим результаты расчета НДФЛ, которые находятся в табличной части документа
НДФЛ.Очистить();

КонецЕсли;

Если КомментироватьРасчет Тогда
КомментарийНДФЛ = ОбщегоНазначения.КомментарийРасчета("Расчет НДФЛ");
КонецЕсли;

СтруктураПоискаПодразделения = Новый Структура("Физлицо,Период");

Пока ДанныеНДФЛ.Следующий() Цикл

Если ТекущееФизлицо <> ДанныеНДФЛ.ФизЛицо ИЛИ ТекущийГод <> Год(ДанныеНДФЛ.Период) Тогда
УжеИсчислили = 0;
// уже примененные вычеты
УжеПрименилиДетский = 0;
УжеПрименилиДетскийДвойные = 0;
УжеПрименилиДетскийИнвалидов = 0;
УжеПрименилиДетскийИнвалидовДвойные = 0;
УжеПрименилиДетскийДвойныеВторые = 0;
УжеПрименилиДетскийИнвалидовДвойныеВторые = 0;
УжеПрименилиЛичный = 0;
УжеПрименили312 = 0;
УжеПрименили311 = 0;
// текущие физлицо и год периода
ТекущееФизлицо = ДанныеНДФЛ.ФизЛицо;
ТекущийГод = Год(ДанныеНДФЛ.Период);
КонецЕсли;

Если ДанныеНДФЛ.Резидент Тогда
НалогИсчисленный = ДанныеНДФЛ.НалогИсчисленный - УжеИсчислили;
Иначе
НалогИсчисленный = ДанныеНДФЛ.НалогИсчисленный;
КонецЕсли;
// ранее примененные вычеты текущего месяца
РанееПримененныеДетскиеТМ = ДанныеНДФЛ.РанееПримененныеВычетыДетскиеЗаМесяц;
РанееПримененныеДетскиеИнвалидовТМ = ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовЗаМесяц;
РанееПримененныеДетскиеДвойныеТМ = ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеЗаМесяц;
РанееПримененныеДетскиеИнвалидовДвойныеТМ = ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеЗаМесяц;
РанееПримененныеДетскиеДвойныеВторыеТМ = ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеВторыеЗаМесяц;
РанееПримененныеДетскиеИнвалидовДвойныеВторыеТМ = ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеВторыеЗаМесяц;
РанееПримененныеЛичныеТМ = ДанныеНДФЛ.РанееПримененныеВычетыЛичныеЗаМесяц;
РанееПримененные312ТМ = ДанныеНДФЛ.РанееПримененныеВычеты312ЗаМесяц;
РанееПримененные311ТМ = ДанныеНДФЛ.РанееПримененныеВычеты311ЗаМесяц;

// отрицательный, примененный за месяц вычет, который нужно перераспределить
КПерераспределению = 0;

// первый проход
ВычетыПримененныеДетский = ДанныеНДФЛ.ПримененныеВычетыДетские - ДанныеНДФЛ.РанееПримененныеВычетыДетские - УжеПрименилиДетский;
ВычетыПримененныеДетскийИнвалидов = ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидов - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидов - УжеПрименилиДетскийИнвалидов;
ВычетыПримененныеДетскийДвойные = ДанныеНДФЛ.ПримененныеВычетыДетскиеДвойные - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойные - УжеПрименилиДетскийДвойные;
ВычетыПримененныеДетскийИнвалидовДвойные = ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидовДвойные - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойные - УжеПрименилиДетскийИнвалидовДвойные;
ВычетыПримененныеДетскийДвойныеВторые = ДанныеНДФЛ.ПримененныеВычетыДетскиеДвойныеВторые - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеВторые - УжеПрименилиДетскийДвойныеВторые;
ВычетыПримененныеДетскийИнвалидовДвойныеВторые = ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидовДвойныеВторые - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеВторые - УжеПрименилиДетскийИнвалидовДвойныеВторые;
ВычетыПримененныеЛичный = ДанныеНДФЛ.ПримененныеВычетыЛичные - ДанныеНДФЛ.РанееПримененныеВычетыЛичные - УжеПрименилиЛичный;
ВычетыПримененные312 = ДанныеНДФЛ.ПримененныеВычеты312 - ДанныеНДФЛ.РанееПримененныеВычеты312 - УжеПрименили312;
ВычетыПримененные311 = ДанныеНДФЛ.ПримененныеВычеты311 - ДанныеНДФЛ.РанееПримененныеВычеты311 - УжеПрименили311;

// рассчитаем сумму вычетов, которую нужно перераспеределить во избежание применения
// отрицательных вычетов за месяц
КПерераспределению = Мин(ВычетыПримененныеДетскийИнвалидов + ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовЗаМесяц, 0) +
Мин(ВычетыПримененныеДетскийИнвалидовДвойные + ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеЗаМесяц, 0) +
Мин(ВычетыПримененныеДетскийДвойные + ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеЗаМесяц, 0) +
Мин(ВычетыПримененныеДетскийИнвалидовДвойныеВторые + ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеВторыеЗаМесяц, 0) +
Мин(ВычетыПримененныеДетскийДвойныеВторые + ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеВторыеЗаМесяц, 0) +
Мин(ВычетыПримененныеЛичный + ДанныеНДФЛ.РанееПримененныеВычетыЛичныеЗаМесяц, 0) +
Мин(ВычетыПримененные312 + ДанныеНДФЛ.РанееПримененныеВычеты312ЗаМесяц, 0) +
Мин(ВычетыПримененные311 + ДанныеНДФЛ.РанееПримененныеВычеты311ЗаМесяц, 0);

// если нужно - второй проход для перераспеределения примененных вычетов
Если КПерераспределению < 0 Тогда

ВычетыПримененныеДетский = Макс(ДанныеНДФЛ.ПримененныеВычетыДетские - ДанныеНДФЛ.РанееПримененныеВычетыДетские - УжеПрименилиДетский + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычетыДетскиеЗаМесяц);
Перераспределено = ВычетыПримененныеДетский - (ДанныеНДФЛ.ПримененныеВычетыДетские - ДанныеНДФЛ.РанееПримененныеВычетыДетские - УжеПрименилиДетский);
КПерераспределению = КПерераспределению - Перераспределено;

ВычетыПримененныеДетскийДвойные = Макс(ДанныеНДФЛ.ПримененныеВычетыДетскиеДвойные - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойные - УжеПрименилиДетскийДвойные + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеЗаМесяц);
Перераспределено = ВычетыПримененныеДетскийДвойные - (ДанныеНДФЛ.ПримененныеВычетыДетскиеДвойные - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойные - УжеПрименилиДетскийДвойные);
КПерераспределению = КПерераспределению - Перераспределено;

ВычетыПримененныеДетскийДвойныеВторые = Макс(ДанныеНДФЛ.ПримененныеВычетыДетскиеДвойныеВторые - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеВторые - УжеПрименилиДетскийДвойныеВторые + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеВторыеЗаМесяц);
Перераспределено = ВычетыПримененныеДетскийДвойныеВторые - (ДанныеНДФЛ.ПримененныеВычетыДетскиеДвойныеВторые - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеДвойныеВторые - УжеПрименилиДетскийДвойныеВторые);
КПерераспределению = КПерераспределению - Перераспределено;

ВычетыПримененныеДетскийИнвалидов = Макс(ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидов - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидов - УжеПрименилиДетскийИнвалидов + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовЗаМесяц);
Перераспределено = ВычетыПримененныеДетскийИнвалидов - (ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидов - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидов - УжеПрименилиДетскийИнвалидов);
КПерераспределению = КПерераспределению - Перераспределено;

ВычетыПримененныеДетскийИнвалидовДвойные = Макс(ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидовДвойные - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойные - УжеПрименилиДетскийИнвалидовДвойные + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеЗаМесяц);
Перераспределено = ВычетыПримененныеДетскийИнвалидовДвойные - (ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидовДвойные - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойные - УжеПрименилиДетскийИнвалидовДвойные);
КПерераспределению = КПерераспределению - Перераспределено;

ВычетыПримененныеДетскийИнвалидовДвойныеВторые = Макс(ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидовДвойныеВторые - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеВторые - УжеПрименилиДетскийИнвалидовДвойныеВторые + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеВторыеЗаМесяц);
Перераспределено = ВычетыПримененныеДетскийИнвалидовДвойныеВторые - (ДанныеНДФЛ.ПримененныеВычетыДетскиеИнвалидовДвойныеВторые - ДанныеНДФЛ.РанееПримененныеВычетыДетскиеИнвалидовДвойныеВторые - УжеПрименилиДетскийИнвалидовДвойныеВторые);
КПерераспределению = КПерераспределению - Перераспределено;

ВычетыПримененныеЛичный = Макс(ДанныеНДФЛ.ПримененныеВычетыЛичные - ДанныеНДФЛ.РанееПримененныеВычетыЛичные - УжеПрименилиЛичный + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычетыЛичныеЗаМесяц);
Перераспределено = ВычетыПримененныеЛичный - (ДанныеНДФЛ.ПримененныеВычетыЛичные - ДанныеНДФЛ.РанееПримененныеВычетыЛичные - УжеПрименилиЛичный);
КПерераспределению = КПерераспределению - Перераспределено;

ВычетыПримененные312 = Макс(ДанныеНДФЛ.ПримененныеВычеты312 - ДанныеНДФЛ.РанееПримененныеВычеты312 - УжеПрименили312 + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычеты312ЗаМесяц);
Перераспределено = ВычетыПримененные312 - (ДанныеНДФЛ.ПримененныеВычеты312 - ДанныеНДФЛ.РанееПримененныеВычеты312 - УжеПрименили312);
КПерераспределению = КПерераспределению - Перераспределено;

ВычетыПримененные311 = Макс(ДанныеНДФЛ.ПримененныеВычеты311 - ДанныеНДФЛ.РанееПримененныеВычеты311 - УжеПрименили311 + КПерераспределению, -ДанныеНДФЛ.РанееПримененныеВычеты311ЗаМесяц);
Перераспределено = ВычетыПримененные311 - (ДанныеНДФЛ.ПримененныеВычеты311 - ДанныеНДФЛ.РанееПримененныеВычеты311 - УжеПрименили311);
КПерераспределению = КПерераспределению - Перераспределено;

КонецЕсли;

Если НалогИсчисленный = 0 и
ВычетыПримененныеЛичный = 0 и
ВычетыПримененныеДетский = 0 и
ВычетыПримененныеДетскийДвойные = 0 и
ВычетыПримененныеДетскийИнвалидов = 0 и
ВычетыПримененныеДетскийИнвалидовДвойные = 0 и
ВычетыПримененныеДетскийДвойныеВторые = 0 и
ВычетыПримененныеДетскийИнвалидовДвойныеВторые = 0 и
ВычетыПримененные312 = 0 и
ВычетыПримененные311 = 0 Тогда
Продолжить;
КонецЕсли;

Если КомментироватьРасчет Тогда
КомментарийМесяца = ОбщегоНазначения.КомментарийРасчета("Результат расчета за " + Формат(ДанныеНДФЛ.Период, "ДФ=ММММ") + ": " + НалогИсчисленный, КомментарийНДФЛ);
Если ДанныеНДФЛ.Резидент Тогда
ОбщегоНазначения.КомментарийРасчета("Статус: резидент РФ", КомментарийМесяца);
Иначе
ОбщегоНазначения.КомментарийРасчета("Статус: не является резидентом РФ", КомментарийМесяца,,, Перечисления.ВидыСообщений.ВажнаяИнформация);
КонецЕсли;
КомментарийДохода = ОбщегоНазначения.КомментарийРасчета("Доход за период, всего: " + ДанныеНДФЛ.ДоходЗаМесяц, КомментарийМесяца,,,, Ложь);

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

// Если передан набор записей - заполняем и его
Если НаборЗаписей <> Неопределено Тогда
// зарегистрируем в регистре
Движение = НаборЗаписей.Добавить();

// Свойства
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = КонецМесяца(ПериодРегистрации);

// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ДанныеНДФЛ.ФизЛицо;
Движение.МесяцНалоговогоПериода = ДанныеНДФЛ.Период;
Движение.СтавкаНалогообложенияРезидента = Перечисления.НДФЛСтавкиНалогообложенияРезидента.Ставка13;

// Ресурсы
Движение.Налог = НалогИсчисленный;

// Реквизиты
Движение.ВидСтроки = Перечисления.НДФЛРасчетыСБюджетомВидСтроки.Начисление;
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
Движение.ИсчисленоИзЗарплаты = Истина;
КонецЕсли;

// Ниже - заполняем табличную часть документа
Если Перерасчет Тогда
СтруктураПоиска.Физлицо = ДанныеНДФЛ.ФизЛицо;
СтруктураПоиска.МесяцНалоговогоПериода = ДанныеНДФЛ.Период;
Строки = НДФЛ.НайтиСтроки(СтруктураПоиска);
Если Строки.Количество() > 0 Тогда
СтрокаНДФЛ = Строки[0];
Иначе
СтрокаНДФЛ = НДФЛ.Добавить();
КонецЕсли;
Иначе
Если РасчетПоФизлицу Тогда
СтрокаНДФЛ = НДФЛ.Вставить(ИндексСтрокиТаблицыНДФЛ);
ИндексСтрокиТаблицыНДФЛ = ИндексСтрокиТаблицыНДФЛ+1;
Иначе
СтрокаНДФЛ = НДФЛ.Добавить();
КонецЕсли;
КонецЕсли;
РаботникиДляРасчетаНДФЛ.Удалить(ДанныеНДФЛ.ФизЛицо);

СтрокаНДФЛ.ФизЛицо = ДанныеНДФЛ.ФизЛицо;
СтрокаНДФЛ.Налог = НалогИсчисленный;
СтрокаНДФЛ.ПримененныйВычетЛичный = ВычетыПримененныеЛичный;
СтрокаНДФЛ.ПримененныйВычетНаДетей = ВычетыПримененныеДетский;
СтрокаНДФЛ.ПримененныйВычетНаДетейДвойной = ВычетыПримененныеДетскийДвойные;
СтрокаНДФЛ.ПримененныйВычетНаДетейИнвалидов = ВычетыПримененныеДетскийИнвалидов;
СтрокаНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойной = ВычетыПримененныеДетскийИнвалидовДвойные;
СтрокаНДФЛ.ПримененныйВычетНаДетейДвойнойВторой = ВычетыПримененныеДетскийДвойныеВторые;
СтрокаНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойнойВторой = ВычетыПримененныеДетскийИнвалидовДвойныеВторые;
СтрокаНДФЛ.ПримененныйВычетИмущественныйРасход = ВычетыПримененные311;
СтрокаНДФЛ.ПримененныйВычетИмущественныйПроцентыПоКредитам = ВычетыПримененные312;
СтрокаНДФЛ.МесяцНалоговогоПериода = ДанныеНДФЛ.Период;

// Запомним суммы для следующей итерации
УжеИсчислили = УжеИсчислили + НалогИсчисленный;
УжеПрименилиЛичный = УжеПрименилиЛичный + ВычетыПримененныеЛичный;
УжеПрименилиДетский = УжеПрименилиДетский + ВычетыПримененныеДетский;
УжеПрименилиДетскийДвойные = УжеПрименилиДетскийДвойные + ВычетыПримененныеДетскийДвойные;
УжеПрименилиДетскийИнвалидов = УжеПрименилиДетскийИнвалидов + ВычетыПримененныеДетскийИнвалидов;
УжеПрименилиДетскийИнвалидовДвойные = УжеПрименилиДетскийИнвалидовДвойные + ВычетыПримененныеДетскийИнвалидовДвойные;
УжеПрименилиДетскийДвойныеВторые = УжеПрименилиДетскийДвойныеВторые + ВычетыПримененныеДетскийДвойныеВторые;
УжеПрименилиДетскийИнвалидовДвойныеВторые = УжеПрименилиДетскийИнвалидовДвойныеВторые + ВычетыПримененныеДетскийИнвалидовДвойныеВторые;
УжеПрименили312 = УжеПрименили312 + ВычетыПримененные312;
УжеПрименили311 = УжеПрименили311 + ВычетыПримененные311;

КонецЦикла;

// заполним НДФЛ
Для Каждого Элемент Из РаботникиДляРасчетаНДФЛ Цикл
НоваяСтрока = НДФЛ.Добавить();
НоваяСтрока.ФизЛицо = Элемент.Ключ;
НоваяСтрока.МесяцНалоговогоПериода = НачалоМесяца(ПериодРегистрации);
КонецЦикла;

КонецПроцедуры // ЗаполнитьНаборЗаписейПоДаннымНДФЛ()

// Закрытие строк - ввод значения ДатаОкончания для тех строк у которых не нулевое
// значение Размер и удаление тех, у кого ВидРасчета - неопределено или ДатаНачала > даты закрытия
// Параметры:
// ТЗ - таблица значений
// НезакрытыеСтроки - массив незакрытых строк таблицы значений ТЗ
// ДатаОкончания - дата, которую нужно проставить в качестве "закрывающей"
//
// Возвращаемое зеначение:
// нет
//
Процедура ЗакрытьСтроки(ТЗ, НезакрытыеСтроки, ДатаОкончания)

Для Каждого Строка Из НезакрытыеСтроки Цикл
Если Строка.ВидРасчета = Неопределено ИЛИ Строка.ДатаНачала > ДатаОкончания Тогда
ТЗ.Удалить(Строка);
ИначеЕсли Строка.ДатаОкончания = '00010101' или Строка.ДатаОкончания > ДатаОкончания Тогда
Строка.ДатаОкончания = ДатаОкончания;
КонецЕсли;
КонецЦикла;

НезакрытыеСтроки.Очистить();

КонецПроцедуры // ЗакрытьСтроки()

// Найти строку в массиве строк по переданному виду расчета или по признаку "Основное"
// Найденная строка и ее индекс возвращаются через переданные параметры Строка и ИндексСтроки
// Параметры:
// НезакрытыеСтроки - массив строк таблицы значений
// ПоискОсновного - признак поиска основного начисления
// ВидРасчета - вид расчета ссылка
// Строка - в этот параметр будет возвращена строка, начальное значение - Неопределено
// ИндексСтроки - в этот параметр будет возвращен индекс строки, начальное значение - Неопределено
//
// Возвращаемое зеначение:
// нет
//
Процедура НайтиСредиНезакрытых(НезакрытыеСтроки, ПоискОсновного, ВидРасчета, Строки)
Количество = НезакрытыеСтроки.Количество();
Для Сч = 1 По Количество Цикл
Индекс = Количество - Сч;
Если (ПоискОсновного И НезакрытыеСтроки[Индекс].Основное)
ИЛИ (НЕ ПоискОсновного И НезакрытыеСтроки[Индекс].ВидРасчета = ВидРасчета) Тогда
Строки.Добавить(НезакрытыеСтроки[Индекс]);
КонецЕсли;
КонецЦикла;

КонецПроцедуры // НайтиСредиНезакрытых()

// Нйти строку в массиве строк по переданному виду расчета и основанию (ссылка на документ)
// Найденная строка и ее индекс возвращаются через переданные параметры Строка и ИндексСтроки
// Параметры:
// НезакрытыеСтроки - массив строк таблицы значений
// ВидРасчета - вид расчета ссылка
// ДокументОснование - документ ссылка
// Строка - в этот параметр будет возвращена строка, начальное значение - Неопределено
// ИндексСтроки - в этот параметр будет возвращен индекс строки, начальное значение - Неопределено
//
// Возвращаемое зеначение:
// нет
//
Процедура НайтиСредиНезакрытыхУдержаний(НезакрытыеСтроки, ВидРасчета, ДокументОснование, Строка, ИндексСтроки)

Для Индекс = 0 По НезакрытыеСтроки.ВГраница() Цикл
Если НезакрытыеСтроки[Индекс].ВидРасчета = ВидРасчета И НезакрытыеСтроки[Индекс].ДокументОснование = ДокументОснование Тогда
ИндексСтроки = Индекс;
Строка = НезакрытыеСтроки[Индекс];
КонецЕсли;
КонецЦикла;

КонецПроцедуры // НайтиСредиНезакрытыхУдержаний()

// Добавляет строку сторно начислений в движения и табличную часть документа
Процедура ДобавитьСтрокуСторно(Движения, ТабличнаяЧасть, Строка)

СтрокаСохраняемыхРеквизитов = "Сотрудник,ФизЛицо,Организация,ВидРасчета,ДатаНачалаСобытия,"
+ "ОбособленноеПодразделение,ПодразделениеОрганизации,Показатель1,Показатель2,Показатель3,Показатель4,Показатель5,Показатель6,ВидУчетаВремени,ГрафикРаботы,ГрафикРаботыНорма,"
+ "ПериодРасчетаСреднегоЗаработкаНачало,ПериодРасчетаСреднегоЗаработкаОкончание,СторнируемыйДокумент";
// новая запись движений
Движение = Движения.Добавить();

ЗаполнитьЗначенияСвойств(Движение,Строка,СтрокаСохраняемыхРеквизитов);

// Свойства
Движение.ПериодРегистрации = Строка.ПериодРегистрацииСторно;
Движение.ПериодДействияНачало = Строка.ПериодДействияНачалоСторно;
Движение.ПериодДействияКонец = Строка.ПериодДействияКонецСторно;
Движение.БазовыйПериодНачало = Строка.БазовыйПериодНачало;
Движение.БазовыйПериодКонец = Строка.БазовыйПериодКонец;
Движение.Сторно = Истина;
Движение.Авторасчет = Истина;

СтрокаСохраняемыхРеквизитов = "Сотрудник,ФизЛицо,ВидРасчета,ДатаНачалаСобытия,"
+ "ПодразделениеОрганизации,Показатель1,Показатель2,Показатель3,Показатель4,Показатель5,Показатель6,"
+ "ПериодРасчетаСреднегоЗаработкаНачало,ПериодРасчетаСреднегоЗаработкаОкончание,СторнируемыйДокумент";
// новая строка табличной части
СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();

ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти,Строка,СтрокаСохраняемыхРеквизитов);

СтрокаТабличнойЧасти.ДатаНачала = Строка.ПериодДействияНачалоСторно;
СтрокаТабличнойЧасти.ДатаОкончания = Строка.ПериодДействияКонецСторно;

СтрокаТабличнойЧасти.Сторно = Истина;
СтрокаТабличнойЧасти.Авторасчет = Истина;

КонецПроцедуры

Процедура РаспределитьНачисленияПоИФ()

// Распределяем по ИФ
Отражение =
ОтражениеВУчете.РаспределитьРасчетыПоИсточникамФинансирования(
Ссылка,
"ОсновныеНачисленияРаботниковОрганизаций,
|ДополнительныеНачисленияРаботниковОрганизаций");

// сохраняем основные
ОтражениеВУчете.ЗаполнитьТЧПоНаборуЗаписей(
НачисленияПоИФ,
Отражение.БУОсновныеНачисления);

// сохраняем дополнительные
ОтражениеВУчете.ЗаполнитьТЧПоНаборуЗаписей(
ДополнительныеНачисленияПоИФ,
Отражение.БУДополнительныеНачисления);

// Очищаем движения
Отражение.БУОсновныеНачисления.Очистить();
Отражение.БУОсновныеНачисления.Записать();
Отражение.БУДополнительныеНачисления.Очистить();
Отражение.БУДополнительныеНачисления.Записать();

/////////////////////////////////////////////////
// Распределяем вычеты дополнительных начислений

ОтражениеВУчете.РаспределитьВычетыДопНачислений(ДополнительныеНачисления, ДополнительныеНачисленияПоИФ, КонецГода(ПериодРегистрации))

КонецПроцедуры //РаспределитьНачисленияПоИФ

Процедура ЗаполнитьОтражениеДоговоров(ШапкаДокумента = Неопределено)

Если ШапкаДокумента = Неопределено Тогда
ШапкаДокумента = ПолучитьШапкуДокумента();
КонецЕсли;

// Выгружаем ТЧ в таблицу значений
ТаблицаДоговоров = ДоговорыНаВыполнениеРабот.Выгрузить();

// Заполняем таблицу отражением по настройкам
ОтражениеВУчете.ЗаполнитьНачисленияИсточникамиФинансирования(
ТаблицаДоговоров,
"ДатаНачала",
Новый Структура("ОбособленноеПодразделение", ШапкаДокумента.ОбособленноеПодразделение));

// Получаем источники из договоров
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Договоры", ДоговорыНаВыполнениеРабот.ВыгрузитьКолонку("ДокументОснование"));
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорНаВыполнениеРаботСФизЛицом.Ссылка КАК Договор,
| ДоговорНаВыполнениеРаботСФизЛицом.КОСГУ КАК КОСГУ,
| ДоговорНаВыполнениеРаботСФизЛицом.СтатьяФинансирования КАК СтатьяФинансирования,
| ДоговорНаВыполнениеРаботСФизЛицом.СтатьяРасходов КАК СтатьяРасходов
|ИЗ
| Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом
|ГДЕ
| ДоговорНаВыполнениеРаботСФизЛицом.Ссылка В(&Договоры)";
ВыборкаДоговоров = Запрос.Выполнить().Выбрать();

СтруктураПоиска = Новый Структура("Договор");

Для Каждого Договор Из ДоговорыНаВыполнениеРабот Цикл

СтруктураПоиска.Договор = Договор.ДокументОснование;

ВыборкаДоговоров.Сбросить();
Если ВыборкаДоговоров.НайтиСледующий(СтруктураПоиска) Тогда

ЗаполнитьЗначенияСвойств(Договор, ВыборкаДоговоров, "КОСГУ, СтатьяФинансирования, СтатьяРасходов");

Иначе

Договор.КОСГУ = Справочники.КОСГУ.ПустаяСсылка();
Договор.СтатьяФинансирования = Справочники.СтатьиФинансирования.ПустаяСсылка();
Договор.СтатьяРасходов = Справочники.СтатьиРасходов.ПустаяСсылка();

КонецЕсли;

Настройка = ТаблицаДоговоров.Найти(Договор.НомерСтроки, "НомерСтроки");

Если НЕ ЗначениеЗаполнено(Договор.КОСГУ) Тогда
Договор.КОСГУ = Настройка.КОСГУ
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Договор.СтатьяФинансирования) Тогда
Договор.СтатьяФинансирования = Настройка.СтатьяФинансирования
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Договор.СтатьяРасходов) Тогда
Договор.СтатьяРасходов = Настройка.СтатьяРасходов
КонецЕсли;

КонецЦикла;

КонецПроцедуры

// Распределяет исчисленный НДФЛ по источникам финансирования
//
// Параметры:
// ШапкаДокумента - спозиционированная выборка по шапке документа
// Физлицо - ссылка на физлицо, для которого производится расчет,
// или массив физлиц для расчета
// необязателен, если не указан - расчет производится
// для всего документа
//
Процедура РаспределитьНДФЛПоИФ(ШапкаДокумента, Физлицо = Неопределено)

///////////////////////////////////////////////////////////
// Сначала распределим положительные НДФЛ

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("Организация", ШапкаДокумента.ГоловнаяОрганизация);
Запрос.УстановитьПараметр("Регистратор", Ссылка);
Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);
Запрос.УстановитьПараметр("ПоВсемФизлицам", Физлицо = Неопределено);
Запрос.УстановитьПараметр("Физлица", Физлицо);
Запрос.УстановитьПараметр("ТЧНДФЛ", НДФЛ);

Запрос.Текст =
"ВЫБРАТЬ
| ТЧНДФЛ.ФизЛицо КАК ФизЛицо,
| ЗНАЧЕНИЕ(Перечисление.НДФЛСтавкиНалогообложенияРезидента.Ставка13) КАК Ставка,
| ТЧНДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| ТЧНДФЛ.Налог
|ПОМЕСТИТЬ ВТНДФЛТекущегоМесяца
|ИЗ
| &ТЧНДФЛ КАК ТЧНДФЛ
|ГДЕ
| ТЧНДФЛ.Налог >= 0
| И (&ПоВсемФизлицам
| ИЛИ ТЧНДФЛ.ФизЛицо В (&Физлица))
|
|ИНДЕКСИРОВАТЬ ПО
| МесяцНалоговогоПериода,
| ФизЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НДФЛСведенияОДоходах.ФизЛицо КАК ФизЛицо,
| НДФЛСведенияОДоходах.КодДохода.СтавкаНалогообложенияРезидента КАК Ставка,
| НАЧАЛОПЕРИОДА(НДФЛСведенияОДоходах.Период, МЕСЯЦ) КАК МесяцНалоговогоПериода,
| НДФЛСведенияОДоходах.ПодразделениеОрганизации КАК Подразделение,
| НДФЛСведенияОДоходах.СтатьяФинансирования,
| НДФЛСведенияОДоходах.КОСГУ,
| СУММА(НДФЛСведенияОДоходах.СуммаДохода) - СУММА(НДФЛСведенияОДоходах.СуммаВычета) КАК Сумма
|ПОМЕСТИТЬ ВТДоходыПоИФ
|ИЗ
| РегистрНакопления.НДФЛСведенияОДоходах КАК НДФЛСведенияОДоходах
|ГДЕ
| (НАЧАЛОПЕРИОДА(НДФЛСведенияОДоходах.Период, МЕСЯЦ), НДФЛСведенияОДоходах.ФизЛицо) В
| (ВЫБРАТЬ
| ВТНДФЛТекущегоМесяца.МесяцНалоговогоПериода,
| ВТНДФЛТекущегоМесяца.ФизЛицо
| ИЗ
| ВТНДФЛТекущегоМесяца)
| И НДФЛСведенияОДоходах.ПериодРегистрации <= &ПериодРегистрации
| И НДФЛСведенияОДоходах.Организация = &Организация
|
|СГРУППИРОВАТЬ ПО
| НДФЛСведенияОДоходах.ФизЛицо,
| НДФЛСведенияОДоходах.КодДохода.СтавкаНалогообложенияРезидента,
| НДФЛСведенияОДоходах.ПодразделениеОрганизации,
| НДФЛСведенияОДоходах.СтатьяФинансирования,
| НДФЛСведенияОДоходах.КОСГУ,
| НАЧАЛОПЕРИОДА(НДФЛСведенияОДоходах.Период, МЕСЯЦ)
|
|ИНДЕКСИРОВАТЬ ПО
| Ставка,
| МесяцНалоговогоПериода,
| ФизЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Доходы.ФизЛицо КАК ФизЛицо,
| Доходы.Ставка КАК Ставка,
| Доходы.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| СУММА(Доходы.Сумма) КАК Сумма
|ПОМЕСТИТЬ ВТДоходы
|ИЗ
| ВТДоходыПоИФ КАК Доходы
|
|СГРУППИРОВАТЬ ПО
| Доходы.ФизЛицо,
| Доходы.Ставка,
| Доходы.МесяцНалоговогоПериода
|
|ИНДЕКСИРОВАТЬ ПО
| Ставка,
| МесяцНалоговогоПериода,
| ФизЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НДФЛРасчетыСБюджетом.ФизЛицо КАК ФизЛицо,
| НДФЛРасчетыСБюджетом.СтавкаНалогообложенияРезидента КАК Ставка,
| НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| НДФЛРасчетыСБюджетом.ПодразделениеОрганизации КАК Подразделение,
| НДФЛРасчетыСБюджетом.СтатьяФинансирования КАК СтатьяФинансирования,
| НДФЛРасчетыСБюджетом.КОСГУ КАК КОСГУ,
| СУММА(НДФЛРасчетыСБюджетом.Налог) КАК Сумма
|ПОМЕСТИТЬ ВТНалогиПоИФ
|ИЗ
| РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом
|ГДЕ
| НДФЛРасчетыСБюджетом.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И (НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода, НДФЛРасчетыСБюджетом.ФизЛицо) В
| (ВЫБРАТЬ
| ВТНДФЛТекущегоМесяца.МесяцНалоговогоПериода,
| ВТНДФЛТекущегоМесяца.ФизЛицо
| ИЗ
| ВТНДФЛТекущегоМесяца)
| И НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетом.Период, МЕСЯЦ) <= &ПериодРегистрации
| И НДФЛРасчетыСБюджетом.Регистратор <> &Регистратор
| И НДФЛРасчетыСБюджетом.Организация = &Организация
|
|СГРУППИРОВАТЬ ПО
| НДФЛРасчетыСБюджетом.ФизЛицо,
| НДФЛРасчетыСБюджетом.СтавкаНалогообложенияРезидента,
| НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода,
| НДФЛРасчетыСБюджетом.ПодразделениеОрганизации,
| НДФЛРасчетыСБюджетом.СтатьяФинансирования,
| НДФЛРасчетыСБюджетом.КОСГУ
|
|ИНДЕКСИРОВАТЬ ПО
| Ставка,
| МесяцНалоговогоПериода,
| ФизЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НДФЛ.ФизЛицо КАК ФизЛицо,
| НДФЛ.Ставка КАК Ставка,
| НДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| СУММА(НДФЛ.Сумма) КАК Сумма
|ПОМЕСТИТЬ ВТНалоги
|ИЗ
| (ВЫБРАТЬ
| НДФЛПрошлыхПериодов.ФизЛицо КАК ФизЛицо,
| НДФЛПрошлыхПериодов.Ставка КАК Ставка,
| НДФЛПрошлыхПериодов.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| НДФЛПрошлыхПериодов.Сумма КАК Сумма
| ИЗ
| ВТНалогиПоИФ КАК НДФЛПрошлыхПериодов
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| НДФЛТекущегоМесяца.ФизЛицо,
| НДФЛТекущегоМесяца.Ставка,
| НДФЛТекущегоМесяца.МесяцНалоговогоПериода,
| НДФЛТекущегоМесяца.Налог
| ИЗ
| ВТНДФЛТекущегоМесяца КАК НДФЛТекущегоМесяца) КАК НДФЛ
|
|СГРУППИРОВАТЬ ПО
| НДФЛ.ФизЛицо,
| НДФЛ.Ставка,
| НДФЛ.МесяцНалоговогоПериода
|
|ИНДЕКСИРОВАТЬ ПО
| Ставка,
| МесяцНалоговогоПериода,
| ФизЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДоходыПоИФ.ФизЛицо КАК ФизЛицо,
| ДоходыПоИФ.Ставка КАК СтавкаНалогообложенияРезидента,
| ДоходыПоИФ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| ДоходыПоИФ.Подразделение КАК ПодразделениеОрганизации,
| ДоходыПоИФ.СтатьяФинансирования,
| ДоходыПоИФ.КОСГУ,
| ВЫБОР
| КОГДА Доходы.Сумма <> 0
| ТОГДА ДоходыПоИФ.Сумма / Доходы.Сумма * ЕСТЬNULL(Налоги.Сумма, 0) - ЕСТЬNULL(НалогиПоИФ.Сумма, 0)
| ИНАЧЕ 0
| КОНЕЦ КАК Налог
|ИЗ
| ВТДоходыПоИФ КАК ДоходыПоИФ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТДоходы КАК Доходы
| ПО ДоходыПоИФ.ФизЛицо = Доходы.ФизЛицо
| И ДоходыПоИФ.Ставка = Доходы.Ставка
| И ДоходыПоИФ.МесяцНалоговогоПериода = Доходы.МесяцНалоговогоПериода
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНалоги КАК Налоги
| ПО ДоходыПоИФ.ФизЛицо = Налоги.ФизЛицо
| И ДоходыПоИФ.Ставка = Налоги.Ставка
| И ДоходыПоИФ.МесяцНалоговогоПериода = Налоги.МесяцНалоговогоПериода
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНалогиПоИФ КАК НалогиПоИФ
| ПО ДоходыПоИФ.ФизЛицо = НалогиПоИФ.ФизЛицо
| И ДоходыПоИФ.Ставка = НалогиПоИФ.Ставка
| И ДоходыПоИФ.МесяцНалоговогоПериода = НалогиПоИФ.МесяцНалоговогоПериода
| И ДоходыПоИФ.Подразделение = НалогиПоИФ.Подразделение
| И ДоходыПоИФ.СтатьяФинансирования = НалогиПоИФ.СтатьяФинансирования
| И ДоходыПоИФ.КОСГУ = НалогиПоИФ.КОСГУ
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо,
| СтавкаНалогообложенияРезидента,
| МесяцНалоговогоПериода";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

// Забываем старое распределение
Если Физлицо = Неопределено Тогда
НДФЛПоИФ.Очистить();
ИначеЕсли ТипЗнч(Физлицо) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
СтрокиФизлица = НДФЛПоИФ.НайтиСтроки(Новый Структура("ФизЛицо", Физлицо));
Для Каждого СтрокаТЧ Из СтрокиФизлица Цикл
НДФЛПоИФ.Удалить(СтрокаТЧ);
КонецЦикла;
ИначеЕсли ТипЗнч(Физлицо) = Тип("Массив") Тогда
Для каждого ОчередноеФизлицо Из Физлицо Цикл
СтрокиФизлица = НДФЛПоИФ.НайтиСтроки(Новый Структура("ФизЛицо", ОчередноеФизлицо));
Для Каждого СтрокаТЧ Из СтрокиФизлица Цикл
НДФЛПоИФ.Удалить(СтрокаТЧ);
КонецЦикла;
КонецЦикла;
КонецЕсли;

СтрокаДляПогрешности = Неопределено;
Погрешность = 0;
ТекущийНДФЛ = Новый Структура("ФизЛицо, СтавкаНалогообложенияРезидента, МесяцНалоговогоПериода");
Пока Выборка.Следующий() Цикл
Если ТекущийНДФЛ.ФизЛицо <> Выборка.ФизЛицо
ИЛИ ТекущийНДФЛ.СтавкаНалогообложенияРезидента <> Выборка.СтавкаНалогообложенияРезидента
ИЛИ ТекущийНДФЛ.МесяцНалоговогоПериода <> Выборка.МесяцНалоговогоПериода Тогда

УчестьПогрешностьРаспределенияНДФЛПоИФ(СтрокаДляПогрешности, Погрешность, ТекущийНДФЛ, Выборка);

СтрокаДляПогрешности = Неопределено;
Погрешность = 0;
ЗаполнитьЗначенияСвойств(ТекущийНДФЛ, Выборка);
КонецЕсли;

Если Выборка.Налог > 1 ИЛИ Выборка.Налог < -1 Тогда

СтрокаТЧ = НДФЛПоИФ.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧ, Выборка);

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

///////////////////////////////////////////////////////////
// Теперь распределим отрицательные НДФЛ (которые к зачету)

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("Организация", ШапкаДокумента.ГоловнаяОрганизация);
Запрос.УстановитьПараметр("Регистратор", Ссылка);
Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);
Запрос.УстановитьПараметр("ПоВсемФизлицам", Физлицо = Неопределено);
Запрос.УстановитьПараметр("Физлица", Физлицо);
Запрос.УстановитьПараметр("ТЧНДФЛ", НДФЛ);

Запрос.УстановитьПараметр("ПодразделениеОрганизации", ПодразделениеОрганизации);
Запрос.УстановитьПараметр("СтатьяФинансирования", Организация.СтатьяФинансирования);
Запрос.УстановитьПараметр("КОСГУ", Справочники.КОСГУ.КОСГУ211);

Запрос.Текст =
"ВЫБРАТЬ
| ТЧНДФЛ.ФизЛицо КАК ФизЛицо,
| ЗНАЧЕНИЕ(Перечисление.НДФЛСтавкиНалогообложенияРезидента.Ставка13) КАК СтавкаНалогообложенияРезидента,
| ТЧНДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| &ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| &СтатьяФинансирования КАК СтатьяФинансирования,
| &КОСГУ КАК КОСГУ,
| ТЧНДФЛ.Налог
|ПОМЕСТИТЬ ВТНДФЛТекущегоМесяца
|ИЗ
| &ТЧНДФЛ КАК ТЧНДФЛ
|ГДЕ
| ТЧНДФЛ.Налог < 0
| И (&ПоВсемФизлицам
| ИЛИ ТЧНДФЛ.ФизЛицо В (&Физлица))
|
|ИНДЕКСИРОВАТЬ ПО
| МесяцНалоговогоПериода,
| ФизЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НДФЛРасчетыСБюджетом.ФизЛицо КАК ФизЛицо,
| НДФЛРасчетыСБюджетом.СтавкаНалогообложенияРезидента КАК СтавкаНалогообложенияРезидента,
| НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| НДФЛРасчетыСБюджетом.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| НДФЛРасчетыСБюджетом.СтатьяФинансирования КАК СтатьяФинансирования,
| НДФЛРасчетыСБюджетом.КОСГУ КАК КОСГУ,
| СУММА(НДФЛРасчетыСБюджетом.Налог) КАК Сумма
|ПОМЕСТИТЬ ВТНалогиПоИФ
|ИЗ
| РегистрНакопления.НДФЛРасчетыСБюджетом КАК НДФЛРасчетыСБюджетом
|ГДЕ
| НДФЛРасчетыСБюджетом.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| И НДФЛРасчетыСБюджетом.ФизЛицо В
| (ВЫБРАТЬ
| ВТНДФЛТекущегоМесяца.ФизЛицо
| ИЗ
| ВТНДФЛТекущегоМесяца)
| И НАЧАЛОПЕРИОДА(НДФЛРасчетыСБюджетом.Период, МЕСЯЦ) <= &ПериодРегистрации
| И НДФЛРасчетыСБюджетом.Регистратор <> &Регистратор
| И НДФЛРасчетыСБюджетом.Организация = &Организация
|
|СГРУППИРОВАТЬ ПО
| НДФЛРасчетыСБюджетом.ФизЛицо,
| НДФЛРасчетыСБюджетом.СтавкаНалогообложенияРезидента,
| НДФЛРасчетыСБюджетом.МесяцНалоговогоПериода,
| НДФЛРасчетыСБюджетом.ПодразделениеОрганизации,
| НДФЛРасчетыСБюджетом.СтатьяФинансирования,
| НДФЛРасчетыСБюджетом.КОСГУ
|
|ИНДЕКСИРОВАТЬ ПО
| ПодразделениеОрганизации,
| МесяцНалоговогоПериода,
| ФизЛицо
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| НДФЛ.ФизЛицо КАК ФизЛицо,
| НДФЛ.СтавкаНалогообложенияРезидента КАК СтавкаНалогообложенияРезидента,
| НДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| ЕСТЬNULL(НалогиПоИФ.ПодразделениеОрганизации, НДФЛ.ПодразделениеОрганизации) КАК ПодразделениеОрганизации,
| ЕСТЬNULL(НалогиПоИФ.СтатьяФинансирования, НДФЛ.СтатьяФинансирования) КАК СтатьяФинансирования,
| ЕСТЬNULL(НалогиПоИФ.КОСГУ, НДФЛ.КОСГУ) КАК КОСГУ,
| СУММА(ЕСТЬNULL(НалогиПоИФ.Сумма, 0)) КАК Сумма
|ИЗ
| ВТНДФЛТекущегоМесяца КАК НДФЛ
| ЛЕВОЕ СОЕДИНЕНИЕ ВТНалогиПоИФ КАК НалогиПоИФ
| ПО (НалогиПоИФ.ФизЛицо = НДФЛ.ФизЛицо)
| И (НалогиПоИФ.СтавкаНалогообложенияРезидента = НДФЛ.СтавкаНалогообложенияРезидента)
| И (НалогиПоИФ.МесяцНалоговогоПериода <= НДФЛ.МесяцНалоговогоПериода)
|
|СГРУППИРОВАТЬ ПО
| НДФЛ.ФизЛицо,
| НДФЛ.СтавкаНалогообложенияРезидента,
| НДФЛ.МесяцНалоговогоПериода,
| ЕСТЬNULL(НалогиПоИФ.ПодразделениеОрганизации, НДФЛ.ПодразделениеОрганизации),
| ЕСТЬNULL(НалогиПоИФ.СтатьяФинансирования, НДФЛ.СтатьяФинансирования),
| ЕСТЬNULL(НалогиПоИФ.КОСГУ, НДФЛ.КОСГУ)";

ДанныеУчета = Запрос.Выполнить().Выгрузить();

ПараметрыОтбораБазы = Новый Структура("ФизЛицо, СтавкаНалогообложенияРезидента, МесяцНалоговогоПериода");

Для Каждого СтрокаНДФЛ Из НДФЛ Цикл

ЗаполнитьЗначенияСвойств(ПараметрыОтбораБазы, СтрокаНДФЛ);
ПараметрыОтбораБазы.СтавкаНалогообложенияРезидента = Перечисления.НДФЛСтавкиНалогообложенияРезидента.Ставка13;

База = ДанныеУчета.Скопировать(ПараметрыОтбораБазы);

Коэффициенты = База.ВыгрузитьКолонку("Сумма");
РаспределенныеРезультаты = ОбщегоНазначения.РаспределитьПропорционально(СтрокаНДФЛ.Налог, Коэффициенты, 0);

Если РаспределенныеРезультаты <> Неопределено Тогда
Для Н = 0 По РаспределенныеРезультаты.Количество() - 1 Цикл

СтрокаТЧ = НДФЛПоИФ.Добавить();

ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаНДФЛ);
ЗаполнитьЗначенияСвойств(СтрокаТЧ, База[Н]);

СтрокаТЧ["Налог"] = РаспределенныеРезультаты[Н];

КонецЦикла;
КонецЕсли;


КонецЦикла;

КонецПроцедуры //РаспределитьНДФЛПоИФ

Процедура УчестьПогрешностьРаспределенияНДФЛПоИФ(СтрокаДляПогрешности, Знач Погрешность, ТекущийНДФЛ, Выборка)

Если ЗначениеЗаполнено(СтрокаДляПогрешности) Тогда
СтрокаДляПогрешности.Налог = СтрокаДляПогрешности.Налог + Погрешность;
Иначе
Погрешность = Окр(Погрешность, 0);
Если Погрешность <> 0 Тогда

СтрокаДляПогрешности = НДФЛПоИФ.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаДляПогрешности, Выборка);

// Ключевые поля берем по текущему НДФЛ
ЗаполнитьЗначенияСвойств(СтрокаДляПогрешности, ТекущийНДФЛ);

СтрокаДляПогрешности.Налог = Погрешность;

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

КонецПроцедуры

Процедура РаспределитьУдержанияПоИФ(ШапкаДокумента, Физлицо = Неопределено)

// переносим отражение начислений в регистры
ОбщиеПоля =
Новый Структура(
"ПериодРегистрации,
|Организация,
|ОбособленноеПодразделение",
ШапкаДокумента.ПериодРегистрации,
ШапкаДокумента.ГоловнаяОрганизация,
ШапкаДокумента.ОбособленноеПодразделение);

Если Физлицо = Неопределено Тогда
Отбор = Неопределено
Иначе
Отбор = Новый Структура("ФизЛицо", ФизЛицо)
КонецЕсли;

Движения.БУОсновныеНачисления.мВыполнятьДвиженияПоЕСН = Ложь;
Движения.БУДополнительныеНачисления.мВыполнятьДвиженияПоЕСН = Ложь;

ОтражениеВУчете.ЗаполнитьНаборЗаписейПоТЧ(Движения.БУОсновныеНачисления, НачисленияПоИФ, ОбщиеПоля, Отбор);
ОтражениеВУчете.ЗаполнитьНаборЗаписейПоТЧ(Движения.БУДополнительныеНачисления, ДополнительныеНачисленияПоИФ, ОбщиеПоля, Отбор);
ОтражениеВУчете.ЗаполнитьНаборЗаписейПоТЧ(Движения.БУДополнительныеНачисления, СформироватьЗапросПоДоговорам(ШапкаДокумента).Выгрузить(), ОбщиеПоля, Отбор);

Движения.БУОсновныеНачисления.Записать();
Движения.БУДополнительныеНачисления.Записать();

// Теперь можно распределять

// Распределяем по ИФ
Отражение =
ОтражениеВУчете.РаспределитьРасчетыПоИсточникамФинансирования(
Ссылка,
"УдержанияРаботниковОрганизаций");

// сохраняем удержания
ОтражениеВУчете.ЗаполнитьТЧПоНаборуЗаписей(
УдержанияПоИФ,
Отражение.БУУдержания);

// Очищаем движения удержаний
Движения.БУУдержания.Очистить();
Движения.БУУдержания.Записать();

// Очищаем движения начислений
Движения.БУОсновныеНачисления.Очистить();
Движения.БУДополнительныеНачисления.Очистить();
Движения.БУОсновныеНачисления.Записать();
Движения.БУДополнительныеНачисления.Записать();

Движения.БУОсновныеНачисления.мВыполнятьДвиженияПоЕСН = Истина;
Движения.БУДополнительныеНачисления.мВыполнятьДвиженияПоЕСН = Истина;

КонецПроцедуры //РаспределитьУдержанияПоИФ

#Если Клиент Тогда

// Расчерчивает разделы расчетного листка линиями
//
// Параметры
// ВременныйТабличныйДокумент - Табличный документ с уже выведенными строками расчетного листка
// СтрокПропустить - целое число уже обработанных ранее строк т.д.
// СтрокРасчертить - целое число строк т.д., которым требуется указать границы
//
Процедура РасчертитьРасчетныйЛисток(ВременныйТабличныйДокумент,СтрокПропустить,СтрокРасчертить)

Линия = Новый Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная, 1);

Для Сч = 0 По СтрокРасчертить - 1 Цикл

НомерСтроки = СтрокПропустить + Сч;

Для Ссч = 2 По 17 Цикл

Если Ссч = 4 ИЛИ Ссч = 10 ИЛИ Ссч = 13 ИЛИ Ссч = 15 Тогда
Продолжить
КонецЕсли;

ВременныйТабличныйДокумент.Область(НомерСтроки, Ссч).ГраницаСлева = Линия;

КонецЦикла;

ВременныйТабличныйДокумент.Область(НомерСтроки, 15).ГраницаСправа = Линия;
ВременныйТабличныйДокумент.Область(НомерСтроки, 2, НомерСтроки, 15).ГраницаСнизу = Линия;

КонецЦикла;

КонецПроцедуры // РасчертитьРасчетныйЛисток()

#КонецЕсли

Функция ПолучитьИнформациюОВидахРасчетаДоп()

Запрос = Новый Запрос;

Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеНачисленияОрганизаций.Ссылка КАК ВидРасчета,
| ДополнительныеНачисленияОрганизаций.СпособРасчета КАК СпособРасчета,
| ДополнительныеНачисленияОрганизаций.КодДоходаНДФЛ КАК КодДоходаНДФЛ
|ИЗ
| ПланВидовРасчета.ДополнительныеНачисленияОрганизаций КАК ДополнительныеНачисленияОрганизаций";

Возврат Запрос.Выполнить().Выгрузить();

КонецФункции

Функция ПолучитьДоплатыЗаНочныеВечерние()

Запрос = Новый Запрос;

Запрос.УстановитьПараметр("Организация", Организация);

Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ГДЕ
| ОсновныеНачисленияОрганизаций.АвтоНачислятьПоТабелю
| И ОсновныеНачисленияОрганизаций.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаНочныеЧасы))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК АвтоНачислятьПоТабелюНочные,
| ВЫБОР
| КОГДА 1 В
| (ВЫБРАТЬ ПЕРВЫЕ 1
| 1
| ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
| ГДЕ
| ОсновныеНачисленияОрганизаций.АвтоНачислятьПоТабелю
| И ОсновныеНачисленияОрганизаций.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаВечерниеЧасы))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК АвтоНачислятьПоТабелюВечерние
|ПОМЕСТИТЬ ПризнакиАвтоначисления
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОсновныеНачисленияОрганизаций.Ссылка,
| ОсновныеНачисленияОрганизаций.ОбозначениеВТабелеУчетаРабочегоВремени
|ПОМЕСТИТЬ НачисленияСПризнаком
|ИЗ
| ПланВидовРасчета.ОсновныеНачисленияОрганизаций КАК ОсновныеНачисленияОрганизаций
|ГДЕ
| ОсновныеНачисленияОрганизаций.АвтоНачислятьПоТабелю
| И ОсновныеНачисленияОрганизаций.ОбозначениеВТабелеУчетаРабочегоВремени В (ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаНочныеЧасы), ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаВечерниеЧасы))
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ПризнакиАвтоначисления.АвтоНачислятьПоТабелюНочные
| ТОГДА НочныеНачисленияСПризнаком.Ссылка
| ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаНочныеЧасы)
| КОНЕЦ КАК ДоплатаЗаНочныеЧасы,
| ВЫБОР
| КОГДА ПризнакиАвтоначисления.АвтоНачислятьПоТабелюВечерние
| ТОГДА ВечерниеНачисленияСПризнаком.Ссылка
| ИНАЧЕ ЗНАЧЕНИЕ(ПланВидовРасчета.ОсновныеНачисленияОрганизаций.ДоплатаЗаВечерниеЧасы)
| КОНЕЦ КАК ДоплатаЗаВечерниеЧасы,
| ЕСТЬNULL(УчетнаяПолитикаПоРасчетуЗарплатыОрганизаций.ПроцентДоплатыЗаРаботуВНочноеВремя, 20) КАК ПроцентДоплатыЗаНочныеЧасы,
| ЕСТЬNULL(УчетнаяПолитикаПоРасчетуЗарплатыОрганизаций.ПроцентДоплатыЗаРаботуВВечернееВремя, 10) КАК ПроцентДоплатыЗаВечерниеЧасы
|ИЗ
| ПризнакиАвтоначисления КАК ПризнакиАвтоначисления
| ЛЕВОЕ СОЕДИНЕНИЕ НачисленияСПризнаком КАК НочныеНачисленияСПризнаком
| ПО (НочныеНачисленияСПризнаком.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаНочныеЧасы))
| ЛЕВОЕ СОЕДИНЕНИЕ НачисленияСПризнаком КАК ВечерниеНачисленияСПризнаком
| ПО (ВечерниеНачисленияСПризнаком.ОбозначениеВТабелеУчетаРабочегоВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.РаботаВечерниеЧасы))
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетнаяПолитикаПоРасчетуЗарплатыОрганизаций КАК УчетнаяПолитикаПоРасчетуЗарплатыОрганизаций
| ПО (УчетнаяПолитикаПоРасчетуЗарплатыОрганизаций.Организация = &Организация)";

Выборка = Запрос.Выполнить().Выбрать();

Выборка.Следующий();

Возврат Выборка;

КонецФункции

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ДЛЯ ОБЕСПЕЧЕНИЯ ПРОВЕДЕНИЯ ДОКУМЕНТА

// По начислениям документа формируем движения по НДФЛРасчетыСБюджетом
//
// Параметры:
// ШапкаДокумента - выборка по данным шапки документа
// НаборЗаписей - набор записей для НДФЛРасчетыСБюджетом
//
// Возвращаемое значение:
// Нет.
//
Процедура ЗаполнитьНаборЗаписейНДФЛПоНачислениям(ШапкаДокумента, НаборЗаписей, Физлица = Неопределено)

// получим реквизиты табличной части НДФЛПоИФ
ВыборкаПоНДФЛ = СформироватьЗапросПоНДФЛ(Физлица).Выбрать();

Пока ВыборкаПоНДФЛ.Следующий() Цикл
// Заполним записи в наборах записей регистров
ДобавитьСтрокуНДФЛ(ВыборкаПоНДФЛ, ШапкаДокумента, НаборЗаписей);
КонецЦикла;

КонецПроцедуры //ЗаполнитьНаборЗаписейНДФЛПоНачислениям

Функция ПолучитьШапкуДокумента()

ШапкаДокумента = Новый Структура(
"Ссылка,
|Дата,
|ПериодРегистрации,
|Организация,
|ГоловнаяОрганизация,
|ОбособленноеПодразделение,
|ЭтоРасчетПервойПоловиныМесяца,
|НачисленияКоличествоСтрок,
|ПерерассчитываемыйДокумент,
|ПериодПерерасчета,
|ОрганизацияПерерасчета");


ШапкаДокумента.Ссылка = Ссылка;
ШапкаДокумента.Дата = Дата;
ШапкаДокумента.ПериодРегистрации = ПериодРегистрации;
ШапкаДокумента.Организация = Организация;
ШапкаДокумента.ГоловнаяОрганизация = ОбщегоНазначения.ГоловнаяОрганизация(Организация);
ШапкаДокумента.ОбособленноеПодразделение = Организация;

ШапкаДокумента.ЭтоРасчетПервойПоловиныМесяца = ЭтотОбъект.ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца;

ШапкаДокумента.ПерерассчитываемыйДокумент = ПерерассчитываемыйДокумент;

Если НЕ ЗначениеЗаполнено(ПерерассчитываемыйДокумент) Тогда
ШапкаДокумента.ПериодПерерасчета = null;
ШапкаДокумента.ОрганизацияПерерасчета = null;
Иначе
Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("ПерерассчитываемыйДокумент" , ПерерассчитываемыйДокумент);

Запрос.Текст =
"ВЫБРАТЬ
| НачислениеЗарплатыРаботникамОрганизаций.ПерерассчитываемыйДокумент.ПериодРегистрации КАК ПериодПерерасчета,
| НачислениеЗарплатыРаботникамОрганизаций.ПерерассчитываемыйДокумент.Организация КАК ОрганизацияПерерасчета
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций КАК НачислениеЗарплатыРаботникамОрганизаций
|ГДЕ
| НачислениеЗарплатыРаботникамОрганизаций.Ссылка = &ПерерассчитываемыйДокумент";

ВыборкаПоПерерасчету = Запрос.Выполнить().Выбрать();
ВыборкаПоПерерасчету.Следующий();

ШапкаДокумента.ПериодПерерасчета = ВыборкаПоПерерасчету.ПериодПерерасчета;
ШапкаДокумента.ОрганизацияПерерасчета = ВыборкаПоПерерасчету.ОрганизацияПерерасчета;
КонецЕсли;

Возврат(ШапкаДокумента)

КонецФункции //ПолучитьШапкуДокумента

// Формирует запрос по вычетам по таблице "НДФЛ" документа
//
// Параметры:
// нет
// Возвращаемое значение:
// Результат запроса.
//
Функция ПодготовитьЗапросПоНДФЛВычеты(ШапкаДокумента, Физлица = Неопределено)

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ПоВсемФизлицам", Физлица = Неопределено);
Запрос.УстановитьПараметр("Физлица", Физлица);
Запрос.УстановитьПараметр("парамОрганизация", ШапкаДокумента.ГоловнаяОрганизация);
Запрос.УстановитьПараметр("парамОбособленноеПодразделение", ШапкаДокумента.ОбособленноеПодразделение);

// Временная таблица ПодразделенияРаботников
// Поля:
// Физлицо
// Период
// ПодразделениеОрганизации
// УжеУволен
// ДатаДвижения
//
// Описание:
// список подразделений в которых работают физлица по трудовым договорам по состоянию на конец месяца налогового периода

// Временная таблица ПодразделенияДоговорников
// Поля:
// Физлицо
// Период
// ПодразделениеОрганизации
// ДатаНачала
//
// Описание:
// список подразделений в которых работают физлица по договорам ГПХ по состоянию на конец месяца налогового периода

// Основной запрос
//
// Описание:
// как правило, используется подразделение по данным кадрового учета работающих по трудовым договорам
// подразделение по договору ГПХ берется в следующих случаях:
// - сотрудник никогда не имел трудовых отношений с нашей организацией
// - на конец месяца сотрудник уже уволен со всех мест работы в нашей организации,
// но после даты увольнения с ним заключен договор ГПХ

Запрос.Текст =
"ВЫБРАТЬ
| СтрокиНДФЛ.НомерСтроки,
| СтрокиНДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| СтрокиНДФЛ.ФизЛицо КАК ФизЛицо,
| СтрокиНДФЛ.ПримененныйВычетЛичный,
| СтрокиНДФЛ.ПримененныйВычетНаДетей,
| СтрокиНДФЛ.ПримененныйВычетНаДетейДвойной,
| СтрокиНДФЛ.ПримененныйВычетНаДетейДвойнойВторой,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидов,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойной,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойнойВторой,
| СтрокиНДФЛ.ПримененныйВычетИмущественныйРасход,
| СтрокиНДФЛ.ПримененныйВычетИмущественныйПроцентыПоКредитам,
| СтрокиНДФЛ.Ссылка
|ПОМЕСТИТЬ ВТСтрокиНДФЛ
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛ КАК СтрокиНДФЛ
|ГДЕ
| СтрокиНДФЛ.Ссылка = &ДокументСсылка
| И (&ПоВсемФизлицам
| ИЛИ СтрокиНДФЛ.ФизЛицо В (&Физлица))
| И (СтрокиНДФЛ.ПримененныйВычетЛичный <> 0
| ИЛИ СтрокиНДФЛ.ПримененныйВычетНаДетей <> 0
| ИЛИ СтрокиНДФЛ.ПримененныйВычетНаДетейДвойной <> 0
| ИЛИ СтрокиНДФЛ.ПримененныйВычетНаДетейДвойнойВторой <> 0
| ИЛИ СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидов <> 0
| ИЛИ СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойной <> 0
| ИЛИ СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойнойВторой <> 0
| ИЛИ СтрокиНДФЛ.ПримененныйВычетИмущественныйРасход <> 0
| ИЛИ СтрокиНДФЛ.ПримененныйВычетИмущественныйПроцентыПоКредитам <> 0)
|
|ИНДЕКСИРОВАТЬ ПО
| ФизЛицо,
| МесяцНалоговогоПериода
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Периоды.Физлицо КАК Физлицо,
| Периоды.Период КАК Период,
| РаботникиОрганизаций.Сотрудник КАК Сотрудник
|ПОМЕСТИТЬ ВТПоследниеСотрудники
|ИЗ
| (ВЫБРАТЬ
| Периоды.ФизЛицо КАК Физлицо,
| Периоды.МесяцНалоговогоПериода КАК Период,
| МАКСИМУМ(РаботникиОрганизаций.Период) КАК ДатаРегистра,
| РаботникиОрганизаций.Организация КАК Организация
| ИЗ
| ВТСтрокиНДФЛ КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ПО (КОНЕЦПЕРИОДА(Периоды.МесяцНалоговогоПериода, МЕСЯЦ) >= РаботникиОрганизаций.Период)
| И Периоды.ФизЛицо = РаботникиОрганизаций.Сотрудник.Физлицо
| ГДЕ
| РаботникиОрганизаций.Организация = &парамОрганизация
| И РаботникиОрганизаций.Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| И ВЫБОР
| КОГДА КОНЕЦПЕРИОДА(Периоды.МесяцНалоговогоПериода, МЕСЯЦ) >= РаботникиОрганизаций.ПериодЗавершения
| И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения
| ИНАЧЕ РаботникиОрганизаций.ПричинаИзмененияСостояния
| КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
|
| СГРУППИРОВАТЬ ПО
| Периоды.ФизЛицо,
| Периоды.МесяцНалоговогоПериода,
| РаботникиОрганизаций.Организация) КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ПО Периоды.Физлицо = РаботникиОрганизаций.Сотрудник.Физлицо
| И Периоды.ДатаРегистра = РаботникиОрганизаций.Период
| И Периоды.Организация = РаботникиОрганизаций.Организация
| И (ВЫБОР
| КОГДА КОНЕЦПЕРИОДА(Периоды.Период, МЕСЯЦ) >= РаботникиОрганизаций.ПериодЗавершения
| И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения
| ИНАЧЕ РаботникиОрганизаций.ПричинаИзмененияСостояния
| КОНЕЦ <> ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение))
| И (РаботникиОрганизаций.Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство))
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Периоды.Физлицо КАК Физлицо,
| Периоды.Период КАК Период,
| ВЫБОР
| КОГДА КОНЕЦПЕРИОДА(Периоды.Период, МЕСЯЦ) >= РаботникиОрганизаций.ПериодЗавершения
| И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизаций.ПодразделениеОрганизацииЗавершения
| ИНАЧЕ РаботникиОрганизаций.ПодразделениеОрганизации
| КОНЕЦ КАК ПодразделениеОрганизации,
| ВЫБОР
| КОГДА ВЫБОР
| КОГДА КОНЕЦПЕРИОДА(Периоды.Период, МЕСЯЦ) >= РаботникиОрганизаций.ПериодЗавершения
| И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизаций.ПричинаИзмененияСостоянияЗавершения
| ИНАЧЕ РаботникиОрганизаций.ПричинаИзмененияСостояния
| КОНЕЦ = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК УжеУволен,
| ВЫБОР
| КОГДА КОНЕЦПЕРИОДА(Периоды.Период, МЕСЯЦ) >= РаботникиОрганизаций.ПериодЗавершения
| И РаботникиОрганизаций.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизаций.ПериодЗавершения
| ИНАЧЕ РаботникиОрганизаций.Период
| КОНЕЦ КАК ДатаДвижения
|ПОМЕСТИТЬ ВТПодразделенияРаботников
|ИЗ
| (ВЫБРАТЬ
| Периоды.Физлицо КАК Физлицо,
| Периоды.Период КАК Период,
| Периоды.Сотрудник КАК Сотрудник,
| МАКСИМУМ(РаботникиОрганизаций.Период) КАК ДатаРегистра,
| РаботникиОрганизаций.Организация КАК Организация
| ИЗ
| ВТПоследниеСотрудники КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ПО (КОНЕЦПЕРИОДА(Периоды.Период, МЕСЯЦ) >= РаботникиОрганизаций.Период)
| И Периоды.Сотрудник = РаботникиОрганизаций.Сотрудник
| ГДЕ
| РаботникиОрганизаций.Организация = &парамОрганизация
|
| СГРУППИРОВАТЬ ПО
| Периоды.Физлицо,
| Периоды.Период,
| Периоды.Сотрудник,
| РаботникиОрганизаций.Организация) КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ПО Периоды.Сотрудник = РаботникиОрганизаций.Сотрудник
| И Периоды.ДатаРегистра = РаботникиОрганизаций.Период
|
|ИНДЕКСИРОВАТЬ ПО
| Физлицо,
| Период
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДатыПоследнихДоговоров.Физлицо КАК Физлицо,
| ДатыПоследнихДоговоров.Период КАК Период,
| ДатыПоследнихДоговоров.ДатаНачала,
| МАКСИМУМ(ДоговорНаВыполнениеРаботСФизЛицом.ПодразделениеОрганизации) КАК ПодразделениеОрганизации
|ПОМЕСТИТЬ ВТПодразделенияДоговорников
|ИЗ
| (ВЫБРАТЬ
| Периоды.МесяцНалоговогоПериода КАК Период,
| Периоды.ФизЛицо КАК Физлицо,
| ДоговорНаВыполнениеРаботСФизЛицом.Организация КАК Организация,
| МАКСИМУМ(ДоговорНаВыполнениеРаботСФизЛицом.ДатаНачала) КАК ДатаНачала
| ИЗ
| ВТСтрокиНДФЛ КАК Периоды
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом
| ПО (ДоговорНаВыполнениеРаботСФизЛицом.ДатаНачала <= КОНЕЦПЕРИОДА(Периоды.МесяцНалоговогоПериода, МЕСЯЦ))
| И (ДоговорНаВыполнениеРаботСФизЛицом.ДатаОкончания >= НАЧАЛОПЕРИОДА(Периоды.МесяцНалоговогоПериода, МЕСЯЦ))
| И Периоды.ФизЛицо = ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо
| ГДЕ
| ДоговорНаВыполнениеРаботСФизЛицом.Организация = &парамОбособленноеПодразделение
|
| СГРУППИРОВАТЬ ПО
| Периоды.МесяцНалоговогоПериода,
| Периоды.ФизЛицо,
| ДоговорНаВыполнениеРаботСФизЛицом.Организация) КАК ДатыПоследнихДоговоров
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом
| ПО ДатыПоследнихДоговоров.Организация = ДоговорНаВыполнениеРаботСФизЛицом.Организация
| И ДатыПоследнихДоговоров.ДатаНачала = ДоговорНаВыполнениеРаботСФизЛицом.ДатаНачала
| И ДатыПоследнихДоговоров.Физлицо = ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо
|
|СГРУППИРОВАТЬ ПО
| ДатыПоследнихДоговоров.Физлицо,
| ДатыПоследнихДоговоров.Организация,
| ДатыПоследнихДоговоров.Период,
| ДатыПоследнихДоговоров.ДатаНачала
|
|ИНДЕКСИРОВАТЬ ПО
| Физлицо,
| Период
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СтрокиНДФЛ.Ссылка,
| СтрокиНДФЛ.НомерСтроки КАК НомерСтроки,
| СтрокиНДФЛ.МесяцНалоговогоПериода,
| СтрокиНДФЛ.ФизЛицо КАК ФизЛицо,
| СтрокиНДФЛ.ПримененныйВычетЛичный,
| СтрокиНДФЛ.ПримененныйВычетНаДетей,
| СтрокиНДФЛ.ПримененныйВычетНаДетейДвойной,
| СтрокиНДФЛ.ПримененныйВычетНаДетейДвойнойВторой,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидов,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойной,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойнойВторой,
| СтрокиНДФЛ.ПримененныйВычетИмущественныйРасход,
| СтрокиНДФЛ.ПримененныйВычетИмущественныйПроцентыПоКредитам,
| ВЫБОР
| КОГДА ПодразделенияРаботников.УжеУволен
| И ПодразделенияРаботников.ДатаДвижения < ПодразделенияДоговорников.ДатаНачала
| И ПодразделенияДоговорников.ПодразделениеОрганизации ЕСТЬ НЕ NULL
| ТОГДА ПодразделенияДоговорников.ПодразделениеОрганизации
| ИНАЧЕ ЕСТЬNULL(ПодразделенияРаботников.ПодразделениеОрганизации, ПодразделенияДоговорников.ПодразделениеОрганизации)
| КОНЕЦ КАК ПодразделениеОрганизации
|ПОМЕСТИТЬ ВТВычетыСПодразделениями
|ИЗ
| ВТСтрокиНДФЛ КАК СтрокиНДФЛ
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПодразделенияРаботников КАК ПодразделенияРаботников
| ПО СтрокиНДФЛ.МесяцНалоговогоПериода = ПодразделенияРаботников.Период
| И СтрокиНДФЛ.ФизЛицо = ПодразделенияРаботников.Физлицо
| ЛЕВОЕ СОЕДИНЕНИЕ ВТПодразделенияДоговорников КАК ПодразделенияДоговорников
| ПО СтрокиНДФЛ.МесяцНалоговогоПериода = ПодразделенияДоговорников.Период
| И СтрокиНДФЛ.ФизЛицо = ПодразделенияДоговорников.Физлицо
|
|ИНДЕКСИРОВАТЬ ПО
| НомерСтроки";
Запрос.Выполнить();

Возврат Запрос;

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

Функция СформироватьЗапросПоНДФЛВычеты(Запрос)

Запрос.Текст =
"ВЫБРАТЬ
| СтрокиНДФЛ.НомерСтроки,
| СтрокиНДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| СтрокиНДФЛ.ПримененныйВычетНаДетей,
| СтрокиНДФЛ.ПримененныйВычетНаДетейДвойной,
| СтрокиНДФЛ.ПримененныйВычетНаДетейДвойнойВторой,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидов,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойной,
| СтрокиНДФЛ.ПримененныйВычетНаДетейИнвалидовДвойнойВторой,
| СтрокиНДФЛ.ПримененныйВычетИмущественныйРасход,
| СтрокиНДФЛ.ПримененныйВычетИмущественныйПроцентыПоКредитам,
| СтрокиНДФЛ.ФизЛицо КАК ФизЛицо,
| СтрокиНДФЛ.ПодразделениеОрганизации
|ИЗ
| ВТВычетыСПодразделениями КАК СтрокиНДФЛ
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо,
| МесяцНалоговогоПериода";

Возврат Запрос.Выполнить();

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

Функция СформироватьЗапросПоЛичнымВычетам(Запрос)

Запрос.Текст =
"ВЫБРАТЬ
| СтрокиНДФЛ.НомерСтроки,
| СтрокиНДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| ВЫБОР
| КОГДА СтрокиНДФЛ.Ссылка.Организация.ГоловнаяОрганизация = ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка)
| ТОГДА СтрокиНДФЛ.Ссылка.Организация
| ИНАЧЕ СтрокиНДФЛ.Ссылка.Организация.ГоловнаяОрганизация
| КОНЕЦ КАК ГоловнаяОрганизация,
| СтрокиНДФЛ.ПримененныйВычетЛичный,
| СтрокиНДФЛ.ФизЛицо КАК ФизЛицо,
| СтрокиНДФЛ.ПодразделениеОрганизации
|ПОМЕСТИТЬ ВТДанныеДокумента
|ИЗ
| ВТВычетыСПодразделениями КАК СтрокиНДФЛ
|ГДЕ
| СтрокиНДФЛ.ПримененныйВычетЛичный <> 0
|
|ИНДЕКСИРОВАТЬ ПО
| ФизЛицо,
| МесяцНалоговогоПериода
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДатыРегистра.НомерСтроки КАК НомерСтроки,
| ВычетыФизлиц.КодВычетаЛичный КАК КодВычетаЛичный
|ПОМЕСТИТЬ ВТКодыЛичныхВычетов
|ИЗ
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| МАКСИМУМ(ВычетыФизлиц.Период) КАК ПериодСреза,
| Периоды.ФизЛицо КАК ФизЛицо,
| Периоды.НомерСтроки КАК НомерСтроки
| ИЗ
| ВТДанныеДокумента КАК Периоды
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НДФЛСтандартныеВычетыФизлиц КАК ВычетыФизлиц
| ПО Периоды.МесяцНалоговогоПериода >= ВычетыФизлиц.Период
| И Периоды.ФизЛицо = ВычетыФизлиц.Физлицо
| ГДЕ
| Периоды.ПримененныйВычетЛичный <> 0
| И ВычетыФизлиц.КодВычетаЛичный <> ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.ПустаяСсылка)
|
| СГРУППИРОВАТЬ ПО
| Периоды.ФизЛицо,
| Периоды.НомерСтроки) КАК ДатыРегистра
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НДФЛСтандартныеВычетыФизлиц КАК ВычетыФизлиц
| ПО ДатыРегистра.ФизЛицо = ВычетыФизлиц.Физлицо
| И ДатыРегистра.ПериодСреза = ВычетыФизлиц.Период
|ГДЕ
| ВычетыФизлиц.КодВычетаЛичный ЕСТЬ НЕ NULL
|
|ИНДЕКСИРОВАТЬ ПО
| НомерСтроки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДанныеДокумента.ГоловнаяОрганизация,
| ДанныеДокумента.ФизЛицо КАК ФизЛицо,
| ГОД(ДанныеДокумента.МесяцНалоговогоПериода) КАК НалоговыйПериод,
| СУММА(ДанныеДокумента.ПримененныйВычетЛичный) КАК ПримененныйВычетСторно,
| МАКСИМУМ(ДанныеДокумента.МесяцНалоговогоПериода) КАК МаксимальныйМесяцНалоговогоПериода
|ПОМЕСТИТЬ ВТОтрицательныеВычетыЗаГод
|ИЗ
| ВТДанныеДокумента КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКодыЛичныхВычетов КАК ВычетыФизлиц
| ПО ДанныеДокумента.НомерСтроки = ВычетыФизлиц.НомерСтроки
|ГДЕ
| ВычетыФизлиц.КодВычетаЛичный ЕСТЬ NULL
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.ФизЛицо,
| ДанныеДокумента.ГоловнаяОрганизация,
| ГОД(ДанныеДокумента.МесяцНалоговогоПериода)
|
|ИМЕЮЩИЕ
| СУММА(ДанныеДокумента.ПримененныйВычетЛичный) < 0
|
|ИНДЕКСИРОВАТЬ ПО
| ФизЛицо,
| НалоговыйПериод
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДанныеДокумента.ФизЛицо КАК ФизЛицо,
| ДанныеДокумента.НалоговыйПериод КАК НалоговыйПериод,
| НДФЛПредоставленныеСтандартныеВычетыФизЛиц.КодВычета,
| СУММА(НДФЛПредоставленныеСтандартныеВычетыФизЛиц.ПримененныйВычет) КАК РанееПримененныйВычет
|ПОМЕСТИТЬ ВТУжеПредоставленныеВычеты
|ИЗ
| ВТОтрицательныеВычетыЗаГод КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НДФЛПредоставленныеСтандартныеВычетыФизЛиц КАК НДФЛПредоставленныеСтандартныеВычетыФизЛиц
| ПО ДанныеДокумента.ФизЛицо = НДФЛПредоставленныеСтандартныеВычетыФизЛиц.ФизЛицо
| И ДанныеДокумента.ГоловнаяОрганизация = НДФЛПредоставленныеСтандартныеВычетыФизЛиц.Организация
| И (НДФЛПредоставленныеСтандартныеВычетыФизЛиц.МесяцНалоговогоПериода МЕЖДУ НАЧАЛОПЕРИОДА(ДанныеДокумента.МаксимальныйМесяцНалоговогоПериода, ГОД) И КОНЕЦПЕРИОДА(ДанныеДокумента.МаксимальныйМесяцНалоговогоПериода, МЕСЯЦ))
|ГДЕ
| НДФЛПредоставленныеСтандартныеВычетыФизЛиц.КодВычета В (ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код103), ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код104), ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код105))
| И НДФЛПредоставленныеСтандартныеВычетыФизЛиц.Регистратор <> &ДокументСсылка
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.ФизЛицо,
| ДанныеДокумента.НалоговыйПериод,
| ДанныеДокумента.ПримененныйВычетСторно,
| НДФЛПредоставленныеСтандартныеВычетыФизЛиц.КодВычета
|
|ИНДЕКСИРОВАТЬ ПО
| ФизЛицо,
| НалоговыйПериод
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДанныеДокумента.ФизЛицо КАК ФизЛицо,
| ДанныеДокумента.НалоговыйПериод КАК НалоговыйПериод
|ПОМЕСТИТЬ ВТЕстьРанееПредоставленныеВычеты
|ИЗ
| ВТОтрицательныеВычетыЗаГод КАК ДанныеДокумента
| ЛЕВОЕ СОЕДИНЕНИЕ ВТУжеПредоставленныеВычеты КАК СтандартныеВычеты
| ПО ДанныеДокумента.ФизЛицо = СтандартныеВычеты.ФизЛицо
| И ДанныеДокумента.НалоговыйПериод = СтандартныеВычеты.НалоговыйПериод
|
|СГРУППИРОВАТЬ ПО
| ДанныеДокумента.ФизЛицо,
| ДанныеДокумента.НалоговыйПериод,
| ДанныеДокумента.ПримененныйВычетСторно
|
|ИМЕЮЩИЕ
| СУММА(СтандартныеВычеты.РанееПримененныйВычет) >= -ДанныеДокумента.ПримененныйВычетСторно
|
|ИНДЕКСИРОВАТЬ ПО
| ФизЛицо,
| НалоговыйПериод
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СтрокиНДФЛ.НомерСтроки КАК НомерСтроки,
| СтрокиНДФЛ.ПримененныйВычетЛичный
|ИЗ
| ВТДанныеДокумента КАК СтрокиНДФЛ
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКодыЛичныхВычетов КАК ВычетыФизлиц
| ПО СтрокиНДФЛ.НомерСтроки = ВычетыФизлиц.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ ВТЕстьРанееПредоставленныеВычеты КАК СторнируемыеВычеты
| ПО СтрокиНДФЛ.ФизЛицо = СторнируемыеВычеты.ФизЛицо
| И (ГОД(СтрокиНДФЛ.МесяцНалоговогоПериода) = СторнируемыеВычеты.НалоговыйПериод)
|ГДЕ
| СторнируемыеВычеты.ФизЛицо ЕСТЬ NULL
| И ВычетыФизлиц.КодВычетаЛичный ЕСТЬ NULL
| И СтрокиНДФЛ.ФизЛицо <> ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СтрокиНДФЛ.НомерСтроки КАК НомерСтроки,
| СтрокиНДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| СтрокиНДФЛ.ПримененныйВычетЛичный,
| ВычетыФизлиц.КодВычетаЛичный КАК КодВычетаЛичный,
| СтрокиНДФЛ.ФизЛицо,
| СтрокиНДФЛ.ПодразделениеОрганизации
|ИЗ
| ВТДанныеДокумента КАК СтрокиНДФЛ
| ЛЕВОЕ СОЕДИНЕНИЕ ВТКодыЛичныхВычетов КАК ВычетыФизлиц
| ПО СтрокиНДФЛ.НомерСтроки = ВычетыФизлиц.НомерСтроки
|ГДЕ
| ВычетыФизлиц.КодВычетаЛичный ЕСТЬ НЕ NULL
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| СторнируемыеВычеты.ФизЛицо КАК ФизЛицо,
| СторнируемыеВычеты.НалоговыйПериод КАК НалоговыйПериод,
| СтрокиНДФЛ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| СУММА(СтрокиНДФЛ.ПримененныйВычетЛичный) КАК ПримененныйВычетЛичный,
| СтрокиНДФЛ.ПодразделениеОрганизации
|ИЗ
| ВТЕстьРанееПредоставленныеВычеты КАК СторнируемыеВычеты
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеДокумента КАК СтрокиНДФЛ
| ПО (ГОД(СтрокиНДФЛ.МесяцНалоговогоПериода) = СторнируемыеВычеты.НалоговыйПериод)
| И СторнируемыеВычеты.ФизЛицо = СтрокиНДФЛ.ФизЛицо
|
|СГРУППИРОВАТЬ ПО
| СторнируемыеВычеты.ФизЛицо,
| СтрокиНДФЛ.МесяцНалоговогоПериода,
| СторнируемыеВычеты.НалоговыйПериод,
| СтрокиНДФЛ.ПодразделениеОрганизации
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо,
| НалоговыйПериод,
| МесяцНалоговогоПериода
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТУжеПредоставленныеВычеты.ФизЛицо КАК ФизЛицо,
| ВТУжеПредоставленныеВычеты.НалоговыйПериод КАК НалоговыйПериод,
| ВТУжеПредоставленныеВычеты.КодВычета,
| ВТУжеПредоставленныеВычеты.РанееПримененныйВычет
|ИЗ
| ВТУжеПредоставленныеВычеты КАК ВТУжеПредоставленныеВычеты
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо,
| НалоговыйПериод";

Возврат Запрос.ВыполнитьПакет();

КонецФункции // СформироватьЗапросПоЛичнымВычетам()

// Вычисляет разницу между начислениями и удержаниями работника и формирует
// движения по взаиморасчетам с работниками
//
// Параметры:
// Перерасчет - признак проведения перерасчетов, по умолчанию - Ложь
// Физлица - список физлиц, по которым производится расчет, по умолчанию - отсутствует
//
// Возвращаемое значение:
// Нет
//
Процедура СформироватьВычетыПоНДФЛ(ШапкаДокумента, Физлица = Неопределено, Отказ = Ложь, Заголовок = "")

// подготовим временную таблицу с данными т.ч. НДФЛ по вычетам и
// подразделением сотрудника для указанных в строках месяцев
Запрос = ПодготовитьЗапросПоНДФЛВычеты(ШапкаДокумента, Физлица);

////////////////////////////////////////////////////////////////////////
// личный вычет по НДФЛ

МассивРезультатов = СформироватьЗапросПоЛичнымВычетам(Запрос);

СтрокиБезКодов = МассивРезультатов[5];
Если Не СтрокиБезКодов.Пустой() Тогда // обнаружены недопустимые данные
Отказ = Истина;
ВыборкаПоНДФЛ = СтрокиБезКодов.Выбрать();
Пока ВыборкаПоНДФЛ.Следующий() Цикл
Если ВыборкаПоНДФЛ.ПримененныйВычетЛичный > 0 Тогда
ОбщегоНазначения.СообщитьОбОшибке("В строке номер """+ СокрЛП(ВыборкаПоНДФЛ.НомерСтроки) +
""" табл. части ""НДФЛ"": для указанного физического лица не зарегистрировано право на предоставление личного вычета!", Отказ, Заголовок);
Иначе
ОбщегоНазначения.СообщитьОбОшибке("В строке номер """+ СокрЛП(ВыборкаПоНДФЛ.НомерСтроки) +
""" табл. части ""НДФЛ"": для указанного физического лица сторнируется не начисленная ранее сумма личного вычета!", Отказ, Заголовок);
КонецЕсли;
КонецЦикла;
КонецЕсли;

Если НЕ Отказ Тогда

ТаблицаРаспределения = Новый ТаблицаЗначений;
ТаблицаРаспределения.Колонки.Добавить("ПодразделениеОрганизации");
ТаблицаРаспределения.Колонки.Добавить("Налог");
СтруктураПоиска = Новый Структура("Физлицо, МесяцНалоговогоПериода");

// получим реквизиты табличных частей
ДанныеПоНДФЛ = СформироватьЗапросПоНДФЛ(Физлица).Выгрузить();
ВыборкаПоНДФЛВычеты = СформироватьЗапросПоНДФЛВычеты(Запрос).Выбрать();

Пока ВыборкаПоНДФЛВычеты.Следующий() Цикл

ТекущееПодразделение = ВыборкаПоНДФЛВычеты.ПодразделениеОрганизации;

ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыборкаПоНДФЛВычеты); // Физлицо, МесяцНалоговогоПериода
СтрокиРаспределения = ДанныеПоНДФЛ.НайтиСтроки(СтруктураПоиска);
ТаблицаРаспределения.Очистить();
Для каждого СтрокаРезультата Из СтрокиРаспределения Цикл
ЗаполнитьЗначенияСвойств(ТаблицаРаспределения.Добавить(),СтрокаРезультата); // Налог, ПодразделениеОрганизации
КонецЦикла;
МассивКоэффициентов = ТаблицаРаспределения.ВыгрузитьКолонку("Налог");

// Заполним записи в наборах записей регистров

Если ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетей <> 0 Тогда
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Истина, ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетей, Справочники.ВычетыНДФЛ.Код101, ТаблицаРаспределения, МассивКоэффициентов, ТекущееПодразделение);
КонецЕсли;
Если ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейДвойной <> 0 Тогда
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Истина, ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейДвойной, Справочники.ВычетыНДФЛ.Код102, ТаблицаРаспределения, МассивКоэффициентов, ТекущееПодразделение);
КонецЕсли;
Если ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейДвойнойВторой <> 0 Тогда
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Истина, ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейДвойнойВторой, Справочники.ВычетыНДФЛ.Код111, ТаблицаРаспределения, МассивКоэффициентов, ТекущееПодразделение);
КонецЕсли;
Если ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейИнвалидов <> 0 Тогда
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Истина, ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейИнвалидов, Справочники.ВычетыНДФЛ.Код106, ТаблицаРаспределения, МассивКоэффициентов, ТекущееПодразделение);
КонецЕсли;
Если ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейИнвалидовДвойной <> 0 Тогда
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Истина, ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейИнвалидовДвойной, Справочники.ВычетыНДФЛ.Код107, ТаблицаРаспределения, МассивКоэффициентов, ТекущееПодразделение);
КонецЕсли;
Если ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейИнвалидовДвойнойВторой <> 0 Тогда
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Истина, ВыборкаПоНДФЛВычеты.ПримененныйВычетНаДетейИнвалидовДвойнойВторой, Справочники.ВычетыНДФЛ.Код113, ТаблицаРаспределения, МассивКоэффициентов, ТекущееПодразделение);
КонецЕсли;
Если ВыборкаПоНДФЛВычеты.ПримененныйВычетИмущественныйРасход <> 0 Тогда
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Ложь, ВыборкаПоНДФЛВычеты.ПримененныйВычетИмущественныйРасход, Справочники.ВычетыНДФЛ.Код311, ТаблицаРаспределения, МассивКоэффициентов, ТекущееПодразделение);
КонецЕсли;
Если ВыборкаПоНДФЛВычеты.ПримененныйВычетИмущественныйПроцентыПоКредитам <> 0 Тогда
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Ложь, ВыборкаПоНДФЛВычеты.ПримененныйВычетИмущественныйПроцентыПоКредитам, Справочники.ВычетыНДФЛ.Код312, ТаблицаРаспределения, МассивКоэффициентов, ТекущееПодразделение);
КонецЕсли;

КонецЦикла;

ВыборкаПоНДФЛВычеты = МассивРезультатов[6].Выбрать();
Пока ВыборкаПоНДФЛВычеты.Следующий() Цикл

ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыборкаПоНДФЛВычеты); // Физлицо, МесяцНалоговогоПериода
СтрокиРаспределения = ДанныеПоНДФЛ.НайтиСтроки(СтруктураПоиска);
ТаблицаРаспределения.Очистить();
Для каждого СтрокаРезультата Из СтрокиРаспределения Цикл
ЗаполнитьЗначенияСвойств(ТаблицаРаспределения.Добавить(),СтрокаРезультата); // Налог, ПодразделениеОрганизации
КонецЦикла;
МассивКоэффициентов = ТаблицаРаспределения.ВыгрузитьКолонку("Налог");

// Заполним записи в наборах записей регистров
РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, Истина, ВыборкаПоНДФЛВычеты.ПримененныйВычетЛичный, ВыборкаПоНДФЛВычеты.КодВычетаЛичный, ТаблицаРаспределения, МассивКоэффициентов, ВыборкаПоНДФЛВычеты.ПодразделениеОрганизации);

КонецЦикла;

ВыборкаПоНДФЛ = МассивРезультатов[7].Выбрать();
ТаблицаВычетов = МассивРезультатов[8].Выгрузить();
СтруктураПоискаВычетов = Новый Структура("ФизЛицо","НалоговыйПериод");
Пока ВыборкаПоНДФЛ.СледующийПоЗначениюПоля("ФизЛицо") Цикл
Пока ВыборкаПоНДФЛ.СледующийПоЗначениюПоля("НалоговыйПериод") Цикл

ЗаполнитьЗначенияСвойств(СтруктураПоискаВычетов,ВыборкаПоНДФЛ);
СтрокиВычетов = ТаблицаВычетов.НайтиСтроки(СтруктураПоискаВычетов);

Пока ВыборкаПоНДФЛ.Следующий() Цикл // по месяцам

ОстатокВычета = ВыборкаПоНДФЛ.ПримененныйВычетЛичный;

ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыборкаПоНДФЛ); // Физлицо, МесяцНалоговогоПериода
СтрокиРаспределения = ДанныеПоНДФЛ.НайтиСтроки(СтруктураПоиска);
ТаблицаРаспределения.Очистить();
Для каждого СтрокаРезультата Из СтрокиРаспределения Цикл
ЗаполнитьЗначенияСвойств(ТаблицаРаспределения.Добавить(),СтрокаРезультата); // Налог, ПодразделениеОрганизации
КонецЦикла;
МассивКоэффициентов = ТаблицаРаспределения.ВыгрузитьКолонку("Налог");

Пока (ОстатокВычета < 0) И (СтрокиВычетов.Количество()) Цикл
СуммаВычета = -Мин(-ВыборкаПоНДФЛ.ПримененныйВычетЛичный, СтрокиВычетов[0].РанееПримененныйВычет);
РаспределитьВычет(ВыборкаПоНДФЛ, ШапкаДокумента, Истина, СуммаВычета, СтрокиВычетов[0].КодВычета, ТаблицаРаспределения, МассивКоэффициентов, ВыборкаПоНДФЛ.ПодразделениеОрганизации);
ОстатокВычета = ОстатокВычета - СуммаВычета;
СтрокиВычетов[0].РанееПримененныйВычет = СтрокиВычетов[0].РанееПримененныйВычет + СуммаВычета;
Если СтрокиВычетов[0].РанееПримененныйВычет = 0 Тогда
СтрокиВычетов.Удалить(0)
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;

КонецЕсли;

КонецПроцедуры // СформироватьВычетыПоНДФЛ()

Процедура РаспределитьВычет(ВыборкаПоНДФЛВычеты, ШапкаДокумента, ЭтоСтандартныйВычет, ПримененныйВычет, КодВычета, ТаблицаРаспределения, МассивКоэффициентов, ПодразделениеПоУмолчанию)

МассивСуммВычета = ОбщегоНазначения.РаспределитьПропорционально(ПримененныйВычет,МассивКоэффициентов);
Если МассивСуммВычета = Неопределено Тогда
ДобавитьСтрокуВычетовПоНДФЛ(ВыборкаПоНДФЛВычеты, ШапкаДокумента, ЭтоСтандартныйВычет, КодВычета, ПримененныйВычет, ПодразделениеПоУмолчанию);
Иначе
Для каждого СтрокаТЗ Из ТаблицаРаспределения Цикл
ДобавитьСтрокуВычетовПоНДФЛ(ВыборкаПоНДФЛВычеты, ШапкаДокумента, ЭтоСтандартныйВычет, КодВычета, МассивСуммВычета[ТаблицаРаспределения.Индекс(СтрокаТЗ)], СтрокаТЗ.ПодразделениеОрганизации);
КонецЦикла;
КонецЕсли;

КонецПроцедуры

Процедура СформироватьПособияПоУходу(НаборПособияПоУходуЗаРебенкомДоПолутораЛет, НаборЗаработкиПолучателей, ФизЛица = Неопределено)

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка",Ссылка);
Запрос.УстановитьПараметр("ФизЛица",ФизЛица);
Запрос.УстановитьПараметр("ПоВсемФизЛицам",ФизЛица = Неопределено);

Если ПериодРегистрации < ПроведениеРасчетов.ДатаЗаменыЕСНСтраховымиВзносами() Тогда

Запрос.Текст =
"ВЫБРАТЬ
| ОсновныеНачисления.Ссылка,
| СУММА(ВЫБОР
| КОГДА ОсновныеНачисления.Результат = 0
| ТОГДА 0
| КОГДА ОсновныеНачисления.Показатель2 = 0
| ТОГДА 0
| КОГДА ОсновныеНачисления.Показатель3 = 0
| ТОГДА 0
| КОГДА ОсновныеНачисления.Показатель2 = ОсновныеНачисления.Показатель3
| ТОГДА 1
| ИНАЧЕ ВЫБОР
| КОГДА (ВЫРАЗИТЬ(ОсновныеНачисления.Показатель1 * 0.4 * (ВЫРАЗИТЬ(РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ОсновныеНачисления.ДатаНачала, ГОД), ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ОсновныеНачисления.ДатаОкончания, ГОД), СЕКУНДА, 1), ДЕНЬ) / 12 КАК ЧИСЛО(15, 2))) КАК ЧИСЛО(15, 2))) > (ВЫРАЗИТЬ(6000 * ВЫБОР
| КОГДА ОсновныеНачисления.ПодразделениеОрганизации.КодПоОКАТО <> """"
| И ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ
| КОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ
| ИНАЧЕ 1
| КОНЕЦ КАК ЧИСЛО(15, 2)))
| ТОГДА ВЫРАЗИТЬ(6000 * ВЫБОР
| КОГДА ОсновныеНачисления.ПодразделениеОрганизации.КодПоОКАТО <> """"
| И ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ
| КОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ
| ИНАЧЕ 1
| КОНЕЦ КАК ЧИСЛО(15, 2))
| КОГДА (ВЫРАЗИТЬ(ОсновныеНачисления.Показатель1 * 0.4 * (ВЫРАЗИТЬ(РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ОсновныеНачисления.ДатаНачала, ГОД), ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ОсновныеНачисления.ДатаОкончания, ГОД), СЕКУНДА, 1), ДЕНЬ) / 12 КАК ЧИСЛО(15, 2))) КАК ЧИСЛО(15, 2))) < (ВЫРАЗИТЬ(1500 * ВЫБОР
| КОГДА ОсновныеНачисления.ПодразделениеОрганизации.КодПоОКАТО <> """"
| И ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ
| КОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ
| ИНАЧЕ 1
| КОНЕЦ КАК ЧИСЛО(15, 2)))
| ТОГДА ВЫРАЗИТЬ(1500 * ВЫБОР
| КОГДА ОсновныеНачисления.ПодразделениеОрганизации.КодПоОКАТО <> """"
| И ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ
| КОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ
| ИНАЧЕ 1
| КОНЕЦ КАК ЧИСЛО(15, 2))
| ИНАЧЕ ВЫРАЗИТЬ(ОсновныеНачисления.Показатель1 * 0.4 * (ВЫРАЗИТЬ(РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ОсновныеНачисления.ДатаНачала, ГОД), ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ОсновныеНачисления.ДатаОкончания, ГОД), СЕКУНДА, 1), ДЕНЬ) / 12 КАК ЧИСЛО(15, 2))) КАК ЧИСЛО(15, 2))
| КОНЕЦ * ВЫБОР
| КОГДА ОсновныеНачисления.ДатаНачала = НАЧАЛОПЕРИОДА(ОсновныеНачисления.ДатаНачала, МЕСЯЦ)
| И ОсновныеНачисления.ДатаОкончания = КОНЕЦПЕРИОДА(ОсновныеНачисления.ДатаНачала, МЕСЯЦ)
| ТОГДА 1
| ИНАЧЕ РАЗНОСТЬДАТ(ОсновныеНачисления.ДатаНачала, ДОБАВИТЬКДАТЕ(ОсновныеНачисления.ДатаОкончания, СЕКУНДА, 1), ДЕНЬ) / РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ОсновныеНачисления.ДатаНачала, МЕСЯЦ), ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ОсновныеНачисления.ДатаНачала, МЕСЯЦ), СЕКУНДА, 1), ДЕНЬ)
| КОНЕЦ * ВЫБОР
| КОГДА ОсновныеНачисления.Сторно
| ТОГДА -1
| ИНАЧЕ 1
| КОНЕЦ / ОсновныеНачисления.Результат
| КОНЕЦ) КАК ДоляПособияНаПервогоРебенка,
| ОсновныеНачисления.ДатаНачала КАК ДатаНачала,
| ОсновныеНачисления.ДатаОкончания КАК ДатаОкончания,
| ОсновныеНачисления.Сотрудник КАК Сотрудник,
| ОсновныеНачисления.Сторно КАК Сторно
|ПОМЕСТИТЬ РасчетПособийПоУходуЗаПервымРебенком
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК ОсновныеНачисления
|ГДЕ
| ОсновныеНачисления.ВидРасчета.ВидПособияСоциальногоСтрахования = ЗНАЧЕНИЕ(Перечисление.ВидыПособийСоциальногоСтрахования.ПоУходуЗаРебенкомДоПолутораЛет)
| И ОсновныеНачисления.Ссылка = &Ссылка
| И (&ПоВсемФизЛицам
| ИЛИ ОсновныеНачисления.Физлицо В (&Физлица))
|
|СГРУППИРОВАТЬ ПО
| ОсновныеНачисления.ДатаНачала,
| ОсновныеНачисления.Ссылка,
| ОсновныеНачисления.ДатаОкончания,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.Сторно
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| ДатаНачала,
| ДатаОкончания,
| Сторно
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОсновныеНачисления.Ссылка,
| ОсновныеНачисления.Ссылка.Организация КАК Организация,
| ОсновныеНачисления.Сотрудник КАК Сотрудник,
| ОсновныеНачисления.ПериодДействияНачало КАК ПериодДействияНачало,
| НАЧАЛОПЕРИОДА(ОсновныеНачисления.ПериодДействияКонец, ДЕНЬ) КАК ПериодДействияКонец,
| ОсновныеНачисления.Сторно КАК Сторно,
| ОсновныеНачисления.Результат,
| ОсновныеНачисления.СтатьяФинансирования.ПодпадаетПодЕНВД КАК ОблагаетсяЕНВД,
| КОНЕЦПЕРИОДА(ОсновныеНачисления.Ссылка.ПериодРегистрации, МЕСЯЦ) КАК Период
|ПОМЕСТИТЬ ВТОтражениеВУчете
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НачисленияПоИФ КАК ОсновныеНачисления
|ГДЕ
| ОсновныеНачисления.ВидРасчета.ВидПособияСоциальногоСтрахования = ЗНАЧЕНИЕ(Перечисление.ВидыПособийСоциальногоСтрахования.ПоУходуЗаРебенкомДоПолутораЛет)
| И ОсновныеНачисления.Ссылка = &Ссылка
| И (&ПоВсемФизЛицам
| ИЛИ ОсновныеНачисления.Физлицо В (&Физлица))
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| ПериодДействияНачало,
| ПериодДействияКонец,
| Сторно
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОсновныеНачисления.Организация КАК Организация,
| ОсновныеНачисления.ОблагаетсяЕНВД,
| ИСТИНА КАК УходЗаПервымРебенком,
| ОсновныеНачисления.Сотрудник.Физлицо КАК Физлицо,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисления.Сторно
| ТОГДА -1
| ИНАЧЕ 1
| КОНЕЦ) КАК СтраховыеСлучаи,
| СУММА(ВЫРАЗИТЬ(ОсновныеНачисления.Результат * РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка КАК ЧИСЛО(15, 2))) КАК СуммаВсего,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.ПериодДействияНачало КАК ДатаСтраховогоСлучая,
| ОсновныеНачисления.Сторно,
| ОсновныеНачисления.Период
|ИЗ
| ВТОтражениеВУчете КАК ОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РасчетПособийПоУходуЗаПервымРебенком КАК РасчетПособийПоУходуЗаПервымРебенком
| ПО ОсновныеНачисления.Сотрудник = РасчетПособийПоУходуЗаПервымРебенком.Сотрудник
| И ОсновныеНачисления.ПериодДействияНачало = РасчетПособийПоУходуЗаПервымРебенком.ДатаНачала
| И ОсновныеНачисления.ПериодДействияКонец = РасчетПособийПоУходуЗаПервымРебенком.ДатаОкончания
| И ОсновныеНачисления.Сторно = РасчетПособийПоУходуЗаПервымРебенком.Сторно
|ГДЕ
| РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка <> 0
|
|СГРУППИРОВАТЬ ПО
| ОсновныеНачисления.Сторно,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.Сотрудник.Физлицо,
| ОсновныеНачисления.ОблагаетсяЕНВД,
| ОсновныеНачисления.Организация,
| ОсновныеНачисления.ПериодДействияНачало,
| ОсновныеНачисления.Период
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОсновныеНачисления.Организация,
| ОсновныеНачисления.ОблагаетсяЕНВД,
| ЛОЖЬ,
| ОсновныеНачисления.Сотрудник.Физлицо,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисления.Сторно
| ТОГДА -1
| ИНАЧЕ 1
| КОНЕЦ),
| СУММА(ОсновныеНачисления.Результат - (ВЫРАЗИТЬ(ОсновныеНачисления.Результат * РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка КАК ЧИСЛО(15, 2)))),
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.ПериодДействияНачало,
| ОсновныеНачисления.Сторно,
| ОсновныеНачисления.Период
|ИЗ
| ВТОтражениеВУчете КАК ОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РасчетПособийПоУходуЗаПервымРебенком КАК РасчетПособийПоУходуЗаПервымРебенком
| ПО ОсновныеНачисления.Сотрудник = РасчетПособийПоУходуЗаПервымРебенком.Сотрудник
| И ОсновныеНачисления.ПериодДействияНачало = РасчетПособийПоУходуЗаПервымРебенком.ДатаНачала
| И ОсновныеНачисления.ПериодДействияКонец = РасчетПособийПоУходуЗаПервымРебенком.ДатаОкончания
| И ОсновныеНачисления.Сторно = РасчетПособийПоУходуЗаПервымРебенком.Сторно
|ГДЕ
| РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка <> 1
|
|СГРУППИРОВАТЬ ПО
| ОсновныеНачисления.Сторно,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.Сотрудник.Физлицо,
| ОсновныеНачисления.ОблагаетсяЕНВД,
| ОсновныеНачисления.Организация,
| ОсновныеНачисления.ПериодДействияНачало,
| ОсновныеНачисления.Период";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(НаборПособияПоУходуЗаРебенкомДоПолутораЛет.Добавить(),Выборка);
КонецЦикла;

Запрос.Текст =
"ВЫБРАТЬ
| ПолучателиПособийПоУходу.Ссылка,
| ПолучателиПособийПоУходу.Сотрудник КАК Сотрудник,
| ПолучателиПособийПоУходу.Физлицо,
| ПолучателиПособийПоУходу.ВидРасчета,
| ПолучателиПособийПоУходу.ДатаНачала КАК ДатаНачала,
| ПолучателиПособийПоУходу.ДатаОкончания КАК ДатаОкончания,
| ПолучателиПособийПоУходу.Результат,
| ПолучателиПособийПоУходу.Сторно КАК Сторно,
| ПолучателиПособийПоУходу.Показатель1 КАК РазмерСреднегоЗаработка
|ПОМЕСТИТЬ ВТНачисления
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК ПолучателиПособийПоУходу
|ГДЕ
| ПолучателиПособийПоУходу.ВидРасчета.ВидПособияСоциальногоСтрахования = ЗНАЧЕНИЕ(Перечисление.ВидыПособийСоциальногоСтрахования.ПоУходуЗаРебенкомДоПолутораЛет)
| И ПолучателиПособийПоУходу.Ссылка = &Ссылка
| И (&ПоВсемФизЛицам
| ИЛИ ПолучателиПособийПоУходу.Физлицо В (&Физлица))
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| ДатаНачала,
| ДатаОкончания,
| Сторно
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПолучателиПособийПоУходу.Сотрудник КАК Сотрудник,
| ПолучателиПособийПоУходу.ДатаНачала КАК ДатаНачала,
| ПолучателиПособийПоУходу.ДатаОкончания КАК ДатаОкончания
|ПОМЕСТИТЬ ВТОтсторнированныеПособия
|ИЗ
| ВТНачисления КАК ПолучателиПособийПоУходу
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНачисления КАК СторноСтроки
| ПО ПолучателиПособийПоУходу.Сторно <> СторноСтроки.Сторно
| И ПолучателиПособийПоУходу.Сотрудник = СторноСтроки.Сотрудник
| И ПолучателиПособийПоУходу.ВидРасчета = СторноСтроки.ВидРасчета
| И ПолучателиПособийПоУходу.ДатаНачала = СторноСтроки.ДатаНачала
| И ПолучателиПособийПоУходу.ДатаОкончания = СторноСтроки.ДатаОкончания
| И (ПолучателиПособийПоУходу.Результат = -СторноСтроки.Результат)
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| ДатаНачала,
| ДатаОкончания
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ПоИФ.Сотрудник КАК Сотрудник,
| ПоИФ.ПериодДействияНачало КАК ПериодДействияНачало,
| НАЧАЛОПЕРИОДА(ПоИФ.ПериодДействияКонец, ДЕНЬ) КАК ПериодДействияКонец,
| ПоИФ.Сторно КАК Сторно,
| СУММА(ВЫБОР
| КОГДА ПоИФ.СтатьяФинансирования.ПодпадаетПодЕНВД
| ТОГДА ПоИФ.Результат
| ИНАЧЕ 0
| КОНЕЦ) КАК ЕНВД,
| СУММА(ВЫБОР
| КОГДА ПоИФ.СтатьяФинансирования.ПодпадаетПодЕНВД
| ТОГДА 0
| ИНАЧЕ ПоИФ.Результат
| КОНЕЦ) КАК НеЕНВД
|ПОМЕСТИТЬ ВТДанныеОбОтражении
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НачисленияПоИФ КАК ПоИФ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТНачисления КАК ВТНачисления
| ПО ПоИФ.Сотрудник = ВТНачисления.Сотрудник
| И ПоИФ.ПериодДействияНачало = ВТНачисления.ДатаНачала
| И (НАЧАЛОПЕРИОДА(ПоИФ.ПериодДействияКонец, ДЕНЬ) = ВТНачисления.ДатаОкончания)
| И ПоИФ.ВидРасчета = ВТНачисления.ВидРасчета
| И ПоИФ.Сторно = ВТНачисления.Сторно
|ГДЕ
| ПоИФ.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| ПоИФ.Сотрудник,
| ПоИФ.ПериодДействияНачало,
| ПоИФ.ПериодДействияКонец,
| ПоИФ.Сторно
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| ПериодДействияНачало,
| ПериодДействияКонец,
| Сторно
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| Начисления.Ссылка.ПериодРегистрации КАК Период,
| Начисления.Ссылка.Организация КАК Организация,
| Начисления.Физлицо,
| ИСТИНА КАК ОблагаетсяЕНВД,
| Начисления.Ссылка КАК ДокументОснование,
| МАКСИМУМ(Начисления.РазмерСреднегоЗаработка) КАК РазмерСреднегоЗаработка,
| МАКСИМУМ(Начисления.Сотрудник) КАК Сотрудник
|ИЗ
| ВТНачисления КАК Начисления
| ЛЕВОЕ СОЕДИНЕНИЕ ВТОтсторнированныеПособия КАК ОтсторнированныеПособия
| ПО Начисления.Сотрудник = ОтсторнированныеПособия.Сотрудник
| И Начисления.ДатаНачала = ОтсторнированныеПособия.ДатаНачала
| И Начисления.ДатаОкончания = ОтсторнированныеПособия.ДатаОкончания
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОбОтражении КАК ДанныеОбОтражении
| ПО Начисления.Сотрудник = ДанныеОбОтражении.Сотрудник
| И Начисления.ДатаНачала = ДанныеОбОтражении.ПериодДействияНачало
| И Начисления.ДатаОкончания = ДанныеОбОтражении.ПериодДействияКонец
| И Начисления.Сторно = ДанныеОбОтражении.Сторно
|ГДЕ
| ОтсторнированныеПособия.Сотрудник ЕСТЬ NULL
| И ДанныеОбОтражении.ЕНВД <> 0
|
|СГРУППИРОВАТЬ ПО
| Начисления.Ссылка.ПериодРегистрации,
| Начисления.Ссылка.Организация,
| Начисления.Ссылка,
| Начисления.Физлицо
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Начисления.Ссылка.ПериодРегистрации,
| Начисления.Ссылка.Организация,
| Начисления.Физлицо,
| ЛОЖЬ,
| Начисления.Ссылка,
| МАКСИМУМ(Начисления.РазмерСреднегоЗаработка),
| МАКСИМУМ(Начисления.Сотрудник)
|ИЗ
| ВТНачисления КАК Начисления
| ЛЕВОЕ СОЕДИНЕНИЕ ВТОтсторнированныеПособия КАК ОтсторнированныеПособия
| ПО Начисления.Сотрудник = ОтсторнированныеПособия.Сотрудник
| И Начисления.ДатаНачала = ОтсторнированныеПособия.ДатаНачала
| И Начисления.ДатаОкончания = ОтсторнированныеПособия.ДатаОкончания
| ЛЕВОЕ СОЕДИНЕНИЕ ВТДанныеОбОтражении КАК ДанныеОбОтражении
| ПО Начисления.Сотрудник = ДанныеОбОтражении.Сотрудник
| И Начисления.ДатаНачала = ДанныеОбОтражении.ПериодДействияНачало
| И Начисления.ДатаОкончания = ДанныеОбОтражении.ПериодДействияКонец
| И Начисления.Сторно = ДанныеОбОтражении.Сторно
|ГДЕ
| ОтсторнированныеПособия.Сотрудник ЕСТЬ NULL
| И ДанныеОбОтражении.НеЕНВД <> 0
|
|СГРУППИРОВАТЬ ПО
| Начисления.Ссылка.ПериодРегистрации,
| Начисления.Ссылка.Организация,
| Начисления.Ссылка,
| Начисления.Физлицо";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(НаборЗаработкиПолучателей.Добавить(),Выборка);
КонецЦикла;

Иначе

Запрос.Текст =
"ВЫБРАТЬ
| ОсновныеНачисления.НомерСтроки КАК НомерСтроки,
| НАЧАЛОПЕРИОДА(ОсновныеНачисления.ДатаНачала, МЕСЯЦ) КАК ПериодДействия,
| ОсновныеНачисления.ДатаНачала,
| ОсновныеНачисления.ДатаОкончания,
| ОсновныеНачисления.Сотрудник КАК Сотрудник,
| ОсновныеНачисления.Показатель1,
| ОсновныеНачисления.Показатель2,
| ОсновныеНачисления.Показатель3,
| ОсновныеНачисления.Сторно,
| ОсновныеНачисления.Результат,
| ОсновныеНачисления.ДополнительныйРезультат,
| ВЫБОР
| КОГДА ОсновныеНачисления.ПодразделениеОрганизации.КодПоОКАТО <> """"
| ТОГДА ВЫБОР
| КОГДА ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.ПодразделениеОрганизации.РайонныйКоэффициентРФ
| ИНАЧЕ 1
| КОНЕЦ
| КОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ > 1
| ТОГДА ОсновныеНачисления.Ссылка.Организация.РайонныйКоэффициентРФ
| ИНАЧЕ 1
| КОНЕЦ КАК РайонныйКоэффициентРФ,
| ВЫРАЗИТЬ(ОсновныеНачисления.Показатель1 * 0.4 * 30.4 КАК ЧИСЛО(15, 2)) КАК МесячноеПособие
|ПОМЕСТИТЬ ВТЗаписиПособийПоУходу
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.Начисления КАК ОсновныеНачисления
|ГДЕ
| ОсновныеНачисления.ВидРасчета.ВидПособияСоциальногоСтрахования = ЗНАЧЕНИЕ(Перечисление.ВидыПособийСоциальногоСтрахования.ПоУходуЗаРебенкомДоПолутораЛет)
| И ОсновныеНачисления.Ссылка = &Ссылка
| И (&ПоВсемФизЛицам
| ИЛИ ОсновныеНачисления.Физлицо В (&Физлица))
|
|ИНДЕКСИРОВАТЬ ПО
| НомерСтроки
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОсновныеНачисления.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА ОсновныеНачисления.Результат = 0
| ТОГДА 0
| КОГДА ОсновныеНачисления.Показатель2 = 0
| ТОГДА 0
| КОГДА ОсновныеНачисления.Показатель3 = 0
| ТОГДА 0
| КОГДА ОсновныеНачисления.Показатель2 = ОсновныеНачисления.Показатель3
| ТОГДА 1
| ИНАЧЕ ВЫБОР
| КОГДА ОсновныеНачисления.МесячноеПособие > (ВЫРАЗИТЬ(МаксимумПособияПоУходуЗаРебенкомДоПолутораЛет.Размер / 12 КАК ЧИСЛО(15, 2)))
| ТОГДА ВЫРАЗИТЬ(МаксимумПособияПоУходуЗаРебенкомДоПолутораЛет.Размер / 12 КАК ЧИСЛО(15, 2))
| КОГДА ОсновныеНачисления.МесячноеПособие < (ВЫРАЗИТЬ(МинимумПособияПоУходуЗаПервымРебенкомДоПолутораЛет.Размер * ОсновныеНачисления.РайонныйКоэффициентРФ КАК ЧИСЛО(15, 2)))
| ТОГДА ВЫРАЗИТЬ(МинимумПособияПоУходуЗаПервымРебенкомДоПолутораЛет.Размер * ОсновныеНачисления.РайонныйКоэффициентРФ КАК ЧИСЛО(15, 2))
| ИНАЧЕ ОсновныеНачисления.МесячноеПособие
| КОНЕЦ * ВЫБОР
| КОГДА ОсновныеНачисления.ДатаНачала = ОсновныеНачисления.ПериодДействия
| И ОсновныеНачисления.ДатаОкончания = КОНЕЦПЕРИОДА(ОсновныеНачисления.ПериодДействия, МЕСЯЦ)
| ТОГДА 1
| ИНАЧЕ РАЗНОСТЬДАТ(ОсновныеНачисления.ДатаНачала, ДОБАВИТЬКДАТЕ(ОсновныеНачисления.ДатаОкончания, СЕКУНДА, 1), ДЕНЬ) / РАЗНОСТЬДАТ(ОсновныеНачисления.ПериодДействия, ДОБАВИТЬКДАТЕ(КОНЕЦПЕРИОДА(ОсновныеНачисления.ПериодДействия, МЕСЯЦ), СЕКУНДА, 1), ДЕНЬ)
| КОНЕЦ * ВЫБОР
| КОГДА ОсновныеНачисления.Сторно
| ТОГДА -1
| ИНАЧЕ 1
| КОНЕЦ / ОсновныеНачисления.Результат
| КОНЕЦ КАК ДоляПособияНаПервогоРебенка,
| ОсновныеНачисления.ДатаНачала КАК ДатаНачала,
| ОсновныеНачисления.ДатаОкончания КАК ДатаОкончания,
| ОсновныеНачисления.Сотрудник КАК Сотрудник,
| ОсновныеНачисления.Сторно КАК Сторно,
| ВЫБОР
| КОГДА ОсновныеНачисления.Результат = 0
| ТОГДА 0
| ИНАЧЕ ОсновныеНачисления.ДополнительныйРезультат / ОсновныеНачисления.Результат
| КОНЕЦ КАК КоэффициентДопРезультата
|ПОМЕСТИТЬ РасчетПособийПоУходуЗаПервымРебенком
|ИЗ
| ВТЗаписиПособийПоУходу КАК ОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ЗаписиПособийПоУходу.НомерСтроки КАК НомерСтроки,
| ГосударственныеПособия.ВидПособия КАК ВидПособия,
| МАКСИМУМ(ГосударственныеПособия.Период) КАК ДатаИзмененияРазмераПособия
| ИЗ
| ВТЗаписиПособийПоУходу КАК ЗаписиПособийПоУходу
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГосударственныеПособия КАК ГосударственныеПособия
| ПО ЗаписиПособийПоУходу.ПериодДействия >= ГосударственныеПособия.Период
| ГДЕ
| ГосударственныеПособия.ВидПособия = ЗНАЧЕНИЕ(Перечисление.РазмерыГосударственныхПособий.МинимумПособияПоУходуЗаПервымРебенкомДоПолутораЛет)
|
| СГРУППИРОВАТЬ ПО
| ЗаписиПособийПоУходу.НомерСтроки,
| ГосударственныеПособия.ВидПособия) КАК ДатыИзРегистраМинимум
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГосударственныеПособия КАК МинимумПособияПоУходуЗаПервымРебенкомДоПолутораЛет
| ПО ДатыИзРегистраМинимум.ВидПособия = МинимумПособияПоУходуЗаПервымРебенкомДоПолутораЛет.ВидПособия
| И ДатыИзРегистраМинимум.ДатаИзмененияРазмераПособия = МинимумПособияПоУходуЗаПервымРебенкомДоПолутораЛет.Период
| ПО ОсновныеНачисления.НомерСтроки = ДатыИзРегистраМинимум.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| ЗаписиПособийПоУходу.НомерСтроки КАК НомерСтроки,
| МАКСИМУМ(ГосударственныеПособия.Период) КАК ДатаИзмененияРазмераПособия
| ИЗ
| ВТЗаписиПособийПоУходу КАК ЗаписиПособийПоУходу
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредельнаяВеличинаБазыСтраховыхВзносов КАК ГосударственныеПособия
| ПО ЗаписиПособийПоУходу.ПериодДействия >= ГосударственныеПособия.Период
|
| СГРУППИРОВАТЬ ПО
| ЗаписиПособийПоУходу.НомерСтроки) КАК ДатыИзРегистраМаксимум
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПредельнаяВеличинаБазыСтраховыхВзносов КАК МаксимумПособияПоУходуЗаРебенкомДоПолутораЛет
| ПО ДатыИзРегистраМаксимум.ДатаИзмененияРазмераПособия = МаксимумПособияПоУходуЗаРебенкомДоПолутораЛет.Период
| ПО ОсновныеНачисления.НомерСтроки = ДатыИзРегистраМаксимум.НомерСтроки
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| ДатаНачала,
| ДатаОкончания,
| Сторно
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОсновныеНачисления.Ссылка,
| ОсновныеНачисления.Ссылка.Организация КАК Организация,
| ОсновныеНачисления.Сотрудник КАК Сотрудник,
| ОсновныеНачисления.ПериодДействияНачало КАК ПериодДействияНачало,
| НАЧАЛОПЕРИОДА(ОсновныеНачисления.ПериодДействияКонец, ДЕНЬ) КАК ПериодДействияКонец,
| ОсновныеНачисления.Сторно КАК Сторно,
| СУММА(ОсновныеНачисления.Результат) КАК Результат,
| ОсновныеНачисления.СтатьяФинансирования.ПодпадаетПодЕНВД КАК ОблагаетсяЕНВД,
| КОНЕЦПЕРИОДА(ОсновныеНачисления.Ссылка.ПериодРегистрации, МЕСЯЦ) КАК Период
|ПОМЕСТИТЬ ВТОтражениеВУчете
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НачисленияПоИФ КАК ОсновныеНачисления
|ГДЕ
| ОсновныеНачисления.ВидРасчета.ВидПособияСоциальногоСтрахования = ЗНАЧЕНИЕ(Перечисление.ВидыПособийСоциальногоСтрахования.ПоУходуЗаРебенкомДоПолутораЛет)
| И ОсновныеНачисления.Ссылка = &Ссылка
| И (&ПоВсемФизЛицам
| ИЛИ ОсновныеНачисления.Физлицо В (&Физлица))
|
|СГРУППИРОВАТЬ ПО
| ОсновныеНачисления.Ссылка,
| ОсновныеНачисления.Ссылка.Организация,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.Сторно,
| ОсновныеНачисления.СтатьяФинансирования.ПодпадаетПодЕНВД,
| ОсновныеНачисления.ПериодДействияНачало,
| НАЧАЛОПЕРИОДА(ОсновныеНачисления.ПериодДействияКонец, ДЕНЬ),
| КОНЕЦПЕРИОДА(ОсновныеНачисления.Ссылка.ПериодРегистрации, МЕСЯЦ)
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник,
| ПериодДействияНачало,
| ПериодДействияКонец,
| Сторно
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ОсновныеНачисления.Организация КАК Организация,
| ОсновныеНачисления.ОблагаетсяЕНВД,
| ИСТИНА КАК УходЗаПервымРебенком,
| ВЫБОР
| КОГДА ОсновныеНачисления.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ПустаяСсылка)
| КОНЕЦ КАК ВидЗанятости,
| ОсновныеНачисления.Сотрудник.Физлицо КАК Физлицо,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисления.Сторно
| ТОГДА -1
| ИНАЧЕ 1
| КОНЕЦ) КАК СтраховыеСлучаи,
| СУММА(ВЫРАЗИТЬ(ОсновныеНачисления.Результат * РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка КАК ЧИСЛО(15, 2))) КАК СуммаВсего,
| СУММА(ВЫРАЗИТЬ(ОсновныеНачисления.Результат * РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка КАК ЧИСЛО(15, 2))) * РасчетПособийПоУходуЗаПервымРебенком.КоэффициентДопРезультата КАК СуммаСверхНорм,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.ПериодДействияНачало КАК ДатаСтраховогоСлучая,
| ОсновныеНачисления.Сторно,
| ОсновныеНачисления.Период
|ИЗ
| ВТОтражениеВУчете КАК ОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РасчетПособийПоУходуЗаПервымРебенком КАК РасчетПособийПоУходуЗаПервымРебенком
| ПО ОсновныеНачисления.Сотрудник = РасчетПособийПоУходуЗаПервымРебенком.Сотрудник
| И ОсновныеНачисления.ПериодДействияНачало = РасчетПособийПоУходуЗаПервымРебенком.ДатаНачала
| И ОсновныеНачисления.ПериодДействияКонец = РасчетПособийПоУходуЗаПервымРебенком.ДатаОкончания
| И ОсновныеНачисления.Сторно = РасчетПособийПоУходуЗаПервымРебенком.Сторно
|ГДЕ
| РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка <> 0
|
|СГРУППИРОВАТЬ ПО
| ОсновныеНачисления.Сторно,
| РасчетПособийПоУходуЗаПервымРебенком.КоэффициентДопРезультата,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.Сотрудник.Физлицо,
| ОсновныеНачисления.ОблагаетсяЕНВД,
| ОсновныеНачисления.Организация,
| ОсновныеНачисления.ПериодДействияНачало,
| ОсновныеНачисления.Период,
| ВЫБОР
| КОГДА ОсновныеНачисления.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ПустаяСсылка)
| КОНЕЦ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ОсновныеНачисления.Организация,
| ОсновныеНачисления.ОблагаетсяЕНВД,
| ЛОЖЬ,
| ВЫБОР
| КОГДА ОсновныеНачисления.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ПустаяСсылка)
| КОНЕЦ,
| ОсновныеНачисления.Сотрудник.Физлицо,
| МАКСИМУМ(ВЫБОР
| КОГДА ОсновныеНачисления.Сторно
| ТОГДА -1
| ИНАЧЕ 1
| КОНЕЦ),
| СУММА(ОсновныеНачисления.Результат - (ВЫРАЗИТЬ(ОсновныеНачисления.Результат * РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка КАК ЧИСЛО(15, 2)))),
| СУММА(ОсновныеНачисления.Результат - (ВЫРАЗИТЬ(ОсновныеНачисления.Результат * РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка КАК ЧИСЛО(15, 2)))) * РасчетПособийПоУходуЗаПервымРебенком.КоэффициентДопРезультата,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.ПериодДействияНачало,
| ОсновныеНачисления.Сторно,
| ОсновныеНачисления.Период
|ИЗ
| ВТОтражениеВУчете КАК ОсновныеНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РасчетПособийПоУходуЗаПервымРебенком КАК РасчетПособийПоУходуЗаПервымРебенком
| ПО ОсновныеНачисления.Сотрудник = РасчетПособийПоУходуЗаПервымРебенком.Сотрудник
| И ОсновныеНачисления.ПериодДействияНачало = РасчетПособийПоУходуЗаПервымРебенком.ДатаНачала
| И ОсновныеНачисления.ПериодДействияКонец = РасчетПособийПоУходуЗаПервымРебенком.ДатаОкончания
| И ОсновныеНачисления.Сторно = РасчетПособийПоУходуЗаПервымРебенком.Сторно
|ГДЕ
| РасчетПособийПоУходуЗаПервымРебенком.ДоляПособияНаПервогоРебенка <> 1
|
|СГРУППИРОВАТЬ ПО
| ОсновныеНачисления.Сторно,
| РасчетПособийПоУходуЗаПервымРебенком.КоэффициентДопРезультата,
| ОсновныеНачисления.Сотрудник,
| ОсновныеНачисления.Сотрудник.Физлицо,
| ОсновныеНачисления.ОблагаетсяЕНВД,
| ОсновныеНачисления.Организация,
| ОсновныеНачисления.ПериодДействияНачало,
| ОсновныеНачисления.Период,
| ВЫБОР
| КОГДА ОсновныеНачисления.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.Совместительство)
| ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ПустаяСсылка)
| КОНЕЦ";

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(НаборПособияПоУходуЗаРебенкомДоПолутораЛет.Добавить(),Выборка);
КонецЦикла;

КонецЕсли;

КонецПроцедуры

// Формирует запрос по таблице "Начисления" документа
//
// Параметры:
// ШапкаДокумента
//
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоНачисления(ШапкаДокумента, СтрокиНачисления = Неопределено)

Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ГоловнаяОрганизация", ШапкаДокумента.ГоловнаяОрганизация);

// Помещаем ТЧ Начисления во временную таблицу ВТОсновныеНачисления
ОбработкаТабличныхЧастейДополнительный.ПоместитьТабЧастьВЗапрос(Запрос, Начисления, "Начисления", СтрокиНачисления);

Запрос.Текст = Запрос.Текст +
"ВЫБРАТЬ
| &ДокументСсылка КАК Ссылка,
| СтрокиДокумента.НомерСтроки,
| СтрокиДокумента.Сотрудник КАК Сотрудник,
| СтрокиДокумента.Физлицо,
| СтрокиДокумента.ВидРасчета,
| НАЧАЛОПЕРИОДА(СтрокиДокумента.ДатаНачала, МЕСЯЦ) КАК ПериодДействия,
| СтрокиДокумента.ДатаНачала,
| СтрокиДокумента.ДатаОкончания,
| СтрокиДокумента.Показатель1,
| СтрокиДокумента.Показатель2,
| СтрокиДокумента.Показатель3,
| СтрокиДокумента.Показатель4,
| СтрокиДокумента.Показатель5,
| СтрокиДокумента.Показатель6,
| СтрокиДокумента.Результат,
| СтрокиДокумента.ДополнительныйРезультат,
| СтрокиДокумента.ПодразделениеОрганизации,
| СтрокиДокумента.ОтработаноДней,
| СтрокиДокумента.ОтработаноЧасов,
| СтрокиДокумента.ОтработаноДнейПоПятидневке,
| СтрокиДокумента.НормаДней,
| СтрокиДокумента.НормаЧасов,
| СтрокиДокумента.НормаДнейПоПятидневке,
| СтрокиДокумента.ПериодРасчетаСреднегоЗаработкаНачало,
| СтрокиДокумента.ПериодРасчетаСреднегоЗаработкаОкончание,
| СтрокиДокумента.ДатаНачалаСобытия,
| СтрокиДокумента.Сторно,
| СтрокиДокумента.Авторасчет,
| СтрокиДокумента.ОплачиватьЧасов,
| СтрокиДокумента.ОплаченоДнейЧасов,
| СтрокиДокумента.ОтработаноЧасовПоПятидневке,
| СтрокиДокумента.НормаЧасовПоПятидневке,
| СтрокиДокумента.СторнируемыйДокумент,
| СтрокиДокумента.РасчетнаяБазаЗаЕдиницуНормыВремени
|ПОМЕСТИТЬ ВТСтрокиНачислений
|ИЗ
| ВТНачисления КАК СтрокиДокумента
|
|ИНДЕКСИРОВАТЬ ПО
| Сотрудник";
Запрос.Выполнить();

// ВТГрафикиСотрудников
// таблица содержит номера строк документа с данными о графике указанного
// в этой строке сотрудника из рег-ра сведений РаботникиОрганизации
//
// Поля:
// НомерСтроки
// ГрафикРаботы
// ГрафикПолногоРабочегоВремени
// СуммированныйУчетРабочегоВремени
//

Запрос.Текст =
"ВЫБРАТЬ
| ПоследниеДаты.НомерСтроки КАК НомерСтроки,
| ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= ПоследниеДаты.ДатаНачалаСобытия
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ГрафикРаботыЗавершения
| ИНАЧЕ РаботникиОрганизации.ГрафикРаботы
| КОНЕЦ КАК ГрафикРаботы,
| ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= ПоследниеДаты.ДатаНачалаСобытия
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ГрафикРаботыЗавершения.ГрафикПолногоРабочегоВремени
| ИНАЧЕ РаботникиОрганизации.ГрафикРаботы.ГрафикПолногоРабочегоВремени
| КОНЕЦ КАК ГрафикПолногоРабочегоВремени,
| ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= ПоследниеДаты.ДатаНачалаСобытия
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ГрафикРаботыЗавершения.СуммированныйУчетРабочегоВремени
| ИНАЧЕ РаботникиОрганизации.ГрафикРаботы.СуммированныйУчетРабочегоВремени
| КОНЕЦ КАК СуммированныйУчетРабочегоВремени
|ПОМЕСТИТЬ ВТГрафикиСотрудников
|ИЗ
| (ВЫБРАТЬ
| МАКСИМУМ(РаботникиОрганизации.Период) КАК МаксПериод,
| СтрокиНачисления.НомерСтроки КАК НомерСтроки,
| СтрокиНачисления.Сотрудник КАК Сотрудник,
| СтрокиНачисления.ДатаНачалаСобытия КАК ДатаНачалаСобытия
| ИЗ
| ВТСтрокиНачислений КАК СтрокиНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
| ПО СтрокиНачисления.ДатаНачалаСобытия >= РаботникиОрганизации.Период
| И СтрокиНачисления.Сотрудник = РаботникиОрганизации.Сотрудник
|
| СГРУППИРОВАТЬ ПО
| СтрокиНачисления.НомерСтроки,
| СтрокиНачисления.Сотрудник,
| СтрокиНачисления.ДатаНачалаСобытия) КАК ПоследниеДаты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
| ПО ПоследниеДаты.МаксПериод = РаботникиОрганизации.Период
| И ПоследниеДаты.Сотрудник = РаботникиОрганизации.Сотрудник
|
|ИНДЕКСИРОВАТЬ ПО
| НомерСтроки";
Запрос.Выполнить();

// ВТДанныеИндивидуальныхГрафиковИТабелей
// таблица содержит номера строк документа с сотрудниками, для которых введены
// подробные документы использования времени: инд.графики и/или табели
//
// Поля:
// НомерСтроки
// План
//

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СтрокиНачисления.НомерСтроки КАК НомерСтроки,
| ГрафикиРаботыПоВидамВремени.План КАК План
|ПОМЕСТИТЬ ВТДанныеИндивидуальныхГрафиковИТабелей
|ИЗ
| ВТСтрокиНачислений КАК СтрокиНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГрафикиРаботыПоВидамВремени КАК ГрафикиРаботыПоВидамВремени
| ПО СтрокиНачисления.Сотрудник = ГрафикиРаботыПоВидамВремени.ГрафикРаботы
| И СтрокиНачисления.ПериодДействия = ГрафикиРаботыПоВидамВремени.Месяц
|ГДЕ
| ГрафикиРаботыПоВидамВремени.ГрафикРаботы ЕСТЬ НЕ NULL
|
|ИНДЕКСИРОВАТЬ ПО
| План";
Запрос.Выполнить();

// СводныеИндивидуальныеГрафикиРаботы
// таблица содержит номера строк документа с сотрудниками, для которых введены сводные
// данные об их графике
//
// Поля:
// НомерСтроки
//

Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| СписокРаботников.НомерСтроки КАК НомерСтроки
|ПОМЕСТИТЬ ВТСводныеИндивидуальныеГрафикиРаботы
|ИЗ
| ВТСтрокиНачислений КАК СписокРаботников
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СводныеИндивидуальныеГрафики КАК СводныеИндивидуальныеГрафики
| ПО СписокРаботников.Сотрудник = СводныеИндивидуальныеГрафики.Сотрудник
| И СписокРаботников.ПериодДействия = СводныеИндивидуальныеГрафики.Месяц
|ГДЕ
| СводныеИндивидуальныеГрафики.Сотрудник ЕСТЬ НЕ NULL
|
|ИНДЕКСИРОВАТЬ ПО
| НомерСтроки";
Запрос.Выполнить();

// Основной запрос
// Сотрудники, для которых введены сводные данные об их графике
//
// Поля:
// НомерСтроки
//
Запрос.Текст =
"ВЫБРАТЬ
| СтрокиНачисления.Сотрудник КАК Сотрудник,
| СтрокиНачисления.Сотрудник.Физлицо КАК Физлицо,
| СтрокиНачисления.ВидРасчета КАК ВидРасчета,
| СтрокиНачисления.ВидРасчета.ЗачетОтработанногоВремени КАК ЗачетОтработанногоВремени,
| СтрокиНачисления.ВидРасчета.ЗачетНормыВремени КАК ЗачетНормыВремени,
| СтрокиНачисления.ВидРасчета.СпособРасчета КАК СпособРасчета,
| СтрокиНачисления.ВидРасчета.ВидВремени КАК ВидВремени,
| СтрокиНачисления.ДатаНачала КАК ПериодДействияНачало,
| ВЫБОР
| КОГДА СтрокиНачисления.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ИНАЧЕ КОНЕЦПЕРИОДА(СтрокиНачисления.ДатаОкончания, ДЕНЬ)
| КОНЕЦ КАК ПериодДействияКонец,
| ВЫБОР
| КОГДА СтрокиНачисления.ВидРасчета.ПериодДействияБазовый
| ТОГДА ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОГДА СтрокиНачисления.ДатаНачала = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ИНАЧЕ НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(СтрокиНачисления.ДатаНачала, МЕСЯЦ, -1), МЕСЯЦ)
| КОНЕЦ КАК БазовыйПериодНачало,
| ВЫБОР
| КОГДА СтрокиНачисления.ВидРасчета.ПериодДействияБазовый
| ТОГДА ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| КОГДА СтрокиНачисления.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ИНАЧЕ КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(СтрокиНачисления.ДатаОкончания, МЕСЯЦ, -1), МЕСЯЦ)
| КОНЕЦ КАК БазовыйПериодКонец,
| СтрокиНачисления.НомерСтроки КАК НомерСтроки,
| СтрокиНачисления.Показатель1 КАК Показатель1,
| СтрокиНачисления.Показатель2 КАК Показатель2,
| СтрокиНачисления.Показатель3 КАК Показатель3,
| СтрокиНачисления.Показатель4 КАК Показатель4,
| СтрокиНачисления.Показатель5 КАК Показатель5,
| СтрокиНачисления.Показатель6 КАК Показатель6,
| СтрокиНачисления.Результат КАК Результат,
| СтрокиНачисления.ДополнительныйРезультат КАК ДополнительныйРезультат,
| СтрокиНачисления.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| СтрокиНачисления.Сторно КАК Сторно,
| СтрокиНачисления.ОтработаноДней КАК ОтработаноДней,
| СтрокиНачисления.ОтработаноЧасов КАК ОтработаноЧасов,
| СтрокиНачисления.ОтработаноДнейПоПятидневке КАК ОтработаноДнейПоПятидневке,
| СтрокиНачисления.ОтработаноЧасовПоПятидневке КАК ОтработаноЧасовПоПятидневке,
| СтрокиНачисления.НормаДней КАК НормаДней,
| СтрокиНачисления.НормаЧасов КАК НормаЧасов,
| СтрокиНачисления.НормаДнейПоПятидневке КАК НормаДнейПоПятидневке,
| СтрокиНачисления.НормаЧасовПоПятидневке КАК НормаЧасовПоПятидневке,
| СтрокиНачисления.ПериодРасчетаСреднегоЗаработкаНачало КАК ПериодРасчетаСреднегоЗаработкаНачало,
| СтрокиНачисления.ПериодРасчетаСреднегоЗаработкаОкончание КАК ПериодРасчетаСреднегоЗаработкаОкончание,
| СтрокиНачисления.ДатаНачалаСобытия КАК ДатаНачалаСобытия,
| СтрокиНачисления.Авторасчет КАК Авторасчет,
| СтрокиНачисления.ОплаченоДнейЧасов КАК ОплаченоДнейЧасов,
| ВЫБОР
| КОГДА ГрафикРаботыПоСотруднику.НомерСтроки ЕСТЬ NULL
| ТОГДА РаботникиОрганизации.ГрафикРаботы
| ИНАЧЕ СтрокиНачисления.Сотрудник
| КОНЕЦ КАК ГрафикРаботы,
| ВЫБОР
// если введен табель, но нет индивидуального графика, то норму времени надо считать по данным ""общего графика""
| КОГДА ТабелиУчетаВремениПоСотруднику.НомерСтроки ЕСТЬ НЕ NULL
| И ИндивидуальныеГрафикиРаботы.НомерСтроки ЕСТЬ NULL
| И СводныеИндивидуальныеГрафикиРаботы.НомерСтроки ЕСТЬ NULL
| ТОГДА РаботникиОрганизации.ГрафикРаботы
// если у работника сокращенное рабочее время, а норма времени определяется по полному графику
// и введен индивидуальный график, то норму времени надо считать по-прежнему по данным ""общего графика""
| КОГДА РаботникиОрганизации.ГрафикПолногоРабочегоВремени <> ЗНАЧЕНИЕ(Справочник.ГрафикиРаботы.ПустаяСсылка)
| И (ИндивидуальныеГрафикиРаботы.НомерСтроки ЕСТЬ НЕ NULL
| ИЛИ СводныеИндивидуальныеГрафикиРаботы.НомерСтроки ЕСТЬ НЕ NULL )
| ТОГДА РаботникиОрганизации.ГрафикПолногоРабочегоВремени
| КОНЕЦ КАК ГрафикРаботыНорма,
| ЕСТЬNULL(РаботникиОрганизации.СуммированныйУчетРабочегоВремени, ЛОЖЬ) КАК СуммированныйУчетРабочегоВремени,
| СтрокиНачисления.ОплачиватьЧасов,
| СтрокиНачисления.ВидРасчета.ОбозначениеВТабелеУчетаРабочегоВремени КАК ВидИспользованияРабочегоВремени,
| ВЫБОР
| КОГДА СтрокиНачисления.ВидРасчета.ВидВремени В (ЗНАЧЕНИЕ(Перечисление.ВидыВремени.ЧасовоеНеотработанное))
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ КАК ЯвляетсяПочасовымОтклонением,
| ВЫБОР
| КОГДА СтрокиНачисления.Сотрудник.Организация = &ГоловнаяОрганизация
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОшибкаНеСоответствиеСотрудникаИОрганизации,
| ВЫБОР
| КОГДА СтрокиНачисления.Сторно
| ТОГДА СтрокиНачисления.СторнируемыйДокумент
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК СторнируемыйДокумент,
| СтрокиНачисления.РасчетнаяБазаЗаЕдиницуНормыВремени
|ИЗ
| ВТСтрокиНачислений КАК СтрокиНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ ВТГрафикиСотрудников КАК РаботникиОрганизации
| ПО СтрокиНачисления.НомерСтроки = РаботникиОрганизации.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| СтрокиНачисления.НомерСтроки КАК НомерСтроки
| ИЗ
| ВТДанныеИндивидуальныхГрафиковИТабелей КАК СтрокиНачисления) КАК ГрафикРаботыПоСотруднику
| ПО СтрокиНачисления.НомерСтроки = ГрафикРаботыПоСотруднику.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| СтрокиНачисления.НомерСтроки КАК НомерСтроки
| ИЗ
| ВТДанныеИндивидуальныхГрафиковИТабелей КАК СтрокиНачисления
| ГДЕ
| (НЕ СтрокиНачисления.План)) КАК ТабелиУчетаВремениПоСотруднику
| ПО СтрокиНачисления.НомерСтроки = ТабелиУчетаВремениПоСотруднику.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РАЗЛИЧНЫЕ
| СтрокиНачисления.НомерСтроки КАК НомерСтроки
| ИЗ
| ВТДанныеИндивидуальныхГрафиковИТабелей КАК СтрокиНачисления
| ГДЕ
| СтрокиНачисления.План) КАК ИндивидуальныеГрафикиРаботы
| ПО СтрокиНачисления.НомерСтроки = ИндивидуальныеГрафикиРаботы.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ ВТСводныеИндивидуальныеГрафикиРаботы КАК СводныеИндивидуальныеГрафикиРаботы
| ПО СтрокиНачисления.НомерСтроки = СводныеИндивидуальныеГрафикиРаботы.НомерСтроки
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";

Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоНачисления()

// Формирует запрос по таблице "ДополнительныеНачисления" документа
//
// Параметры:
// ШапкаДокумента
//
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоДопНачисления(ШапкаДокумента, СтрокиНачисления = Неопределено)

Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ГоловнаяОрганизация", ШапкаДокумента.ГоловнаяОрганизация);
Запрос.УстановитьПараметр("ДатаНалоговогоПериода", КонецГода(ПериодРегистрации));

// Помещаем ТЧ Начисления во временную таблицу ВТОсновныеНачисления
ОбработкаТабличныхЧастейДополнительный.ПоместитьТабЧастьВЗапрос(Запрос, ДополнительныеНачисления, "ДополнительныеНачисления", СтрокиНачисления);

Запрос.Текст = Запрос.Текст +
"ВЫБРАТЬ
| НЕОПРЕДЕЛЕНО КАК ДокументОснование,
| СтрокиНачисления.ВидРасчета,
| СтрокиНачисления.КодВычета КАК КодВычета,
| СтрокиНачисления.ВидРасчета.КодДоходаНДФЛ КАК КодДоходаНДФЛ,
| СтрокиНачисления.СуммаВычета,
| ВЫБОР
| КОГДА СтрокиНачисления.КодВычета = ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.МатпомощьПриРожденииРебенка)
| ТОГДА ВЫБОР
| КОГДА СтрокиНачисления.Результат < СтрокиНачисления.СуммаВычета * ВычетПоМатпомощиПриРождении.НормативЗатрат
| ТОГДА СтрокиНачисления.Результат
| ИНАЧЕ СтрокиНачисления.СуммаВычета * ВычетПоМатпомощиПриРождении.НормативЗатрат
| КОНЕЦ
| КОГДА СтрокиНачисления.КодВычета = ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код404)
| ТОГДА СтрокиНачисления.СуммаВычета
| КОГДА СтрокиНачисления.КодВычета = ЗНАЧЕНИЕ(Справочник.ВычетыНДФЛ.Код405)
| ТОГДА СтрокиНачисления.СуммаВычета
| ИНАЧЕ 0
| КОНЕЦ КАК СкидкаПриНалогообложении,
| СтрокиНачисления.ВидРасчета.СпособРасчета КАК СпособРасчета,
| СтрокиНачисления.НомерСтроки КАК НомерСтроки,
| СтрокиНачисления.Показатель1,
| СтрокиНачисления.Показатель2,
| СтрокиНачисления.Показатель3,
| СтрокиНачисления.Показатель4,
| СтрокиНачисления.Показатель5,
| СтрокиНачисления.Показатель6,
| СтрокиНачисления.Результат,
| СтрокиНачисления.ПодразделениеОрганизации,
| СтрокиНачисления.Сторно,
| СтрокиНачисления.Сотрудник,
| СтрокиНачисления.Сотрудник.Физлицо КАК Физлицо,
| СтрокиНачисления.ДатаНачала КАК БазовыйПериодНачало,
| СтрокиНачисления.ДатаОкончания КАК БазовыйПериодКонец,
| СтрокиНачисления.ВидРасчета.ЧислоМесяцев КАК ЧислоМесяцев,
| СтрокиНачисления.Авторасчет,
| СтрокиНачисления.ОплаченоДнейЧасов КАК ОплаченоДнейЧасов,
| СтрокиНачисления.ПериодРасчетаСреднегоЗаработкаНачало,
| СтрокиНачисления.ПериодРасчетаСреднегоЗаработкаОкончание,
| СтрокиНачисления.ДатаНачалаСобытия,
| ЕСТЬNULL(ВЫБОР
| КОГДА РаботникиОрганизации.ПериодЗавершения <= СтрокиНачисления.ДатаНачалаСобытия
| И РаботникиОрганизации.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА РаботникиОрганизации.ГрафикРаботыЗавершения.СуммированныйУчетРабочегоВремени
| ИНАЧЕ РаботникиОрганизации.ГрафикРаботы.СуммированныйУчетРабочегоВремени
| КОНЕЦ, ЛОЖЬ) КАК СуммированныйУчетРабочегоВремени,
| ВЫБОР
| КОГДА СтрокиНачисления.Сотрудник.Организация = &ГоловнаяОрганизация
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОшибкаНеСоответствиеСотрудникаИОрганизации,
| ВЫБОР
| КОГДА СтрокиНачисления.Сторно
| ТОГДА СтрокиНачисления.СторнируемыйДокумент
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК СторнируемыйДокумент
|ИЗ
| ВТДополнительныеНачисления КАК СтрокиНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| МАКСИМУМ(РаботникиОрганизации.Период) КАК МаксПериод,
| СтрокиНачисления.НомерСтроки КАК НомерСтроки
| ИЗ
| ВТДополнительныеНачисления КАК СтрокиНачисления
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
| ПО (РаботникиОрганизации.Период <= СтрокиНачисления.ДатаНачалаСобытия)
| И СтрокиНачисления.Сотрудник = РаботникиОрганизации.Сотрудник
|
| СГРУППИРОВАТЬ ПО
| СтрокиНачисления.НомерСтроки) КАК ПоследниеДаты
| ПО СтрокиНачисления.НомерСтроки = ПоследниеДаты.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизации
| ПО (РаботникиОрганизации.Период = ПоследниеДаты.МаксПериод)
| И СтрокиНачисления.Сотрудник = РаботникиОрганизации.Сотрудник
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НДФЛВычетыПоДоходам.СрезПоследних(&ДатаНалоговогоПериода, КодДохода = ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.МатпомощьПриРожденииРебенка)) КАК ВычетПоМатпомощиПриРождении
| ПО СтрокиНачисления.ВидРасчета.КодДоходаНДФЛ = ВычетПоМатпомощиПриРождении.КодДохода
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";

Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоДопНачисления()

// Формирует запрос по таблице "ДоговорыНаВыполнениеРабот" документа
//
// Параметры:
// ШапкаДокумента
//
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоДоговорам(ШапкаДокумента, Физлицо = Неопределено)

// Определяем режим расчета соцстраха
Если ПериодРегистрации < ПроведениеРасчетов.ДатаЗаменыЕСНСтраховымиВзносами() Тогда
Возврат СформироватьЗапросПоДоговорам2009(ШапкаДокумента, Физлицо)
Иначе
Возврат СформироватьЗапросПоДоговорам2010(ШапкаДокумента, Физлицо)
КонецЕсли;

КонецФункции // СформироватьЗапросПоДоговорам()

// Формирует запрос по таблице "ДоговорыНаВыполнениеРабот" документа
//
// Параметры:
// ШапкаДокумента
//
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоДоговорам2009(ШапкаДокумента, Физлицо = Неопределено)

Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ГоловнаяОрганизация", ШапкаДокумента.ГоловнаяОрганизация);
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(ПериодРегистрации));
Запрос.УстановитьПараметр("ПоВсемФизлицам", Физлицо = Неопределено);
Запрос.УстановитьПараметр("Физлицо", Физлицо);

Запрос.Текст =
"ВЫБРАТЬ
| СтрокиНачисления.ДокументОснование,
| СтрокиНачисления.ВидРасчета,
| СтрокиНачисления.КодВычета КАК КодВычета,
| СтрокиНачисления.СуммаВычета КАК СкидкаПриНалогообложении,
| СтрокиНачисления.ВидРасчета.СпособРасчета КАК СпособРасчета,
| СтрокиНачисления.ВидРасчета.КодДоходаНДФЛ КАК КодДоходаНДФЛ,
| СтрокиНачисления.НомерСтроки КАК НомерСтроки,
| СтрокиНачисления.Размер,
| СтрокиНачисления.Результат КАК Результат,
| СтрокиНачисления.ПодразделениеОрганизации,
| СтрокиНачисления.Сторно,
| СтрокиНачисления.Сотрудник,
| СтрокиНачисления.Сотрудник.Физлицо КАК Физлицо,
| СтрокиНачисления.ДатаНачала КАК БазовыйПериодНачало,
| СтрокиНачисления.ДатаОкончания КАК БазовыйПериодКонец,
| 0 КАК ЧислоМесяцев,
| ЛОЖЬ КАК Авторасчет,
| ВЫБОР
| КОГДА СтрокиНачисления.Сотрудник.Организация = &ГоловнаяОрганизация
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОшибкаНеСоответствиеСотрудникаИОрганизации,
| ВЫБОР
| КОГДА СтрокиНачисления.Сторно
| ТОГДА СтрокиНачисления.СторнируемыйДокумент
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК СторнируемыйДокумент,
| СтрокиНачисления.КОСГУ,
| СтрокиНачисления.СтатьяФинансирования,
| СтрокиНачисления.СтатьяРасходов,
| ВЫБОР
| КОГДА СтрокиНачисления.ДокументОснование.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.Авторский)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.ДоговораАвторские)
| КОГДА СтрокиНачисления.ДокументОснование.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.Подряда)
| ТОГДА ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.ДоговораГПХ)
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.ДоходыЕСН.ОблагаетсяЦеликом)
| КОНЕЦ КАК КодДоходаЕСН
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДоговорыНаВыполнениеРабот КАК СтрокиНачисления
|ГДЕ
| СтрокиНачисления.Ссылка = &ДокументСсылка
| И (&ПоВсемФизлицам
| ИЛИ СтрокиНачисления.Сотрудник.Физлицо = &Физлицо)
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";

Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоДоговорам()

// Формирует запрос по таблице "ДоговорыНаВыполнениеРабот" документа
//
// Параметры:
// ШапкаДокумента
//
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоДоговорам2010(ШапкаДокумента, Физлицо = Неопределено)

Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ГоловнаяОрганизация", ШапкаДокумента.ГоловнаяОрганизация);
Запрос.УстановитьПараметр("ДатаОкончания", КонецМесяца(ПериодРегистрации));
Запрос.УстановитьПараметр("ПоВсемФизлицам", Физлицо = Неопределено);
Запрос.УстановитьПараметр("Физлицо", Физлицо);

Запрос.Текст =
"ВЫБРАТЬ
| СтрокиНачисления.ДокументОснование,
| СтрокиНачисления.ВидРасчета,
| СтрокиНачисления.КодВычета КАК КодВычета,
| СтрокиНачисления.СуммаВычета КАК СкидкаПриНалогообложении,
| СтрокиНачисления.ВидРасчета.СпособРасчета КАК СпособРасчета,
| СтрокиНачисления.ВидРасчета.КодДоходаНДФЛ КАК КодДоходаНДФЛ,
| СтрокиНачисления.НомерСтроки КАК НомерСтроки,
| СтрокиНачисления.Размер,
| СтрокиНачисления.Результат КАК Результат,
| СтрокиНачисления.ПодразделениеОрганизации,
| СтрокиНачисления.Сторно,
| СтрокиНачисления.Сотрудник,
| СтрокиНачисления.Сотрудник.Физлицо КАК Физлицо,
| СтрокиНачисления.ДатаНачала КАК БазовыйПериодНачало,
| СтрокиНачисления.ДатаОкончания КАК БазовыйПериодКонец,
| 0 КАК ЧислоМесяцев,
| ЛОЖЬ КАК Авторасчет,
| ВЫБОР
| КОГДА СтрокиНачисления.Сотрудник.Организация = &ГоловнаяОрганизация
| ТОГДА ЛОЖЬ
| ИНАЧЕ ИСТИНА
| КОНЕЦ КАК ОшибкаНеСоответствиеСотрудникаИОрганизации,
| ВЫБОР
| КОГДА СтрокиНачисления.Сторно
| ТОГДА СтрокиНачисления.СторнируемыйДокумент
| ИНАЧЕ НЕОПРЕДЕЛЕНО
| КОНЕЦ КАК СторнируемыйДокумент,
| СтрокиНачисления.КОСГУ,
| СтрокиНачисления.СтатьяФинансирования,
| СтрокиНачисления.СтатьяРасходов,
| СтрокиНачисления.ВидРасчета.КодДоходаСтраховыеВзносы КАК КодДоходаЕСН
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДоговорыНаВыполнениеРабот КАК СтрокиНачисления
|ГДЕ
| СтрокиНачисления.Ссылка = &ДокументСсылка
| И (&ПоВсемФизлицам
| ИЛИ СтрокиНачисления.Сотрудник.Физлицо = &Физлицо)
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";

Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоДоговорам()

// Формирует запрос по таблице "Удержания" документа
//
// Параметры:
// нет
//
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоУдержания(ШапкаДокумента, СтрокиУдержаний = Неопределено)

Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ПериодРегистрации", ПериодРегистрации);
Запрос.УстановитьПараметр("КонецПериодаРегистрации", КонецМесяца(ПериодРегистрации));
Запрос.УстановитьПараметр("ГоловнаяОрганизация", ШапкаДокумента.ГоловнаяОрганизация);
Запрос.УстановитьПараметр("ПриемНаРаботу", Перечисления.ПричиныИзмененияСостояния.ПриемНаРаботу);
Запрос.УстановитьПараметр("ЗаВесьПериод", Перечисления.ПорядокРасчетаБазы.ЗаВесьПериод);
Запрос.УстановитьПараметр("ПриПриемеНаРаботу", Перечисления.ПорядокРасчетаБазы.ПриПриемеНаРаботу);
Запрос.УстановитьПараметр("ПриУвольнении", Перечисления.ПорядокРасчетаБазы.ПриУвольнении);

// Помещаем ТЧ Удержания во временную таблицу ВТУдержания
ОбработкаТабличныхЧастейДополнительный.ПоместитьТабЧастьВЗапрос(Запрос, Удержания, "Удержания", СтрокиУдержаний);

Запрос.Текст = Запрос.Текст +
"ВЫБРАТЬ
| &ГоловнаяОрганизация КАК Организация,
| СтрокиУдержания.ФизЛицо,
| СтрокиУдержания.ВидРасчета,
| СтрокиУдержания.ДатаНачала,
| СтрокиУдержания.ДатаОкончания,
| СтрокиУдержания.ДатаНачала КАК БазовыйПериодНачало,
| ВЫБОР
| КОГДА СтрокиУдержания.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА СтрокиУдержания.ДатаОкончания
| ИНАЧЕ КОНЕЦПЕРИОДА(СтрокиУдержания.ДатаОкончания, ДЕНЬ)
| КОНЕЦ КАК БазовыйПериодКонец,
| СтрокиУдержания.НомерСтроки КАК НомерСтроки,
| СтрокиУдержания.ДокументОснование,
| СтрокиУдержания.Показатель1,
| СтрокиУдержания.Показатель2,
| СтрокиУдержания.Показатель3,
| СтрокиУдержания.Показатель4,
| СтрокиУдержания.Показатель5,
| СтрокиУдержания.Показатель6,
| СтрокиУдержания.Результат,
| СтрокиУдержания.Сторно,
| СтрокиУдержания.ВидРасчета.СпособРасчета КАК СпособРасчета,
| СтрокиУдержания.Авторасчет КАК Авторасчет,
| СтрокиУдержания.ПериодРасчетаСреднегоЗаработкаНачало,
| СтрокиУдержания.ПериодРасчетаСреднегоЗаработкаОкончание,
| СтрокиУдержания.ДатаНачалаСобытия";
Если ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца Тогда
Запрос.Текст = Запрос.Текст + ",
| &ПриУвольнении КАК ПорядокРасчетаБазы";
ИначеЕсли ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ВтораяПоловинаТекущегоМесяца Тогда
Запрос.Текст = Запрос.Текст + ",
| &ПриПриемеНаРаботу КАК ПорядокРасчетаБазы";
Иначе
Запрос.Текст = Запрос.Текст + ",
| ВЫБОР
| КОГДА СтрокиУдержания.ДатаНачала > &ПериодРегистрации
| И ПринятыеВТекущемМесяце.Период ЕСТЬ НЕ NULL
| ТОГДА &ПриПриемеНаРаботу
| КОГДА СтрокиУдержания.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| ТОГДА &ЗаВесьПериод
| КОГДА КОНЕЦПЕРИОДА(СтрокиУдержания.ДатаОкончания, ДЕНЬ) < &КонецПериодаРегистрации
| И УволенныеВТекущемМесяце.Период ЕСТЬ НЕ NULL
| ТОГДА &ПриУвольнении
| ИНАЧЕ &ЗаВесьПериод
| КОНЕЦ КАК ПорядокРасчетаБазы";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|ИЗ
| ВТУдержания КАК СтрокиУдержания";
Если ПериодНачисления <> Перечисления.ПериодНачисленияЗарплаты.ПерваяПоловинаТекущегоМесяца
И ПериодНачисления <> Перечисления.ПериодНачисленияЗарплаты.ВтораяПоловинаТекущегоМесяца Тогда
Запрос.Текст = Запрос.Текст + "
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| СтрокиУдержания.НомерСтроки КАК НомерСтроки,
| МАКСИМУМ(РаботникиОрганизаций.Период) КАК Период
| ИЗ
| ВТУдержания КАК СтрокиУдержания
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ПО СтрокиУдержания.ФизЛицо = РаботникиОрганизаций.Сотрудник.Физлицо
| ГДЕ
| СтрокиУдержания.ДатаНачала > &ПериодРегистрации
| И РаботникиОрганизаций.Организация = &ГоловнаяОрганизация
| И РаботникиОрганизаций.Период > &ПериодРегистрации
| И РаботникиОрганизаций.Период <= &КонецПериодаРегистрации
| И РаботникиОрганизаций.ПричинаИзмененияСостояния = &ПриемНаРаботу
| И РаботникиОрганизаций.Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
|
| СГРУППИРОВАТЬ ПО
| СтрокиУдержания.НомерСтроки
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| СтрокиУдержания.НомерСтроки,
| ОтпускПоУходуЗаРебенком.ДатаОкончания
| ИЗ
| ВТУдержания КАК СтрокиУдержания
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтпускПоУходуЗаРебенком КАК ОтпускПоУходуЗаРебенком
| ПО СтрокиУдержания.ФизЛицо = ОтпускПоУходуЗаРебенком.Физлицо
| И (ОтпускПоУходуЗаРебенком.ДатаОкончания > &ПериодРегистрации)
| И (ОтпускПоУходуЗаРебенком.ДатаОкончания < &КонецПериодаРегистрации)
| И (ОтпускПоУходуЗаРебенком.Проведен)
| И СтрокиУдержания.ДатаНачала <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| И СтрокиУдержания.ДатаНачала > &ПериодРегистрации) КАК ПринятыеВТекущемМесяце
| ПО СтрокиУдержания.НомерСтроки = ПринятыеВТекущемМесяце.НомерСтроки
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| УволенныеВТекущемМесяцеОбъединение.НомерСтроки КАК НомерСтроки,
| МИНИМУМ(УволенныеВТекущемМесяцеОбъединение.Период) КАК Период
| ИЗ
| (ВЫБРАТЬ
| СтрокиУдержания.НомерСтроки КАК НомерСтроки,
| МИНИМУМ(РаботникиОрганизаций.Период) КАК Период
| ИЗ
| ВТУдержания КАК СтрокиУдержания
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
| ПО СтрокиУдержания.ФизЛицо = РаботникиОрганизаций.Сотрудник.Физлицо
| ГДЕ
| СтрокиУдержания.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| И СтрокиУдержания.ДатаОкончания < &КонецПериодаРегистрации
| И РаботникиОрганизаций.Организация = &ГоловнаяОрганизация
| И РаботникиОрганизаций.Период >= &ПериодРегистрации
| И РаботникиОрганизаций.Период < &КонецПериодаРегистрации
| И РаботникиОрганизаций.ПричинаИзмененияСостояния = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И РаботникиОрганизаций.Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
|
| СГРУППИРОВАТЬ ПО
| СтрокиУдержания.НомерСтроки
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| СтрокиУдержания.НомерСтроки,
| МИНИМУМ(Работники.Период)
| ИЗ
| ВТУдержания КАК СтрокиУдержания
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК Работники
| ПО СтрокиУдержания.ФизЛицо = Работники.Сотрудник.Физлицо
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций КАК ПериодыПерекрытия
| ПО (ПериодыПерекрытия.Период <= Работники.ПериодЗавершения)
| И (ПериодыПерекрытия.Период > Работники.Период)
| И (ПериодыПерекрытия.Сотрудник = Работники.Сотрудник)
| И (ПериодыПерекрытия.Организация = &ГоловнаяОрганизация)
| И (ПериодыПерекрытия.Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство))
| ГДЕ
| Работники.ПериодЗавершения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| И Работники.Организация = &ГоловнаяОрганизация
| И Работники.ПериодЗавершения >= &ПериодРегистрации
| И Работники.ПериодЗавершения < &КонецПериодаРегистрации
| И Работники.ПричинаИзмененияСостоянияЗавершения = ЗНАЧЕНИЕ(Перечисление.ПричиныИзмененияСостояния.Увольнение)
| И Работники.Сотрудник.ВидЗанятости <> ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ВнутреннееСовместительство)
| И ПериодыПерекрытия.Период ЕСТЬ NULL
| И СтрокиУдержания.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| И СтрокиУдержания.ДатаОкончания < &КонецПериодаРегистрации
|
| СГРУППИРОВАТЬ ПО
| СтрокиУдержания.НомерСтроки
|
| ОБЪЕДИНИТЬ
|
| ВЫБРАТЬ
| СтрокиУдержания.НомерСтроки,
| ОтпускПоУходуЗаРебенком.ДатаНачала
| ИЗ
| ВТУдержания КАК СтрокиУдержания
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ОтпускПоУходуЗаРебенком КАК ОтпускПоУходуЗаРебенком
| ПО СтрокиУдержания.ФизЛицо = ОтпускПоУходуЗаРебенком.Физлицо
| И (ОтпускПоУходуЗаРебенком.ДатаНачала > &ПериодРегистрации)
| И (ОтпускПоУходуЗаРебенком.ДатаНачала < &КонецПериодаРегистрации)
| И (ОтпускПоУходуЗаРебенком.Проведен)
| И СтрокиУдержания.ДатаОкончания <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
| И СтрокиУдержания.ДатаОкончания < &КонецПериодаРегистрации) КАК УволенныеВТекущемМесяцеОбъединение
|
| СГРУППИРОВАТЬ ПО
| УволенныеВТекущемМесяцеОбъединение.НомерСтроки) КАК УволенныеВТекущемМесяце
| ПО СтрокиУдержания.НомерСтроки = УволенныеВТекущемМесяце.НомерСтроки";
КонецЕсли;
Запрос.Текст = Запрос.Текст + "
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";

Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоУдержания()

// Формирует запрос по таблице "НДФЛПоИФ" документа
//
// Параметры:
// Физлица - массив физлиц, для которых читаются данные
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоНДФЛ(Физлица = Неопределено)

Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("ПоВсемФизлицам", Физлица = Неопределено);
Запрос.УстановитьПараметр("Физлица", Физлица);

Запрос.Текст =
"ВЫБРАТЬ
| НДФЛпоИФ.ФизЛицо КАК ФизЛицо,
| НДФЛпоИФ.МесяцНалоговогоПериода КАК МесяцНалоговогоПериода,
| НДФЛпоИФ.СтавкаНалогообложенияРезидента КАК СтавкаНалогообложенияРезидента,
| НДФЛпоИФ.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| НДФЛпоИФ.СтатьяФинансирования КАК СтатьяФинансирования,
| НДФЛпоИФ.КОСГУ КАК КОСГУ,
| СУММА(НДФЛпоИФ.Налог) КАК Налог
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИФ КАК НДФЛпоИФ
|ГДЕ
| НДФЛпоИФ.Ссылка = &ДокументСсылка
| И (&ПоВсемФизлицам
| ИЛИ НДФЛпоИФ.ФизЛицо В (&Физлица))
|
|СГРУППИРОВАТЬ ПО
| НДФЛпоИФ.ФизЛицо,
| НДФЛпоИФ.МесяцНалоговогоПериода,
| НДФЛпоИФ.СтавкаНалогообложенияРезидента,
| НДФЛпоИФ.ПодразделениеОрганизации,
| НДФЛпоИФ.СтатьяФинансирования,
| НДФЛпоИФ.КОСГУ
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо,
| МесяцНалоговогоПериода,
| СтавкаНалогообложенияРезидента,
| ПодразделениеОрганизации,
| СтатьяФинансирования,
| КОСГУ";

Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоНДФЛ()

// Формирует запрос по таблице "НДФЛ" документа
//
// Параметры:
// нет
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоНДФЛудержанный()

Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);

Запрос.Текст =
"ВЫБРАТЬ
| СтрокиНДФЛ.ФизЛицо КАК ФизЛицо,
| СтрокиНДФЛ.СтавкаНалогообложенияРезидента КАК СтавкаНалогообложенияРезидента,
| СтрокиНДФЛ.СтатьяФинансирования КАК СтатьяФинансирования,
| СтрокиНДФЛ.КОСГУ КАК КОСГУ,
| СУММА(СтрокиНДФЛ.Налог) КАК Налог
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИФ КАК СтрокиНДФЛ
|ГДЕ
| СтрокиНДФЛ.Ссылка = &ДокументСсылка
|
|СГРУППИРОВАТЬ ПО
| СтрокиНДФЛ.ФизЛицо,
| СтрокиНДФЛ.СтавкаНалогообложенияРезидента,
| СтрокиНДФЛ.СтатьяФинансирования,
| СтрокиНДФЛ.КОСГУ
|
|УПОРЯДОЧИТЬ ПО
| ФизЛицо,
| СтавкаНалогообложенияРезидента,
| СтатьяФинансирования,
| КОСГУ";

Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоНДФЛудержанный()

// Формирует запрос по таблице "НДФЛ" документа для расчета сумм НДФЛ к зачету
//
// Параметры:
// нет
// Возвращаемое значение:
// Результат запроса.
//
Функция СформироватьЗапросПоНДФЛКЗачету()

Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("ДокументСсылка", Ссылка);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ПериодРегистрации", КонецМесяца(ПериодРегистрации)+1);

Запрос.Текст =
"ВЫБРАТЬ
| СУММА(СтрокиНДФЛ.Налог) КАК Налог,
| ВЫБОР
| КОГДА ЕСТЬNULL(НДФЛКЗачету.СуммаНДФЛКЗачетуОстаток, 0) + ЕСТЬNULL(СуммыУчтенныеДокументом.СуммаНДФЛКЗачету, 0) > ВЫБОР
| КОГДА СУММА(СтрокиНДФЛ.Налог) > 0
| ТОГДА СУММА(СтрокиНДФЛ.Налог)
| ИНАЧЕ 0
| КОНЕЦ
| ТОГДА СУММА(СтрокиНДФЛ.Налог)
| ИНАЧЕ ЕСТЬNULL(НДФЛКЗачету.СуммаНДФЛКЗачетуОстаток, 0) + ЕСТЬNULL(СуммыУчтенныеДокументом.СуммаНДФЛКЗачету, 0)
| КОНЕЦ КАК НДФЛКЗачетуУчтено,
| СтрокиНДФЛ.ФизЛицо,
| ЗНАЧЕНИЕ(Перечисление.НДФЛСтавкиНалогообложенияРезидента.Ставка13) КАК СтавкаНалогообложенияРезидента,
| СтрокиНДФЛ.СтатьяФинансирования,
| СтрокиНДФЛ.КОСГУ
|ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИФ КАК СтрокиНДФЛ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.НДФЛКЗачету.Остатки(
| &ПериодРегистрации,
| Физлицо В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИф.ФизЛицо
| ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИф
| ГДЕ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИф.Ссылка = &ДокументСсылка)
| И Организация = &Организация
| И СтавкаНалогообложенияРезидента = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавкиНалогообложенияРезидента.Ставка13)) КАК НДФЛКЗачету
| ПО (НДФЛКЗачету.ФизЛицо = СтрокиНДФЛ.ФизЛицо)
| И (НДФЛКЗачету.СтатьяФинансирования = СтрокиНДФЛ.СтатьяФинансирования)
| И (НДФЛКЗачету.КОСГУ = СтрокиНДФЛ.КОСГУ)
| ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| НДФЛКЗачету.ФизЛицо КАК ФизЛицо,
| НДФЛКЗачету.СтатьяФинансирования КАК СтатьяФинансирования,
| НДФЛКЗачету.КОСГУ КАК КОСГУ,
| СУММА(НДФЛКЗачету.СуммаНДФЛКЗачету) КАК СуммаНДФЛКЗачету
| ИЗ
| РегистрНакопления.НДФЛКЗачету КАК НДФЛКЗачету
| ГДЕ
| НДФЛКЗачету.ФизЛицо В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИф.ФизЛицо
| ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИф
| ГДЕ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НДФЛПоИф.Ссылка = &ДокументСсылка)
| И НДФЛКЗачету.Организация = &Организация
| И НДФЛКЗачету.СтавкаНалогообложенияРезидента = ЗНАЧЕНИЕ(Перечисление.НДФЛСтавкиНалогообложенияРезидента.Ставка13)
| И НДФЛКЗачету.Регистратор = &ДокументСсылка
| И НДФЛКЗачету.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Расход)
|
| СГРУППИРОВАТЬ ПО
| НДФЛКЗачету.ФизЛицо,
| НДФЛКЗачету.СтатьяФинансирования,
| НДФЛКЗачету.КОСГУ) КАК СуммыУчтенныеДокументом
| ПО (СуммыУчтенныеДокументом.ФизЛицо = СтрокиНДФЛ.ФизЛицо)
| И (СуммыУчтенныеДокументом.СтатьяФинансирования = СтрокиНДФЛ.СтатьяФинансирования)
| И (СуммыУчтенныеДокументом.КОСГУ = СтрокиНДФЛ.КОСГУ)
|ГДЕ
| СтрокиНДФЛ.Ссылка = &ДокументСсылка
|
|СГРУППИРОВАТЬ ПО
| СтрокиНДФЛ.ФизЛицо,
| СтрокиНДФЛ.СтатьяФинансирования,
| СтрокиНДФЛ.КОСГУ,
| НДФЛКЗачету.СуммаНДФЛКЗачетуОстаток,
| СуммыУчтенныеДокументом.СуммаНДФЛКЗачету
|
|ИМЕЮЩИЕ
| (СУММА(СтрокиНДФЛ.Налог) < 0
| ИЛИ ВЫБОР
| КОГДА ЕСТЬNULL(НДФЛКЗачету.СуммаНДФЛКЗачетуОстаток, 0) + ЕСТЬNULL(СуммыУчтенныеДокументом.СуммаНДФЛКЗачету, 0) > ВЫБОР
| КОГДА СУММА(СтрокиНДФЛ.Налог) > 0
| ТОГДА СУММА(СтрокиНДФЛ.Налог)
| ИНАЧЕ 0
| КОНЕЦ
| ТОГДА СУММА(СтрокиНДФЛ.Налог)
| ИНАЧЕ ЕСТЬNULL(НДФЛКЗачету.СуммаНДФЛКЗачетуОстаток, 0) + ЕСТЬNULL(СуммыУчтенныеДокументом.СуммаНДФЛКЗачету, 0)
| КОНЕЦ <> 0)";

Возврат Запрос.Выполнить();

КонецФункции // СформироватьЗапросПоНДФЛКЗачету

// Проверяет правильность заполнения шапки документа.
// Если какой-то из реквизитов шапки, влияющий на проведение, не заполнен или
// заполнен некорректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса по шапке,
// все проверяемые реквизиты должны быть включены в шапку.
//
// Параметры:
// ШапкаДокумента - шапка документа,
// Отказ - флаг отказа в проведении.
//
Процедура ПроверитьЗаполнениеШапки(ШапкаДокумента, Отказ, Заголовок = "")

// Организация
Если НЕ ЗначениеЗаполнено(ШапкаДокумента.ГоловнаяОрганизация) Тогда
ОбщегоНазначения.СообщитьОбОшибке("Не указано учреждение, по которому начисляется зарплата!", Отказ, Заголовок);
КонецЕсли;
// соответствие периодов документа и перерассчитываемого документа
Если ШапкаДокумента.ПериодПерерасчета <> null
и ШапкаДокумента.ПериодРегистрации <= ШапкаДокумента.ПериодПерерасчета Тогда
ОбщегоНазначения.СообщитьОбОшибке("Период документа должен быть больше периода перерассчитываемого документа!", Отказ, Заголовок);
КонецЕсли;
// соответствие организаций документа и перерассчитываемого документа
Если ШапкаДокумента.ОрганизацияПерерасчета <> null
и ШапкаДокумента.ОбособленноеПодразделение <> ШапкаДокумента.ОрганизацияПерерасчета Тогда
ОбщегоНазначения.СообщитьОбОшибке("Организация, заданная для документа, должна совпадать с организацией перерассчитываемого документа!", Отказ, Заголовок);
КонецЕсли;

КонецПроцедуры // ПроверитьЗаполнениеШапки()

Процедура ПроверитьЗаполнениеНачислений(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям, Отказ, Заголовок, ПроверятьОтражение = Ложь)

// Позиционируем выборку в начало.
ВыборкаПоНачислениям.Сбросить();

// Проверяем начисления
Пока ВыборкаПоНачислениям.Следующий() Цикл

// проверим очередную строку табличной части
ПроверитьЗаполнениеСтрокиНачисления(ВыборкаПоНачислениям, Отказ, Заголовок, ПроверятьОтражение);

КонецЦикла;

КонецПроцедуры

// Проверяет правильность заполнения реквизитов в строке ТЧ "Начисления" документа.
// Если какой-то из реквизитов, влияющий на проведение, не заполнен или
// заполнен некорректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса к ТЧ документа,
// все проверяемые реквизиты должны быть включены в выборку.
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// Отказ - флаг отказа в проведении.
//
Процедура ПроверитьЗаполнениеСтрокиНачисления(ВыборкаПоСтрокамДокумента, Отказ, Заголовок = "", ПроверятьОтражение = Ложь)

СтрокаНачалаСообщенияОбОшибке = "В строке номер """+ СокрЛП(ВыборкаПоСтрокамДокумента.НомерСтроки) +
""" табл. части ""Начисления"": ";

// Сотрудник
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.Сотрудник) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не выбран сотрудник!", Отказ, Заголовок);
КонецЕсли;

// Организация сотрудника должна совпадать с организацией документа
Если ВыборкаПоСтрокамДокумента.ОшибкаНеСоответствиеСотрудникаИОрганизации Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "указанный сотрудник оформлен на другое учреждение!", Отказ, Заголовок);
КонецЕсли;

// ВидРасчета
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ВидРасчета) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указан вид расчета!", Отказ, Заголовок);
КонецЕсли;

// Дата начала
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ПериодДействияНачало) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата начала начисления!", Отказ, Заголовок);
КонецЕсли;

// Дата окончания
Если Не ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ПериодДействияКонец) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата окончания начисления!", Отказ, Заголовок);
КонецЕсли;

// Проверка соответствия Даты начала и Даты окончания
Если ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ПериодДействияКонец) и ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ПериодДействияНачало) Тогда
Если ВыборкаПоСтрокамДокумента.ПериодДействияКонец < ВыборкаПоСтрокамДокумента.ПериодДействияНачало Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "дата окончания начисления не должна быть меньше даты начала!", Отказ, Заголовок);
ИначеЕсли НачалоМесяца(ВыборкаПоСтрокамДокумента.ПериодДействияКонец) <> НачалоМесяца(ВыборкаПоСтрокамДокумента.ПериодДействияНачало) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "даты начала и окончания начисления должны принадлежать одному месяцу!", Отказ, Заголовок);
КонецЕсли;
КонецЕсли;

// Дата начала события
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ДатаНачалаСобытия) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата начала события!", Отказ, Заголовок);
КонецЕсли;

Если ВыборкаПоСтрокамДокумента.ЯвляетсяПочасовымОтклонением Тогда
// ВидИспользованияРабочегоВремени
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ВидИспользованияРабочегоВремени) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указан учет времени для вида расчета!", Отказ, Заголовок);
КонецЕсли;

// ОплачиватьЧасов
Если ВыборкаПоСтрокамДокумента.ОплачиватьЧасов <= 0 Или ВыборкаПоСтрокамДокумента.ОплачиватьЧасов > 24 Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "количество оплачиваемых часов должно быть положительным и не превышать 24!", Отказ, Заголовок);
КонецЕсли;
КонецЕсли;

// Проверка отражения
Если НЕ Отказ И ПроверятьОтражение Тогда

КлючНачисления =
Новый Структура(
"Сотрудник,
|ВидРасчета,
|ДатаНачала,
|ДатаОкончания,
|ПодразделениеОрганизации,
|Сторно");

ЗаполнитьЗначенияСвойств(КлючНачисления, Начисления[ВыборкаПоСтрокамДокумента.НомерСтроки-1]);

КлючОтражения = ПолучитьКлючОтраженияНачисления(Начисления[ВыборкаПоСтрокамДокумента.НомерСтроки-1]);

ДополнительныеПроверки = Новый Структура();
ДополнительныеПроверки.Вставить("ВидРасчета", "не указан вид расчета!");
ДополнительныеПроверки.Вставить("ПериодДействияНачало", "не указана дата начала начисления!");
ДополнительныеПроверки.Вставить("ПериодДействияКонец", "не указана дата окончания начисления!");
ОтражениеВУчете.ПроверитьЗаполнениеОтраженияРасчета(
ОтражениеВУчете.СоздатьСтруктуруПроверяемыхКолонокОтраженияРасчета(ПериодРегистрации),
НачисленияПоИФ,
КлючОтражения,
СтрокаНачалаСообщенияОбОшибке + "в распределении по источникам ",
Отказ,
Заголовок);

Если НЕ Отказ Тогда

ОтражениеВУчете.СообщитьОбОшибкеНеравенстваСумм(
ОтражениеВУчете.СравнитьСуммыОтраженияИРасчета(
Начисления,
КлючНачисления,
НачисленияПоИФ,
КлючОтражения),
СтрокаНачалаСообщенияОбОшибке,
Отказ, Заголовок);

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

КонецПроцедуры // ПроверитьЗаполнениеСтрокиНачисления()

// Проверяет правильность заполнения основных начислений документа.
// Если какой-то из реквизитов ТЧ, влияющий на проведение не заполнен или
// заполнен не корректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса по начислениям,
// Все проверяемые реквизиты должны быть включены в выборку по начислениям.
//
// Параметры:
// ВыборкаПоНачислениям - выборка из результата запроса по по начислениям,
// Отказ - флаг отказа в проведении,
// Заголовок - Заголовок для сообщений об ошибках проведения.
//
Процедура ПроверитьЗаполнениеДополнительныхНачислений(ВыборкаПоШапкеДокумента, ВыборкаПоНачислениям, Отказ, Заголовок, ПроверятьОтражение = Ложь)

// Подготовим таблицу инфрмации о дополнительных видах расчета
Если ПроверятьОтражение Тогда
мИнформацияОВидахРасчетаДоп = ПолучитьИнформациюОВидахРасчетаДоп();
КонецЕсли;

// Позиционируем выборку в начало.
ВыборкаПоНачислениям.Сбросить();

// Проверяем начисления
Пока ВыборкаПоНачислениям.Следующий() Цикл

// проверим очередную строку табличной части
ПроверитьЗаполнениеСтрокиДопНачисления(ВыборкаПоНачислениям, Отказ, Заголовок, ПроверятьОтражение);

КонецЦикла;

КонецПроцедуры

// Проверяет правильность заполнения реквизитов в строке ТЧ "ДополнительныеНачисления" документа.
// Если какой-то из реквизитов, влияющий на проведение, не заполнен или
// заполнен некорректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса к ТЧ документа,
// все проверяемые реквизиты должны быть включены в выборку.
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// Отказ - флаг отказа в проведении.
//
Процедура ПроверитьЗаполнениеСтрокиДопНачисления(ВыборкаПоСтрокамДокумента, Отказ, Заголовок = "", ПроверятьОтражение = Ложь)

СтрокаНачалаСообщенияОбОшибке = "В строке номер """+ СокрЛП(ВыборкаПоСтрокамДокумента.НомерСтроки) +
""" табл. части ""Доп. начисления"": ";

// Сотрудник
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.Сотрудник) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не выбран сотрудник!", Отказ, Заголовок);
КонецЕсли;

// Организация сотрудника должна совпадать с организацией документа
Если ВыборкаПоСтрокамДокумента.ОшибкаНеСоответствиеСотрудникаИОрганизации Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "указанный сотрудник оформлен на другое учреждение!", Отказ, Заголовок);
КонецЕсли;

// ВидРасчета
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ВидРасчета) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указан вид расчета!", Отказ, Заголовок);
ИначеЕсли ВыборкаПоСтрокамДокумента.Авторасчет Тогда
Если ВыборкаПоСтрокамДокумента.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.Процентом
Или ВыборкаПоСтрокамДокумента.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.СевернаяНадбавка
Или ВыборкаПоСтрокамДокумента.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ОтСтажаПроцентом Тогда

// Дата начала
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.БазовыйПериодНачало) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата начала базового периода начисления!", Отказ, Заголовок);
КонецЕсли;
// Дата окончания
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.БазовыйПериодКонец) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата окончания базового периода начисления!", Отказ, Заголовок);
КонецЕсли;

ИначеЕсли ВыборкаПоСтрокамДокумента.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработку
Или ВыборкаПоСтрокамДокумента.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоКалендарнымДням
Или ВыборкаПоСтрокамДокумента.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоШестидневке Тогда

// Дата начала события
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ДатаНачалаСобытия) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата начала события!", Отказ, Заголовок);
КонецЕсли;
// Дата начала
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ПериодРасчетаСреднегоЗаработкаНачало) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата начала расчетного периода для исчисления среднего заработка!", Отказ, Заголовок);
КонецЕсли;
// Дата окончания
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ПериодРасчетаСреднегоЗаработкаОкончание) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата окончания расчетного периода для исчисления среднего заработка!", Отказ, Заголовок);
КонецЕсли;

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

// Проверка на сумму вычета
Если ВыборкаПоСтрокамДокумента.СуммаВычета <> 0 И Не ПроведениеРасчетов.ВычетСоответствуетДоходу(ВыборкаПоСтрокамДокумента.КодДоходаНДФЛ, ВыборкаПоСтрокамДокумента.КодВычета, мСоответствиеДоходовИВычетов) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "указанный код вычета не предусмотрен для кода дохода (" + ?(ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.КодДоходаНДФЛ), СокрЛП(ВыборкаПоСтрокамДокумента.КодДоходаНДФЛ), "не указан") + "), с которым будет зарегистрировано в учете по НДФЛ начисление """ + ?(ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ВидРасчета), ВыборкаПоСтрокамДокумента.ВидРасчета, "<не указано>") + """!", Отказ, Заголовок);
КонецЕсли;

// Проверка отражения
Если НЕ Отказ И ПроверятьОтражение Тогда

СтрокаНачалаСообщенияОбОшибке = СтрокаНачалаСообщенияОбОшибке + "в распределении по источникам ";
КлючНачисления =
Новый Структура(
"Сотрудник,
|ВидРасчета,
|ДатаНачала,
|ДатаОкончания,
|Сторно");

ЗаполнитьЗначенияСвойств(КлючНачисления, ДополнительныеНачисления[ВыборкаПоСтрокамДокумента.НомерСтроки-1]);

КлючОтражения = ПолучитьКлючОтраженияДополнительногоНачисления(ДополнительныеНачисления[ВыборкаПоСтрокамДокумента.НомерСтроки-1]);

ОтражениеВУчете.ПроверитьЗаполнениеОтраженияРасчета(
ОтражениеВУчете.СоздатьСтруктуруПроверяемыхКолонокОтраженияРасчета(ПериодРегистрации),
ДополнительныеНачисленияПоИФ,
КлючОтражения,
СтрокаНачалаСообщенияОбОшибке,
Отказ,
Заголовок);

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

// Проверка соответствия сумм
Если НЕ Отказ Тогда

ОтражениеВУчете.СообщитьОбОшибкеНеравенстваСумм(
ОтражениеВУчете.СравнитьСуммыОтраженияИРасчета(
ДополнительныеНачисления,
КлючНачисления,
ДополнительныеНачисленияПоИФ,
КлючОтражения),
СтрокаНачалаСообщенияОбОшибке,
Отказ, Заголовок);

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

КонецПроцедуры // ПроверитьЗаполнениеСтрокиДопНачисления()

// Проверяет правильность заполнения основных начислений документа.
// Если какой-то из реквизитов ТЧ, влияющий на проведение не заполнен или
// заполнен не корректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса по начислениям,
// Все проверяемые реквизиты должны быть включены в выборку по начислениям.
//
// Параметры:
// ВыборкаПоНачислениям - выборка из результата запроса по по начислениям,
// Отказ - флаг отказа в проведении,
// Заголовок - Заголовок для сообщений об ошибках проведения.
//
Процедура ПроверитьЗаполнениеДоговоров(ВыборкаПоШапкеДокумента, ВыборкаПоДоговорам, Отказ, Заголовок, ПроверятьОтражение = Ложь)

// Позиционируем выборку в начало.
ВыборкаПоДоговорам.Сбросить();

// Проверяем начисления
Пока ВыборкаПоДоговорам.Следующий() Цикл

// проверим очередную строку табличной части
ПроверитьЗаполнениеСтрокиДоговора(ВыборкаПоДоговорам, Отказ, Заголовок, ПроверятьОтражение);

КонецЦикла;

КонецПроцедуры

// Проверяет правильность заполнения реквизитов в строке ТЧ "ДоговорыНаВыполнениеРабот" документа.
// Если какой-то из реквизитов, влияющий на проведение, не заполнен или
// заполнен некорректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса к ТЧ документа,
// все проверяемые реквизиты должны быть включены в выборку.
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// Отказ - флаг отказа в проведении.
//
Процедура ПроверитьЗаполнениеСтрокиДоговора(ВыборкаПоСтрокамДокумента, Отказ, Заголовок = "", ПроверятьОтражение = Ложь)

СтрокаНачалаСообщенияОбОшибке = "В строке номер """+ СокрЛП(ВыборкаПоСтрокамДокумента.НомерСтроки) +
""" табл. части ""Договора"": ";

// Сотрудник
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.Сотрудник) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не выбран сотрудник!", Отказ, Заголовок);
КонецЕсли;

// Организация сотрудника должна совпадать с организацией документа
Если ВыборкаПоСтрокамДокумента.ОшибкаНеСоответствиеСотрудникаИОрганизации Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "указанный сотрудник оформлен на другое учреждение!", Отказ, Заголовок);
КонецЕсли;

// ВидРасчета
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ВидРасчета) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указан вид расчета!", Отказ, Заголовок);
ИначеЕсли ВыборкаПоСтрокамДокумента.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.Процентом Тогда
// Дата начала
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.БазовыйПериодНачало) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата начала базового периода начисления!", Отказ, Заголовок);
КонецЕсли;
// Дата окончания
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.БазовыйПериодКонец) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата окончания базового периода начисления!", Отказ, Заголовок);
КонецЕсли;

КонецЕсли;

// ДокументОснование
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ДокументОснование) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указан договор-основание!", Отказ, Заголовок);
КонецЕсли;

// Проверка на сумму вычета
Если ВыборкаПоСтрокамДокумента.СкидкаПриНалогообложении <> 0 И Не ПроведениеРасчетов.ВычетСоответствуетДоходу(ВыборкаПоСтрокамДокумента.КодДоходаНДФЛ, ВыборкаПоСтрокамДокумента.КодВычета, мСоответствиеДоходовИВычетов) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "указанный код вычета не предусмотрен для кода дохода (" + ?(ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.КодДоходаНДФЛ), СокрЛП(ВыборкаПоСтрокамДокумента.КодДоходаНДФЛ), "не указан") + "), с которым будет зарегистрировано в учете по НДФЛ начисление """ + ?(ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ВидРасчета), ВыборкаПоСтрокамДокумента.ВидРасчета, "<не указано>") + """!", Отказ, Заголовок);
КонецЕсли;

// Проверка отражения
Если НЕ Отказ И ПроверятьОтражение Тогда
СтрокаНачалаСообщенияОбОшибке = СтрокаНачалаСообщенияОбОшибке + "в распределении по источникам ";

// КОСГУ
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.КОСГУ) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указан КОСГУ!", Отказ, Заголовок);
КонецЕсли;
// Статья финансирования
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.СтатьяФинансирования) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана статья финансирования!", Отказ, Заголовок);
КонецЕсли;
// Статья расходов
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.СтатьяРасходов) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана статья расходов!", Отказ, Заголовок);
КонецЕсли;

КонецЕсли;

КонецПроцедуры // ПроверитьЗаполнениеСтрокиДоговора()

// Проверяет правильность заполнения реквизитов в ТЧ "НДФЛ" документа.
// Если какой-то из реквизитов, влияющий на проведение, не заполнен или
// заполнен некорректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по ТЧ документа
//
// Параметры:
// Отказ - флаг отказа в проведении.
// Заголовок - текст заголовка документв
//
Процедура ПроверитьЗаполнениеНДФЛ(Отказ, Заголовок = "", ПроверятьОтражение = Ложь)

Для Каждого СтрокаНДФЛ Из НДФЛ Цикл
ПроверитьЗаполнениеСтрокаНДФЛ(СтрокаНДФЛ, Отказ, Заголовок, ПроверятьОтражение)
КонецЦикла;

КонецПроцедуры // ПроверитьЗаполнениеНДФЛ()

// Проверяет правильность заполнения реквизитов в строке ТЧ "НДФЛ" документа.
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// Отказ - флаг отказа в проведении.
//
Процедура ПроверитьЗаполнениеСтрокаНДФЛ(СтрокаНДФЛ, Отказ, Заголовок = "", ПроверятьОтражение = Ложь)

СтрокаНачалаСообщенияОбОшибке = "В строке номер """+ СокрЛП(СтрокаНДФЛ.НомерСтроки) +
""" табл. части ""НДФЛ"": ";

// ФизЛицо
Если НЕ ЗначениеЗаполнено(СтрокаНДФЛ.ФизЛицо) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не выбрано физическое лицо!", Отказ, Заголовок);
КонецЕсли;

// месяц налогового периода
Если НЕ ЗначениеЗаполнено(СтрокаНДФЛ.МесяцНалоговогоПериода) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не задан месяц налогового периода!", Отказ, Заголовок);
КонецЕсли;

// Проверка отражения
Если НЕ Отказ И ПроверятьОтражение Тогда

КлючНДФЛ =
Новый Структура(
"ФизЛицо,
|МесяцНалоговогоПериода");

ЗаполнитьЗначенияСвойств(КлючНДФЛ, СтрокаНДФЛ);

КлючОтражения = ПолучитьКлючОтраженияНДФЛ(СтрокаНДФЛ);

ОтражениеВУчете.ПроверитьЗаполнениеОтраженияРасчета(
ОтражениеВУчете.СоздатьСтруктуруПроверяемыхКолонокОтраженияРасчета(ПериодРегистрации, Новый Структура("СтавкаНалогообложенияРезидента", "не указана ставка налогообложения!")),
НДФЛпоИФ,
КлючОтражения,
СтрокаНачалаСообщенияОбОшибке + "в распределении по источникам ",
Отказ,
Заголовок);

Если НЕ Отказ Тогда

ОтражениеВУчете.СообщитьОбОшибкеНеравенстваСумм(
ОтражениеВУчете.СравнитьСуммыОтраженияИРасчета(
НДФЛ,
КлючНДФЛ,
НДФЛпоИФ,
КлючОтражения,
"Налог"),
СтрокаНачалаСообщенияОбОшибке,
Отказ, Заголовок);

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

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

// Проверяет правильность заполнения удержаний документа.
// Если какой-то из реквизитов ТЧ, влияющий на проведение не заполнен или
// заполнен не корректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса по начислениям,
// Все проверяемые реквизиты должны быть включены в выборку по начислениям.
//
// Параметры:
// ВыборкаПоНачислениям - выборка из результата запроса по по начислениям,
// Отказ - флаг отказа в проведении,
// Заголовок - Заголовок для сообщений об ошибках проведения.
//
Процедура ПроверитьЗаполнениеУдержаний(ВыборкаПоШапкеДокумента, ВыборкаПоУдержаниям, Отказ, Заголовок, ПроверятьОтражение = Ложь)

// Позиционируем выборку в начало.
ВыборкаПоУдержаниям.Сбросить();

// Проверяем начисления
Пока ВыборкаПоУдержаниям.Следующий() Цикл

// проверим очередную строку табличной части
ПроверитьЗаполнениеСтрокиУдержания(ВыборкаПоУдержаниям, Отказ, Заголовок, ПроверятьОтражение);

КонецЦикла;

КонецПроцедуры

// Проверяет правильность заполнения реквизитов в строке ТЧ "Удержания" документа.
// Если какой-то из реквизитов, влияющий на проведение, не заполнен или
// заполнен некорректно, то выставляется флаг отказа в проведении.
// Проверка выполняется по выборке из результата запроса к ТЧ документа,
// все проверяемые реквизиты должны быть включены в выборку.
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// Отказ - флаг отказа в проведении.
//
Процедура ПроверитьЗаполнениеСтрокиУдержания(ВыборкаПоСтрокамДокумента, Отказ, Заголовок = "", ПроверятьОтражение = Ложь)

СтрокаНачалаСообщенияОбОшибке = "В строке номер """+ СокрЛП(ВыборкаПоСтрокамДокумента.НомерСтроки) +
""" табл. части ""Удержания"": ";

// ФизЛицо
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ФизЛицо) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не выбрано физическое лицо!", Отказ, Заголовок);
КонецЕсли;

// ВидРасчета
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ВидРасчета) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указан вид расчета!", Отказ, Заголовок);
ИначеЕсли ВыборкаПоСтрокамДокумента.СпособРасчета <> Перечисления.СпособыРасчетаОплатыТруда.УдержаниеФиксированнойСуммой и
ВыборкаПоСтрокамДокумента.СпособРасчета <> Перечисления.СпособыРасчетаОплатыТруда.ИсполнительныйЛистФиксСуммойДоПредела Тогда

// Дата начала
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ДатаНачала) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата начала удержания!", Отказ, Заголовок);
КонецЕсли;

// Дата окончания
Если НЕ ЗначениеЗаполнено(ВыборкаПоСтрокамДокумента.ДатаОкончания) Тогда
ОбщегоНазначения.СообщитьОбОшибке(СтрокаНачалаСообщенияОбОшибке + "не указана дата окончания удержания!", Отказ, Заголовок);
КонецЕсли;

КонецЕсли;

// Проверка отражения
Если НЕ Отказ И ПроверятьОтражение Тогда

КлючРасчета =
Новый Структура(
"ФизЛицо,
|ВидРасчета,
|Сторно");

ЗаполнитьЗначенияСвойств(КлючРасчета, Удержания[ВыборкаПоСтрокамДокумента.НомерСтроки-1]);

КлючОтражения = ПолучитьКлючОтраженияУдержания(Удержания[ВыборкаПоСтрокамДокумента.НомерСтроки-1]);

ОтражениеВУчете.ПроверитьЗаполнениеОтраженияРасчета(
ОтражениеВУчете.СоздатьСтруктуруПроверяемыхКолонокОтраженияРасчета(ПериодРегистрации),
УдержанияПоИФ,
КлючОтражения,
СтрокаНачалаСообщенияОбОшибке + "в распределении по источникам ",
Отказ,
Заголовок);

Если НЕ Отказ Тогда

ОтражениеВУчете.СообщитьОбОшибкеНеравенстваСумм(
ОтражениеВУчете.СравнитьСуммыОтраженияИРасчета(
Удержания,
КлючРасчета,
УдержанияПоИФ,
КлючОтражения),
СтрокаНачалаСообщенияОбОшибке,
Отказ, Заголовок);

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

КонецПроцедуры // ПроверитьЗаполнениеСтрокиУдержания()

// Формирует записи регистра "УдержанияРаботниковОрганизаций" по данным документа
//
Процедура ЗаполнитьДвижениеПоУдержаниям(НаборЗаписей, ШапкаДокумента, ВыборкаПоУдержаниям = Неопределено, Исправления = Истина)

// получим реквизиты табличной части
Если ВыборкаПоУдержаниям = Неопределено Тогда
ВыборкаПоУдержаниям = СформироватьЗапросПоУдержания(ШапкаДокумента).Выбрать();
Иначе
ВыборкаПоУдержаниям.Сбросить();
КонецЕсли;

// Заполним записи в наборах записей регистров
Пока ВыборкаПоУдержаниям.Следующий() Цикл
Если Исправления ИЛИ НЕ ВыборкаПоУдержаниям.Сторно Тогда
ДобавитьСтрокуУдержаний(ВыборкаПоУдержаниям, ШапкаДокумента, НаборЗаписей);
КонецЕсли;
КонецЦикла;

КонецПроцедуры

// По строке выборок из результатов запроса по документу формируем движения по регистрам
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// НаборЗаписей - набор записей для УдержанияРаботниковОрганизации
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуУдержаний(ВыборкаПоСтрокамДокумента, ШапкаДокумента, НаборЗаписей)

Движение = НаборЗаписей.Добавить();

ЗаполнитьЗначенияСвойств(Движение,ШапкаДокумента); // ПериодРегистрации, ОбособленноеПодразделение
ЗаполнитьЗначенияСвойств(Движение,ВыборкаПоСтрокамДокумента); // БазовыйПериодНачало, БазовыйПериодКонец, ВидРасчета, Сторно
// ФизЛицо, Организация,
// Результат, Размер, ДокументОснование, Авторасчет, ПорядокРасчетаБазы
// ДатаНачалаСобытия,ПериодРасчетаСреднегоЗаработкаНачало,ПериодРасчетаСреднегоЗаработкаОкончание,
КонецПроцедуры // ДобавитьСтрокуУдержаний

// По строке выборок из результатов запроса по документу формируем движения по регистрам вычетов по НДФЛ
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// ШапкаДокумента - выборка по данным шапки документа
//
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуВычетовПоНДФЛ(ВыборкаПоСтрокамДокумента, ВыборкаПоШапкеДокумента, ЭтоСтандартныйВычет, КодВычета, ПримененныйВычет, ТекущееПодразделениеФизлица)

Если ЭтоСтандартныйВычет Тогда

Движение = Движения.НДФЛПредоставленныеСтандартныеВычетыФизЛиц.Добавить();

// Свойства
Движение.Период = КонецМесяца(ВыборкаПоШапкеДокумента.ПериодРегистрации);

// Измерения
Движение.МесяцНалоговогоПериода = ВыборкаПоСтрокамДокумента.МесяцНалоговогоПериода;
Движение.КодВычета = КодВычета;

// Ресурсы
Движение.ПримененныйВычет = ПримененныйВычет;
Иначе

Движение = Движения.НДФЛИмущественныеВычетыФизлиц.Добавить();

// Свойства
Движение.Период = КонецМесяца(ВыборкаПоСтрокамДокумента.МесяцНалоговогоПериода);
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

Движение.Год = Год(ВыборкаПоСтрокамДокумента.МесяцНалоговогоПериода);
Движение.КодВычетаИмущественный = КодВычета;

// Ресурсы
Движение.Размер = ПримененныйВычет;

КонецЕсли;

// Измерения
Движение.Организация = ВыборкаПоШапкеДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ВыборкаПоСтрокамДокумента.ФизЛицо;
// Реквизиты
Движение.ОбособленноеПодразделение = ВыборкаПоШапкеДокумента.ОбособленноеПодразделение;
Движение.ПодразделениеОрганизации = ТекущееПодразделениеФизлица;

КонецПроцедуры // ДобавитьСтрокуНДФЛВычеты

// По строке выборок из результатов запроса по документу формируем движения по регистрам
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// ШапкаДокумента - выборка по данным шапки документа
// НаборЗаписей - набор записей для НДФЛРасчетыСБюджетом
//
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуНДФЛ(ВыборкаПоСтрокамДокумента, ШапкаДокумента, НаборЗаписей)

Движение = НаборЗаписей.Добавить();

// Свойства
Движение.Период = КонецМесяца(ПериодРегистрации);
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;

// Измерения
Движение.Организация = ШапкаДокумента.ГоловнаяОрганизация;
Движение.ФизЛицо = ВыборкаПоСтрокамДокумента.ФизЛицо;
Движение.МесяцНалоговогоПериода = ВыборкаПоСтрокамДокумента.МесяцНалоговогоПериода;
Движение.СтавкаНалогообложенияРезидента = ВыборкаПоСтрокамДокумента.СтавкаНалогообложенияРезидента;
Движение.СтатьяФинансирования = ВыборкаПоСтрокамДокумента.СтатьяФинансирования;
Движение.КОСГУ = ВыборкаПоСтрокамДокумента.КОСГУ;

// Ресурсы
Движение.Налог = ВыборкаПоСтрокамДокумента.Налог;

// Реквизиты
Движение.ВидСтроки = Перечисления.НДФЛРасчетыСБюджетомВидСтроки.Начисление;
Движение.ОбособленноеПодразделение = ШапкаДокумента.ОбособленноеПодразделение;
Движение.ИсчисленоИзЗарплаты = Истина;
Движение.ПодразделениеОрганизации = ВыборкаПоСтрокамДокумента.ПодразделениеОрганизации;

КонецПроцедуры // ДобавитьСтрокуНДФЛПоИФ

// По строке выборок из результатов запроса по документу формируем движения по регистрам
//
// Параметры:
// ВыборкаСуммКУдержанию - спозиционированная на определеной строке выборка по удержанию НДФЛ
// ШапкаДокумента - выборка по данным шапки документа
// ВыборкаПоНДФЛ - выборка по НДФЛ документа
// ВыборкаПоНДФЛКЗачету - выборка по НДФЛ к зачету
//
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуНДФЛудержанный(ВыборкаСуммКУдержанию, ШапкаДокумента, ВыборкаПоНДФЛКЗачету)

СтруктураПоиска = Новый Структура("ФизЛицо, СтавкаНалогообложенияРезидента, СтатьяФинансирования, КОСГУ");
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ВыборкаСуммКУдержанию);

// Получим реквизиты табличной части НДФЛПоИФ,
// соотв. текущей строке удержанного НДФЛ в порядке месяцев налогового периода
ТЗНДФЛ = ЭтотОбъект.НДФЛПоИФ.Выгрузить(СтруктураПоиска);
ТЗНДФЛ.Сортировать("МесяцНалоговогоПериода");

ОсталосьРаспределить = ВыборкаСуммКУдержанию.Налог; // положительная сумма исчисленного налога

// учтем возможный зачет образовавшейся ранее переплаты налога
ВыборкаПоНДФЛКЗачету.Сбросить();
Если ВыборкаПоНДФЛКЗачету.НайтиСледующий(СтруктураПоиска) Тогда
ОсталосьРаспределить = ОсталосьРаспределить - ВыборкаПоНДФЛКЗачету.НДФЛКЗачетуУчтено;
КонецЕсли;

// распределим получившуюся сумму налога к удержанию по месяцам налогового периода
//ВыборкаПоНДФЛ.Сбросить();
// Пока ВыборкаПоНДФЛ.НайтиСледующий(СтруктураПоиска) Цикл
Для Каждого СтрокаНДФЛ Из ТЗНДФЛ Цикл

Если ОсталосьРаспределить > 0 И СтрокаНДФЛ.Налог > 0 Тогда

// расчет суммы удерживаемого налога
ПогашаемаяСумма = Мин(СтрокаНДФЛ.Налог, ОсталосьРаспределить);
ОсталосьРаспределить = ОсталосьРаспределить - ПогашаемаяСумма;

Движение = Движения.НДФЛРасчетыСБюджетом.Добавить();

// Свойства
Движение.Период = КонецМесяца(ПериодРегистрации);
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;

// Измерения
Движение.ФизЛицо = СтрокаНДФЛ.ФизЛицо;
Движение.Организация = ШапкаДокумента.ГоловнаяОрганизация;
Движение.МесяцНалоговогоПериода = СтрокаНДФЛ.МесяцНалоговогоПериода;
Движение.СтавкаНалогообложенияРезидента = Перечисления.НДФЛСтавкиНалогообложенияРезидента.Ставка13;
Движение.СтатьяФинансирования = СтрокаНДФЛ.СтатьяФинансирования;
Движение.КОСГУ = СтрокаНДФЛ.КОСГУ;

// Ресурсы
Движение.Налог = ПогашаемаяСумма;

// Реквизиты
Движение.ВидСтроки = Перечисления.НДФЛРасчетыСБюджетомВидСтроки.Удержание;
Движение.ОбособленноеПодразделение = ШапкаДокумента.ОбособленноеПодразделение;

КонецЕсли;

КонецЦикла;

КонецПроцедуры // ДобавитьСтрокуНДФЛудержанный

// По строке выборок из результатов запроса по документу формируем движения по регистрам
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// ШапкаДокумента - выборка по данным шапки документа
// НаборЗаписей - набор записей для НДФЛРасчетыСБюджетом
//
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуНДФЛКЗачету(ВыборкаПоСтрокамДокумента, ШапкаДокумента)

// Определяем вид движения по НДФЛКЗачету
Если ВыборкаПоСтрокамДокумента.Налог < 0 Тогда
// Налог по документу отрицательный - добавляем в "зачтено"
ВидДвижения = ВидДвиженияНакопления.Приход;
Сумма = - ВыборкаПоСтрокамДокумента.Налог
ИначеЕсли ВыборкаПоСтрокамДокумента.НДФЛКЗачетуУчтено <> 0 Тогда
// Учитываем ранее зачтенное - убираем из "зачтено"
ВидДвижения = ВидДвиженияНакопления.Расход;
Сумма = ВыборкаПоСтрокамДокумента.НДФЛКЗачетуУчтено
Иначе
// Ни отрицательных налогов, ни использования ранее зачтенных
// Никаких движений по зачету НДФЛ делать не надо
Возврат;
КонецЕсли;

Движение = Движения.НДФЛКЗачету.Добавить();

// Свойства
Движение.Период = КонецМесяца(ПериодРегистрации);
Движение.ВидДвижения = ВидДвижения;

// Измерения
Движение.ФизЛицо = ВыборкаПоСтрокамДокумента.ФизЛицо;
Движение.Организация = ШапкаДокумента.ОбособленноеПодразделение;
Движение.СтавкаНалогообложенияРезидента = ВыборкаПоСтрокамДокумента.СтавкаНалогообложенияРезидента;
Движение.СтатьяФинансирования = ВыборкаПоСтрокамДокумента.СтатьяФинансирования;
Движение.КОСГУ = ВыборкаПоСтрокамДокумента.КОСГУ;

// Ресурсы
Движение.СуммаНДФЛКЗачету = Сумма;

КонецПроцедуры // ДобавитьСтрокуНДФЛКЗачету

// Формирует записи регистра "ОсновныеНачисленияРаботниковОрганизаций" по данным документа
//
Процедура ЗаполнитьДвижениеПоОсновнымНачислениям(НаборЗаписей, ШапкаДокумента, ВыборкаПоНачислениям = Неопределено, Исправления = Истина)

// получим реквизиты табличной части
Если ВыборкаПоНачислениям = Неопределено Тогда
ВыборкаПоНачислениям = СформироватьЗапросПоНачисления(ШапкаДокумента).Выбрать();
Иначе
ВыборкаПоНачислениям.Сбросить();
КонецЕсли;

// Заполним записи в наборах записей регистров
Пока ВыборкаПоНачислениям.Следующий() Цикл
Если Исправления ИЛИ НЕ (ВыборкаПоНачислениям.Сторно И ВыборкаПоНачислениям.СторнируемыйДокумент = ПерерассчитываемыйДокумент) Тогда
ДобавитьСтрокуОсновныхНачислений(ВыборкаПоНачислениям, ШапкаДокумента, НаборЗаписей);
КонецЕсли;
КонецЦикла;

КонецПроцедуры

// По строке выборок из результатов запроса по документу формируем движения по регистру
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуОсновныхНачислений(ВыборкаПоСтрокамДокумента, ШапкаДокумента, НаборЗаписей)

Движение = НаборЗаписей.Добавить();

// Свойства
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.ПериодДействияНачало = ВыборкаПоСтрокамДокумента.ПериодДействияНачало;
Движение.ПериодДействияКонец = ВыборкаПоСтрокамДокумента.ПериодДействияКонец;
Движение.БазовыйПериодНачало = ВыборкаПоСтрокамДокумента.БазовыйПериодНачало;
Движение.БазовыйПериодКонец = ВыборкаПоСтрокамДокумента.БазовыйПериодКонец;
Движение.ВидРасчета = ВыборкаПоСтрокамДокумента.ВидРасчета;
Движение.Сторно = ВыборкаПоСтрокамДокумента.Сторно;

// Измерения
Движение.Сотрудник = ВыборкаПоСтрокамДокумента.Сотрудник;
Движение.ФизЛицо = ВыборкаПоСтрокамДокумента.ФизЛицо;
Движение.Организация = ШапкаДокумента.ГоловнаяОрганизация;

// Ресурсы
Движение.Результат = ВыборкаПоСтрокамДокумента.Результат;
Движение.ДополнительныйРезультат = ВыборкаПоСтрокамДокумента.ДополнительныйРезультат;
// ресурсы по отработанному времени
Если ВыборкаПоСтрокамДокумента.ЗачетОтработанногоВремени Тогда
Движение.ОтработаноДней = ВыборкаПоСтрокамДокумента.ОтработаноДней;
Движение.ОтработаноЧасов = ВыборкаПоСтрокамДокумента.ОтработаноЧасов;
Движение.ОтработаноДнейПоПятидневке = ВыборкаПоСтрокамДокумента.ОтработаноДнейПоПятидневке;
Движение.ОтработаноЧасовПоПятидневке= ВыборкаПоСтрокамДокумента.ОтработаноЧасовПоПятидневке;
КонецЕсли;
// ресурсы по норме времени
Если ВыборкаПоСтрокамДокумента.ЗачетНормыВремени Тогда
Движение.НормаДней = ВыборкаПоСтрокамДокумента.НормаДней;
Движение.НормаЧасов = ВыборкаПоСтрокамДокумента.НормаЧасов;
Движение.НормаДнейПоПятидневке = ВыборкаПоСтрокамДокумента.НормаДнейПоПятидневке;
Движение.НормаЧасовПоПятидневке = ВыборкаПоСтрокамДокумента.НормаЧасовПоПятидневке;
КонецЕсли;
Движение.ОплаченоДнейЧасов = ВыборкаПоСтрокамДокумента.ОплаченоДнейЧасов;

// Реквизиты
Движение.ГрафикРаботы = ВыборкаПоСтрокамДокумента.ГрафикРаботы;
Движение.ГрафикРаботыНорма = ВыборкаПоСтрокамДокумента.ГрафикРаботыНорма;
Для Сч = 1 По 6 Цикл
Движение["Показатель"+Сч] = ВыборкаПоСтрокамДокумента["Показатель"+Сч];
КонецЦикла;

Движение.ВидУчетаВремени = ПроведениеРасчетов.ПолучитьВидУчетаВремени(ВыборкаПоСтрокамДокумента.СпособРасчета, ВыборкаПоСтрокамДокумента.ВидВремени, ВыборкаПоСтрокамДокумента.СуммированныйУчетРабочегоВремени, ВыборкаПоСтрокамДокумента.ВидИспользованияРабочегоВремени, ВыборкаПоСтрокамДокумента.ВидРасчета.Показатели);
Движение.ПодразделениеОрганизации = ВыборкаПоСтрокамДокумента.ПодразделениеОрганизации;
Движение.ОбособленноеПодразделение = ШапкаДокумента.ОбособленноеПодразделение;
Движение.ПериодРасчетаСреднегоЗаработкаНачало = ВыборкаПоСтрокамДокумента.ПериодРасчетаСреднегоЗаработкаНачало;
Движение.ПериодРасчетаСреднегоЗаработкаОкончание = ВыборкаПоСтрокамДокумента.ПериодРасчетаСреднегоЗаработкаОкончание;
Движение.ДатаНачалаСобытия = ВыборкаПоСтрокамДокумента.ДатаНачалаСобытия;
Движение.Авторасчет = ВыборкаПоСтрокамДокумента.Авторасчет;
Движение.СторнируемыйДокумент = ВыборкаПоСтрокамДокумента.СторнируемыйДокумент;
Движение.РасчетнаяБазаЗаЕдиницуНормыВремени = ВыборкаПоСтрокамДокумента.РасчетнаяБазаЗаЕдиницуНормыВремени;

КонецПроцедуры // ДобавитьСтрокуОсновныхНачислений()

// Формирует записи регистра "ДополнительныеНачисленияРаботниковОрганизаций" по данным документа
//
Процедура ЗаполнитьДвижениеПоДополнительнымНачислениям(НаборЗаписей, ШапкаДокумента, ВыборкаПоНачислениям = Неопределено, Исправления = Истина)

// получим реквизиты табличной части
Если ВыборкаПоНачислениям = Неопределено Тогда
ВыборкаПоНачислениям = СформироватьЗапросПоДопНачисления(ШапкаДокумента).Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Иначе
ВыборкаПоНачислениям.Сбросить();
КонецЕсли;

// Заполним записи в наборах записей регистров
Пока ВыборкаПоНачислениям.Следующий() Цикл
Если Исправления ИЛИ НЕ ВыборкаПоНачислениям.Сторно Тогда
ДобавитьСтрокуДопНачислений(ВыборкаПоНачислениям, ШапкаДокумента, НаборЗаписей);
КонецЕсли;
КонецЦикла;

КонецПроцедуры

// По строке выборок из результатов запроса по документу формируем движения по регистру
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуДопНачислений(ВыборкаПоСтрокамДокумента, ШапкаДокумента, НаборЗаписей)

Движение = НаборЗаписей.Добавить();

ЗаполнитьЗначенияСвойств(Движение,ВыборкаПоСтрокамДокумента); // БазовыйПериодНачало, БазовыйПериодКонец, ВидРасчета, Сторно
// Сотрудник, ФизЛицо, Результат, СкидкаПриНалогообложении
// Размер,ЧислоМесяцев,ПодразделениеОрганизации,
// Авторасчет,ДокументОснование,ДатаНачалаСобытия,
// ПериодРасчетаСреднегоЗаработкаНачало,ПериодРасчетаСреднегоЗаработкаОкончание,СторнируемыйДокумент

Движение.ВидУчетаВремени = ПроведениеРасчетов.ПолучитьВидУчетаВремени(ВыборкаПоСтрокамДокумента.СпособРасчета, Неопределено, ВыборкаПоСтрокамДокумента.СуммированныйУчетРабочегоВремени);
Движение.ПериодРегистрации = ?(ВыборкаПоСтрокамДокумента.БазовыйПериодНачало > КонецМесяца(ПериодРегистрации), ПериодРегистрации, Макс(ПериодРегистрации, ВыборкаПоСтрокамДокумента.БазовыйПериодНачало));
Движение.Организация = ШапкаДокумента.ГоловнаяОрганизация;
Движение.ОбособленноеПодразделение = ШапкаДокумента.ОбособленноеПодразделение;

КонецПроцедуры // ДобавитьСтрокуДопНачислений

// По строке выборок из результатов запроса по документу формируем движения по регистру
//
// Параметры:
// ВыборкаПоСтрокамДокумента - спозиционированная на определеной строке выборка
// из результата запроса к ТЧ документа,
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуДоговора(ВыборкаПоСтрокамДокумента, ШапкаДокумента, НаборЗаписей)

Движение = НаборЗаписей.Добавить();

ЗаполнитьЗначенияСвойств(Движение,ВыборкаПоСтрокамДокумента); // БазовыйПериодНачало, БазовыйПериодКонец, ВидРасчета, Сторно
// Сотрудник, ФизЛицо, Результат, СкидкаПриНалогообложении
// Размер,ЧислоМесяцев,ПодразделениеОрганизации,
// Авторасчет,ДокументОснование,ДатаНачалаСобытия,
// ПериодРасчетаСреднегоЗаработкаНачало,ПериодРасчетаСреднегоЗаработкаОкончание,СторнируемыйДокумент

Движение.ПериодРегистрации = ?(ВыборкаПоСтрокамДокумента.БазовыйПериодНачало > КонецМесяца(ПериодРегистрации), ПериодРегистрации, Макс(ПериодРегистрации, ВыборкаПоСтрокамДокумента.БазовыйПериодНачало));
Движение.Организация = ШапкаДокумента.ГоловнаяОрганизация;
Движение.ОбособленноеПодразделение = ШапкаДокумента.ОбособленноеПодразделение;

КонецПроцедуры // ДобавитьСтрокуДоговора

// По выборке из результатов запроса по документу формируем движения по регистру
//
// Параметры:
// ШапкаДокумента - спозиционированная на определеной строке выборка
// из результата запроса к документу
// Возвращаемое значение:
// Нет.
//
Процедура ДобавитьСтрокуРабочегоВремени(ВыборкаПоНачислениям, ШапкаДокумента, НаборЗаписей)

Если ВыборкаПоНачислениям.ЯвляетсяПочасовымОтклонением Тогда
Движение = НаборЗаписей.Добавить();

// Свойства
Движение.Период = ВыборкаПоНачислениям.ПериодДействияНачало;

// Измерения
Движение.Сотрудник = ВыборкаПоНачислениям.Сотрудник;
Движение.Организация = ШапкаДокумента.ГоловнаяОрганизация;
Движение.ВидИспользованияРабочегоВремени = ВыборкаПоНачислениям.ВидИспользованияРабочегоВремени;

// Ресурсы

Движение.Часов = ВыборкаПоНачислениям.ОплачиватьЧасов;

КонецЕсли;

КонецПроцедуры // ДобавитьСтрокуРабочегоВремени()

// получает доходы НДФЛ по табличным частям с доходами
// Параметры:
// ШапкаДокумента - спозиционированная выборка по шапке документа
// НаборЗаписей - таблица значений или набор записей рег-ра - "приемник" сведений о доходах
//
Процедура СформироватьДоходыПоКодамНДФЛ(ШапкаДокумента, НаборЗаписей)

Запрос = Новый Запрос;

// Установим параметры запроса
Запрос.УстановитьПараметр("парамСсылка" , Ссылка);
Запрос.УстановитьПараметр("ДатаНалоговогоПериода", КонецГода(ПериодРегистрации));

КодОплатыТрудаПоНДФЛ = Новый Массив;
КодОплатыТрудаПоНДФЛ.Добавить(Справочники.ДоходыНДФЛ.КодДоходаПоУмолчанию);
КодОплатыТрудаПоНДФЛ.Добавить(Справочники.ДоходыНДФЛ.Код2012);
Запрос.УстановитьПараметр("КодОплатыТрудаПоНДФЛ", КодОплатыТрудаПоНДФЛ);

Запрос.Текст =
"ВЫБРАТЬ
| Доходы.СтатьяФинансирования,
| Доходы.КОСГУ,
| Доходы.Физлицо,
| Доходы.КодДохода,
| Доходы.КодВычета,
| Доходы.Период,
| СУММА(Доходы.СуммаДохода) КАК СуммаДохода,
| СУММА(Доходы.СуммаВычета) КАК СуммаВычета,
| СУММА(Доходы.КоличествоДетей) КАК КоличествоДетей,
| Доходы.ПодразделениеОрганизации,
| Доходы.ВидРасчета
|ИЗ
| (ВЫБРАТЬ
| Основные.Сотрудник.Физлицо КАК Физлицо,
| Основные.ВидРасчета.КодДоходаНДФЛ КАК КодДохода,
| ВЫБОР
| КОГДА Основные.ВидРасчета.КодДоходаНДФЛ В (&КодОплатыТрудаПоНДФЛ)
| ТОГДА Основные.ПериодДействияНачало
| ИНАЧЕ Основные.Ссылка.ПериодРегистрации
| КОНЕЦ КАК Период,
| Основные.СтатьяФинансирования КАК СтатьяФинансирования,
| Основные.КОСГУ КАК КОСГУ,
| Основные.Результат КАК СуммаДохода,
| 0 КАК СуммаВычета,
| NULL КАК КодВычета,
| Основные.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| 0 КАК КоличествоДетей,
| Основные.ВидРасчета КАК ВидРасчета
| ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.НачисленияПоИФ КАК Основные
| ГДЕ
| Основные.Ссылка = &парамСсылка
| И Основные.ВидРасчета.КодДоходаНДФЛ <> ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.ПустаяСсылка)
| И Основные.Результат <> 0
| И (НЕ(Основные.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ВоеннаяСлужбаПоПризыву)
| И Основные.ВидРасчета.ОтношениеКДенежномуСодержанию <> ЗНАЧЕНИЕ(Перечисление.ОтношениеКДенежномуСодержанию.ПустаяСсылка)))
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Дополнительные.Сотрудник.Физлицо,
| Дополнительные.ВидРасчета.КодДоходаНДФЛ,
| Дополнительные.Ссылка.ПериодРегистрации,
| Дополнительные.СтатьяФинансирования,
| Дополнительные.КОСГУ,
| Дополнительные.Результат,
| Дополнительные.СуммаВычета,
| Дополнительные.КодВычета,
| Дополнительные.ПодразделениеОрганизации,
| Дополнительные.КоличествоДетей,
| Дополнительные.ВидРасчета
| ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДополнительныеНачисленияПоИФ КАК Дополнительные
| ГДЕ
| Дополнительные.Ссылка = &парамСсылка
| И Дополнительные.ВидРасчета.КодДоходаНДФЛ <> ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.ПустаяСсылка)
| И Дополнительные.Результат <> 0
| И (НЕ(Дополнительные.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ВоеннаяСлужбаПоПризыву)
| И Дополнительные.ВидРасчета.ОтношениеКДенежномуСодержанию <> ЗНАЧЕНИЕ(Перечисление.ОтношениеКДенежномуСодержанию.ПустаяСсылка)))
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ДоговорыНаВыполнениеРабот.Сотрудник.Физлицо,
| ДоговорыНаВыполнениеРабот.ВидРасчета.КодДоходаНДФЛ,
| ДоговорыНаВыполнениеРабот.Ссылка.ПериодРегистрации,
| ДоговорыНаВыполнениеРабот.СтатьяФинансирования,
| ДоговорыНаВыполнениеРабот.КОСГУ,
| ДоговорыНаВыполнениеРабот.Результат,
| ДоговорыНаВыполнениеРабот.СуммаВычета,
| ДоговорыНаВыполнениеРабот.КодВычета,
| ДоговорыНаВыполнениеРабот.ПодразделениеОрганизации,
| 0,
| ДоговорыНаВыполнениеРабот.ВидРасчета
| ИЗ
| Документ.НачислениеЗарплатыРаботникамОрганизаций.ДоговорыНаВыполнениеРабот КАК ДоговорыНаВыполнениеРабот
| ГДЕ
| ДоговорыНаВыполнениеРабот.Ссылка = &парамСсылка
| И ДоговорыНаВыполнениеРабот.ВидРасчета.КодДоходаНДФЛ <> ЗНАЧЕНИЕ(Справочник.ДоходыНДФЛ.ПустаяСсылка)
| И ДоговорыНаВыполнениеРабот.Результат <> 0
| И (НЕ(ДоговорыНаВыполнениеРабот.Сотрудник.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровСФизЛицами.ВоеннаяСлужбаПоПризыву)
| И ДоговорыНаВыполнениеРабот.ВидРасчета.ОтношениеКДенежномуСодержанию <> ЗНАЧЕНИЕ(Перечисление.ОтношениеКДенежномуСодержанию.ПустаяСсылка)))) КАК Доходы
|
|СГРУППИРОВАТЬ ПО
| Доходы.Физлицо,
| Доходы.Период,
| Доходы.КодДохода,
| Доходы.КодВычета,
| Доходы.ПодразделениеОрганизации,
| Доходы.СтатьяФинансирования,
| Доходы.КОСГУ,
| Доходы.ВидРасчета
|
|УПОРЯДОЧИТЬ ПО
| Физлицо.Наименование";

ДоходыПоКодам = Запрос.Выполнить().Выбрать();
// сформируем движения НДФЛСведенияОДоходах
Пока ДоходыПоКодам.Следующий() Цикл
Движение = НаборЗаписей.Добавить();

// свойства
Движение.Период = ДоходыПоКодам.Период;

// измерения
Движение.Организация = ШапкаДокумента.ГоловнаяОрганизация;
Движение.Физлицо = ДоходыПоКодам.Физлицо;
Движение.КодДохода = ДоходыПоКодам.КодДохода;
Движение.ПериодРегистрации = ПериодРегистрации;
Движение.СтатьяФинансирования = ДоходыПоКодам.СтатьяФинансирования;
Движение.КОСГУ = ДоходыПоКодам.КОСГУ;

// ресурсы
Движение.СуммаДохода = ДоходыПоКодам.СуммаДохода;
Движение.СуммаВычета = ДоходыПоКодам.СуммаВычета;

// реквизиты
Движение.ОбособленноеПодразделение = ШапкаДокумента.ОбособленноеПодразделение;
Движение.КодВычета = ДоходыПоКодам.КодВычета;
Движение.КоличествоДетей = ДоходыПоКодам.КоличествоДетей;
Движение.ИсчисленоИзЗарплаты = Истина;
Движение.ПодразделениеОрганизации = ДоходыПоКодам.ПодразделениеОрганизации;
Движение.ВидРасчета = ДоходыПоКодам.ВидРасчета;

КонецЦикла;

КонецПроцедуры // СформироватьДоходыПоКодамНДФЛ()

// Вычисляет разницу между начислениями и удержаниями работника и формирует
// движения по взаиморасчетам с работниками
//
// Параметры:
// Перерасчет - признак проведения перерасчетов, по умолчанию - Ложь
// Физлица - список физлиц, по которым производится расчет, по умолчанию - отсутствует
//
// Возвращаемое значение:
// Нет
//
Процедура СформироватьВзаиморасчетыСРаботниками(Перерасчет = Ложь, Физлица = Неопределено)

НачислениеЗарплатыСервис.СформироватьВзаиморасчетыСРаботникамиПоПериодуНачисления(ЭтотОбъект, Перерасчет, Физлица);

КонецПроцедуры // СформироватьВзаиморасчетыСРаботниками()

Процедура ПриКопировании(ОбъектКопирования)
ПерерассчитываемыйДокумент = Неопределено
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)

Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;

Если ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет
Или ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНачислений Тогда

МассивТЧ = Новый Массив();
МассивТЧ.Добавить(Начисления);
МассивТЧ.Добавить(ДополнительныеНачисления);

КраткийСоставДокумента = ПроцедурыУправленияПерсоналом.ЗаполнитьКраткийСоставДокумента(МассивТЧ);
Если ПустаяСтрока(КраткийСоставДокумента) Тогда

МассивТЧ = Новый Массив();
МассивТЧ.Добавить(ДоговорыНаВыполнениеРабот);
МассивТЧ.Добавить(НДФЛ);
КраткийСоставДокумента = ПроцедурыУправленияПерсоналом.ЗаполнитьКраткийСоставДокумента(МассивТЧ, "Физлицо");

КонецЕсли;
Если ПустаяСтрока(КраткийСоставДокумента) Тогда

МассивТЧ = Новый Массив();
МассивТЧ.Добавить(Удержания);
КраткийСоставДокумента = ПроцедурыУправленияПерсоналом.ЗаполнитьКраткийСоставДокумента(МассивТЧ, "Физлицо");

КонецЕсли;

ИначеЕсли ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетНДФЛ Тогда

МассивТЧ = Новый Массив();
МассивТЧ.Добавить(НДФЛ);
КраткийСоставДокумента = ПроцедурыУправленияПерсоналом.ЗаполнитьКраткийСоставДокумента(МассивТЧ, "Физлицо");

ИначеЕсли ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.РасчетУдержаний Тогда

МассивТЧ = Новый Массив();
МассивТЧ.Добавить(Удержания);
КраткийСоставДокумента = ПроцедурыУправленияПерсоналом.ЗаполнитьКраткийСоставДокумента(МассивТЧ, "Физлицо");

КонецЕсли;

КонецПроцедуры // ПередЗаписью()

Процедура ПриЗаписи(Отказ)

Если ПометкаУдаления Тогда

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| 1
|ИЗ
| РегистрСведений.ЗаполнениеПлановыхНачислений КАК ЗаполнениеПлановыхНачислений
|ГДЕ
| ЗаполнениеПлановыхНачислений.ОбъектЗаполнения = &Ссылка";

Если Не Запрос.Выполнить().Пустой() Тогда
// удаляем запись о перезаполнении из регистра
НаборЗаписей = РегистрыСведений.ЗаполнениеПлановыхНачислений.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.ОбъектЗаполнения.Установить(Ссылка);
НаборЗаписей.Записать();
КонецЕсли;

КонецЕсли;

КонецПроцедуры

Процедура ОбработкаПроведения(Отказ, Режим)

ПроизводныеДвижения = Новый Массив;
Если ПериодРегистрации < ПроведениеРасчетов.ДатаЗаменыЕСНСтраховымиВзносами() Тогда
ПроизводныеДвижения.Добавить(Движения.ЕСНСведенияОДоходах);
Иначе
ПроизводныеДвижения.Добавить(Движения.СтраховыеВзносыСведенияОДоходах);
КонецЕсли;

Для Каждого Набор Из Движения Цикл
Набор.Очистить();
Если ПроизводныеДвижения.Найти(Набор) <> Неопределено Тогда
Набор.Записать();
КонецЕсли;
КонецЦикла;

// Подготовим таблицу соответствия доходов и вычетов
мСоответствиеДоходовИВычетов = ПроведениеРасчетов.ПолучитьСоответствиеДоходовИВычетов();

// Получим реквизиты шапки
ШапкаДокумента = ПолучитьШапкуДокумента();

// Заголовок для сообщений об ошибках проведения.
Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);

//Надо позвать проверку заполнения реквизитов шапки
ПроверитьЗаполнениеШапки(ШапкаДокумента, Отказ, Заголовок);

Если НЕ Отказ Тогда
// получим реквизиты табличных частей документа
ВыборкаПоНачислениямОсн = СформироватьЗапросПоНачисления(ШапкаДокумента).Выбрать();
ВыборкаПоНачислениямДоп = СформироватьЗапросПоДопНачисления(ШапкаДокумента).Выбрать();
РезультатЗапросаПоДоговорам = СформироватьЗапросПоДоговорам(ШапкаДокумента);
ВыборкаПоДоговорам = РезультатЗапросаПоДоговорам.Выбрать();
ВыборкаПоУдержаниям = СформироватьЗапросПоУдержания(ШапкаДокумента).Выбрать();

// проверяем заполнение начислений
ПроверитьЗаполнениеНачислений(ШапкаДокумента, ВыборкаПоНачислениямОсн, Отказ, Заголовок, Истина);
ПроверитьЗаполнениеДополнительныхНачислений(ШапкаДокумента, ВыборкаПоНачислениямДоп, Отказ, Заголовок, Истина);
ПроверитьЗаполнениеДоговоров(ШапкаДокумента, ВыборкаПоДоговорам, Отказ, Заголовок, Истина);
ПроверитьЗаполнениеУдержаний(ШапкаДокумента, ВыборкаПоУдержаниям, Отказ, Заголовок, Истина);
ПроверитьЗаполнениеНДФЛ(Отказ, Заголовок, Истина);
КонецЕсли;

// Движения стоит добавлять, если в проведении еще не отказано (отказ =ложь)
Если НЕ Отказ Тогда

Если ШапкаДокумента.ЭтоРасчетПервойПоловиныМесяца Тогда

// взаиморасчеты с работниками
СформироватьВзаиморасчетыСРаботниками();

Иначе

Движения.ОсновныеНачисленияРаботниковОрганизаций.мВыполнятьВспомогательныеРасчеты = Истина;

ОбщиеПоляДляБУ =
Новый Структура(
"ПериодРегистрации,
|Организация,
|ОбособленноеПодразделение",
ШапкаДокумента.ПериодРегистрации,
ШапкаДокумента.ГоловнаяОрганизация,
ШапкаДокумента.ОбособленноеПодразделение);

////////////////////////////////////////////////////////////////////////
// основные Начисления

ВыборкаПоНачислениямОсн.Сбросить();
Пока ВыборкаПоНачислениямОсн.Следующий() Цикл
// Заполним записи в наборах записей регистров
ДобавитьСтрокуОсновныхНачислений(ВыборкаПоНачислениямОсн, ШапкаДокумента, Движения.ОсновныеНачисленияРаботниковОрганизаций);
ДобавитьСтрокуРабочегоВремени(ВыборкаПоНачислениямОсн, ШапкаДокумента, Движения.ВнутрисменноеВремяРаботниковОрганизаций);
КонецЦикла;

// переносим отражение в регистр
ОтражениеВУчете.ЗаполнитьНаборЗаписейПоТЧ(Движения.БУОсновныеНачисления, НачисленияПоИФ, ОбщиеПоляДляБУ);

////////////////////////////////////////////////////////////////////////
// дополнительные Начисления

ВыборкаПоНачислениямДоп.Сбросить();
Пока ВыборкаПоНачислениямДоп.Следующий() Цикл
// Заполним записи в наборе записей регистра
ДобавитьСтрокуДопНачислений(ВыборкаПоНачислениямДоп, ШапкаДокумента, Движения.ДополнительныеНачисленияРаботниковОрганизаций);
КонецЦикла;

ПроведениеРасчетов.ДобавитьДвиженияПериодическихВыплат(Движения, Ссылка);

// переносим отражение в регистр
ОтражениеВУчете.ЗаполнитьНаборЗаписейПоТЧ(Движения.БУДополнительныеНачисления, ДополнительныеНачисленияПоИФ, ОбщиеПоляДляБУ);

////////////////////////////////////////////////////////////////////////
// ДоговорыНаВыполнениеРабот

// получим реквизиты табличной части
ВыборкаПоДоговорам.Сбросить();
Пока ВыборкаПоДоговорам.Следующий() Цикл
// Заполним записи в наборе записей регистра
ДобавитьСтрокуДоговора(ВыборкаПоДоговорам, ШапкаДокумента, Движения.ДополнительныеНачисленияРаботниковОрганизаций);
КонецЦикла;

// переносим отражение в регистр
ОтражениеВУчете.ЗаполнитьНаборЗаписейПоТЧ(Движения.БУДополнительныеНачисления, РезультатЗапросаПоДоговорам.Выгрузить(), ОбщиеПоляДляБУ);

////////////////////////////////////////////////////////////////////////
// удержания

// получим реквизиты табличной части

ВыборкаПоУдержаниям.Сбросить();
Пока ВыборкаПоУдержаниям.Следующий() Цикл
// Заполним записи в наборе записей регистра
ДобавитьСтрокуУдержаний(ВыборкаПоУдержаниям, ШапкаДокумента, Движения.УдержанияРаботниковОрганизаций);
КонецЦикла;

// переносим отражение в регистр
ОтражениеВУчете.ЗаполнитьНаборЗаписейПоТЧ(Движения.БУУдержания, УдержанияПоИФ, ОбщиеПоляДляБУ);

////////////////////////////////////////////////////////////////////////
// НДФЛ

// НДФЛ Вычеты (предоставленные и имущественные)
СформироватьВычетыПоНДФЛ(ШапкаДокумента, , Отказ, Заголовок);

////////////////////////////////////////////////////////////////////////
// исчисленный НДФЛ

// НДФЛ расчеты с бюджетом
ЗаполнитьНаборЗаписейНДФЛПоНачислениям(ШапкаДокумента, Движения.НДФЛРасчетыСБюджетом);

// НДФЛ к зачету
// получим реквизиты табличной части
ВыборкаПоНДФЛКЗачету = СформироватьЗапросПоНДФЛКЗачету().Выбрать();
Пока ВыборкаПоНДФЛКЗачету.Следующий() Цикл
// Заполним записи в наборах записей регистров
ДобавитьСтрокуНДФЛКЗачету(ВыборкаПоНДФЛКЗачету, ШапкаДокумента);
КонецЦикла;

////////////////////////////////////////////////////////////////////////
// удержанный НДФЛ

// посмотрим в учетную политику
УпрощенныйУчетНДФЛ = ПроцедурыУправленияПерсоналом.ЗначениеУчетнойПолитикиПоПерсоналуОрганизации(глЗначениеПеременной("глУчетнаяПолитикаПоПерсоналуОрганизации"), Организация, "УпрощенныйУчетНДФЛ");
Если УпрощенныйУчетНДФЛ Тогда

ВыборкаПоНДФЛуд = СформироватьЗапросПоНДФЛудержанный().Выбрать();
Пока ВыборкаПоНДФЛуд.Следующий() Цикл
// Заполним записи в наборах записей регистров
ДобавитьСтрокуНДФЛудержанный(ВыборкаПоНДФЛуд, ШапкаДокумента, ВыборкаПоНДФЛКЗачету);
КонецЦикла;

КонецЕсли;

////////////////////////////////////////////////////////////////////////
// доходы НДФЛ

// сформируем доходы НДФЛ по начислениям документа
СформироватьДоходыПоКодамНДФЛ(ШапкаДокумента, Движения.НДФЛСведенияОДоходах);

////////////////////////////////////////////////////////////////////////
// взаиморасчеты с работниками

// сформируем начисления к выплате по начислениям документа
СформироватьВзаиморасчетыСРаботниками();

////////////////////////////////////////////////////////////////////////
// Пособия по социальному страхованию

СформироватьПособияПоУходу(Движения.ПособияПоУходуЗаРебенкомДоПолутораЛет, Движения.ЗаработкиПолучателейПособияПоУходуЗаРебенкомДоПолутораЛет);
ОписаниеДокумента = Новый Структура("Ссылка, ПериодРегистрации, ОбособленноеПодразделение, Сотрудник, ВидЗанятости", Ссылка, ПериодРегистрации, Организация);
Движения.ПособияСоциальномуСтрахованию.Загрузить(ПроведениеРасчетовДополнительный.СформироватьПрочиеПособияПоСоциальномуСтрахованию(ОписаниеДокумента));

// выполним удаление перерасчетов и перезаполнений исправленного документа
Если ЗначениеЗаполнено(ПерерассчитываемыйДокумент) Тогда

ПроведениеРасчетов.УдалитьСведенияОПерерасчетеДокумента(Ссылка, Истина); // Только по исправленным документам
ПроведениеРасчетов.УдалитьСведенияОПерезаполненииДокумента(Ссылка, Неопределено, Истина); // Только по исправленным документам и только сотрудников нашего документа

КонецЕсли;

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

КонецПроцедуры

Процедура ОбработкаУдаленияПроведения(Отказ)

Движения.ОсновныеНачисленияРаботниковОрганизаций.мВыполнятьВспомогательныеРасчеты = Истина;

Для Каждого Набор Из Движения Цикл
Набор.Очистить();
Набор.Записать();
КонецЦикла

КонецПроцедуры // ОбработкаУдаленияПроведения()

 
  Исправлено в релизе: 1.0.11  
 
  Код ошибки: 10048380  
  Дата публикации: 03.03.2010 18:56:32  
  Дата последнего изменения: 03.03.2010 0:00:00  
  Описание: В документе "Отражение зарплаты в бухучете" в некоторых случаях взносы по страхованию от НС и ПЗ в случае отсутствия базы могут распределяться некорректно.  
  Исправлено в релизе: 1.0.11  
 
  Код ошибки: 10047705  
  Дата публикации: 19.02.2010 17:25:06  
  Дата последнего изменения: 15.03.2010 0:00:00  
  Описание: В документах "Начисление по больничному листу", "Начисление отпуска" при ручном изменении сумм начисленного пособия не происходит изменения сумм отражения в учете. Это приводит к тому, что распределение не совпадает с расчетом, что препятствуюет проведению документа.  
  Исправлено в релизе: 1.0.12  
 
  Код ошибки: 10041035  
  Дата публикации: 11.02.2010 20:52:49  
  Дата последнего изменения: 11.02.2010 0:00:00  
  Описание: В случае, если сотрудник уволен, а потом принят сразу следующим днем, предоставляется двойной вычет на ребенка.  
  Исправлено в релизе: 1.0.11