MVP для отображения уже загруженных табелей
This commit is contained in:
+346
-8
@@ -232,14 +232,14 @@
|
||||
&НаКлиенте
|
||||
Функция СтраницаФормыПоСтатьеФинансирования(АнализируемаяСтатьяФинансирования)
|
||||
Если АнализируемаяСтатьяФинансирования = СтатьяФинансированияСГЗ Тогда
|
||||
Возврат Элементы.ГруппаСтраницаТабельСГЗ
|
||||
Возврат Элементы.ГруппаСтраницаТабельСГЗ;
|
||||
ИначеЕсли АнализируемаяСтатьяФинансирования = СтатьяФинансированияПД Тогда
|
||||
Возврат Элементы.ГруппаСтраницаТабельПД
|
||||
Возврат Элементы.ГруппаСтраницаТабельПД;
|
||||
ИначеЕсли АнализируемаяСтатьяФинансирования = СтатьяФинансированияОМС Тогда
|
||||
Возврат Элементы.ГруппаСтраницаТабельОМС
|
||||
КонецЕсли;
|
||||
Возврат "";
|
||||
КонецФункции // ИмяТабличнойЧастиПоИсточникуФинансировани я()
|
||||
Возврат Элементы.ГруппаСтраницаТабельОМС;
|
||||
КонецЕсли;
|
||||
Возврат Элементы.ГруппаСтраницаТабельСГЗ;
|
||||
КонецФункции
|
||||
|
||||
&НаКлиенте
|
||||
Функция ЗаписатьКоличествоСотрудниковПоСтатьеФинансирования(АнализируемаяСтатьяФинансирования)
|
||||
@@ -573,6 +573,9 @@
|
||||
|
||||
&НаКлиенте
|
||||
Асинх Процедура КомандаОткрыть(Команда)
|
||||
// Перед открытием файла очищаем форму от данных предыдущей загрузки,
|
||||
// чтобы при ошибке формата Excel пользователь увидел чистую форму.
|
||||
НачатьСначала(Неопределено);
|
||||
//Если ЗначениеЗаполнено(Объект.ДатаЗагрузки) Тогда
|
||||
Режим = РежимДиалогаВыбораФайла.Открытие;
|
||||
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
|
||||
@@ -3549,12 +3552,346 @@
|
||||
ИЛИ Объект.ТабличнаяЧастьОМС.Количество() > 0;
|
||||
КонецФункции
|
||||
|
||||
// Заглушка Прохода А. Полная реализация заполнения ТЧ будет в Проходе Б.
|
||||
// Проход Б: полная обратная загрузка данных табеля в табличные части формы.
|
||||
&НаКлиенте
|
||||
Асинх Процедура ЗагрузитьДанныеТабеляВФорму(СсылкаНаТабель)
|
||||
Ждать ОткрытьЗначениеАсинх(СсылкаНаТабель);
|
||||
Ждать ЗаполнитьТабличныеЧастиИзТабеляНаСервере(СсылкаНаТабель);
|
||||
|
||||
ОпределитьВидимостьСтраниц();
|
||||
|
||||
Если Объект.ТабличнаяЧастьСГЗ.Количество() > 0 Тогда
|
||||
ТекущаяСтатьяФинансирования = СтатьяФинансированияСГЗ;
|
||||
ИначеЕсли Объект.ТабличнаяЧастьПД.Количество() > 0 Тогда
|
||||
ТекущаяСтатьяФинансирования = СтатьяФинансированияПД;
|
||||
ИначеЕсли Объект.ТабличнаяЧастьОМС.Количество() > 0 Тогда
|
||||
ТекущаяСтатьяФинансирования = СтатьяФинансированияОМС;
|
||||
КонецЕсли;
|
||||
|
||||
Элементы.ГруппаСтраницы.ТекущаяСтраница = СтраницаФормыПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
КонецПроцедуры
|
||||
|
||||
&НаСервере
|
||||
Функция ЗаполнитьТабличныеЧастиИзТабеляНаСервере(СсылкаНаТабель)
|
||||
Если НЕ ЗначениеЗаполнено(СсылкаНаТабель) Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
ТабельОбъект = СсылкаНаТабель.ПолучитьОбъект();
|
||||
Если ТабельОбъект = Неопределено Тогда
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
// Формируем выборку по (Сотрудник, Финансирование, День).
|
||||
ДанныеПоСотрудникам = Новый Соответствие;
|
||||
|
||||
Для Каждого СтрокаТЧ Из ТабельОбъект.ДанныеОВремени Цикл
|
||||
Если НЕ ЗначениеЗаполнено(СтрокаТЧ.Сотрудник) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
ВидВремени = СтрокаТЧ["ВидВремени" + НомерДня];
|
||||
Если НЕ ЗначениеЗаполнено(ВидВремени) Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
Часы = СтрокаТЧ["Часов" + НомерДня];
|
||||
|
||||
Финансирование = ФинансированиеПоВидуВремени(ВидВремени);
|
||||
Если Финансирование = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Сотрудники = ДанныеПоСотрудникам[СтрокаТЧ.Сотрудник];
|
||||
Если Сотрудники = Неопределено Тогда
|
||||
Сотрудники = Новый Соответствие;
|
||||
ДанныеПоСотрудникам.Вставить(СтрокаТЧ.Сотрудник, Сотрудники);
|
||||
КонецЕсли;
|
||||
ПоФинансированию = Сотрудники[Финансирование];
|
||||
Если ПоФинансированию = Неопределено Тогда
|
||||
ПоФинансированию = Новый Соответствие;
|
||||
Сотрудники.Вставить(Финансирование, ПоФинансированию);
|
||||
КонецЕсли;
|
||||
ПоДню = ПоФинансированию[НомерДня];
|
||||
Если ПоДню = Неопределено Тогда
|
||||
ПоДню = Новый Массив;
|
||||
ПоФинансированию.Вставить(НомерДня, ПоДню);
|
||||
КонецЕсли;
|
||||
ЗаписьДня = Новый Структура("ВидВремени, Часы", ВидВремени, Часы);
|
||||
ПоДню.Добавить(ЗаписьДня);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
||||
// Прямо заполняем ТЧ объекта обработки.
|
||||
Объект.ТабличнаяЧастьСГЗ.Очистить();
|
||||
Объект.ТабличнаяЧастьПД.Очистить();
|
||||
Объект.ТабличнаяЧастьОМС.Очистить();
|
||||
|
||||
Для Каждого КЗ_Сотрудник Из ДанныеПоСотрудникам Цикл
|
||||
Сотрудник = КЗ_Сотрудник.Ключ;
|
||||
ДанныеСотрудника = КЗ_Сотрудник.Значение;
|
||||
|
||||
Для Каждого КЗ_Фин Из ДанныеСотрудника Цикл
|
||||
Финансирование = КЗ_Фин.Ключ;
|
||||
ДанныеПоДням = КЗ_Фин.Значение;
|
||||
|
||||
ТЧ = Объект["ТабличнаяЧасть" + Финансирование];
|
||||
|
||||
СтрокаОсновная = ТЧ.Добавить();
|
||||
СтрокаОсновная.Сотрудник = Сотрудник;
|
||||
СтрокаОсновная.ТабельныйНомер = Сотрудник.Код;
|
||||
|
||||
СтрокаНочные = ТЧ.Добавить();
|
||||
СтрокаНочные.Сотрудник = Сотрудник;
|
||||
СтрокаНочные.ТабельныйНомер = Сотрудник.Код;
|
||||
|
||||
СтрокаСверхурочные = ТЧ.Добавить();
|
||||
СтрокаСверхурочные.Сотрудник = Сотрудник;
|
||||
СтрокаСверхурочные.ТабельныйНомер = Сотрудник.Код;
|
||||
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
ЗаписиДня = ДанныеПоДням[НомерДня];
|
||||
Если ЗаписиДня = Неопределено Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
Классификация = КлассифицироватьДень(ЗаписиДня);
|
||||
|
||||
Если Классификация.Основная <> Неопределено Тогда
|
||||
СтрокаОсновная["Часов" + НомерДня] = Классификация.Основная.Часы;
|
||||
СтрокаОсновная["Время" + НомерДня + "Буква"] = Классификация.Основная.Буква;
|
||||
СтрокаОсновная["ВидВремени" + НомерДня] = Классификация.Основная.ВидВремени;
|
||||
КонецЕсли;
|
||||
|
||||
Если Классификация.Ночные <> Неопределено Тогда
|
||||
СтрокаНочные["Часов" + НомерДня] = Классификация.Ночные.Часы;
|
||||
СтрокаНочные["Время" + НомерДня + "Буква"] = Классификация.Ночные.Буква;
|
||||
СтрокаНочные["ВидВремени" + НомерДня] = Классификация.Ночные.ВидВремени;
|
||||
КонецЕсли;
|
||||
|
||||
Если Классификация.Сверхурочные <> Неопределено Тогда
|
||||
СтрокаСверхурочные["Часов" + НомерДня] = Классификация.Сверхурочные.Часы;
|
||||
СтрокаСверхурочные["Время" + НомерДня + "Буква"] = Классификация.Сверхурочные.Буква;
|
||||
СтрокаСверхурочные["ВидВремени" + НомерДня] = Классификация.Сверхурочные.ВидВремени;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если СтрокаПустаяПоЧасам(СтрокаНочные) Тогда
|
||||
ТЧ.Удалить(СтрокаНочные);
|
||||
Иначе
|
||||
СтрокаНочные.ВремяИтог = РассчитатьВремяИтог(СтрокаНочные);
|
||||
КонецЕсли;
|
||||
|
||||
Если СтрокаПустаяПоЧасам(СтрокаСверхурочные) Тогда
|
||||
ТЧ.Удалить(СтрокаСверхурочные);
|
||||
Иначе
|
||||
СтрокаСверхурочные.ВремяИтог = РассчитатьВремяИтог(СтрокаСверхурочные);
|
||||
КонецЕсли;
|
||||
|
||||
СтрокаОсновная.ВремяИтог = РассчитатьВремяИтог(СтрокаОсновная);
|
||||
КонецЦикла;
|
||||
КонецЦикла;
|
||||
|
||||
Возврат Неопределено;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ФинансированиеПоВидуВремени(ВидВремени)
|
||||
Если ВидВремени = ВидВремениЯвкаСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ Тогда
|
||||
Возврат "СГЗ";
|
||||
ИначеЕсли ВидВремени = ВидВремениЯвкаПД
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыПД
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиПД
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыПД
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеПД
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыПД Тогда
|
||||
Возврат "ПД";
|
||||
ИначеЕсли ВидВремени = ВидВремениЯвкаОМС
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыОМС
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиОМС
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыОМС
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеОМС
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыОМС Тогда
|
||||
Возврат "ОМС";
|
||||
Иначе
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция КлассифицироватьДень(ЗаписиДня)
|
||||
Результат = Новый Структура("Основная, Ночные, Сверхурочные", Неопределено, Неопределено, Неопределено);
|
||||
|
||||
ЧасыПраздничных = 0;
|
||||
ЧасыЯвки = 0;
|
||||
ЧасыНочных = 0;
|
||||
ЧасыСверхурочных = 0;
|
||||
ВидВремениПраздничных = Неопределено;
|
||||
ВидВремениЯвки = Неопределено;
|
||||
ВидВремениНочных = Неопределено;
|
||||
ВидВремениСверхурочных = Неопределено;
|
||||
ПервыйНеденежный = Неопределено;
|
||||
|
||||
Для Каждого Запись Из ЗаписиДня Цикл
|
||||
ВидВремени = Запись.ВидВремени;
|
||||
Часы = Запись.Часы;
|
||||
|
||||
Если ВидВремениЯвкаПринадлежитФинансированию(ВидВремени) Тогда
|
||||
ЧасыЯвки = ЧасыЯвки + Часы;
|
||||
Если ВидВремениЯвки = Неопределено Тогда
|
||||
ВидВремениЯвки = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениПраздникиПринадлежит(ВидВремени) Тогда
|
||||
ЧасыПраздничных = ЧасыПраздничных + Часы;
|
||||
Если ВидВремениПраздничных = Неопределено Тогда
|
||||
ВидВремениПраздничных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениНочныеПринадлежит(ВидВремени) Тогда
|
||||
ЧасыНочных = ЧасыНочных + Часы;
|
||||
Если ВидВремениНочных = Неопределено Тогда
|
||||
ВидВремениНочных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ВидВремениСверхурочныеПринадлежит(ВидВремени) Тогда
|
||||
ЧасыСверхурочных = ЧасыСверхурочных + Часы;
|
||||
Если ВидВремениСверхурочных = Неопределено Тогда
|
||||
ВидВремениСверхурочных = ВидВремени;
|
||||
КонецЕсли;
|
||||
ИначеЕсли ПервыйНеденежный = Неопределено Тогда
|
||||
ПервыйНеденежный = Новый Структура("Часы, Буква, ВидВремени", Часы, БукваПоВидуВремени(ВидВремени), ВидВремени);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Если ЧасыПраздничных > 0 Тогда
|
||||
Результат.Основная = Новый Структура("Часы, Буква, ВидВремени", ЧасыПраздничных, "РП", ВидВремениПраздничных);
|
||||
ИначеЕсли ЧасыЯвки > 0 Тогда
|
||||
Результат.Основная = Новый Структура("Часы, Буква, ВидВремени", ЧасыЯвки, "Ф", ВидВремениЯвки);
|
||||
ИначеЕсли ПервыйНеденежный <> Неопределено Тогда
|
||||
Результат.Основная = ПервыйНеденежный;
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧасыНочных > 0 Тогда
|
||||
Результат.Ночные = Новый Структура("Часы, Буква, ВидВремени", ЧасыНочных, "Н", ВидВремениНочных);
|
||||
КонецЕсли;
|
||||
|
||||
Если ЧасыСверхурочных > 0 Тогда
|
||||
Результат.Сверхурочные = Новый Структура("Часы, Буква, ВидВремени", ЧасыСверхурочных, "С", ВидВремениСверхурочных);
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция СтрокаПустаяПоЧасам(СтрокаТЧ)
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
Если СтрокаТЧ["Часов" + НомерДня] > 0 Тогда
|
||||
Возврат Ложь;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
Возврат Истина;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ВидВремениЯвкаПринадлежитФинансированию(ВидВремени)
|
||||
Возврат ВидВремени = ВидВремениЯвкаСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениЯвкаПД
|
||||
ИЛИ ВидВремени = ВидВремениЯвкаОМС;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ВидВремениПраздникиПринадлежит(ВидВремени)
|
||||
Возврат ВидВремени = ВидВремениПраздникиСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиПД
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиОМС
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыПД
|
||||
ИЛИ ВидВремени = ВидВремениПраздникиБезПовышеннойОплатыОМС;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ВидВремениНочныеПринадлежит(ВидВремени)
|
||||
Возврат ВидВремени = ВидВремениРаботаНочныеЧасыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыПД
|
||||
ИЛИ ВидВремени = ВидВремениРаботаНочныеЧасыОМС;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция ВидВремениСверхурочныеПринадлежит(ВидВремени)
|
||||
Возврат ВидВремени = ВидВремениСверхурочныеСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеПД
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеОМС
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыСГЗ
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыПД
|
||||
ИЛИ ВидВремени = ВидВремениСверхурочныеБезПовышеннойОплатыОМС
|
||||
ИЛИ ВидВремени = ВидВремениКормлениеРебенка()
|
||||
ИЛИ ВидВремени = ВидВремениПовышениеКвалификации();
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция БукваПоВидуВремени(ВидВремени)
|
||||
Если ВидВремени = ВидВремениБолезнь() Тогда
|
||||
Возврат "Б";
|
||||
ИначеЕсли ВидВремени = ВидВремениВыходныеДни() Тогда
|
||||
Возврат "В";
|
||||
ИначеЕсли ВидВремени = ВидВремениОсновнойОтпуск() Тогда
|
||||
Возврат "О";
|
||||
ИначеЕсли ВидВремени = ВидВремениДополнительныйОтпуск() Тогда
|
||||
Возврат "ОД";
|
||||
ИначеЕсли ВидВремени = ВидВремениКомандировка() Тогда
|
||||
Возврат "К";
|
||||
ИначеЕсли ВидВремени = ВидВремениПрогулы() Тогда
|
||||
Возврат "П";
|
||||
ИначеЕсли ВидВремени = ВидВремениНеявкиПоНевыясненнымПричинам() Тогда
|
||||
Возврат "НН";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускНаОбучение() Тогда
|
||||
Возврат "ОУ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускПоБеременностиИРодам() Тогда
|
||||
Возврат "Р";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтпускПоУходуЗаРебенком() Тогда
|
||||
Возврат "ОР";
|
||||
ИначеЕсли ВидВремени = ВидВремениНеоплачиваемыйОтпускПоРазрешениюРаботодателя() Тогда
|
||||
Возврат "ОЗ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтстранениеОтРаботыБезОплаты() Тогда
|
||||
Возврат "НБ";
|
||||
ИначеЕсли ВидВремени = ВидВремениОтстранениеОтРаботыСОплатой() Тогда
|
||||
Возврат "НО";
|
||||
Иначе
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Функция РассчитатьВремяИтог(СтрокаТЧ)
|
||||
ГруппировкаЧасов = Новый Соответствие;
|
||||
Для НомерДня = 1 По 31 Цикл
|
||||
Часы = СтрокаТЧ["Часов" + НомерДня];
|
||||
Если Часы = 0 Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
Буква = СтрокаТЧ["Время" + НомерДня + "Буква"];
|
||||
Если Буква = "" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
ТекущаяСумма = ГруппировкаЧасов[Буква];
|
||||
Если ТекущаяСумма = Неопределено Тогда
|
||||
ТекущаяСумма = 0;
|
||||
КонецЕсли;
|
||||
ГруппировкаЧасов.Вставить(Буква, ТекущаяСумма + Часы);
|
||||
КонецЦикла;
|
||||
|
||||
Результат = "";
|
||||
Для Каждого КЗ Из ГруппировкаЧасов Цикл
|
||||
Если Результат <> "" Тогда
|
||||
Результат = Результат + ", ";
|
||||
КонецЕсли;
|
||||
Результат = Результат + КЗ.Ключ + " " + Формат(КЗ.Значение, "ЧРД=.; ЧГ=");
|
||||
КонецЦикла;
|
||||
Возврат Результат;
|
||||
КонецФункции
|
||||
|
||||
// Серверная обёртка для вызова с клиента без контекста формы.
|
||||
&НаСервереБезКонтекста
|
||||
Функция НайтиСсылкуНаТабельНаСервере(Организация, Подразделение, НаименованиеПодразделения, ПериодРегистрации)
|
||||
@@ -3611,3 +3948,4 @@
|
||||
Возврат Выборка.ТабельУчетаРабочегоВремени;
|
||||
КонецФункции
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user