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