diff --git a/Configuration.xml b/Configuration.xml
index 02dc0ce..3c39870 100755
--- a/Configuration.xml
+++ b/Configuration.xml
@@ -56,7 +56,7 @@
Russian
ООО "Профи-Софт", код партнера 42575-13, г.Байконур.
- 3.0.0.91
+ 3.0.0.92
Language.Русский
diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
index 95b7a9c..40fe6e3 100644
--- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
+++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl
@@ -13,7 +13,7 @@
Процедура ВыбратьФайл(Команда)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.МножественныйВыбор = Ложь;
- Диалог.Фильтр = "Excel файлы (*.xls;*.xlsx;*.xlsm)|*.xls;*.xlsx;*.xlsm";
+ Диалог.Фильтр = "Excel (*.xlsx;*.xlsm;*.xls)|*.xlsx;*.xlsm;*.xls";
Если Диалог.Выбрать() Тогда
Объект.ПутьКФайлу = Диалог.ПолноеИмяФайла;
КонецЕсли;
@@ -25,9 +25,16 @@
Сообщить("Выберите файл!");
Возврат;
КонецЕсли;
- Состояние("Инициализация...", 0);
- СтатусЗагрузки = "Подготовка...";
- ПрочитатьExcelНаКлиенте();
+ Состояние("Загрузка файла...");
+ АдресТабДока = ЗагрузитьФайлНаСервере(Объект.ПутьКФайлу);
+ Если АдресТабДока = Неопределено Тогда
+ Сообщить("Ошибка загрузки файла!");
+ Возврат;
+ КонецЕсли;
+ Состояние("Чтение данных...");
+ ПрочитатьДанные(АдресТабДока);
+ СтатусЗагрузки = "Загружено: " + Объект.Сотрудники.Количество() + " сотр., " + Объект.ДанныеРасчетаЗП.Количество() + " записей";
+ Состояние("Готово", 100);
КонецПроцедуры
&НаКлиенте
@@ -36,7 +43,8 @@
Сообщить("Нет данных для записи!");
Возврат;
КонецЕсли;
- ЗагрузкаДанныхИзExcel_ЗаписьВРегистры.ЗаписатьДанные(Объект._ГодЗагрузки, Объект.МесяцЗагрузки,
+ ЗаписатьДанныеНаСервере(
+ Объект._ГодЗагрузки, Объект.МесяцЗагрузки,
Объект._ОрганизацияНаименование, Объект._СтатьяФинансированияНаименование, Объект._СтатьяРасходовКод,
Объект.ДанныеРасчетаЗП, Объект.ДанныеНДФЛ, Объект.ДанныеСтраховыхВзносов, Объект.Сотрудники);
Сообщить("Данные записаны!");
@@ -44,156 +52,249 @@
#КонецОбласти
-#Область ОсновнаяПроцедура
+#Область ЧтениеДанных
&НаКлиенте
-Процедура ПрочитатьExcelНаКлиенте()
- КонтекстExcel = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ОткрытьФайлExcel(Объект.ПутьКФайлу);
- Если КонтекстExcel = Неопределено Тогда Возврат; КонецЕсли;
+Процедура ПрочитатьДанные(АдресТабДока)
+ // === ЭТАП 1: Обход листов сотрудников ===
+ Листы = ПолучитьЛистыНаСервере(АдресТабДока);
+ КэшФИО = Новый Соответствие;
+ Счетчик = 0;
+ Для Каждого Лист Из Листы Цикл
+ ФИО = ПрочитатьСтрокуНаСервере(АдресТабДока, Лист.Имя, 2, 3);
+ Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
+ Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли;
+ Счетчик = Счетчик + 1;
+ Состояние("Этап 1: " + ФИО, 20 + 30 * Счетчик / 50);
+ Карточка = ПрочитатьКарточкуНаСервере(АдресТабДока, Лист.Имя);
+ Карточка.Вставить("Идентификатор", Счетчик);
+ Карточка.Вставить("ФИО", ФИО);
+ ДанныеНДФЛ = ПрочитатьНДФЛНаСервере(АдресТабДока, Лист.Имя, Объект.МесяцЗагрузки, ФИО);
+ Если ДанныеНДФЛ <> Неопределено Тогда ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик); КонецЕсли;
+ СтрокаМесяца = 35 + Объект.МесяцЗагрузки;
+ ОтрДнейКал = ПрочитатьЧислоНаСервере(АдресТабДока, Лист.Имя, СтрокаМесяца, 4);
+ КэшФИО.Вставить(ФИО, Новый Структура("Карточка, НДФЛ, ОтработаноДнейКалендарных, Идентификатор", Карточка, ДанныеНДФЛ, ОтрДнейКал, Счетчик));
+ КонецЦикла;
- ЛистРасчет = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.НайтиЛист(КонтекстExcel.Книга, "Расчет");
- Если ЛистРасчет = Неопределено Тогда
- Сообщить("Лист 'Расчет' не найден!");
- ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено);
- Возврат;
- КонецЕсли;
-
- // Определяем параметры из Excel
- Объект._ГодЗагрузки = Строка(ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьГодЗагрузки(ЛистРасчет));
- Объект._ОрганизацияНаименование = ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьОрганизацию(ЛистРасчет);
- Объект._СтатьяФинансированияНаименование = ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьСтатьюФинансирования(ЛистРасчет);
+ // === ЭТАП 2: Чтение листа "Расчет" ===
+ ЛистРасчет = НайтиЛистНаСервере(АдресТабДока, "Расчет");
+ Если ЛистРасчет = Неопределено Тогда Сообщить("Лист 'Расчет' не найден!"); Возврат; КонецЕсли;
+ Объект._ГодЗагрузки = Строка(ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, 4, 1));
+ Объект._ОрганизацияНаименование = ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, 4, 20);
+ Объект._СтатьяФинансированияНаименование = ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, 8, 20);
Объект._СтатьяРасходовКод = "211";
- Объект.МесяцЗагрузки = Число(ЛистРасчет.Cells(4, 1).Value);
-
- ГодЗагрузки = Объект._ГодЗагрузки;
- МесяцТекст = ЗагрузкаДанныхИзExcel_МаппингДанных.НомерМесяцаВТекст(Объект.МесяцЗагрузки) + " " + ГодЗагрузки;
-
- // Определяем начальную строку данных
+ Объект.МесяцЗагрузки = Число(ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, 4, 1));
НачальнаяСтрока = 0;
Для Ном = 17 По 30 Цикл
- Формула = ЛистРасчет.Cells(Ном, 1).Formula;
- Если ЗначениеЗаполнено(Формула) И СтрНайти("" + Формула, "='") > 0 Тогда
+ ФТ = СокрЛП(ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 1));
+ Если Не ЗначениеЗаполнено(ФТ) Тогда Продолжить; КонецЕсли;
+ Если Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ") И СтрДлина(ФТ) > 3 Тогда
НачальнаяСтрока = Ном; Прервать;
КонецЕсли;
КонецЦикла;
- Если НачальнаяСтрока = 0 Тогда
- Для Ном = 17 По 30 Цикл
- ФТ = СокрЛП("" + ЛистРасчет.Cells(Ном, 1).Value);
- Если ЗначениеЗаполнено(ФТ) И Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО")
- И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ")
- И СтрДлина(ФТ) > 3 Тогда
- НачальнаяСтрока = Ном; Прервать;
- КонецЕсли;
- КонецЦикла;
- КонецЕсли;
- Если НачальнаяСтрока = 0 Тогда
- Сообщить("Данные не найдены!");
- ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено);
- Возврат;
- КонецЕсли;
-
- МассивДанных = Новый Массив;
- МассивВзносов = Новый Массив;
- МассивНДФЛ = Новый Массив;
- МассивСотрудников = Новый Массив;
+ Если НачальнаяСтрока = 0 Тогда Сообщить("Данные не найдены!"); Возврат; КонецЕсли;
Счетчик = 0;
-
- Для Ном = НачальнаяСтрока По ЛистРасчет.Rows.Count Цикл
- ЗначениеЯчейки = ЛистРасчет.Cells(Ном, 1).Value;
- Если ЗначениеЯчейки = Неопределено ИЛИ ЗначениеЯчейки = "" Тогда
- След1 = ЛистРасчет.Cells(Ном + 1, 1).Value;
- След2 = ЛистРасчет.Cells(Ном + 2, 1).Value;
- Если (След1 = Неопределено ИЛИ След1 = "") И (След2 = Неопределено ИЛИ След2 = "") Тогда Прервать; КонецЕсли;
- Продолжить;
- КонецЕсли;
- ФИОТекст = СокрЛП("" + ЗначениеЯчейки);
+ Для Ном = НачальнаяСтрока По 500 Цикл
+ ФИОТекст = СокрЛП(ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 1));
+ Если Не ЗначениеЗаполнено(ФИОТекст) Тогда Продолжить; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли;
- Если СтрНачинаетсяС(ВРег(ФИОТекст), "СОТРУДНИК") ИЛИ СтрНачинаетсяС(ВРег(ФИОТекст), "ФАМИЛИЯ") Тогда Продолжить; КонецЕсли;
-
- ЛистСотрудника = ЗагрузкаДанныхИзExcel_МаппингДанных.НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном);
- Если ЛистСотрудника = Неопределено Тогда Продолжить; КонецЕсли;
-
- ФИО = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3);
- Если Не ЗначениеЗаполнено(ФИО) Тогда ФИО = ФИОТекст; КонецЕсли;
- Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
-
+ ЛистСотр = КэшФИО.Получить(ФИОТекст);
+ Если ЛистСотр = Неопределено Тогда Продолжить; КонецЕсли;
Счетчик = Счетчик + 1;
- Состояние("Загрузка: " + ФИО, 20 + 70 * Счетчик / 50);
-
- Строка = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьРасчетныеДанные(ЛистРасчет, Ном, ФИО);
- Строка.Вставить("ИдентификаторСотрудника", Счетчик);
- Строка.Вставить("ОтработаноДнейКалендарных", ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуЧисло(ЛистСотрудника, ЗагрузкаДанныхИзExcel_МаппингДанных.СтрокаМесяцаНаЛистеСотрудника(Объект.МесяцЗагрузки), 4, ФИО));
-
- Если ЛистСотрудника <> Неопределено Тогда
- Карточка = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьКарточкуСотрудника(ЛистСотрудника);
- Если ЗначениеЗаполнено(Карточка.ФИО) Тогда Строка.Вставить("ФИО", Карточка.ФИО); КонецЕсли;
- КонецЕсли;
-
+ Состояние("Этап 2: " + ФИОТекст, 50 + 40 * Счетчик / 50);
+ Строка = ПрочитатьРасчетныеДанные(АдресТабДока, ЛистРасчет, Ном, ФИОТекст, ЛистСотр);
МассивДанных.Добавить(Строка);
-
- // Сотрудники
- Если ЛистСотрудника <> Неопределено Тогда
- ДанныеСотр = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьКарточкуСотрудника(ЛистСотрудника);
- Иначе
- ДанныеСотр = Новый Структура("ФИО, ИНН, СНИЛС, ЛицевойСчетВБанке, ВидЗанятости, АдресРегистрации", ФИО, "", "", "", "", "");
- КонецЕсли;
- ДанныеСотр.Вставить("Идентификатор", Счетчик);
- МассивСотрудников.Добавить(ДанныеСотр);
-
- // НДФЛ
- Если ЛистСотрудника <> Неопределено Тогда
- ДанныеНДФЛ = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО, Объект.МесяцЗагрузки);
- Если ДанныеНДФЛ <> Неопределено Тогда
- ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик);
- МассивНДФЛ.Добавить(ДанныеНДФЛ);
- КонецЕсли;
- КонецЕсли;
-
- // Страховые взносы
- СтрВзносов = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО);
- Если СтрВзносов <> Неопределено Тогда
- СтрВзносов.Вставить("ИдентификаторСотрудника", Счетчик);
- МассивВзносов.Добавить(СтрВзносов);
- КонецЕсли;
-
+ МассивСотрудников.Добавить(ЛистСотр.Карточка);
+ Если ЛистСотр.НДФЛ <> Неопределено Тогда МассивНДФЛ.Добавить(ЛистСотр.НДФЛ); КонецЕсли;
КонецЦикла;
-
- ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено);
- Состояние("Заполнение таблиц...", 95);
-
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников);
-
- СтатусЗагрузки = "Загружено: " + Счетчик + " сотрудников";
+ СтатусЗагрузки = "Загружено: " + Счетчик + " записей";
Состояние("Готово", 100);
КонецПроцедуры
+&НаКлиенте
+Функция ПрочитатьРасчетныеДанные(АдресТабДока, ЛистРасчет, Ном, ФИО, ЛистСотр)
+ С = Новый Структура;
+ С.Вставить("ФИО", ФИО);
+ С.Вставить("ИдентификаторСотрудника", ЛистСотр.Идентификатор);
+ С.Вставить("Должность", ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 2));
+ С.Вставить("СчетБК", ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 3));
+ С.Вставить("ВидЗанятости", ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 4));
+ С.Вставить("Оклад", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 8));
+ С.Вставить("КоличествоСтавок", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 7));
+ С.Вставить("ОтработаноДней", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 6));
+ С.Вставить("РабочиеЧасыПоТабелю", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 12));
+ С.Вставить("ДоплатаСовместительство", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 14));
+ С.Вставить("ДоплатаИнтенсивность", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 16));
+ С.Вставить("ДоплатаНочные", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 18));
+ С.Вставить("ДоплатаПраздничные", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 19));
+ С.Вставить("НадбавкаЗаКатегорию", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 21));
+ С.Вставить("НадбавкаЗаВредность", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 22));
+ С.Вставить("ПовышающийКоэффициент", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 23));
+ С.Вставить("СтимулирующиеВыплаты", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 24));
+ С.Вставить("РайонныйКоэффициент", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 26));
+ С.Вставить("ПремияРазовая", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 28));
+ С.Вставить("Отпуск", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 32));
+ С.Вставить("КомпенсацияЗаОтпуск", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 33));
+ С.Вставить("ВыходноеПособие", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 35));
+ С.Вставить("ДоплатаДоМРОТ", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 37));
+ С.Вставить("Родовые", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 38));
+ С.Вставить("ИтогоНачислено", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 39));
+ С.Вставить("НДФЛ", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 40));
+ С.Вставить("ПрофВзнос", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 41));
+ С.Вставить("ИсполнительныеДокументы", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 42));
+ С.Вставить("Аванс", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 43));
+ С.Вставить("Касса1", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 46));
+ С.Вставить("Касса2", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 47));
+ С.Вставить("Касса3", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 48));
+ С.Вставить("БезналичныеПеречисления", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 50));
+ С.Вставить("ВсегоНаРуки", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 55));
+ С.Вставить("ЗарплатаЗаПервуюПоловину", 0);
+ С.Вставить("ПремияАванс", 0);
+ С.Вставить("ВыплатыВМежрасчетный", 0);
+ С.Вставить("ОтработаноДнейКалендарных", ЛистСотр.ОтработаноДнейКалендарных);
+ С.Вставить("ИтогоУдержано", С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы);
+ С.Вставить("ИтогоВыплачено", С.Аванс + С.Касса1 + С.Касса2 + С.Касса3 + С.БезналичныеПеречисления);
+ Возврат С;
+КонецФункции
+
#КонецОбласти
#Область СерверныеПроцедуры
+&НаСервереБезКонтекста
+Функция ЗагрузитьФайлНаСервере(ПутьКФайлу) Экспорт
+ ФайлНаДиске = Новый Файл(ПутьКФайлу);
+ Если Не ФайлНаДиске.Существует() Тогда Сообщить("Файл не найден: " + ПутьКФайлу); Возврат Неопределено; КонецЕсли;
+ Расширение = НРег(ФайлНаДиске.Расширение);
+ ТаблДок = Новый ТабличныйДокумент;
+ Если Расширение = ".xlsx" ИЛИ Расширение = ".xls" ИЛИ Расширение = ".xlsm" Тогда
+ ТаблДок.Прочитать(ПутьКФайлу, ТипФайлаТабличногоДокумента.XLSX);
+ ИначеЕсли Расширение = ".mxl" Тогда
+ ТаблДок.Прочитать(ПутьКФайлу, ТипФайлаТабличногоДокумента.MXL);
+ Иначе
+ Сообщить("Неподдерживаемый формат: " + Расширение);
+ Возврат Неопределено;
+ КонецЕсли;
+ Возврат ПоместитьВоВременноеХранилище(ТаблДок);
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция ПолучитьЛистыНаСервере(АдресТабДока) Экспорт
+ ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
+ Список = Новый Массив;
+ Для Каждого Область Из ТаблДок.Области Цикл
+ Если Область.ТипОбласти = ТипОбластиТабличногоДокумента.Прямоугольная Тогда
+ Список.Добавить(Новый Структура("Имя", Область.Имя));
+ КонецЕсли;
+ КонецЦикла;
+ Возврат Список;
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция НайтиЛистНаСервере(АдресТабДока, ИмяЛиста) Экспорт
+ ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
+ Для Каждого Область Из ТаблДок.Области Цикл
+ Если Область.ТипОбласти = ТипОбластиТабличногоДокумента.Прямоугольная Тогда
+ Если ВРег(Область.Имя) = ВРег(ИмяЛиста) Тогда Возврат Область.Имя; КонецЕсли;
+ КонецЕсли;
+ КонецЦикла;
+ Возврат Неопределено;
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция ПрочитатьСтрокуНаСервере(АдресТабДока, ИмяОбласти, Строка, Колонка) Экспорт
+ ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
+ Попытка
+ Область = ТаблДок.Область(ИмяОбласти + "|C" + Колонка + "|" + Строка + "|" + Строка);
+ Возврат СокрЛП("" + Область.Текст);
+ Исключение
+ Возврат "";
+ КонецПопытки;
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция ПрочитатьЧислоНаСервере(АдресТабДока, ИмяОбласти, Строка, Колонка) Экспорт
+ ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
+ Попытка
+ Область = ТаблДок.Область(ИмяОбласти + "|C" + Колонка + "|" + Строка + "|" + Строка);
+ Значение = Область.Текст;
+ Если Не ЗначениеЗаполнено(Значение) Тогда Возврат 0; КонецЕсли;
+ Возврат Число(СокрЛП(Значение));
+ Исключение
+ Возврат 0;
+ КонецПопытки;
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция ПрочитатьКарточкуНаСервере(АдресТабДока, ИмяЛиста) Экспорт
+ ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
+ Данные = Новый Структура;
+ Данные.Вставить("ФИО", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|C2").Текст));
+ Данные.Вставить("ИНН", "");
+ Данные.Вставить("СНИЛС", "");
+ Данные.Вставить("ЛицевойСчетВБанке", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|D3").Текст));
+ Данные.Вставить("ВидЗанятости", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|A5").Текст));
+ Данные.Вставить("АдресРегистрации", "");
+ Возврат Данные;
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция ПрочитатьНДФЛНаСервере(АдресТабДока, ИмяЛиста, МесяцЗагрузки, ФИО) Экспорт
+ ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
+ СтрокаМесяца = 35 + МесяцЗагрузки;
+ Если СтрокаМесяца > 47 Тогда Возврат Неопределено; КонецЕсли;
+ Данные = Новый Структура;
+ Данные.Вставить("ФИО", ФИО);
+ Данные.Вставить("МесяцРасчета", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|A" + СтрокаМесяца).Текст));
+ Данные.Вставить("СуммаВаловогоДохода", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 4));
+ Данные.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 8));
+ Данные.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 12));
+ Данные.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 13));
+ Данные.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 18));
+ Данные.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 23));
+ Данные.Вставить("ИтогоФСС", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 37));
+ Возврат Данные;
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция ПрочитатьВзносыНаСервере(АдресТабДока, ЛистРасчет, Ном, ФИО) Экспорт
+ ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
+ Данные = Новый Структура;
+ Данные.Вставить("ФИО", ФИО);
+ Данные.Вставить("ДТ6Процент", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ЛистРасчет, Ном, 58));
+ Данные.Вставить("ДТ4Процент", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ЛистРасчет, Ном, 59));
+ Данные.Вставить("ПФСтраховая", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ЛистРасчет, Ном, 60));
+ Данные.Вставить("ФССФОМС", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ЛистРасчет, Ном, 61));
+ Данные.Вставить("НСПЗ", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ЛистРасчет, Ном, 62));
+ Данные.Вставить("Итого", ПрочитатьЧислоНаСервереИзТД(ТаблДок, ЛистРасчет, Ном, 63));
+ Данные.Вставить("НалоговаяБазаПоСВЗаМесяц", 0);
+ Данные.Вставить("ИтогоФСС", 0);
+ Возврат Данные;
+КонецФункции
+
+&НаСервереБезКонтекста
+Функция ПрочитатьЧислоНаСервереИзТД(ТаблДок, ИмяОбласти, Строка, Колонка)
+ Попытка
+ Область = ТаблДок.Область(ИмяОбласти + "|C" + Колонка + "|" + Строка + "|" + Строка);
+ Значение = Область.Текст;
+ Если Не ЗначениеЗаполнено(Значение) Тогда Возврат 0; КонецЕсли;
+ Возврат Число(СокрЛП(Значение));
+ Исключение
+ Возврат 0;
+ КонецПопытки;
+КонецФункции
+
&НаСервере
-Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников) Экспорт
- ТЧЗП = Объект.ДанныеРасчетаЗП;
- ТЧВзносы = Объект.ДанныеСтраховыхВзносов;
- ТЧНДФЛ = Объект.ДанныеНДФЛ;
- ТЧСотрудники = Объект.Сотрудники;
- ТЧЗП.Очистить(); ТЧВзносы.Очистить(); ТЧНДФЛ.Очистить(); ТЧСотрудники.Очистить();
- Для Каждого Строка Из МассивДанных Цикл
- НоваяСтрока = ТЧЗП.Добавить();
- ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
- КонецЦикла;
- Для Каждого Строка Из МассивВзносов Цикл
- НоваяСтрока = ТЧВзносы.Добавить();
- ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
- КонецЦикла;
- Для Каждого Строка Из МассивНДФЛ Цикл
- НоваяСтрока = ТЧНДФЛ.Добавить();
- ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
- КонецЦикла;
- Для Каждого Строка Из МассивСотрудников Цикл
- НоваяСтрока = ТЧСотрудники.Добавить();
- ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
- КонецЦикла;
+Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников)
+ Объект.ДанныеРасчетаЗП.Очистить();
+ Объект.ДанныеСтраховыхВзносов.Очистить();
+ Объект.ДанныеНДФЛ.Очистить();
+ Объект.Сотрудники.Очистить();
+ Для Каждого Строка Из МассивДанных Цикл НоваяСтрока = Объект.ДанныеРасчетаЗП.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла;
+ Для Каждого Строка Из МассивВзносов Цикл НоваяСтрока = Объект.ДанныеСтраховыхВзносов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла;
+ Для Каждого Строка Из МассивНДФЛ Цикл НоваяСтрока = Объект.ДанныеНДФЛ.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла;
+ Для Каждого Строка Из МассивСотрудников Цикл НоваяСтрока = Объект.Сотрудники.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла;
КонецПроцедуры
#КонецОбласти