v3.0.0.120

This commit is contained in:
Профи-Софт
2026-07-24 04:04:32 +00:00
parent 82cf0044cc
commit a973efa4c9
2 changed files with 64 additions and 79 deletions
@@ -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;
Возврат СокрЛП("" + ТаблДок.Область(АбсСтрока, Колонка, АбсСтрока, Колонка).Текст);
Исключение
Возврат "";
КонецПопытки;