v3.0.0.2: Добавлен прогрессбар и статус загрузки
This commit is contained in:
@@ -60,7 +60,14 @@
|
|||||||
<DataPath>Объект.ПутьКФайлу</DataPath>
|
<DataPath>Объект.ПутьКФайлу</DataPath>
|
||||||
<Width>80</Width>
|
<Width>80</Width>
|
||||||
</InputField>
|
</InputField>
|
||||||
<InputField name="МесяцЗагрузки" id="23">
|
<ProgressBar name="Прогресс" id="50">
|
||||||
|
<DataPath>Прогресс</DataPath>
|
||||||
|
<Width>100</Width>
|
||||||
|
</ProgressBar>
|
||||||
|
<LabelField name="СтатусЗагрузки" id="51">
|
||||||
|
<DataPath>СтатусЗагрузки</DataPath>
|
||||||
|
</LabelField>
|
||||||
|
<InputField name="МесяцЗагрузки" id="23">
|
||||||
<DataPath>Объект.МесяцЗагрузки</DataPath>
|
<DataPath>Объект.МесяцЗагрузки</DataPath>
|
||||||
<Title>
|
<Title>
|
||||||
<v8:item>
|
<v8:item>
|
||||||
@@ -238,6 +245,22 @@
|
|||||||
</Type>
|
</Type>
|
||||||
<MainAttribute>true</MainAttribute>
|
<MainAttribute>true</MainAttribute>
|
||||||
</Attribute>
|
</Attribute>
|
||||||
|
<Attribute name="Прогресс" id="50">
|
||||||
|
<Type>
|
||||||
|
<v8:Type>Number</v8:Type>
|
||||||
|
</Type>
|
||||||
|
</Attribute>
|
||||||
|
<Attribute name="СтатусЗагрузки" id="51">
|
||||||
|
<Type>
|
||||||
|
<v8:Type>String</v8:Type>
|
||||||
|
</Type>
|
||||||
|
</Attribute>
|
||||||
|
<Attribute name="Объект" id="1">
|
||||||
|
<Type>
|
||||||
|
<v8:Type>cfg:DataProcessorObject.ЗагрузкаДанныхИзExcel</v8:Type>
|
||||||
|
</Type>
|
||||||
|
<MainAttribute
|
||||||
|
</Attribute>
|
||||||
</Attributes>
|
</Attributes>
|
||||||
<Commands>
|
<Commands>
|
||||||
<Command name="ВыбратьФайл" id="1">
|
<Command name="ВыбратьФайл" id="1">
|
||||||
|
|||||||
@@ -25,6 +25,11 @@
|
|||||||
Сообщить("Выберите файл!");
|
Сообщить("Выберите файл!");
|
||||||
Возврат;
|
Возврат;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
Состояние("Инициализация загрузки...");
|
||||||
|
Прогресс = 0;
|
||||||
|
СтатусЗагрузки = "Подготовка...";
|
||||||
|
|
||||||
ПрочитатьExcelНаКлиенте();
|
ПрочитатьExcelНаКлиенте();
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
@@ -44,7 +49,6 @@
|
|||||||
|
|
||||||
&НаКлиенте
|
&НаКлиенте
|
||||||
Функция ПрочитатьЯчейку(Лист, Строка, Колонка, ФИО, ВидДанных)
|
Функция ПрочитатьЯчейку(Лист, Строка, Колонка, ФИО, ВидДанных)
|
||||||
|
|
||||||
Попытка
|
Попытка
|
||||||
Значение = Лист.Cells(Строка, Колонка).Value;
|
Значение = Лист.Cells(Строка, Колонка).Value;
|
||||||
Если Значение = Неопределено ИЛИ Значение = "" Тогда
|
Если Значение = Неопределено ИЛИ Значение = "" Тогда
|
||||||
@@ -52,42 +56,46 @@
|
|||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
Возврат Число(Значение);
|
Возврат Число(Значение);
|
||||||
Исключение
|
Исключение
|
||||||
Сообщить("Ошибка чтения ячейки: " + ФИО + " | " + ВидДанных
|
Сообщить("Ошибка: " + ФИО + " | " + ВидДанных
|
||||||
+ " | строка " + Строка + " колонка " + Колонка
|
+ " | строка " + Строка + " колонка " + Колонка
|
||||||
+ " | значение: """ + Значение + """ | " + ОписаниеОшибки());
|
+ " | значение: """ + Значение + """ | " + ОписаниеОшибки());
|
||||||
Возврат 0;
|
Возврат 0;
|
||||||
КонецПопытки;
|
КонецПопытки;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
&НаКлиенте
|
&НаКлиенте
|
||||||
Функция ПрочитатьСтроку(Лист, Строка, Колонка)
|
Функция ПрочитатьСтроку(Лист, Строка, Колонка)
|
||||||
|
|
||||||
Попытка
|
Попытка
|
||||||
Значение = Лист.Cells(Строка, Колонка).Value;
|
Значение = Лист.Cells(Строка, Колонка).Value;
|
||||||
Если Значение = Неопределено Тогда
|
Если Значение = Неопределено Тогда Возврат ""; КонецЕсли;
|
||||||
Возврат "";
|
|
||||||
КонецЕсли;
|
|
||||||
Возврат СокрЛП("" + Значение);
|
Возврат СокрЛП("" + Значение);
|
||||||
Исключение
|
Исключение
|
||||||
Возврат "";
|
Возврат "";
|
||||||
КонецПопытки;
|
КонецПопытки;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
&НаКлиенте
|
&НаКлиенте
|
||||||
Процедура ПрочитатьExcelНаКлиенте()
|
Процедура ПрочитатьExcelНаКлиенте()
|
||||||
|
|
||||||
Попытка
|
Попытка
|
||||||
|
СтатусЗагрузки = "Копирование файла...";
|
||||||
|
Прогресс = 5;
|
||||||
|
|
||||||
ВременныйФайл = КаталогВременныхФайлов() + "temp_data.xls";
|
ВременныйФайл = КаталогВременныхФайлов() + "temp_data.xls";
|
||||||
КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл);
|
КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл);
|
||||||
|
|
||||||
|
СтатусЗагрузки = "Открытие Excel...";
|
||||||
|
Прогресс = 10;
|
||||||
|
|
||||||
Excel = Новый COMОбъект("Excel.Application");
|
Excel = Новый COMОбъект("Excel.Application");
|
||||||
Excel.Visible = Ложь;
|
Excel.Visible = Ложь;
|
||||||
Excel.DisplayAlerts = Ложь;
|
Excel.DisplayAlerts = Ложь;
|
||||||
|
|
||||||
Книга = Excel.Workbooks.Open(ВременныйФайл);
|
Книга = Excel.Workbooks.Open(ВременныйФайл);
|
||||||
|
|
||||||
|
СтатусЗагрузки = "Поиск листа 'Расчет'...";
|
||||||
|
Прогресс = 15;
|
||||||
|
|
||||||
ЛистРасчет = Неопределено;
|
ЛистРасчет = Неопределено;
|
||||||
Для Каждого Лист Из Книга.Sheets Цикл
|
Для Каждого Лист Из Книга.Sheets Цикл
|
||||||
Если ВРег(Лист.Name) = "РАСЧЕТ" Тогда
|
Если ВРег(Лист.Name) = "РАСЧЕТ" Тогда
|
||||||
@@ -101,29 +109,46 @@
|
|||||||
Книга.Close(Ложь);
|
Книга.Close(Ложь);
|
||||||
Excel.Quit();
|
Excel.Quit();
|
||||||
УдалитьФайлы(ВременныйФайл);
|
УдалитьФайлы(ВременныйФайл);
|
||||||
|
СтатусЗагрузки = "Ошибка: лист не найден";
|
||||||
|
Прогресс = 0;
|
||||||
Возврат;
|
Возврат;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтатусЗагрузки = "Определение месяца...";
|
||||||
|
Прогресс = 20;
|
||||||
|
|
||||||
МесяцЗначение = ЛистРасчет.Cells(4, 1).Value;
|
МесяцЗначение = ЛистРасчет.Cells(4, 1).Value;
|
||||||
Если ЗначениеЗаполнено(МесяцЗначение) Тогда
|
Если ЗначениеЗаполнено(МесяцЗначение) Тогда
|
||||||
Попытка
|
Попытка
|
||||||
Объект.МесяцЗагрузки = Число(МесяцЗначение);
|
Объект.МесяцЗагрузки = Число(МесяцЗначение);
|
||||||
Исключение
|
Исключение
|
||||||
Сообщить("Не удалось определить месяц из ячейки A4: " + МесяцЗначение);
|
Сообщить("Не удалось определить месяц: " + МесяцЗначение);
|
||||||
КонецПопытки;
|
КонецПопытки;
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|
||||||
|
СтатусЗагрузки = "Подсчет строк...";
|
||||||
|
Прогресс = 25;
|
||||||
|
|
||||||
ПоследняяСтрока = ЛистРасчет.Cells(1000, 1).End(-4121).Row;
|
ПоследняяСтрока = ЛистРасчет.Cells(1000, 1).End(-4121).Row;
|
||||||
|
ВсегоСтрок = ПоследняяСтрока - 16;
|
||||||
|
|
||||||
МассивДанных = Новый Массив;
|
МассивДанных = Новый Массив;
|
||||||
МассивВзносов = Новый Массив;
|
МассивВзносов = Новый Массив;
|
||||||
|
|
||||||
|
СтатусЗагрузки = "Чтение данных...";
|
||||||
|
|
||||||
Для Ном = 16 По ПоследняяСтрока Цикл
|
Для Ном = 16 По ПоследняяСтрока Цикл
|
||||||
|
|
||||||
|
// Обновление прогресса
|
||||||
|
Прогресс = 25 + 65 * (Ном - 16) / Макс(ВсегоСтрок, 1);
|
||||||
|
|
||||||
ФИО = ПрочитатьСтроку(ЛистРасчет, Ном, 1);
|
ФИО = ПрочитатьСтроку(ЛистРасчет, Ном, 1);
|
||||||
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
|
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
|
||||||
Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли;
|
Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли;
|
||||||
|
|
||||||
|
// Статус: загрузка расчетов
|
||||||
|
СтатусЗагрузки = "Расчет ЗП: " + ФИО + " (строка " + Ном + "/" + ПоследняяСтрока + ")";
|
||||||
|
|
||||||
Строка = Новый Структура;
|
Строка = Новый Структура;
|
||||||
Строка.Вставить("ФИО", ФИО);
|
Строка.Вставить("ФИО", ФИО);
|
||||||
Строка.Вставить("Должность", ПрочитатьСтроку(ЛистРасчет, Ном, 2));
|
Строка.Вставить("Должность", ПрочитатьСтроку(ЛистРасчет, Ном, 2));
|
||||||
@@ -138,13 +163,15 @@
|
|||||||
Строка.Вставить("ВсегоНаРуки", ПрочитатьЯчейку(ЛистРасчет, Ном, 55, ФИО, "Всего на руки"));
|
Строка.Вставить("ВсегоНаРуки", ПрочитатьЯчейку(ЛистРасчет, Ном, 55, ФИО, "Всего на руки"));
|
||||||
МассивДанных.Добавить(Строка);
|
МассивДанных.Добавить(Строка);
|
||||||
|
|
||||||
СВ = ПрочитатьЯчейку(ЛистРасчет, Ном, 63, ФИО, "Страховые взносы итого");
|
// Страховые взносы
|
||||||
|
СтатусЗагрузки = "Страховые взносы: " + ФИО;
|
||||||
|
СВ = ПрочитатьЯчейку(ЛистРасчет, Ном, 63, ФИО, "СВ итого");
|
||||||
Если СВ > 0 Тогда
|
Если СВ > 0 Тогда
|
||||||
СтрВзносов = Новый Структура;
|
СтрВзносов = Новый Структура;
|
||||||
СтрВзносов.Вставить("ФИО", ФИО);
|
СтрВзносов.Вставить("ФИО", ФИО);
|
||||||
СтрВзносов.Вставить("ДТ6Процент", ПрочитатьЯчейку(ЛистРасчет, Ном, 58, ФИО, "ДТ 6%"));
|
СтрВзносов.Вставить("ДТ6Процент", ПрочитатьЯчейку(ЛистРасчет, Ном, 58, ФИО, "ДТ 6%"));
|
||||||
СтрВзносов.Вставить("ДТ4Процент", ПрочитатьЯчейку(ЛистРасчет, Ном, 59, ФИО, "ДТ 4%"));
|
СтрВзносов.Вставить("ДТ4Процент", ПрочитатьЯчейку(ЛистРасчет, Ном, 59, ФИО, "ДТ 4%"));
|
||||||
СтрВзносов.Вставить("ПФСтраховая", ПрочитатьЯчейку(ЛистРасчет, Ном, 60, ФИО, "ПФ страховая"));
|
СтрВзносов.Вставить("ПФСтраховая", ПрочитатьЯчейку(ЛистРасчет, Ном, 60, ФИО, "ПФ"));
|
||||||
СтрВзносов.Вставить("ФССФОМС", ПрочитатьЯчейку(ЛистРасчет, Ном, 61, ФИО, "ФСС/ФОМС"));
|
СтрВзносов.Вставить("ФССФОМС", ПрочитатьЯчейку(ЛистРасчет, Ном, 61, ФИО, "ФСС/ФОМС"));
|
||||||
СтрВзносов.Вставить("НСПЗ", ПрочитатьЯчейку(ЛистРасчет, Ном, 62, ФИО, "НС и ПЗ"));
|
СтрВзносов.Вставить("НСПЗ", ПрочитатьЯчейку(ЛистРасчет, Ном, 62, ФИО, "НС и ПЗ"));
|
||||||
СтрВзносов.Вставить("Итого", СВ);
|
СтрВзносов.Вставить("Итого", СВ);
|
||||||
@@ -153,16 +180,26 @@
|
|||||||
|
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
|
|
||||||
|
СтатусЗагрузки = "Закрытие Excel...";
|
||||||
|
Прогресс = 95;
|
||||||
|
|
||||||
Книга.Close(Ложь);
|
Книга.Close(Ложь);
|
||||||
Excel.Quit();
|
Excel.Quit();
|
||||||
УдалитьФайлы(ВременныйФайл);
|
УдалитьФайлы(ВременныйФайл);
|
||||||
|
|
||||||
|
СтатусЗагрузки = "Передача данных на сервер...";
|
||||||
|
Прогресс = 98;
|
||||||
|
|
||||||
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов);
|
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов);
|
||||||
|
|
||||||
Сообщить("Загружено сотрудников: " + МассивДанных.Количество());
|
Прогресс = 100;
|
||||||
|
СтатусЗагрузки = "Готово! Загружено: " + МассивДанных.Количество() + " сотрудников";
|
||||||
|
Сообщить(СтатусЗагрузки);
|
||||||
|
|
||||||
Исключение
|
Исключение
|
||||||
Сообщить("Ошибка чтения Excel: " + ОписаниеОшибки());
|
Сообщить("Ошибка чтения Excel: " + ОписаниеОшибки());
|
||||||
|
СтатусЗагрузки = "Ошибка: " + ОписаниеОшибки();
|
||||||
|
Прогресс = 0;
|
||||||
КонецПопытки;
|
КонецПопытки;
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
@@ -177,7 +214,6 @@
|
|||||||
|
|
||||||
&НаСервере
|
&НаСервере
|
||||||
Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов)
|
Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов)
|
||||||
|
|
||||||
ТЗРасчет = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП");
|
ТЗРасчет = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП");
|
||||||
ТЗРасчет.Очистить();
|
ТЗРасчет.Очистить();
|
||||||
Для Каждого Эл Из МассивДанных Цикл
|
Для Каждого Эл Из МассивДанных Цикл
|
||||||
@@ -193,17 +229,14 @@
|
|||||||
ЗаполнитьЗначенияСвойств(Строка, Эл);
|
ЗаполнитьЗначенияСвойств(Строка, Эл);
|
||||||
КонецЦикла;
|
КонецЦикла;
|
||||||
ЗначениеВРеквизитФормы(ТЗВзносы, "Объект.ДанныеСтраховыхВзносов");
|
ЗначениеВРеквизитФормы(ТЗВзносы, "Объект.ДанныеСтраховыхВзносов");
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
&НаСервере
|
&НаСервере
|
||||||
Процедура ЗаписатьДанныеНаСервере()
|
Процедура ЗаписатьДанныеНаСервере()
|
||||||
ГодЗагрузки = ТекущаяДата().Год();
|
ГодЗагрузки = ТекущаяДата().Год();
|
||||||
Период = Дата(ГодЗагрузки, Объект.МесяцЗагрузки, 1);
|
Период = Дата(ГодЗагрузки, Объект.МесяцЗагрузки, 1);
|
||||||
|
|
||||||
ТЗРасчет = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП");
|
ТЗРасчет = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП");
|
||||||
Объект.ЗаписатьДанныеРасчета(ТЗРасчет, Период);
|
Объект.ЗаписатьДанныеРасчета(ТЗРасчет, Период);
|
||||||
|
|
||||||
ТЗВзносы = РеквизитФормыВЗначение("Объект.ДанныеСтраховыхВзносов");
|
ТЗВзносы = РеквизитФормыВЗначение("Объект.ДанныеСтраховыхВзносов");
|
||||||
Если ТЗВзносы.Количество() > 0 Тогда
|
Если ТЗВзносы.Количество() > 0 Тогда
|
||||||
Объект.ЗаписатьДанныеСтраховыхВзносов(ТЗВзносы, Период);
|
Объект.ЗаписатьДанныеСтраховыхВзносов(ТЗВзносы, Период);
|
||||||
|
|||||||
Reference in New Issue
Block a user