diff --git a/Configuration.xml b/Configuration.xml index 8018b8e..ecbc10a 100755 --- a/Configuration.xml +++ b/Configuration.xml @@ -56,7 +56,7 @@ Russian ООО "Профи-Софт", код партнера 42575-13, г.Байконур. - 3.0.0.108 + 3.0.0.109 Language.Русский diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl index 1b21ee4..4574577 100644 --- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl @@ -5,8 +5,6 @@ КонецПроцедуры - - &НаСервере Процедура ЗаписатьДанныеНаСервере(ГодЗагрузкиПараметр, МесяцЗагрузки, ОрганизацияНаименование, СтатьяФинансированияНаименование, СтатьяРасходовКод) Период = Дата(Год(ТекущаяДата()), МесяцЗагрузки, 1); @@ -38,15 +36,21 @@ Сообщить("Выберите файл!"); Возврат; КонецЕсли; - Состояние("Загрузка файла..."); - АдресТабДока = ЗагрузитьФайлНаСервере(Объект.ПутьКФайлу); - Если АдресТабДока = Неопределено Тогда + Состояние("Загрузка и чтение файла..."); + Результат = ПрочитатьФайлНаСервере(Объект.ПутьКФайлу); + Если Результат = Неопределено Тогда Сообщить("Ошибка загрузки файла!"); Возврат; КонецЕсли; - Состояние("Чтение данных..."); - ПрочитатьДанные(АдресТабДока); - СтатусЗагрузки = "Загружено: " + Объект.Сотрудники.Количество() + " сотр., " + Объект.ДанныеРасчетаЗП.Количество() + " записей"; + // Заполняем реквизиты формы + Объект._ГодЗагрузки = Результат.ГодЗагрузки; + Объект.МесяцЗагрузки = Результат.МесяцЗагрузки; + Объект._ОрганизацияНаименование = Результат.Организация; + Объект._СтатьяФинансированияНаименование = Результат.СтатьяФинансирования; + Объект._СтатьяРасходовКод = "211"; + // Заполняем таблицы + ЗаполнитьТаблицыНаСервере(Результат.Данные, Результат.Взносы, Результат.НДФЛ, Результат.Сотрудники); + СтатусЗагрузки = "Загружено: " + Результат.Данные.Количество() + " записей, " + Результат.Сотрудники.Количество() + " сотр."; Состояние("Готово", 100); КонецПроцедуры @@ -63,237 +67,172 @@ #КонецОбласти -#Область ЧтениеДанных +#Область СерверныеПроцедуры + +// Главная функция: читает Excel файл целиком на сервере и возвращает структуру результатов +&НаСервере +Функция ПрочитатьФайлНаСервере(ПутьКФайлу) Экспорт + ФайлНаДиске = Новый Файл(ПутьКФайлу); + Если Не ФайлНаДиске.Существует() Тогда + Сообщить("Файл не найден: " + ПутьКФайлу); + Возврат Неопределено; + КонецЕсли; + // Копируем во временный каталог (обход проблем с кириллицей) + ВремКаталог = КаталогВременныхФайлов(); + ИмяФайла = "temp_load" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMddHHmmss") + ФайлНаДиске.Расширение; + ПутьВрем = ВремКаталог + ИмяФайла; + КопироватьФайл(ПутьКФайлу, ПутьВрем); + // Читаем в ТабличныйДокумент + ТаблДок = Новый ТабличныйДокумент; + ТаблДок.Прочитать(ПутьВрем); + УдалитьФайлы(ПутьВрем); + + // Проверяем наличие листа "Расчет" + ЛистРасчет = Неопределено; + Для Каждого Область Из ТаблДок.Области Цикл + Если Область.ТипОбласти = 1 И ВРег(Область.Имя) = "РАСЧЕТ" Тогда + ЛистРасчет = Область.Имя; + Прервать; + КонецЕсли; + КонецЦикла; + Если ЛистРасчет = Неопределено Тогда + Сообщить("Лист 'Расчет' не найден!"); + Возврат Неопределено; + КонецЕсли; + + // Читаем шапку листа "Расчет" + ГодЗагрузки = "" + ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, 4, 1); + МесяцЗагрузки = Число(ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, 4, 1)); + Организация = СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|T4").Текст); + СтатьяФинансирования = СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|T8").Текст); -&НаКлиенте -Процедура ПрочитатьДанные(АдресТабДока) // === ЭТАП 1: Обход листов сотрудников === - Листы = ПолучитьЛистыНаСервере(АдресТабДока); КэшФИО = Новый Соответствие; - МассивДанных = Новый Массив; - МассивВзносов = Новый Массив; - МассивНДФЛ = Новый Массив; МассивСотрудников = Новый Массив; + МассивНДФЛ = Новый Массив; Счетчик = 0; - Для Каждого Лист Из Листы Цикл - ФИО = ПрочитатьСтрокуНаСервере(АдресТабДока, Лист.Имя, 2, 3); + Для Каждого Область Из ТаблДок.Области Цикл + Если Область.ТипОбласти <> 1 Тогда Продолжить; КонецЕсли; + ИмяЛиста = Область.Имя; + Если ВРег(ИмяЛиста) = "РАСЧЕТ" Тогда Продолжить; КонецЕсли; + ФИО = СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|C2").Текст); Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли; Счетчик = Счетчик + 1; - Состояние("Этап 1: " + ФИО, 20 + 30 * Счетчик / 50); - Карточка = ПрочитатьКарточкуНаСервере(АдресТабДока, Лист.Имя); - Карточка.Вставить("Идентификатор", Счетчик); + // Карточка сотрудника + Карточка = Новый Структура; Карточка.Вставить("ФИО", ФИО); - ДанныеНДФЛ = ПрочитатьНДФЛНаСервере(АдресТабДока, Лист.Имя, Объект.МесяцЗагрузки, ФИО); - Если ДанныеНДФЛ <> Неопределено Тогда ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик); КонецЕсли; - СтрокаМесяца = 35 + Объект.МесяцЗагрузки; - ОтрДнейКал = ПрочитатьЧислоНаСервере(АдресТабДока, Лист.Имя, СтрокаМесяца, 4); - КэшФИО.Вставить(ФИО, Новый Структура("Карточка, НДФЛ, ОтработаноДнейКалендарных, Идентификатор", Карточка, ДанныеНДФЛ, ОтрДнейКал, Счетчик)); + Карточка.Вставить("ИНН", ""); + Карточка.Вставить("СНИЛС", ""); + Карточка.Вставить("ЛицевойСчетВБанке", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|D3").Текст)); + Карточка.Вставить("ВидЗанятости", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|A5").Текст)); + Карточка.Вставить("АдресРегистрации", ""); + Карточка.Вставить("Идентификатор", Счетчик); + МассивСотрудников.Добавить(Карточка); + // НДФЛ + СтрокаМесяца = 35 + МесяцЗагрузки; + Если СтрокаМесяца <= 47 Тогда + ДанныеНДФЛ = Новый Структура; + ДанныеНДФЛ.Вставить("ФИО", ФИО); + ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик); + ДанныеНДФЛ.Вставить("МесяцРасчета", СокрЛП("" + ТаблДок.Область(ИмяЛиста + "|A" + СтрокаМесяца).Текст)); + ДанныеНДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 4)); + ДанныеНДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 8)); + ДанныеНДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 12)); + ДанныеНДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 13)); + ДанныеНДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 18)); + ДанныеНДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 23)); + ДанныеНДФЛ.Вставить("ИтогоФСС", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 37)); + МассивНДФЛ.Добавить(ДанныеНДФЛ); + КонецЕсли; + КэшФИО.Вставить(ФИО, Счетчик); КонецЦикла; // === ЭТАП 2: Чтение листа "Расчет" === - ЛистРасчет = НайтиЛистНаСервере(АдресТабДока, "Расчет"); - Если ЛистРасчет = Неопределено Тогда Сообщить("Лист 'Расчет' не найден!"); Возврат; КонецЕсли; - Объект._ГодЗагрузки = Строка(ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, 4, 1)); - Объект._ОрганизацияНаименование = ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, 4, 20); - Объект._СтатьяФинансированияНаименование = ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, 8, 20); - Объект._СтатьяРасходовКод = "211"; - Объект.МесяцЗагрузки = Число(ПрочитатьЧислоНаСервере(АдресТабДока, ЛистРасчет, 4, 1)); + МассивДанных = Новый Массив; + МассивВзносов = Новый Массив; НачальнаяСтрока = 0; Для Ном = 17 По 30 Цикл - ФТ = СокрЛП(ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 1)); + ФТ = СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|A" + Ном).Текст); Если Не ЗначениеЗаполнено(ФТ) Тогда Продолжить; КонецЕсли; Если Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ") И СтрДлина(ФТ) > 3 Тогда НачальнаяСтрока = Ном; Прервать; КонецЕсли; КонецЦикла; - Если НачальнаяСтрока = 0 Тогда Сообщить("Данные не найдены!"); Возврат; КонецЕсли; - МассивДанных = Новый Массив; - МассивВзносов = Новый Массив; - МассивНДФЛ = Новый Массив; - МассивСотрудников = Новый Массив; + Если НачальнаяСтрока = 0 Тогда + Сообщить("Данные не найдены!"); + Возврат Неопределено; + КонецЕсли; + Счетчик = 0; Для Ном = НачальнаяСтрока По 500 Цикл - ФИОТекст = СокрЛП(ПрочитатьСтрокуНаСервере(АдресТабДока, ЛистРасчет, Ном, 1)); + ФИОТекст = СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|A" + Ном).Текст); Если Не ЗначениеЗаполнено(ФИОТекст) Тогда Продолжить; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли; - ЛистСотр = КэшФИО.Получить(ФИОТекст); - Если ЛистСотр = Неопределено Тогда Продолжить; КонецЕсли; + ИдСотр = КэшФИО.Получить(ФИОТекст); + Если ИдСотр = Неопределено Тогда Продолжить; КонецЕсли; Счетчик = Счетчик + 1; - Состояние("Этап 2: " + ФИОТекст, 50 + 40 * Счетчик / 50); - Строка = ПрочитатьРасчетныеДанные(АдресТабДока, ЛистРасчет, Ном, ФИОТекст, ЛистСотр); - МассивДанных.Добавить(Строка); - МассивСотрудников.Добавить(ЛистСотр.Карточка); - Если ЛистСотр.НДФЛ <> Неопределено Тогда МассивНДФЛ.Добавить(ЛистСотр.НДФЛ); КонецЕсли; + С = Новый Структура; + С.Вставить("ФИО", ФИОТекст); + С.Вставить("ИдентификаторСотрудника", ИдСотр); + С.Вставить("Должность", СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|B" + Ном).Текст)); + С.Вставить("СчетБК", СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|C" + Ном).Текст)); + С.Вставить("ВидЗанятости", СокрЛП("" + ТаблДок.Область(ЛистРасчет + "|D" + Ном).Текст)); + С.Вставить("КоличествоСтавок", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 7)); + С.Вставить("Оклад", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 8)); + С.Вставить("ОтработаноДней", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 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); + С.Вставить("ОтработаноДнейКалендарных", 0); + С.Вставить("ИтогоУдержано", С.НДФЛ + С.ПрофВзнос + С.ИсполнительныеДокументы); + С.Вставить("ИтогоВыплачено", С.Аванс + С.Касса1 + С.Касса2 + С.Касса3 + С.БезналичныеПеречисления); + МассивДанных.Добавить(С); КонецЦикла; - ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников); - СтатусЗагрузки = "Загружено: " + Счетчик + " записей"; - Состояние("Готово", 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 + С.БезналичныеПеречисления); - Возврат С; -КонецФункции - -#КонецОбласти - -#Область СерверныеПроцедуры - -&НаСервере -Функция ЗагрузитьФайлНаСервере(ПутьКФайлу) Экспорт - ФайлНаДиске = Новый Файл(ПутьКФайлу); - Если Не ФайлНаДиске.Существует() Тогда Сообщить("Файл не найден: " + ПутьКФайлу); Возврат Неопределено; КонецЕсли; - ВремКаталог = КаталогВременныхФайлов(); - ИмяФайла = "temp_load" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMddHHmmss") + ФайлНаДиске.Расширение; - ПутьВрем = ВремКаталог + ИмяФайла; - КопироватьФайл(ПутьКФайлу, ПутьВрем); - ТаблДок = Новый ТабличныйДокумент; - ТаблДок.Прочитать(ПутьВрем); - УдалитьФайлы(ПутьВрем); - Возврат ПоместитьВоВременноеХранилище(ТаблДок); + // Возвращаем результат + Результат = Новый Структура; + Результат.Вставить("ГодЗагрузки", ГодЗагрузки); + Результат.Вставить("МесяцЗагрузки", МесяцЗагрузки); + Результат.Вставить("Организация", Организация); + Результат.Вставить("СтатьяФинансирования", СтатьяФинансирования); + Результат.Вставить("Данные", МассивДанных); + Результат.Вставить("Взносы", МассивВзносов); + Результат.Вставить("НДФЛ", МассивНДФЛ); + Результат.Вставить("Сотрудники", МассивСотрудников); + Возврат Результат; КонецФункции &НаСервере -Функция ПолучитьЛистыНаСервере(АдресТабДока) Экспорт - ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока); - Список = Новый Массив; - Для Каждого Область Из ТаблДок.Области Цикл - Если Область.ТипОбласти = 1 Тогда - Список.Добавить(Новый Структура("Имя", Область.Имя)); - КонецЕсли; - КонецЦикла; - Возврат Список; -КонецФункции - -&НаСервере -Функция НайтиЛистНаСервере(АдресТабДока, ИмяЛиста) Экспорт - ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока); - Для Каждого Область Из ТаблДок.Области Цикл - Если Область.ТипОбласти = 1 Тогда - Если ВРег(Область.Имя) = ВРег(ИмяЛиста) Тогда Возврат Область.Имя; КонецЕсли; - КонецЕсли; - КонецЦикла; - Возврат Неопределено; -КонецФункции - -&НаСервере -Функция ПрочитатьСтрокуНаСервере(АдресТабДока, ИмяОбласти, Строка, Колонка) Экспорт - ТаблДок = ПолучитьИзВременногоХранилища(АдресТабДока); +Функция ПрочитатьЧислоИзТД(ТаблДок, ИмяОбласти, Строка, Колонка) Попытка - Область = ТаблДок.Область(ИмяОбласти + "|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" + Колонка + "|" + Строка + "|" + Строка); - Значение = Область.Текст; + Значение = ТаблДок.Область(ИмяОбласти + "|C" + Колонка + "|" + Строка + "|" + Строка).Текст; Если Не ЗначениеЗаполнено(Значение) Тогда Возврат 0; КонецЕсли; Возврат Число(СокрЛП(Значение)); Исключение