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
+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.119</Version> <Version>3.0.0.120</Version>
<Caption/> <Caption/>
<ShortCaption/> <ShortCaption/>
<DefaultLanguage>Language.Русский</DefaultLanguage> <DefaultLanguage>Language.Русский</DefaultLanguage>
@@ -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, 1)); МесяцЗагрузки = Число(ПрочитатьЧислоИзТД(ТаблДок, ВерхРасчет, 4, 1));
Организация = СокрЛП(ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, 4, 20)); Организация = СокрЛП(ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, 4, 20));
СтатьяФинансирования = СокрЛП(ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, 8, 20)); СтатьяФинансирования = СокрЛП(ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, 8, 20));
// === ЭТАП 1: Обход листов сотрудников === // === ЭТАП 1: Обход листов сотрудников ===
КэшФИО = Новый Соответствие; КэшФИО = Новый Соответствие;
@@ -130,9 +113,9 @@
МассивНДФЛ = Новый Массив; МассивНДФЛ = Новый Массив;
Счетчик = 0; Счетчик = 0;
Для Каждого Область Из ТаблДок.Области Цикл Для Каждого Область Из ТаблДок.Области Цикл
ИмяЛиста = Область.Имя; Если Область.Верх = ВерхРасчет Тогда Продолжить; КонецЕсли;
Если ВРег(ИмяЛиста) = "РАСЧЕТ" Тогда Продолжить; КонецЕсли; Вх = Область.Верх;
ФИО = ПрочитатьСтрокуИзТД(ТаблДок, ИмяЛиста, 2, 3); ФИО = ПрочитатьСтрокуИзТД(ТаблДок, Вх, 2, 3);
Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли; Если Не ЗначениеЗаполнено(ФИО) Тогда Продолжить; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИО), "ИТОГО") Тогда Продолжить; КонецЕсли;
Счетчик = Счетчик + 1; Счетчик = Счетчик + 1;
@@ -141,8 +124,8 @@
Карточка.Вставить("ФИО", ФИО); Карточка.Вставить("ФИО", ФИО);
Карточка.Вставить("ИНН", ""); Карточка.Вставить("ИНН", "");
Карточка.Вставить("СНИЛС", ""); Карточка.Вставить("СНИЛС", "");
Карточка.Вставить("ЛицевойСчетВБанке", ПрочитатьСтрокуИзТД(ТаблДок, ИмяЛиста, 3, 4)); Карточка.Вставить("ЛицевойСчетВБанке", ПрочитатьСтрокуИзТД(ТаблДок, Вх, 3, 4));
Карточка.Вставить("ВидЗанятости", ПрочитатьСтрокуИзТД(ТаблДок, ИмяЛиста, 5, 1)); Карточка.Вставить("ВидЗанятости", ПрочитатьСтрокуИзТД(ТаблДок, Вх, 5, 1));
Карточка.Вставить("АдресРегистрации", ""); Карточка.Вставить("АдресРегистрации", "");
Карточка.Вставить("Идентификатор", Счетчик); Карточка.Вставить("Идентификатор", Счетчик);
МассивСотрудников.Добавить(Карточка); МассивСотрудников.Добавить(Карточка);
@@ -152,14 +135,14 @@
ДанныеНДФЛ = Новый Структура; ДанныеНДФЛ = Новый Структура;
ДанныеНДФЛ.Вставить("ФИО", ФИО); ДанныеНДФЛ.Вставить("ФИО", ФИО);
ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик); ДанныеНДФЛ.Вставить("ИдентификаторСотрудника", Счетчик);
ДанныеНДФЛ.Вставить("МесяцРасчета", ПрочитатьСтрокуИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 1)); ДанныеНДФЛ.Вставить("МесяцРасчета", ПрочитатьСтрокуИзТД(ТаблДок, Вх, СтрокаМесяца, 1));
ДанныеНДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 4)); ДанныеНДФЛ.Вставить("СуммаВаловогоДохода", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 4));
ДанныеНДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 8)); ДанныеНДФЛ.Вставить("СкидкаДляНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 8));
ДанныеНДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 12)); ДанныеНДФЛ.Вставить("ВычетНаРаботникаЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 12));
ДанныеНДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 13)); ДанныеНДФЛ.Вставить("ВычетНаИждивенцевЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 13));
ДанныеНДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 18)); ДанныеНДФЛ.Вставить("ИтогоНДФЛЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 18));
ДанныеНДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 23)); ДанныеНДФЛ.Вставить("НалоговаяБазаПоСВЗаМесяц", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 23));
ДанныеНДФЛ.Вставить("ИтогоФСС", ПрочитатьЧислоИзТД(ТаблДок, ИмяЛиста, СтрокаМесяца, 37)); ДанныеНДФЛ.Вставить("ИтогоФСС", ПрочитатьЧислоИзТД(ТаблДок, Вх, СтрокаМесяца, 37));
МассивНДФЛ.Добавить(ДанныеНДФЛ); МассивНДФЛ.Добавить(ДанныеНДФЛ);
КонецЕсли; КонецЕсли;
КэшФИО.Вставить(ФИО, Счетчик); КэшФИО.Вставить(ФИО, Счетчик);
@@ -170,7 +153,7 @@
МассивВзносов = Новый Массив; МассивВзносов = Новый Массив;
НачальнаяСтрока = 0; НачальнаяСтрока = 0;
Для Ном = 17 По 30 Цикл Для Ном = 17 По 30 Цикл
ФТ = ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 1); ФТ = ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 1);
Если Не ЗначениеЗаполнено(ФТ) Тогда Продолжить; КонецЕсли; Если Не ЗначениеЗаполнено(ФТ) Тогда Продолжить; КонецЕсли;
Если Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ") И СтрДлина(ФТ) > 3 Тогда Если Не СтрНачинаетсяС(ВРег(ФТ), "ИТОГО") И Не СтрНачинаетсяС(ВРег(ФТ), "СОТРУДНИК") И Не СтрНачинаетсяС(ВРег(ФТ), "ФАМИЛИЯ") И СтрДлина(ФТ) > 3 Тогда
НачальнаяСтрока = Ном; Прервать; НачальнаяСтрока = Ном; Прервать;
@@ -183,7 +166,7 @@
Счетчик = 0; Счетчик = 0;
Для Ном = НачальнаяСтрока По 500 Цикл Для Ном = НачальнаяСтрока По 500 Цикл
ФИОТекст = ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 1); ФИОТекст = ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 1);
Если Не ЗначениеЗаполнено(ФИОТекст) Тогда Продолжить; КонецЕсли; Если Не ЗначениеЗаполнено(ФИОТекст) Тогда Продолжить; КонецЕсли;
Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли; Если СтрНачинаетсяС(ВРег(ФИОТекст), "ИТОГО") Тогда Прервать; КонецЕсли;
ИдСотр = КэшФИО.Получить(ФИОТекст); ИдСотр = КэшФИО.Получить(ФИОТекст);
@@ -192,38 +175,38 @@
С = Новый Структура; С = Новый Структура;
С.Вставить("ФИО", ФИОТекст); С.Вставить("ФИО", ФИОТекст);
С.Вставить("ИдентификаторСотрудника", ИдСотр); С.Вставить("ИдентификаторСотрудника", ИдСотр);
С.Вставить("Должность", ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 2)); С.Вставить("Должность", ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 2));
С.Вставить("СчетБК", ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 3)); С.Вставить("СчетБК", ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 3));
С.Вставить("ВидЗанятости", ПрочитатьСтрокуИзТД(ТаблДок, ЛистРасчет, Ном, 4)); С.Вставить("ВидЗанятости", ПрочитатьСтрокуИзТД(ТаблДок, ВерхРасчет, Ном, 4));
С.Вставить("КоличествоСтавок", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 7)); С.Вставить("КоличествоСтавок", ПрочитатьЧислоИзТД(ТаблДок, ВерхРасчет, Ном, 7));
С.Вставить("Оклад", ПрочитатьЧислоИзТД(ТаблДок, ЛистРасчет, Ном, 8)); С.Вставить("Оклад", ПрочитатьЧислоИзТД(ТаблДок, ВерхРасчет, Ном, 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);
@@ -247,9 +230,10 @@
КонецФункции КонецФункции
&НаСервере &НаСервере
Функция ПрочитатьЧислоИзТД(ТаблДок, ИмяОбласти, Строка, Колонка) Функция ПрочитатьЧислоИзТД(ТаблДок, ВерхОбласти, Строка, Колонка)
Попытка Попытка
Значение = ТаблДок.Область(ИмяОбласти + "|R" + Строка + "C" + Колонка).Текст; АбсСтрока = ВерхОбласти + Строка - 1;
Значение = ТаблДок.Область(АбсСтрока, Колонка, АбсСтрока, Колонка).Текст;
Если Не ЗначениеЗаполнено(Значение) Тогда Возврат 0; КонецЕсли; Если Не ЗначениеЗаполнено(Значение) Тогда Возврат 0; КонецЕсли;
Возврат Число(СокрЛП(Значение)); Возврат Число(СокрЛП(Значение));
Исключение Исключение
@@ -258,9 +242,10 @@
КонецФункции КонецФункции
&НаСервере &НаСервере
Функция ПрочитатьСтрокуИзТД(ТаблДок, ИмяОбласти, Строка, Колонка) Функция ПрочитатьСтрокуИзТД(ТаблДок, ВерхОбласти, Строка, Колонка)
Попытка Попытка
Возврат СокрЛП("" + ТаблДок.Область(ИмяОбласти + "|R" + Строка + "C" + Колонка).Текст); АбсСтрока = ВерхОбласти + Строка - 1;
Возврат СокрЛП("" + ТаблДок.Область(АбсСтрока, Колонка, АбсСтрока, Колонка).Текст);
Исключение Исключение
Возврат ""; Возврат "";
КонецПопытки; КонецПопытки;