v3.0.0.109

This commit is contained in:
Профи-Софт
2026-07-22 13:53:36 +00:00
parent e06ce3bf10
commit f1796f537a
2 changed files with 149 additions and 210 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.108</Version> <Version>3.0.0.109</Version>
<Caption/> <Caption/>
<ShortCaption/> <ShortCaption/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
@@ -5,8 +5,6 @@
КонецПроцедуры КонецПроцедуры
&НаСервере &НаСервере
Процедура ЗаписатьДанныеНаСервере(ГодЗагрузкиПараметр, МесяцЗагрузки, ОрганизацияНаименование, СтатьяФинансированияНаименование, СтатьяРасходовКод) Процедура ЗаписатьДанныеНаСервере(ГодЗагрузкиПараметр, МесяцЗагрузки, ОрганизацияНаименование, СтатьяФинансированияНаименование, СтатьяРасходовКод)
Период = Дата(Год(ТекущаяДата()), МесяцЗагрузки, 1); Период = Дата(Год(ТекущаяДата()), МесяцЗагрузки, 1);
@@ -38,15 +36,21 @@
Сообщить("Выберите файл!"); Сообщить("Выберите файл!");
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Состояние("Загрузка файла..."); Состояние("Загрузка и чтение файла...");
АдресТабДока = ЗагрузитьФайлНаСервере(Объект.ПутьКФайлу); Результат = ПрочитатьФайлНаСервере(Объект.ПутьКФайлу);
Если АдресТабДока = Неопределено Тогда Если Результат = Неопределено Тогда
Сообщить("Ошибка загрузки файла!"); Сообщить("Ошибка загрузки файла!");
Возврат; Возврат;
КонецЕсли; КонецЕсли;
Состояние("Чтение данных..."); // Заполняем реквизиты формы
ПрочитатьДанные(АдресТабДока); Объект._ГодЗагрузки = Результат.ГодЗагрузки;
СтатусЗагрузки = "Загружено: " + Объект.Сотрудники.Количество() + " сотр., " + Объект.ДанныеРасчетаЗП.Количество() + " записей"; Объект.МесяцЗагрузки = Результат.МесяцЗагрузки;
Объект._ОрганизацияНаименование = Результат.Организация;
Объект._СтатьяФинансированияНаименование = Результат.СтатьяФинансирования;
Объект._СтатьяРасходовКод = "211";
// Заполняем таблицы
ЗаполнитьТаблицыНаСервере(Результат.Данные, Результат.Взносы, Результат.НДФЛ, Результат.Сотрудники);
СтатусЗагрузки = "Загружено: " + Результат.Данные.Количество() + " записей, " + Результат.Сотрудники.Количество() + " сотр.";
Состояние("Готово", 100); Состояние("Готово", 100);
КонецПроцедуры КонецПроцедуры
@@ -63,237 +67,172 @@
#КонецОбласти #КонецОбласти
#Область ЧтениеДанных #Область СерверныеПроцедуры
// Главная функция: читает Excel файл целиком на сервере и возвращает структуру результатов
&НаСервере
Функция ПрочитатьФайлНаСервере(ПутьКФайлу) Экспорт
ФайлНаДиске = Новый Файл(ПутьКФайлу);
Если Не ФайлНаДиске.Существует() Тогда
Сообщить("Файл не найден: " + ПутьКФайлу);
Возврат Неопределено;
КонецЕсли;
// Копируем во временный каталог (обход проблем с кириллицей)
ВремКаталог = КаталогВременныхФайлов();
ИмяФайла = "temp_load" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMddHHmmss") + ФайлНаДиске.Расширение;
ПутьВрем = ВремКаталог + ИмяФайла;
КопироватьФайл(ПутьКФайлу, ПутьВрем);
// Читаем в ТабличныйДокумент
ТаблДок = Новый ТабличныйДокумент;
ТаблДок.Прочитать(ПутьВрем);
УдалитьФайлы(ПутьВрем);
// Проверяем наличие листа "Расчет"
ЛистРасчет = Неопределено;
Для Каждого Область Из ТаблДок.Области Цикл
Если Область.ТипОбласти = 1 И ВРег(Область.Имя) = "РАСЧЕТ" Тогда
ЛистРасчет = Область.Имя;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЛистРасчет = Неопределено Тогда
Сообщить("Лист 'Расчет' не найден!");
Возврат Неопределено;
КонецЕсли;
// Читаем шапку листа "Расчет"
ГодЗагрузки = "" + ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, 4, 1);
МесяцЗагрузки = Число(ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, 4, 1));
Организация = СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|T4").Текст);
СтатьяФинансирования = СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|T8").Текст);
&НаКлиенте
Процедура ПрочитатьДанные(АдресТабДока)
// === ЭТАП 1: Обход листов сотрудников === // === ЭТАП 1: Обход листов сотрудников ===
Листы = ПолучитьЛистыНаСервере(АдресТабДока);
КэшФИО = Новый Соответствие; КэшФИО = Новый Соответствие;
МассивДанных = Новый Массив;
МассивВзносов = Новый Массив;
МассивНДФЛ = Новый Массив;
МассивСотрудников = Новый Массив; МассивСотрудников = Новый Массив;
МассивНДФЛ = Новый Массив;
Счетчик = 0; Счетчик = 0;
Для Каждого Лист Из Листы Цикл Для Каждого Область Из ТаблДок.Области Цикл
ФИО = ПрочитатьСтрокуНаСервере(АдресТабДока, Лист.Имя, 2, 3); Если Область.ТипОбласти <> 1 Тогда Продолжить; КонецЕсли;
ИмяЛиста = Область.Имя;
Если ВРег(ИмяЛиста) = "РАСЧЕТ" Тогда Продолжить; КонецЕсли;
ФИО = СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|C2").Текст);
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли; Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли;
Счетчик = Счетчик + 1; Счетчик = Счетчик + 1;
Состояние("Этап 1: " + ФИО, 20 + 30 * Счетчик / 50); // Карточка сотрудника
Карточка = ПрочитатьКарточкуНаСервере(АдресТабДока, Лист.Имя); Карточка = Новый Структура;
Карточка.Вставить("Идентификатор", Счетчик);
Карточка.Вставить("ФИО", ФИО); Карточка.Вставить("ФИО", ФИО);
ДанныеНДФЛ = ПрочитатьНДФЛНаСервере(АдресТабДока, Лист.Имя, Объект.МесяцЗагрузки, ФИО); Карточка.Вставить("ИНН", "");
Если ДанныеНДФЛ <> Неопределено Тогда ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик); КонецЕсли; Карточка.Вставить("СНИЛС", "");
СтрокаМесяца = 35 + Объект.МесяцЗагрузки; Карточка.Вставить("ЛицевойСчетВБанке", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|D3").Текст));
ОтрДнейКал = ПрочитатьЧислоНаСервере(АдресТабДока, Лист.Имя, СтрокаМесяца, 4); Карточка.Вставить("ВидЗанятости", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|A5").Текст));
КэшФИО.Вставить(ФИО, Новый Структура("Карточка, НДФЛ, ОтработаноДнейКалендарных, Идентификатор", Карточка, ДанныеНДФЛ, ОтрДнейКал, Счетчик)); Карточка.Вставить("АдресРегистрации", "");
Карточка.Вставить("Идентификатор", Счетчик);
МассивСотрудников.Добавить(Карточка);
// НДФЛ
СтрокаМесяца = 35 + МесяцЗагрузки;
Если СтрокаМесяца <= 47 Тогда
ДанныеНДФЛ = Новый Структура;
ДанныеНДФЛ.Вставить("ФИО", ФИО);
ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик);
ДанныеНДФЛ.Вставить("МесяцРасчета", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|A" + СтрокаМесяца).Текст));
ДанныеНДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 4));
ДанныеНДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 8));
ДанныеНДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 12));
ДанныеНДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 13));
ДанныеНДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 18));
ДанныеНДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 23));
ДанныеНДФЛ.Вставить("ИтогоФСС", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 37));
МассивНДФЛ.Добавить(ДанныеНДФЛ);
КонецЕсли;
КэшФИО.Вставить(ФИО, Счетчик);
КонецЦикла; КонецЦикла;
// === ЭТАП 2: Чтение листа "Расчет" === // === ЭТАП 2: Чтение листа "Расчет" ===
ЛистРасчет = НайтиЛистНаСервере(АдресТабДока, "Расчет"); МассивДанных = Новый Массив;
Если ЛистРасчет = Неопределено Тогда Сообщить("Лист 'Расчет' не найден!"); Возврат; КонецЕсли; МассивВзносов = Новый Массив;
Объект._ГодЗагрузки = Строка(ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, 4, 1));
Объект._ОрганизацияНаименование = ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, 4, 20);
Объект._СтатьяФинансированияНаименование = ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, 8, 20);
Объект._СтатьяРасходовКод = "211";
Объект.МесяцЗагрузки = Число(ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, 4, 1));
НачальнаяСтрока = 0; НачальнаяСтрока = 0;
Для Ном = 17 По 30 Цикл Для Ном = 17 По 30 Цикл
ФТ = СокрЛП(ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 1)); ФТ = СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|A" + Ном).Текст);
Если Не ЗначениеЗаполнено(ФТ) Тогда Продолжить; КонецЕсли; Если Не ЗначениеЗаполнено(ФТ) Тогда Продолжить; КонецЕсли;
Если Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ") И СтрДлина(ФТ) > 3 Тогда Если Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ") И СтрДлина(ФТ) > 3 Тогда
НачальнаяСтрока = Ном; Прервать; НачальнаяСтрока = Ном; Прервать;
КонецЕсли; КонецЕсли;
КонецЦикла; КонецЦикла;
Если НачальнаяСтрока = 0 Тогда Сообщить("Данные не найдены!"); Возврат; КонецЕсли; Если НачальнаяСтрока = 0 Тогда
МассивДанных = Новый Массив; Сообщить("Данные не найдены!");
МассивВзносов = Новый Массив; Возврат Неопределено;
МассивНДФЛ = Новый Массив; КонецЕсли;
МассивСотрудников = Новый Массив;
Счетчик = 0; Счетчик = 0;
Для Ном = НачальнаяСтрока По 500 Цикл Для Ном = НачальнаяСтрока По 500 Цикл
ФИОТекст = СокрЛП(ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 1)); ФИОТекст = СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|A" + Ном).Текст);
Если Не ЗначениеЗаполнено(ФИОТекст) Тогда Продолжить; КонецЕсли; Если Не ЗначениеЗаполнено(ФИОТекст) Тогда Продолжить; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли;
ЛистСотр = КэшФИО.Получить(ФИОТекст); ИдСотр = КэшФИО.Получить(ФИОТекст);
Если ЛистСотр = Неопределено Тогда Продолжить; КонецЕсли; Если ИдСотр = Неопределено Тогда Продолжить; КонецЕсли;
Счетчик = Счетчик + 1; Счетчик = Счетчик + 1;
Состояние("Этап 2: " + ФИОТекст, 50 + 40 * Счетчик / 50);
Строка = ПрочитатьРасчетныеДанные(АдресТабДока, ЛистРасчет, Ном, ФИОТекст, ЛистСотр);
МассивДанных.Добавить(Строка);
МассивСотрудников.Добавить(ЛистСотр.Карточка);
Если ЛистСотр.НДФЛ <> Неопределено Тогда МассивНДФЛ.Добавить(ЛистСотр.НДФЛ); КонецЕсли;
КонецЦикла;
ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников);
СтатусЗагрузки = "Загружено: " + Счетчик + " записей";
Состояние("Готово", 100);
КонецПроцедуры
&НаКлиенте
Функция ПрочитатьРасчетныеДанные(АдресТабДока, ЛистРасчет, Ном, ФИО, ЛистСотр)
С = Новый Структура; С = Новый Структура;
С.Вставить("ФИО", ФИО); С.Вставить("ФИО", ФИОТекст);
С.Вставить("ИдентификаторСотрудника", ЛистСотр.Идентификатор); С.Вставить("ИдентификаторСотрудника", ИдСотр);
С.Вставить("Должность", ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 2)); С.Вставить("Должность", СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|B" + Ном).Текст));
С.Вставить("СчетБК", ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 3)); С.Вставить("СчетБК", СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|C" + Ном).Текст));
С.Вставить("ВидЗанятости", ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 4)); С.Вставить("ВидЗанятости", СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|D" + Ном).Текст));
С.Вставить("Оклад", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 8)); С.Вставить("КоличествоСтавок", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 7));
С.Вставить("КоличествоСтавок", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 7)); С.Вставить("Оклад", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 8));
С.Вставить("ОтработаноДней", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 6)); С.Вставить("ОтработаноДней", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 6));
С.Вставить("РабочиеЧасыПоТабелю", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 12)); С.Вставить("РабочиеЧасыПоТабелю", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 12));
С.Вставить("ДоплатаСовместительство", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 14)); С.Вставить("ДоплатаСовместительство", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 14));
С.Вставить("ДоплатаИнтенсивность", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 16)); С.Вставить("ДоплатаИнтенсивность", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 16));
С.Вставить("ДоплатаНочные", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 18)); С.Вставить("ДоплатаНочные", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 18));
С.Вставить("ДоплатаПраздничные", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 19)); С.Вставить("ДоплатаПраздничные", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 19));
С.Вставить("НадбавкаЗаКатегорию", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 21)); С.Вставить("НадбавкаЗаКатегорию", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 21));
С.Вставить("НадбавкаЗаВредность", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 22)); С.Вставить("НадбавкаЗаВредность", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 22));
С.Вставить("ПовышающийКоэффициент", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 23)); С.Вставить("ПовышающийКоэффициент", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 23));
С.Вставить("СтимулирующиеВыплаты", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 24)); С.Вставить("СтимулирующиеВыплаты", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 24));
С.Вставить("РайонныйКоэффициент", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 26)); С.Вставить("РайонныйКоэффициент", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 26));
С.Вставить("ПремияРазовая", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 28)); С.Вставить("ПремияРазовая", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 28));
С.Вставить("Отпуск", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 32)); С.Вставить("Отпуск", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 32));
С.Вставить("КомпенсацияЗаОтпуск", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 33)); С.Вставить("КомпенсацияЗаОтпуск", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 33));
С.Вставить("ВыходноеПособие", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 35)); С.Вставить("ВыходноеПособие", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 35));
С.Вставить("ДоплатаДоМРОТ", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 37)); С.Вставить("ДоплатаДоМРОТ", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 37));
С.Вставить("Родовые", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 38)); С.Вставить("Родовые", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 38));
С.Вставить("ИтогоНачислено", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 39)); С.Вставить("ИтогоНачислено", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 39));
С.Вставить("НДФЛ", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 40)); С.Вставить("НДФЛ", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 40));
С.Вставить("ПрофВзнос", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 41)); С.Вставить("ПрофВзнос", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 41));
С.Вставить("ИсполнительныеДокументы", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 42)); С.Вставить("ИсполнительныеДокументы", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 42));
С.Вставить("Аванс", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 43)); С.Вставить("Аванс", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 43));
С.Вставить("Касса1", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 46)); С.Вставить("Касса1", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 46));
С.Вставить("Касса2", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 47)); С.Вставить("Касса2", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 47));
С.Вставить("Касса3", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 48)); С.Вставить("Касса3", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 48));
С.Вставить("БезналичныеПеречисления", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 50)); С.Вставить("БезналичныеПеречисления", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 50));
С.Вставить("ВсегоНаРуки", ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, Ном, 55)); С.Вставить("ВсегоНаРуки", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 55));
С.Вставить("ЗарплатаЗаПервуюПоловину", 0); С.Вставить("ЗарплатаЗаПервуюПоловину", 0);
С.Вставить("ПремияАванс", 0); С.Вставить("ПремияАванс", 0);
С.Вставить("ВыплатыВМежрасчетный", 0); С.Вставить("ВыплатыВМежрасчетный", 0);
С.Вставить("ОтработаноДнейКалендарных", ЛистСотр.ОтработаноДнейКалендарных); С.Вставить("ОтработаноДнейКалендарных", 0);
С.Вставить("ИтогоУдержано", С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы); С.Вставить("ИтогоУдержано", С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы);
С.Вставить("ИтогоВыплачено", С.Аванс + С.Касса1 + С.Касса2 + С.Касса3 + С.БезналичныеПеречисления); С.Вставить("ИтогоВыплачено", С.Аванс + С.Касса1 + С.Касса2 + С.Касса3 + С.БезналичныеПеречисления);
Возврат С; МассивДанных.Добавить(С);
КонецФункции
#КонецОбласти
#Область СерверныеПроцедуры
&НаСервере
Функция ЗагрузитьФайлНаСервере(ПутьКФайлу) Экспорт
ФайлНаДиске = Новый Файл(ПутьКФайлу);
Если Не ФайлНаДиске.Существует() Тогда Сообщить("Файл не найден: " + ПутьКФайлу); Возврат Неопределено; КонецЕсли;
ВремКаталог = КаталогВременныхФайлов();
ИмяФайла = "temp_load" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMddHHmmss") + ФайлНаДиске.Расширение;
ПутьВрем = ВремКаталог + ИмяФайла;
КопироватьФайл(ПутьКФайлу, ПутьВрем);
ТаблДок = Новый ТабличныйДокумент;
ТаблДок.Прочитать(ПутьВрем);
УдалитьФайлы(ПутьВрем);
Возврат ПоместитьВоВременноеХранилище(ТаблДок);
КонецФункции
&НаСервере
Функция ПолучитьЛистыНаСервере(АдресТабДока) Экспорт
ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
Список = Новый Массив;
Для Каждого Область Из ТаблДок.Области Цикл
Если Область.ТипОбласти = 1 Тогда
Список.Добавить(Новый Структура("Имя", Область.Имя));
КонецЕсли;
КонецЦикла; КонецЦикла;
Возврат Список;
// Возвращаем результат
Результат = Новый Структура;
Результат.Вставить("ГодЗагрузки", ГодЗагрузки);
Результат.Вставить("МесяцЗагрузки", МесяцЗагрузки);
Результат.Вставить("Организация", Организация);
Результат.Вставить("СтатьяФинансирования", СтатьяФинансирования);
Результат.Вставить("Данные", МассивДанных);
Результат.Вставить("Взносы", МассивВзносов);
Результат.Вставить("НДФЛ", МассивНДФЛ);
Результат.Вставить("Сотрудники", МассивСотрудников);
Возврат Результат;
КонецФункции КонецФункции
&НаСервере &НаСервере
Функция НайтиЛистНаСервере(АдресТабДока, ИмяЛиста) Экспорт Функция ПрочитатьЧислоИзТД(ТаблДок, ИмяОбласти, Строка, Колонка)
ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
Для Каждого Область Из ТаблДок.Области Цикл
Если Область.ТипОбласти = 1 Тогда
Если ВРег(Область.Имя) = ВРег(ИмяЛиста) Тогда Возврат Область.Имя; КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаСервере
Функция ПрочитатьСтрокуНаСервере(АдресТабДока, ИмяОбласти, Строка, Колонка) Экспорт
ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока);
Попытка Попытка
Область = ТаблДок.Область(ИмяОбласти + "|C" + Колонка + "|" + Строка + "|" + Строка); Значение = ТаблДок.Область(ИмяОбласти + "|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; КонецЕсли;
Возврат Число(СокрЛП(Значение)); Возврат Число(СокрЛП(Значение));
Исключение Исключение