Функция загрузки табеля отделена для безопасной отработки выхода по
ошибке
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="f3b01825-0b99-4164-8e92-f4d0535f9033">
|
||||
<name>ПС_Описание</name>
|
||||
<name>ПС_ЗагрузкаДанныхИзExcel_Описание</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Описание</value>
|
||||
@@ -75,7 +75,7 @@
|
||||
<commonModules>CommonModule.КадровыйУчетВызовСервера</commonModules>
|
||||
<commonModules>CommonModule.КадровыйУчетБазовый</commonModules>
|
||||
<commonModules>CommonModule.УчетРабочегоВремениРасширенный</commonModules>
|
||||
<commonModules>CommonModule.ПС_Описание</commonModules>
|
||||
<commonModules>CommonModule.ПС_ЗагрузкаДанныхИзExcel_Описание</commonModules>
|
||||
<commonModules>CommonModule.ПС_КартаДанных</commonModules>
|
||||
<catalogs>Catalog.Организации</catalogs>
|
||||
<catalogs>Catalog.ПодразделенияОрганизаций</catalogs>
|
||||
|
||||
+75
-62
@@ -596,6 +596,42 @@
|
||||
ФайлДанных.Прочитать(ИмяФайла);
|
||||
|
||||
ИначеЕсли Прав(ИмяФайла, 3)="xls" ИЛИ (Прав(ИмяФайла, 4)="xlsx") Тогда
|
||||
Ждать ЗагрузитьДанныеИзФайлаExcel(ИмяФайла);
|
||||
КонецЕсли;
|
||||
КонецЕсли;
|
||||
НайтиРанееЗагруженныйТабель();
|
||||
ОпределитьВидимостьСтраниц();
|
||||
Элементы.ГруппаСтраницы.ТекущаяСтраница = СтраницаФормыПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
ЗаписатьКоличествоСотрудниковПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
//ОбновитьСписокЗагруженныхТабелей();
|
||||
ДанныеИзменены = Истина;
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Процедура ЗакрытьExcel(Excel)
|
||||
Если Excel = Неопределено Тогда
|
||||
Возврат;
|
||||
КонецЕсли;
|
||||
Попытка
|
||||
Если Excel.ActiveWorkbook <> Неопределено Тогда
|
||||
Excel.ActiveWorkbook.Close(False);
|
||||
КонецЕсли;
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
Попытка
|
||||
Excel.Quit();
|
||||
Исключение
|
||||
КонецПопытки;
|
||||
Excel = Неопределено;
|
||||
КонецПроцедуры
|
||||
|
||||
&НаКлиенте
|
||||
Асинх Функция ЗагрузитьДанныеИзФайлаExcel(ИмяФайла)
|
||||
|
||||
Перем Excel;
|
||||
Excel = Неопределено;
|
||||
ИмяФайлаКраткое = Прав(ИмяФайла, СтрДлина(ИмяФайла) - СтрНайти(ИмяФайла, "\", НаправлениеПоиска.СКонца));
|
||||
|
||||
Попытка
|
||||
Excel = Новый COMОбъект("Excel.Application");
|
||||
Excel.WorkBooks.Open(ИмяФайла, 2, True);
|
||||
@@ -605,23 +641,18 @@
|
||||
Исключение
|
||||
Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
|
||||
Сообщить(ОписаниеОшибки());
|
||||
Возврат;
|
||||
ЗакрытьExcel(Excel);
|
||||
Возврат Неопределено;
|
||||
КонецПопытки;
|
||||
|
||||
Попытка
|
||||
//Открываем необходимый лист
|
||||
Excel.Sheets(1).Select();
|
||||
// лист 1, по умолчанию
|
||||
Исключение //Закрываем Excel
|
||||
Excel.ActiveWorkbook.Close();
|
||||
Excel = 0;
|
||||
Сообщить("Файл "+Строка(ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!");
|
||||
|
||||
Возврат;
|
||||
Исключение
|
||||
Сообщить("Файл "+ИмяФайла+" не соответствует необходимому формату! Первый лист не найден!");
|
||||
ЗакрытьExcel(Excel);
|
||||
Возврат Неопределено;
|
||||
КонецПопытки;
|
||||
|
||||
// СтрокаОпределенияФормата = Excel.Cells(10, 1).Text;
|
||||
|
||||
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
Сообщение.Текст = "Определен файл выгрузки данных табеля учета рабочего времени.";
|
||||
Сообщение.Сообщить();
|
||||
@@ -854,11 +885,11 @@
|
||||
ТабличнаяЧасть = ИмяТабличнойЧастиПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
Объект[ТабличнаяЧасть].Очистить();
|
||||
Иначе
|
||||
Возврат
|
||||
ЗакрытьExcel(Excel);
|
||||
Возврат Неопределено;
|
||||
КонецЕсли;
|
||||
|
||||
НомерСтрокиТабеля = 1;
|
||||
//Оценка количества сотрудников
|
||||
МаксимальноеКоличествоСотрудников = 0;
|
||||
Если ПродолжитьЦикл Тогда
|
||||
Состояние("Загрузка файла табеля """ + ИмяФайлаКраткое + """",1,"Оценка размера файла...");
|
||||
@@ -911,7 +942,6 @@
|
||||
Объект.Организация,
|
||||
Объект.КонецПериодаТабеля,
|
||||
ИФ);
|
||||
|
||||
Иначе
|
||||
КоличествоСовместителей = КоличествоСовместителей + 1;
|
||||
КонецЕсли;
|
||||
@@ -938,29 +968,25 @@
|
||||
ТекущаяСтрокаТабличнойЧасти.Сотрудник = Сотрудник;
|
||||
ТекущаяСтрокаТабличнойЧасти.Должность = Должность;
|
||||
|
||||
|
||||
ВремяИтог = СокрЛП(Excel.Cells(НомерТекущейСтроки, Колонка_ВремяИтог).Text);
|
||||
ТекущаяСтрокаТабличнойЧасти.ВремяИтог = ВремяИтог;
|
||||
|
||||
Если ВысотаСтроки = 3 Тогда //Есть ночные
|
||||
Если ВысотаСтроки = 3 Тогда
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти = Объект[ТабличнаяЧасть].Добавить();
|
||||
|
||||
Если ЗначениеЗаполнено(ФИО) Тогда
|
||||
ФИОСотрудника = ФИО;
|
||||
КонецЕсли;
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.ФИОСотрудника = ФИОСотрудника;
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.ТабельныйНомер = ТабельныйНомер;
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.ДолжностьСотрудника = НаименованиеДолжностиСотрудника;
|
||||
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.Сотрудник = Сотрудник;
|
||||
|
||||
ВремяИтог = СокрЛП(Excel.Cells(НомерТекущейСтроки + 1, Колонка_ВремяИтог).Text);
|
||||
НоваяСтрокаНочныхЧасовТабличнойЧасти.ВремяИтог = ВремяИтог;
|
||||
КонецЕсли;
|
||||
Для ЧислоДня = 1 По КонецМесяцаТабеля Цикл // число для отладки
|
||||
|
||||
Для ЧислоДня = 1 По КонецМесяцаТабеля Цикл
|
||||
|
||||
ИмяКолонкиЦифра = "Часов" + ЧислоДня;
|
||||
|
||||
ИмяКолонкиБуква = "Время" + ЧислоДня + "Буква";
|
||||
ИмяКолонкиВидВремени = "ВидВремени" + ЧислоДня;
|
||||
НомерКолонкиФайла = НК+ЧислоДня;
|
||||
@@ -970,7 +996,7 @@
|
||||
КоличествоНочныхЧасов = 0;
|
||||
КоличествоЧасов = 0;
|
||||
НайденоРабочееВремя = Ложь;
|
||||
Если ВысотаСтроки = 3 Тогда //Есть ночные
|
||||
Если ВысотаСтроки = 3 Тогда
|
||||
ТекстЯчейки = ВРег(СокрЛП(Excel.Cells(НомерТекущейСтроки+1, НомерКолонкиФайла).Text));
|
||||
Если (Найти(ТекстЯчейки,"Н") > 0) и (Найти(ТекстЯчейки,"НН") = 0) и
|
||||
(Найти(ТекстЯчейки,"НБ") = 0) и (Найти(ТекстЯчейки,"НОД") = 0) и
|
||||
@@ -984,7 +1010,6 @@
|
||||
Если Найти(ТекстКоличестваНочныхЧасов_2,"Н") = 0 Тогда
|
||||
ТекстКоличестваНочныхЧасов = ТекстКоличестваНочныхЧасов_2;
|
||||
КонецЕсли;
|
||||
|
||||
Если ТекстКоличестваНочныхЧасов = "" Тогда
|
||||
КоличествоНочныхЧасов = 0;
|
||||
Иначе
|
||||
@@ -1016,7 +1041,6 @@
|
||||
Попытка
|
||||
КоличествоЧасов = Число(ТекстКоличестваЧасов);
|
||||
Исключение
|
||||
Сообщение = Новый СообщениеПользователю;
|
||||
СообщениеОбОшибкеВидаВремени = "Ошибка получения часов по табелю. Сотрудник: " + ФИО +
|
||||
". Номер дня: " + Строка(ЧислоДня);
|
||||
ИнформационноеСообщение(СообщениеОбОшибкеВидаВремени,СтатусСообщения.ОченьВажное);
|
||||
@@ -1027,54 +1051,54 @@
|
||||
|
||||
Если ТекстЯчейки = "" Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениВыходныеДни();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Ф") = 1 Тогда //Явка
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Ф") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениЯвка();
|
||||
НайденоРабочееВремя = Истина;
|
||||
ИначеЕсли Найти(ТекстЯчейки,"С") = 1 Тогда //Сверхурочные
|
||||
ИначеЕсли Найти(ТекстЯчейки,"С") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениСверхурочные();
|
||||
НайденоРабочееВремя = Истина;
|
||||
ИначеЕсли Найти(ТекстЯчейки,"РП") = 1 Тогда //Праздничные и выходные
|
||||
ИначеЕсли Найти(ТекстЯчейки,"РП") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениПраздники();
|
||||
НайденоРабочееВремя = Истина;
|
||||
ИначеЕсли Найти(ТекстЯчейки,"В") = 1 Тогда //Выходные и праздничные дни
|
||||
ИначеЕсли Найти(ТекстЯчейки,"В") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениВыходныеДни();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"К") = 1 Тогда //Больничный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"К") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениКомандировка();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Б") = 1 Тогда //Больничный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Б") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениБолезнь();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Р") = 1 Тогда //Отпуск по беременности и родам
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Р") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтпускПоБеременностиИРодам();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОР") = 1 Тогда //Отпуск по уходу за ребенком
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОР") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтпускПоУходуЗаРебенком();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"П") = 1 Тогда //Прогул
|
||||
ИначеЕсли Найти(ТекстЯчейки,"П") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениПрогулы();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"А") = 1 Тогда //Прогул
|
||||
ИначеЕсли Найти(ТекстЯчейки,"А") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"О") = 1 Тогда //Отпуск основной
|
||||
ИначеЕсли Найти(ТекстЯчейки,"О") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОсновнойОтпуск();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОД") = 1 Тогда //Отпуск дополнительный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОД") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныйОтпуск();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОУ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОУ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтпускНаОбучение();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ВУ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ВУ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НН") = 1 Тогда //Неявки по невыясненным причинам
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НН") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениНеявкиПоНевыясненнымПричинам();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОЗ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОЗ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениНеоплачиваемыйОтпускПоРазрешениюРаботодателя();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОВ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ОВ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НБ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НБ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтстранениеОтРаботыБезОплаты();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НОД") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НОД") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ДВ") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"ДВ") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Д") = 1 Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"Д") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениДополнительныеВыходныеДниОплачиваемые();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НА") = 1 Тогда //Неявка из-за ареста (Неявки по невыясненным причинам)
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НА") = 1 Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениНеявкиПоНевыясненнымПричинам();
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НО") = 1 и (Найти(ТекстЯчейки,"НОД") = 0) Тогда //Отпуск учебный
|
||||
ИначеЕсли Найти(ТекстЯчейки,"НО") = 1 и (Найти(ТекстЯчейки,"НОД") = 0) Тогда
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиВидВремени] = ВидВремениОтстранениеОтРаботыСОплатой();
|
||||
КонецЕсли;
|
||||
ТекущаяСтрокаТабличнойЧасти[ИмяКолонкиЦифра] = КоличествоЧасов;
|
||||
@@ -1095,26 +1119,15 @@
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
КонецЕсли;
|
||||
Объект.Комментарий = "Загружено " + Строка(ТекущаяДата()) +
|
||||
" по данным файлов: """ + ИмяФайлаСГЗ + """, """ + ИмяФайлаПД + """, """ + ИмяФайлаСГЗ + """";
|
||||
|
||||
НомерСтрокиТабеля = 100001;
|
||||
НомерТекущейСтрокиТабличнойЧасти = 100001;
|
||||
|
||||
Excel.WorkBooks.Close();
|
||||
//ЗаполнитьТабличнуюЧасть();
|
||||
//ОчисткаЗначенийРекрвизитовФормы()
|
||||
//ЭтаОбработка = РеквизитФормыВЗначение("Объект");
|
||||
//Объект.Табель.Очистить();
|
||||
КонецЕсли;
|
||||
НайтиРанееЗагруженныйТабель();
|
||||
ОпределитьВидимостьСтраниц();
|
||||
Элементы.ГруппаСтраницы.ТекущаяСтраница = СтраницаФормыПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
ЗаписатьКоличествоСотрудниковПоСтатьеФинансирования(ТекущаяСтатьяФинансирования);
|
||||
//ОбновитьСписокЗагруженныхТабелей();
|
||||
ДанныеИзменены = Истина;
|
||||
КонецПроцедуры
|
||||
ЗакрытьExcel(Excel);
|
||||
Возврат ТекущаяСтатьяФинансирования;
|
||||
КонецФункции
|
||||
|
||||
&НаСервере
|
||||
Процедура НайтиРанееЗагруженныйТабель()
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@
|
||||
//
|
||||
// Общие модули:
|
||||
// ПС_РаботаСНастройками — программный интерфейс (Сервер)
|
||||
// ПС_Описание — настоящий модуль документации
|
||||
// ПС_ПериодическиеНастройки_Описание — настоящий модуль документации
|
||||
//
|
||||
// ПРИНЦИП ЗАПИСИ БЕЗ УКАЗАНИЯ ПЕРИОДА
|
||||
//
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="6d9ceeed-89b2-436f-8698-d7314fff223f">
|
||||
<name>ПС_Описание</name>
|
||||
<name>ПС_ПериодическиеНастройки_Описание</name>
|
||||
<synonym>
|
||||
<key>ru</key>
|
||||
<value>Описание</value>
|
||||
@@ -46,7 +46,7 @@
|
||||
</languages>
|
||||
<roles>Role.ПС_ЗаписьНастроек</roles>
|
||||
<roles>Role.ПС_ЧтениеНастроек</roles>
|
||||
<commonModules>CommonModule.ПС_Описание</commonModules>
|
||||
<commonModules>CommonModule.ПС_ПериодическиеНастройки_Описание</commonModules>
|
||||
<commonModules>CommonModule.ПС_РаботаСНастройками</commonModules>
|
||||
<definedTypes>DefinedType.ПС_ТипыЗначенийНастроек</definedTypes>
|
||||
<catalogs>Catalog.Пользователи</catalogs>
|
||||
|
||||
Reference in New Issue
Block a user