From 1998c606fc5a072ce3f5e13fa9eb306c9a1ead77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=80=D0=BE=D1=84=D0=B8-=D0=A1=D0=BE=D1=84=D1=82?= Date: Mon, 6 Jul 2026 19:51:55 +0000 Subject: [PATCH] =?UTF-8?q?v3.0.0.2:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=BF=D1=80=D0=BE=D0=B3=D1=80=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B1=D0=B0=D1=80=20=D0=B8=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=83=D1=81=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Forms/Форма/Ext/Form.xml | 25 ++++++- .../Forms/Форма/Ext/Form/Module.bsl | 65 ++++++++++++++----- 2 files changed, 73 insertions(+), 17 deletions(-) diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml index 99b8047..b56d55c 100644 --- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form.xml @@ -60,7 +60,14 @@ Объект.ПутьКФайлу 80 - + + Прогресс + 100 + + + СтатусЗагрузки + + Объект.МесяцЗагрузки <v8:item> @@ -238,6 +245,22 @@ </Type> <MainAttribute>true</MainAttribute> </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> <Commands> <Command name="ВыбратьФайл" id="1"> diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl index 2c7d60c..93f6394 100644 --- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl @@ -25,6 +25,11 @@ Сообщить("Выберите файл!"); Возврат; КонецЕсли; + + Состояние("Инициализация загрузки..."); + Прогресс = 0; + СтатусЗагрузки = "Подготовка..."; + ПрочитатьExcelНаКлиенте(); КонецПроцедуры @@ -44,7 +49,6 @@ &НаКлиенте Функция ПрочитатьЯчейку(Лист, Строка, Колонка, ФИО, ВидДанных) - Попытка Значение = Лист.Cells(Строка, Колонка).Value; Если Значение = Неопределено ИЛИ Значение = "" Тогда @@ -52,42 +56,46 @@ КонецЕсли; Возврат Число(Значение); Исключение - Сообщить("Ошибка чтения ячейки: " + ФИО + " | " + ВидДанных + Сообщить("Ошибка: " + ФИО + " | " + ВидДанных + " | строка " + Строка + " колонка " + Колонка + " | значение: """ + Значение + """ | " + ОписаниеОшибки()); Возврат 0; КонецПопытки; - КонецФункции &НаКлиенте Функция ПрочитатьСтроку(Лист, Строка, Колонка) - Попытка Значение = Лист.Cells(Строка, Колонка).Value; - Если Значение = Неопределено Тогда - Возврат ""; - КонецЕсли; + Если Значение = Неопределено Тогда Возврат ""; КонецЕсли; Возврат СокрЛП("" + Значение); Исключение Возврат ""; КонецПопытки; - КонецФункции &НаКлиенте Процедура ПрочитатьExcelНаКлиенте() Попытка + СтатусЗагрузки = "Копирование файла..."; + Прогресс = 5; + ВременныйФайл = КаталогВременныхФайлов() + "temp_data.xls"; КопироватьФайл(Объект.ПутьКФайлу, ВременныйФайл); + СтатусЗагрузки = "Открытие Excel..."; + Прогресс = 10; + Excel = Новый COMОбъект("Excel.Application"); Excel.Visible = Ложь; Excel.DisplayAlerts = Ложь; Книга = Excel.Workbooks.Open(ВременныйФайл); + СтатусЗагрузки = "Поиск листа 'Расчет'..."; + Прогресс = 15; + ЛистРасчет = Неопределено; Для Каждого Лист Из Книга.Sheets Цикл Если ВРег(Лист.Name) = "РАСЧЕТ" Тогда @@ -101,29 +109,46 @@ Книга.Close(Ложь); Excel.Quit(); УдалитьФайлы(ВременныйФайл); + СтатусЗагрузки = "Ошибка: лист не найден"; + Прогресс = 0; Возврат; КонецЕсли; + СтатусЗагрузки = "Определение месяца..."; + Прогресс = 20; + МесяцЗначение = ЛистРасчет.Cells(4, 1).Value; Если ЗначениеЗаполнено(МесяцЗначение) Тогда Попытка Объект.МесяцЗагрузки = Число(МесяцЗначение); Исключение - Сообщить("Не удалось определить месяц из ячейки A4: " + МесяцЗначение); + Сообщить("Не удалось определить месяц: " + МесяцЗначение); КонецПопытки; КонецЕсли; + СтатусЗагрузки = "Подсчет строк..."; + Прогресс = 25; + ПоследняяСтрока = ЛистРасчет.Cells(1000, 1).End(-4121).Row; + ВсегоСтрок = ПоследняяСтрока - 16; МассивДанных = Новый Массив; МассивВзносов = Новый Массив; + СтатусЗагрузки = "Чтение данных..."; + Для Ном = 16 По ПоследняяСтрока Цикл + // Обновление прогресса + Прогресс = 25 + 65 * (Ном - 16) / Макс(ВсегоСтрок, 1); + ФИО = ПрочитатьСтроку(ЛистРасчет, Ном, 1); Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли; + // Статус: загрузка расчетов + СтатусЗагрузки = "Расчет ЗП: " + ФИО + " (строка " + Ном + "/" + ПоследняяСтрока + ")"; + Строка = Новый Структура; Строка.Вставить("ФИО", ФИО); Строка.Вставить("Должность", ПрочитатьСтроку(ЛистРасчет, Ном, 2)); @@ -138,13 +163,15 @@ Строка.Вставить("ВсегоНаРуки", ПрочитатьЯчейку(ЛистРасчет, Ном, 55, ФИО, "Всего на руки")); МассивДанных.Добавить(Строка); - СВ = ПрочитатьЯчейку(ЛистРасчет, Ном, 63, ФИО, "Страховые взносы итого"); + // Страховые взносы + СтатусЗагрузки = "Страховые взносы: " + ФИО; + СВ = ПрочитатьЯчейку(ЛистРасчет, Ном, 63, ФИО, "СВ итого"); Если СВ > 0 Тогда СтрВзносов = Новый Структура; СтрВзносов.Вставить("ФИО", ФИО); СтрВзносов.Вставить("ДТ6Процент", ПрочитатьЯчейку(ЛистРасчет, Ном, 58, ФИО, "ДТ 6%")); СтрВзносов.Вставить("ДТ4Процент", ПрочитатьЯчейку(ЛистРасчет, Ном, 59, ФИО, "ДТ 4%")); - СтрВзносов.Вставить("ПФСтраховая", ПрочитатьЯчейку(ЛистРасчет, Ном, 60, ФИО, "ПФ страховая")); + СтрВзносов.Вставить("ПФСтраховая", ПрочитатьЯчейку(ЛистРасчет, Ном, 60, ФИО, "ПФ")); СтрВзносов.Вставить("ФССФОМС", ПрочитатьЯчейку(ЛистРасчет, Ном, 61, ФИО, "ФСС/ФОМС")); СтрВзносов.Вставить("НСПЗ", ПрочитатьЯчейку(ЛистРасчет, Ном, 62, ФИО, "НС и ПЗ")); СтрВзносов.Вставить("Итого", СВ); @@ -153,16 +180,26 @@ КонецЦикла; + СтатусЗагрузки = "Закрытие Excel..."; + Прогресс = 95; + Книга.Close(Ложь); Excel.Quit(); УдалитьФайлы(ВременныйФайл); + СтатусЗагрузки = "Передача данных на сервер..."; + Прогресс = 98; + ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов); - Сообщить("Загружено сотрудников: " + МассивДанных.Количество()); + Прогресс = 100; + СтатусЗагрузки = "Готово! Загружено: " + МассивДанных.Количество() + " сотрудников"; + Сообщить(СтатусЗагрузки); Исключение Сообщить("Ошибка чтения Excel: " + ОписаниеОшибки()); + СтатусЗагрузки = "Ошибка: " + ОписаниеОшибки(); + Прогресс = 0; КонецПопытки; КонецПроцедуры @@ -177,7 +214,6 @@ &НаСервере Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов) - ТЗРасчет = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП"); ТЗРасчет.Очистить(); Для Каждого Эл Из МассивДанных Цикл @@ -193,17 +229,14 @@ ЗаполнитьЗначенияСвойств(Строка, Эл); КонецЦикла; ЗначениеВРеквизитФормы(ТЗВзносы, "Объект.ДанныеСтраховыхВзносов"); - КонецПроцедуры &НаСервере Процедура ЗаписатьДанныеНаСервере() ГодЗагрузки = ТекущаяДата().Год(); Период = Дата(ГодЗагрузки, Объект.МесяцЗагрузки, 1); - ТЗРасчет = РеквизитФормыВЗначение("Объект.ДанныеРасчетаЗП"); Объект.ЗаписатьДанныеРасчета(ТЗРасчет, Период); - ТЗВзносы = РеквизитФормыВЗначение("Объект.ДанныеСтраховыхВзносов"); Если ТЗВзносы.Количество() > 0 Тогда Объект.ЗаписатьДанныеСтраховыхВзносов(ТЗВзносы, Период);