v3.0.0.92

This commit is contained in:
Профи-Софт
2026-07-20 14:08:41 +00:00
parent 8504860515
commit e917b0a818
2 changed files with 234 additions and 133 deletions
+1 -1
View File
@@ -56,7 +56,7 @@
<ScriptVariant>Russian</ScriptVariant> <ScriptVariant>Russian</ScriptVariant>
<DefaultRoles/> <DefaultRoles/>
<Vendor>ООО "Профи-Софт", код партнера 42575-13, г.Байконур.</Vendor> <Vendor>ООО "Профи-Софт", код партнера 42575-13, г.Байконур.</Vendor>
<Version>3.0.0.91</Version> <Version>3.0.0.92</Version>
<Caption/> <Caption/>
<ShortCaption/> <ShortCaption/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
@@ -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(Объект.ПутьКФайлу); // === ЭТАП 1: Обход листов сотрудников ===
Если КонтекстExcel = Неопределено Тогда Возврат; КонецЕсли; Листы = ПолучитьЛистыНаСервере(АдресТабДока);
КэшФИО = Новый Соответствие;
Счетчик = 0;
Для Каждого Лист Из Листы Цикл
ФИО = ПрочитатьСтрокуНаСервере(АдресТабДока, Лист.Имя, 2, 3);
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли;
Счетчик = Счетчик + 1;
Состояние("Этап 1: " + ФИО, 20 + 30 * Счетчик / 50);
Карточка = ПрочитатьКарточкуНаСервере(АдресТабДока, Лист.Имя);
Карточка.Вставить("Идентификатор", Счетчик);
Карточка.Вставить("ФИО", ФИО);
ДанныеНДФЛ = ПрочитатьНДФЛНаСервере(АдресТабДока, Лист.Имя, Объект.МесяцЗагрузки, ФИО);
Если ДанныеНДФЛ <> Неопределено Тогда ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик); КонецЕсли;
СтрокаМесяца = 35 + Объект.МесяцЗагрузки;
ОтрДнейКал = ПрочитатьЧислоНаСервере(АдресТабДока, Лист.Имя, СтрокаМесяца, 4);
КэшФИО.Вставить(ФИО, Новый Структура("Карточка, НДФЛ, ОтработаноДнейКалендарных, Идентификатор", Карточка, ДанныеНДФЛ, ОтрДнейКал, Счетчик));
КонецЦикла;
ЛистРасчет = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.НайтиЛист(КонтекстExcel.Книга, "Расчет"); // === ЭТАП 2: Чтение листа "Расчет" ===
Если ЛистРасчет = Неопределено Тогда ЛистРасчет = НайтиЛистНаСервере(АдресТабДока, "Расчет");
Сообщить("Лист 'Расчет' не найден!"); Если ЛистРасчет = Неопределено Тогда Сообщить("Лист 'Расчет' не найден!"); Возврат; КонецЕсли;
ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено); Объект._ГодЗагрузки = Строка(ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, 4, 1));
Возврат; Объект._ОрганизацияНаименование = ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, 4, 20);
КонецЕсли; Объект._СтатьяФинансированияНаименование = ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, 8, 20);
// Определяем параметры из Excel
Объект._ГодЗагрузки = Строка(ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьГодЗагрузки(ЛистРасчет));
Объект._ОрганизацияНаименование = ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьОрганизацию(ЛистРасчет);
Объект._СтатьяФинансированияНаименование = ЗагрузкаДанныхИзExcel_МаппингДанных.ОпределитьСтатьюФинансирования(ЛистРасчет);
Объект._СтатьяРасходовКод = "211"; Объект._СтатьяРасходовКод = "211";
Объект.МесяцЗагрузки = Число(ЛистРасчет.Cells(4, 1).Value); Объект.МесяцЗагрузки = Число(ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, 4, 1));
ГодЗагрузки = Объект._ГодЗагрузки;
МесяцТекст = ЗагрузкаДанныхИзExcel_МаппингДанных.НомерМесяцаВТекст(Объект.МесяцЗагрузки) + " " + ГодЗагрузки;
// Определяем начальную строку данных
НачальнаяСтрока = 0; НачальнаяСтрока = 0;
Для Ном = 17 По 30 Цикл Для Ном = 17 По 30 Цикл
Формула = ЛистРасчет.Cells(Ном, 1).Formula; ФТ = СокрЛП(ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 1));
Если ЗначениеЗаполнено(Формула) И СтрНайти("" + Формула, "='") > 0 Тогда Если Не ЗначениеЗаполнено(ФТ) Тогда Продолжить; КонецЕсли;
Если Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ") И СтрДлина(ФТ) > 3 Тогда
НачальнаяСтрока = Ном; Прервать; НачальнаяСтрока = Ном; Прервать;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Если НачальнаяСтрока = 0 Тогда Если НачальнаяСтрока = 0 Тогда Сообщить("Данные не найдены!"); Возврат; КонецЕсли;
Для Ном = 17 По 30 Цикл
ФТ = СокрЛП("" + ЛистРасчет.Cells(Ном, 1).Value);
Если ЗначениеЗаполнено(ФТ) И Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО")
И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ")
И СтрДлина(ФТ) > 3 Тогда
НачальнаяСтрока = Ном; Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если НачальнаяСтрока = 0 Тогда
Сообщить("Данные не найдены!");
ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено);
Возврат;
КонецЕсли;
МассивДанных = Новый Массив;
МассивВзносов = Новый Массив;
МассивНДФЛ = Новый Массив;
МассивСотрудников = Новый Массив;
Счетчик = 0; Счетчик = 0;
Для Ном = НачальнаяСтрока По 500 Цикл
Для Ном = НачальнаяСтрока По ЛистРасчет.Rows.Count Цикл ФИОТекст = СокрЛП(ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 1));
ЗначениеЯчейки = ЛистРасчет.Cells(Ном, 1).Value; Если Не ЗначениеЗаполнено(ФИОТекст) Тогда Продолжить; КонецЕсли;
Если ЗначениеЯчейки = Неопределено ИЛИ ЗначениеЯчейки = "" Тогда
След1 = ЛистРасчет.Cells(Ном + 1, 1).Value;
След2 = ЛистРасчет.Cells(Ном + 2, 1).Value;
Если (След1 = Неопределено ИЛИ След1 = "") И (След2 = Неопределено ИЛИ След2 = "") Тогда Прервать; КонецЕсли;
Продолжить;
КонецЕсли;
ФИОТекст = СокрЛП("" + ЗначениеЯчейки);
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИОТекст), "СОТРУДНИК") ИЛИ СтрНачинаетсяС(ВРег(ФИОТекст), "ФАМИЛИЯ") Тогда Продолжить; КонецЕсли; ЛистСотр = КэшФИО.Получить(ФИОТекст);
Если ЛистСотр = Неопределено Тогда Продолжить; КонецЕсли;
ЛистСотрудника = ЗагрузкаДанныхИзExcel_МаппингДанных.НайтиЛистСотрудника(КонтекстExcel.Книга, ЛистРасчет, Ном);
Если ЛистСотрудника = Неопределено Тогда Продолжить; КонецЕсли;
ФИО = ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3);
Если Не ЗначениеЗаполнено(ФИО) Тогда ФИО = ФИОТекст; КонецЕсли;
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
Счетчик = Счетчик + 1; Счетчик = Счетчик + 1;
Состояние("Загрузка: " + ФИО, 20 + 70 * Счетчик / 50); Состояние("Этап 2: " + ФИОТекст, 50 + 40 * Счетчик / 50);
Строка = ПрочитатьРасчетныеДанные(АдресТабДока, ЛистРасчет, Ном, ФИОТекст, ЛистСотр);
Строка = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьРасчетныеДанные(ЛистРасчет, Ном, ФИО);
Строка.Вставить("ИдентификаторСотрудника", Счетчик);
Строка.Вставить("ОтработаноДнейКалендарных", ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ПрочитатьЯчейкуЧисло(ЛистСотрудника, ЗагрузкаДанныхИзExcel_МаппингДанных.СтрокаМесяцаНаЛистеСотрудника(Объект.МесяцЗагрузки), 4, ФИО));
Если ЛистСотрудника <> Неопределено Тогда
Карточка = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьКарточкуСотрудника(ЛистСотрудника);
Если ЗначениеЗаполнено(Карточка.ФИО) Тогда Строка.Вставить("ФИО", Карточка.ФИО); КонецЕсли;
КонецЕсли;
МассивДанных.Добавить(Строка); МассивДанных.Добавить(Строка);
МассивСотрудников.Добавить(ЛистСотр.Карточка);
// Сотрудники Если ЛистСотр.НДФЛ <> Неопределено Тогда МассивНДФЛ.Добавить(ЛистСотр.НДФЛ); КонецЕсли;
Если ЛистСотрудника <> Неопределено Тогда
ДанныеСотр = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьКарточкуСотрудника(ЛистСотрудника);
Иначе
ДанныеСотр = Новый Структура("ФИО, ИНН, СНИЛС, ЛицевойСчетВБанке, ВидЗанятости, АдресРегистрации", ФИО, "", "", "", "", "");
КонецЕсли;
ДанныеСотр.Вставить("Идентификатор", Счетчик);
МассивСотрудников.Добавить(ДанныеСотр);
// НДФЛ
Если ЛистСотрудника <> Неопределено Тогда
ДанныеНДФЛ = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьНДФЛСоЛиста(ЛистСотрудника, ФИО, Объект.МесяцЗагрузки);
Если ДанныеНДФЛ <> Неопределено Тогда
ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик);
МассивНДФЛ.Добавить(ДанныеНДФЛ);
КонецЕсли;
КонецЕсли;
// Страховые взносы
СтрВзносов = ЗагрузкаДанныхИзExcel_МаппингДанных.ПрочитатьВзносыИзРасчета(ЛистРасчет, Ном, ФИО);
Если СтрВзносов <> Неопределено Тогда
СтрВзносов.Вставить("ИдентификаторСотрудника", Счетчик);
МассивВзносов.Добавить(СтрВзносов);
КонецЕсли;
КонецЦикла; КонецЦикла;
ЗагрузкаДанныхИзExcel_ЧтениеЭксель.ЗакрытьExcel(КонтекстExcel, Неопределено);
Состояние("Заполнение таблиц...", 95);
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников); ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников);
СтатусЗагрузки = "Загружено: " + Счетчик + " записей";
СтатусЗагрузки = "Загружено: " + Счетчик + " сотрудников";
Состояние("Готово", 100); Состояние("Готово", 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;
КонецПопытки;
КонецФункции
&НаСервере &НаСервере
Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников) Экспорт Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников)
ТЧЗП = Объект.ДанныеРасчетаЗП; Объект.ДанныеРасчетаЗП.Очистить();
ТЧВзносы = Объект.ДанныеСтраховыхВзносов; Объект.ДанныеСтраховыхВзносов.Очистить();
ТЧНДФЛ = Объект.ДанныеНДФЛ; Объект.ДанныеНДФЛ.Очистить();
ТЧСотрудники = Объект.Сотрудники; Объект.Сотрудники.Очистить();
ТЧЗП.Очистить(); ТЧВзносы.Очистить(); ТЧНДФЛ.Очистить(); ТЧСотрудники.Очистить(); Для Каждого Строка Из МассивДанных Цикл НоваяСтрока = Объект.ДанныеРасчетаЗП.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла;
Для Каждого Строка Из МассивДанных Цикл Для Каждого Строка Из МассивВзносов Цикл НоваяСтрока = Объект.ДанныеСтраховыхВзносов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла;
НоваяСтрока = ТЧЗП.Добавить(); Для Каждого Строка Из МассивНДФЛ Цикл НоваяСтрока = Объект.ДанныеНДФЛ.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла;
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); Для Каждого Строка Из МассивСотрудников Цикл НоваяСтрока = Объект.Сотрудники.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла;
КонецЦикла;
Для Каждого Строка Из МассивВзносов Цикл
НоваяСтрока = ТЧВзносы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
КонецЦикла;
Для Каждого Строка Из МассивНДФЛ Цикл
НоваяСтрока = ТЧНДФЛ.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
КонецЦикла;
Для Каждого Строка Из МассивСотрудников Цикл
НоваяСтрока = ТЧСотрудники.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка);
КонецЦикла;
КонецПроцедуры КонецПроцедуры
#КонецОбласти #КонецОбласти