From e917b0a81845e8439093afa1af37482aafd4f9a5 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, 20 Jul 2026 14:08:41 +0000 Subject: [PATCH] v3.0.0.92 --- Configuration.xml | 2 +- .../Forms/Форма/Ext/Form/Module.bsl | 365 +++++++++++------- 2 files changed, 234 insertions(+), 133 deletions(-) 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; + КонецПопытки; +КонецФункции + &НаСервере -Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников) Экспорт - ТЧЗП = Объект.ДанныеРасчетаЗП; - ТЧВзносы = Объект.ДанныеСтраховыхВзносов; - ТЧНДФЛ = Объект.ДанныеНДФЛ; - ТЧСотрудники = Объект.Сотрудники; - ТЧЗП.Очистить(); ТЧВзносы.Очистить(); ТЧНДФЛ.Очистить(); ТЧСотрудники.Очистить(); - Для Каждого Строка Из МассивДанных Цикл - НоваяСтрока = ТЧЗП.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); - КонецЦикла; - Для Каждого Строка Из МассивВзносов Цикл - НоваяСтрока = ТЧВзносы.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); - КонецЦикла; - Для Каждого Строка Из МассивНДФЛ Цикл - НоваяСтрока = ТЧНДФЛ.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); - КонецЦикла; - Для Каждого Строка Из МассивСотрудников Цикл - НоваяСтрока = ТЧСотрудники.Добавить(); - ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); - КонецЦикла; +Процедура ЗаполнитьТаблицыНаСервере(МассивДанных, МассивВзносов, МассивНДФЛ, МассивСотрудников) + Объект.ДанныеРасчетаЗП.Очистить(); + Объект.ДанныеСтраховыхВзносов.Очистить(); + Объект.ДанныеНДФЛ.Очистить(); + Объект.Сотрудники.Очистить(); + Для Каждого Строка Из МассивДанных Цикл НоваяСтрока = Объект.ДанныеРасчетаЗП.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла; + Для Каждого Строка Из МассивВзносов Цикл НоваяСтрока = Объект.ДанныеСтраховыхВзносов.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла; + Для Каждого Строка Из МассивНДФЛ Цикл НоваяСтрока = Объект.ДанныеНДФЛ.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла; + Для Каждого Строка Из МассивСотрудников Цикл НоваяСтрока = Объект.Сотрудники.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, Строка); КонецЦикла; КонецПроцедуры #КонецОбласти