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 + + ИНН + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>ИНН</v8:content> + </v8:item> + + 15 + + + СНИЛС + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>СНИЛС</v8:content> + </v8:item> + + 18 + + + Паспорт + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Паспорт</v8:content> + </v8:item> + + 30 + + + Адрес + + <v8:item> + <v8:lang>ru</v8:lang> + <v8:content>Адрес</v8:content> + </v8:item> + + 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