1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
| &НаКлиенте
Процедура Заполнить(Команда)
Если Объект.Проведен Тогда
Предупреждение("Заполнение возможно только в непроведенном документе!");
Возврат;
КонецЕсли;
Если Объект.Контракты.Количество() > 0 Тогда
ТекстВопроса = "Перед заполнением табличная часть будет очищена. Продолжить?";
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет, , КодВозвратаДиалога.Да);
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
Объект.Контракты.Очистить();
КонецЕсли;
ТЗ = ПолучитьСписокКонтрактовНаПродление();
мМаксимальныйСрокКонтрактаЛет = 5;
Для Каждого Стр Из ТЗ Цикл
НоваяСтрока = Объект.Контракты.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Стр);
ОбработкаТабличныхЧастей.РасчитатьСрокКонтракта(НоваяСтрока, мМаксимальныйСрокКонтрактаЛет, Истина, Ложь, Объект.Контракт)
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьСписокКонтрактовНаПродление(ТекущаяСтрока = Неопределено, ОпределитьНомерКонтракта = Ложь)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ВложенныйЗапрос.ФизЛицо КАК ФизЛицо,
| ВложенныйЗапрос.ДатаОкончанияКонтракта КАК ДатаОкончанияКонтракта,
| ВложенныйЗапрос.НомерКонтракта КАК НомерКонтракта,
| ВложенныйЗапрос.ДатаНачалаКонтракта КАК ДатаНачалаКонтракта,
| ДОБАВИТЬКДАТЕ(ВложенныйЗапрос.ДатаОкончанияКонтракта, ДЕНЬ, 1) КАК КонтрактС,
| ВЫБОР
| КОГДА ДОБАВИТЬКДАТЕ(ВложенныйЗапрос.ДатаОкончанияКонтракта, ГОД, 1) < ДОБАВИТЬКДАТЕ(ВложенныйЗапрос.ДатаНачалаКонтракта, ГОД, &МаксимальныйСрокКонтрактаЛет)
| ТОГДА ДОБАВИТЬКДАТЕ(ВложенныйЗапрос.ДатаОкончанияКонтракта, ГОД, 1)
| ИНАЧЕ ДОБАВИТЬКДАТЕ(ВложенныйЗапрос.ДатаНачалаКонтракта, ГОД, &МаксимальныйСрокКонтрактаЛет)
| КОНЕЦ КАК КонтрактПо,
| 1 КАК КонтрактЛет,
| Контракты.Регистратор КАК ДокументЗаключенияКонтракта,
| ВложенныйЗапрос.Приказ
|ПОМЕСТИТЬ ВТКонтрактыНаПродление
|ИЗ
| (ВЫБРАТЬ
| КонтрактыСрезПоследних.ФизЛицо КАК ФизЛицо,
| КонтрактыСрезПоследних.ДатаОкончанияКонтракта КАК ДатаОкончанияКонтракта,
| КонтрактыСрезПоследних.НомерКонтракта КАК НомерКонтракта,
| МАКСИМУМ(Контракты.Период) КАК ДатаНачалаКонтракта,
| Контракты.Приказ КАК Приказ
| ИЗ
| РегистрСведений.Контракты.СрезПоследних(
| ,
| НЕ &ОдинКонтракт
| ИЛИ &ОдинКонтракт
| И ФизЛицо = &Физлицо
| И (НомерКонтракта = &НомерКонтракта
| ИЛИ &ОпределитьНомерКонтракта)) КАК КонтрактыСрезПоследних
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Контракты КАК Контракты
| ПО КонтрактыСрезПоследних.ФизЛицо = Контракты.ФизЛицо
| И КонтрактыСрезПоследних.НомерКонтракта = Контракты.НомерКонтракта
| И (НЕ Контракты.Регистратор ССЫЛКА Документ.ПродлениеКонтрактов)
| И КонтрактыСрезПоследних.Приказ = Контракты.Приказ
| ГДЕ
| КонтрактыСрезПоследних.Контракт = &Контракт
| И (КонтрактыСрезПоследних.ДатаОкончанияКонтракта <= &ДатаПо
| ИЛИ &ДатаПо = &ПустаяДата)
| И (КонтрактыСрезПоследних.ДатаОкончанияКонтракта >= &ДатаС
| ИЛИ &ДатаС = &ПустаяДата)
|
| СГРУППИРОВАТЬ ПО
| КонтрактыСрезПоследних.ФизЛицо,
| КонтрактыСрезПоследних.ДатаОкончанияКонтракта,
| КонтрактыСрезПоследних.НомерКонтракта,
| Контракты.Приказ) КАК ВложенныйЗапрос
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Контракты КАК Контракты
| ПО ВложенныйЗапрос.ФизЛицо = Контракты.ФизЛицо
| И ВложенныйЗапрос.НомерКонтракта = Контракты.НомерКонтракта
| И ВложенныйЗапрос.ДатаНачалаКонтракта = Контракты.Период
| И (НЕ Контракты.Регистратор ССЫЛКА Документ.ПродлениеКонтрактов)
| И ВложенныйЗапрос.Приказ = Контракты.Приказ
|ГДЕ
| ДОБАВИТЬКДАТЕ(ВложенныйЗапрос.ДатаОкончанияКонтракта, ДЕНЬ, 1) < ДОБАВИТЬКДАТЕ(ВложенныйЗапрос.ДатаНачалаКонтракта, ГОД, &МаксимальныйСрокКонтрактаЛет)
| И Контракты.Контракт = &Контракт
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Физлицо,
| РаботникиОрганизацийСрезПоследних.Приказ КАК Приказ,
| МАКСИМУМ(РаботникиОрганизацийСрезПоследних.Регистратор) КАК Регистратор
|ПОМЕСТИТЬ ВТРаботники
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(
| &Дата,
| Физлицо В
| (ВЫБРАТЬ
| ВТКонтрактыНаПродление.ФизЛицо
| ИЗ
| ВТКонтрактыНаПродление КАК ВТКонтрактыНаПродление)) КАК РаботникиОрганизацийСрезПоследних
|ГДЕ
| НЕ РаботникиОрганизацийСрезПоследних.Регистратор ССЫЛКА Документ.УвольнениеСотрудника
|
|СГРУППИРОВАТЬ ПО
| РаботникиОрганизацийСрезПоследних.Физлицо,
| РаботникиОрганизацийСрезПоследних.Приказ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТРаботники.Физлицо КАК Физлицо,
| ВТКонтрактыНаПродление.ДатаОкончанияКонтракта,
| ВТКонтрактыНаПродление.НомерКонтракта,
| ВТКонтрактыНаПродление.ДатаНачалаКонтракта КАК ДатаНачалаКонтракта,
| ВТКонтрактыНаПродление.КонтрактС,
| ВТКонтрактыНаПродление.КонтрактПо,
| ВТКонтрактыНаПродление.КонтрактЛет,
| ВТКонтрактыНаПродление.ДокументЗаключенияКонтракта,
| ВТРаботники.Приказ
|ИЗ
| ВТРаботники КАК ВТРаботники
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТКонтрактыНаПродление КАК ВТКонтрактыНаПродление
| ПО ВТРаботники.Физлицо = ВТКонтрактыНаПродление.ФизЛицо
| И ВТРаботники.Приказ = ВТКонтрактыНаПродление.Приказ
|
|УПОРЯДОЧИТЬ ПО
| ДатаНачалаКонтракта УБЫВ";
Запрос.УстановитьПараметр("Дата", Объект.Дата);
Запрос.УстановитьПараметр("МаксимальныйСрокКонтрактаЛет", мМаксимальныйСрокКонтрактаЛет);
Запрос.УстановитьПараметр("Контракт", Объект.Контракт);
Запрос.УстановитьПараметр("ОпределитьНомерКонтракта", ОпределитьНомерКонтракта);
Запрос.УстановитьПараметр("ПустаяДата", Дата(1,1,1));
Если ТекущаяСтрока = Неопределено Тогда
Запрос.УстановитьПараметр("Физлицо", Справочники.ФизическиеЛица.ПустаяСсылка());
//Запрос.УстановитьПараметр("ДатаНачалаКонтракта", Дата(1,1,1));
Запрос.УстановитьПараметр("НомерКонтракта", "");
Запрос.УстановитьПараметр("ОдинКонтракт", Ложь);
Запрос.УстановитьПараметр("ДатаС", НачалоДня(Объект.ДатаС));
Запрос.УстановитьПараметр("ДатаПо", КонецДня(Объект.ДатаПо));
Иначе
Запрос.УстановитьПараметр("Физлицо", ТекущаяСтрока.ФизЛицо);
//Запрос.УстановитьПараметр("ДатаНачалаКонтракта", ТекущаяСтрока.ДатаНачалаКонтракта);
Запрос.УстановитьПараметр("НомерКонтракта", ТекущаяСтрока.НомерКонтракта);
Запрос.УстановитьПараметр("ОдинКонтракт", Истина);
Запрос.УстановитьПараметр("ДатаС", Дата(1,1,1));
Запрос.УстановитьПараметр("ДатаПо", Дата(1,1,1));
КонецЕсли;
Результат = Запрос.Выполнить();
ТЗ = Результат.Выгрузить();
Возврат ТЗ;
КонецФункции // () |