From a973efa4c97a1f1be9cf916ce77fa283d37f1fe8 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: Fri, 24 Jul 2026 04:04:32 +0000 Subject: [PATCH] v3.0.0.120 --- Configuration.xml | 2 +- .../Forms/Форма/Ext/Form/Module.bsl | 141 ++++++++---------- 2 files changed, 64 insertions(+), 79 deletions(-) diff --git a/Configuration.xml b/Configuration.xml index 4cb34aa..642060d 100755 --- a/Configuration.xml +++ b/Configuration.xml @@ -56,7 +56,7 @@ Russian ООО "Профи-Софт", код партнера 42575-13, г.Байконур. - 3.0.0.119 + 3.0.0.120 Language.Русский diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl index d4011fd..1cc67eb 100644 --- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl @@ -88,41 +88,24 @@ ТаблДок.Прочитать(ПутьВрем); УдалитьФайлы(ПутьВрем); - // Диагностика: выводим все области - Сообщить("Всего областей: " + ТаблДок.Области.Количество()); + // Строим карту: ИмяОбласти -> Верх (абсолютная строка) + КартаОбластей = Новый Соответствие; Для Каждого Область Из ТаблДок.Области Цикл - Сообщить(" Область: [" + Область.Имя + "] тип=" + Область.ТипОбласти); + КартаОбластей.Вставить(Область.Имя, Область.Верх); КонецЦикла; - // Проверяем наличие листа "Расчет" - ЛистРасчет = Неопределено; - Для Каждого Область Из ТаблДок.Области Цикл - Если ВРег(Область.Имя) = "РАСЧЕТ" Тогда - ЛистРасчет = Область.Имя; - Прервать; - КонецЕсли; - КонецЦикла; - Если ЛистРасчет = Неопределено Тогда + // Находим лист "Расчет" + ВерхРасчет = КартаОбластей.Получить("Расчет"); + Если ВерхРасчет = Неопределено Тогда Сообщить("Лист 'Расчет' не найден!"); Возврат Неопределено; КонецЕсли; - Сообщить("Лист 'Расчет' найден: " + ЛистРасчет); - - // Диагностика: координаты области и чтение - ОблРасчет = ТаблДок.Области.Найти("Расчет"); - Если ОблРасчет <> Неопределено Тогда - Сообщить(" TopRow=" + ОблРасчет.Верх + " BottomRow=" + ОблРасчет.Низ); - // Абсолютные координаты: строка 4 листа = TopRow + 3 - АбсСтрока4 = ОблРасчет.Верх + 3; - Сообщить(" AbsRow4: " + СокрЛП("" + ТаблДок.Область(АбсСтрока4, 1, АбсСтрока4, 1).Текст)); - Сообщить(" AbsRow15: " + СокрЛП("" + ТаблДок.Область(ОблРасчет.Верх + 14, 1, ОблРасчет.Верх + 14, 1).Текст)); - КонецЕсли; // Читаем шапку листа "Расчет" - ГодЗагрузки = "" + ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, 4, 1); - МесяцЗагрузки = Число(ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, 4, 1)); - Организация = СокрЛП(ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, 4, 20)); - СтатьяФинансирования = СокрЛП(ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, 8, 20)); + ГодЗагрузки = "" + ПрочитатьЧислоИзТД(ТаблДок, ВерхРасчет, 4, 1); + МесяцЗагрузки = Число(ПрочитатьЧислоИзТД(ТаблДок, ВерхРасчет, 4, 1)); + Организация = СокрЛП(ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, 4, 20)); + СтатьяФинансирования = СокрЛП(ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, 8, 20)); // === ЭТАП 1: Обход листов сотрудников === КэшФИО = Новый Соответствие; @@ -130,9 +113,9 @@ МассивНДФЛ = Новый Массив; Счетчик = 0; Для Каждого Область Из ТаблДок.Области Цикл - ИмяЛиста = Область.Имя; - Если ВРег(ИмяЛиста) = "РАСЧЕТ" Тогда Продолжить; КонецЕсли; - ФИО = ПрочитатьСтрокуИзТД(ТаблДок, ИмяЛиста, 2, 3); + Если Область.Верх = ВерхРасчет Тогда Продолжить; КонецЕсли; + Вх = Область.Верх; + ФИО = ПрочитатьСтрокуИзТД(ТаблДок, Вх, 2, 3); Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли; Счетчик = Счетчик + 1; @@ -141,8 +124,8 @@ Карточка.Вставить("ФИО", ФИО); Карточка.Вставить("ИНН", ""); Карточка.Вставить("СНИЛС", ""); - Карточка.Вставить("ЛицевойСчетВБанке", ПрочитатьСтрокуИзТД(ТаблДок, ИмяЛиста, 3, 4)); - Карточка.Вставить("ВидЗанятости", ПрочитатьСтрокуИзТД(ТаблДок, ИмяЛиста, 5, 1)); + Карточка.Вставить("ЛицевойСчетВБанке", ПрочитатьСтрокуИзТД(ТаблДок, Вх, 3, 4)); + Карточка.Вставить("ВидЗанятости", ПрочитатьСтрокуИзТД(ТаблДок, Вх, 5, 1)); Карточка.Вставить("АдресРегистрации", ""); Карточка.Вставить("Идентификатор", Счетчик); МассивСотрудников.Добавить(Карточка); @@ -152,14 +135,14 @@ ДанныеНДФЛ = Новый Структура; ДанныеНДФЛ.Вставить("ФИО", ФИО); ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик); - ДанныеНДФЛ.Вставить("МесяцРасчета", ПрочитатьСтрокуИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 1)); - ДанныеНДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 4)); - ДанныеНДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 8)); - ДанныеНДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 12)); - ДанныеНДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 13)); - ДанныеНДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 18)); - ДанныеНДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 23)); - ДанныеНДФЛ.Вставить("ИтогоФСС", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 37)); + ДанныеНДФЛ.Вставить("МесяцРасчета", ПрочитатьСтрокуИзТД(ТаблДок, Вх, СтрокаМесяца, 1)); + ДанныеНДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 4)); + ДанныеНДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 8)); + ДанныеНДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 12)); + ДанныеНДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 13)); + ДанныеНДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 18)); + ДанныеНДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 23)); + ДанныеНДФЛ.Вставить("ИтогоФСС", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 37)); МассивНДФЛ.Добавить(ДанныеНДФЛ); КонецЕсли; КэшФИО.Вставить(ФИО, Счетчик); @@ -170,7 +153,7 @@ МассивВзносов = Новый Массив; НачальнаяСтрока = 0; Для Ном = 17 По 30 Цикл - ФТ = ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 1); + ФТ = ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 1); Если Не ЗначениеЗаполнено(ФТ) Тогда Продолжить; КонецЕсли; Если Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ") И СтрДлина(ФТ) > 3 Тогда НачальнаяСтрока = Ном; Прервать; @@ -183,7 +166,7 @@ Счетчик = 0; Для Ном = НачальнаяСтрока По 500 Цикл - ФИОТекст = ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 1); + ФИОТекст = ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 1); Если Не ЗначениеЗаполнено(ФИОТекст) Тогда Продолжить; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли; ИдСотр = КэшФИО.Получить(ФИОТекст); @@ -192,38 +175,38 @@ С = Новый Структура; С.Вставить("ФИО", ФИОТекст); С.Вставить("ИдентификаторСотрудника", ИдСотр); - С.Вставить("Должность", ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 2)); - С.Вставить("СчетБК", ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 3)); - С.Вставить("ВидЗанятости", ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 4)); - С.Вставить("КоличествоСтавок", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 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)); + С.Вставить("Должность", ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 2)); + С.Вставить("СчетБК", ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 3)); + С.Вставить("ВидЗанятости", ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 4)); + С.Вставить("КоличествоСтавок", ПрочитатьЧислоИзТД(ТаблДок, ВерхРасчет, Ном, 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); @@ -247,9 +230,10 @@ КонецФункции &НаСервере -Функция ПрочитатьЧислоИзТД(ТаблДок, ИмяОбласти, Строка, Колонка) +Функция ПрочитатьЧислоИзТД(ТаблДок, ВерхОбласти, Строка, Колонка) Попытка - Значение = ТаблДок.Область(ИмяОбласти + "|R" + Строка + "C" + Колонка).Текст; + АбсСтрока = ВерхОбласти + Строка - 1; + Значение = ТаблДок.Область(АбсСтрока, Колонка, АбсСтрока, Колонка).Текст; Если Не ЗначениеЗаполнено(Значение) Тогда Возврат 0; КонецЕсли; Возврат Число(СокрЛП(Значение)); Исключение @@ -258,9 +242,10 @@ КонецФункции &НаСервере -Функция ПрочитатьСтрокуИзТД(ТаблДок, ИмяОбласти, Строка, Колонка) +Функция ПрочитатьСтрокуИзТД(ТаблДок, ВерхОбласти, Строка, Колонка) Попытка - Возврат СокрЛП("" + ТаблДок.Область(ИмяОбласти + "|R" + Строка + "C" + Колонка).Текст); + АбсСтрока = ВерхОбласти + Строка - 1; + Возврат СокрЛП("" + ТаблДок.Область(АбсСтрока, Колонка, АбсСтрока, Колонка).Текст); Исключение Возврат ""; КонецПопытки;