diff --git a/CommonPictures/Логотип/Ext/Picture/Picture.zip b/CommonPictures/Логотип/Ext/Picture/Picture.zip
index f415bc4..497c576 100755
Binary files a/CommonPictures/Логотип/Ext/Picture/Picture.zip and b/CommonPictures/Логотип/Ext/Picture/Picture.zip differ
diff --git a/Configuration.xml b/Configuration.xml
index a0a194c..d2ade78 100755
--- a/Configuration.xml
+++ b/Configuration.xml
@@ -60,7 +60,7 @@
Russian
Language.Русский
ООО "Профи-Софт", код партнера 42575-13, г.Байконур.
- 3.0.0.2
+ 3.0.0.4
Language.Русский
diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml
index b56d55c..5338746 100644
--- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml
+++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml
@@ -153,6 +153,46 @@
15
+
+ ИНН
+
+
+ ru
+ ИНН
+
+
+ 15
+
+
+ СНИЛС
+
+
+ ru
+ СНИЛС
+
+
+ 18
+
+
+ Паспорт
+
+
+ ru
+ Паспорт
+
+
+ 30
+
+
+ Адрес
+
+
+ ru
+ Адрес
+
+
+ 35
+
@@ -255,12 +295,6 @@
String
-
-
- cfg:DataProcessorObject.ЗагрузкаДанныхИзExcel
-
-
diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
index 93f6394..4bcb229 100644
--- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
+++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
@@ -26,7 +26,7 @@
Возврат;
КонецЕсли;
- Состояние("Инициализация загрузки...");
+ Состояние("Инициализация загрузки...", 0);
Прогресс = 0;
СтатусЗагрузки = "Подготовка...";
@@ -74,18 +74,28 @@
КонецПопытки;
КонецФункции
+&НаКлиенте
+Функция ИзвлечьЗначениеИзТекста(Текст, Префикс)
+ Если Не ЗначениеЗаполнено(Текст) Тогда Возврат ""; КонецЕсли;
+ Позиция = СтрНайти(ВРег(Текст), ВРег(Префикс));
+ Если Позиция = 0 Тогда Возврат СокрЛП(Текст); КонецЕсли;
+ Возврат СокрЛП(Сред(Текст, Позиция + СтрДлина(Префикс)));
+КонецФункции
+
&НаКлиенте
Процедура ПрочитатьExcelНаКлиенте()
Попытка
СтатусЗагрузки = "Копирование файла...";
Прогресс = 5;
+ Состояние("Копирование файла...", 5);
ВременныйФайл = КаталогВременныхФайлов() + "temp_data.xls";
КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл);
СтатусЗагрузки = "Открытие Excel...";
Прогресс = 10;
+ Состояние("Открытие Excel...", 10);
Excel = Новый COMОбъект("Excel.Application");
Excel.Visible = Ложь;
@@ -95,6 +105,7 @@
СтатусЗагрузки = "Поиск листа 'Расчет'...";
Прогресс = 15;
+ Состояние("Поиск листа 'Расчет'...", 15);
ЛистРасчет = Неопределено;
Для Каждого Лист Из Книга.Sheets Цикл
@@ -110,12 +121,14 @@
Excel.Quit();
УдалитьФайлы(ВременныйФайл);
СтатусЗагрузки = "Ошибка: лист не найден";
+ Состояние("Ошибка: лист 'Расчет' не найден", 0);
Прогресс = 0;
Возврат;
КонецЕсли;
СтатусЗагрузки = "Определение месяца...";
Прогресс = 20;
+ Состояние("Определение месяца...", 20);
МесяцЗначение = ЛистРасчет.Cells(4, 1).Value;
Если ЗначениеЗаполнено(МесяцЗначение) Тогда
@@ -128,26 +141,39 @@
СтатусЗагрузки = "Подсчет строк...";
Прогресс = 25;
-
- ПоследняяСтрока = ЛистРасчет.Cells(1000, 1).End(-4121).Row;
- ВсегоСтрок = ПоследняяСтрока - 16;
+ Состояние("Подсчет строк...", 25);
МассивДанных = Новый Массив;
МассивВзносов = Новый Массив;
СтатусЗагрузки = "Чтение данных...";
- Для Ном = 16 По ПоследняяСтрока Цикл
-
- // Обновление прогресса
- Прогресс = 25 + 65 * (Ном - 16) / Макс(ВсегоСтрок, 1);
+ ПустыхПодряд = 0;
+ МаксПустых = 5;
+ Ном = 16;
+
+ Пока Истина Цикл
ФИО = ПрочитатьСтроку(ЛистРасчет, Ном, 1);
- Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
- Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли;
+
+ Если Не ЗначениеЗаполнено(ФИО) Тогда
+ ПустыхПодряд = ПустыхПодряд + 1;
+ Если ПустыхПодряд >= МаксПустых Тогда
+ Прервать;
+ КонецЕсли;
+ Ном = Ном + 1;
+ Продолжить;
+ КонецЕсли;
+
+ ПустыхПодряд = 0;
+
+ Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда
+ Прервать;
+ КонецЕсли;
// Статус: загрузка расчетов
- СтатусЗагрузки = "Расчет ЗП: " + ФИО + " (строка " + Ном + "/" + ПоследняяСтрока + ")";
+ СтатусЗагрузки = "Расчет ЗП: " + ФИО + " (строка " + Ном + ")";
+ Состояние("Расчет ЗП: " + ФИО, 25 + 65 * (Ном - 16) / Макс(Ном, 1));
Строка = Новый Структура;
Строка.Вставить("ФИО", ФИО);
@@ -156,11 +182,33 @@
Строка.Вставить("ВидЗанятости", ПрочитатьСтроку(ЛистРасчет, Ном, 4));
Строка.Вставить("Оклад", ПрочитатьЯчейку(ЛистРасчет, Ном, 8, ФИО, "Оклад"));
Строка.Вставить("КоличествоСтавок", ПрочитатьЯчейку(ЛистРасчет, Ном, 7, ФИО, "Кол-во ставок"));
- Строка.Вставить("ОтработаноДней", ПрочитатьЯчейку(ЛистРасчет, Ном, 6, ФИО, "Отработано дней"));
+ Строка.Вставить("ОтработаноДней", ПрочитатьЯчейку(ЛистРасчет, Ном, 6, ФИО, "ОтработаноДней"));
Строка.Вставить("ИтогоНачислено", ПрочитатьЯчейку(ЛистРасчет, Ном, 39, ФИО, "Итого начислено"));
Строка.Вставить("НДФЛ", ПрочитатьЯчейку(ЛистРасчет, Ном, 40, ФИО, "НДФЛ"));
Строка.Вставить("ИтогоУдержано", ПрочитатьЯчейку(ЛистРасчет, Ном, 53, ФИО, "Итого удержано"));
Строка.Вставить("ВсегоНаРуки", ПрочитатьЯчейку(ЛистРасчет, Ном, 55, ФИО, "Всего на руки"));
+
+ // Чтение личных данных из листа сотрудника
+ ЛистСотрудника = Неопределено;
+ Для Каждого Лист Из Книга.Sheets Цикл
+ Если ВРег(Лист.Name) = ВРег(ФИО) Тогда
+ ЛистСотрудника = Лист;
+ Прервать;
+ КонецЕсли;
+ КонецЦикла;
+
+ Если ЛистСотрудника <> Неопределено Тогда
+ Строка.Вставить("ИНН", ИзвлечьЗначениеИзТекста(ПрочитатьСтроку(ЛистСотрудника, 0, 10), "ИНН"));
+ Строка.Вставить("СНИЛС", ИзвлечьЗначениеИзТекста(ПрочитатьСтроку(ЛистСотрудника, 1, 10), "СНИЛС"));
+ Строка.Вставить("Паспорт", ИзвлечьЗначениеИзТекста(ПрочитатьСтроку(ЛистСотрудника, 2, 10), "Паспорт"));
+ Строка.Вставить("Адрес", ПрочитатьСтроку(ЛистСотрудника, 3, 10));
+ Иначе
+ Строка.Вставить("ИНН", "");
+ Строка.Вставить("СНИЛС", "");
+ Строка.Вставить("Паспорт", "");
+ Строка.Вставить("Адрес", "");
+ КонецЕсли;
+
МассивДанных.Добавить(Строка);
// Страховые взносы
@@ -178,10 +226,13 @@
МассивВзносов.Добавить(СтрВзносов);
КонецЕсли;
+ Ном = Ном + 1;
+
КонецЦикла;
СтатусЗагрузки = "Закрытие Excel...";
Прогресс = 95;
+ Состояние("Закрытие Excel...", 95);
Книга.Close(Ложь);
Excel.Quit();
@@ -189,16 +240,23 @@
СтатусЗагрузки = "Передача данных на сервер...";
Прогресс = 98;
+ Состояние("Передача данных на сервер...", 98);
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов);
+ // Обновление табличных частей на форме
+ Элементы.ТаблицаРасчетЗП.ОбновитьСтроки();
+ Элементы.ТаблицаСтраховыеВзносы.ОбновитьСтроки();
+
Прогресс = 100;
СтатусЗагрузки = "Готово! Загружено: " + МассивДанных.Количество() + " сотрудников";
+ Состояние("Готово! Загружено: " + МассивДанных.Количество() + " сотрудников", 100);
Сообщить(СтатусЗагрузки);
Исключение
Сообщить("Ошибка чтения Excel: " + ОписаниеОшибки());
СтатусЗагрузки = "Ошибка: " + ОписаниеОшибки();
+ Состояние("Ошибка: " + ОписаниеОшибки(), 0);
Прогресс = 0;
КонецПопытки;
diff --git a/Ext/Logo.xml b/Ext/Logo.xml
new file mode 100644
index 0000000..ccdd4c4
--- /dev/null
+++ b/Ext/Logo.xml
@@ -0,0 +1,7 @@
+
+
+
+ Picture.png
+ false
+
+
diff --git a/Ext/Logo/Picture.png b/Ext/Logo/Picture.png
new file mode 100755
index 0000000..f415bc4
Binary files /dev/null and b/Ext/Logo/Picture.png differ