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;
+ Возврат СокрЛП("" + ТаблДок.Область(АбсСтрока, Колонка, АбсСтрока, Колонка).Текст);
Исключение
Возврат "";
КонецПопытки;