v3.0.0.8: formula-based reading for xlsm - follow references to employee sheets
This commit is contained in:
+1
-1
@@ -60,7 +60,7 @@
|
|||||||
<ScriptVariant>Russian</ScriptVariant>
|
<ScriptVariant>Russian</ScriptVariant>
|
||||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
<Vendor>ООО "Профи-Софт", код партнера 42575-13, г.Байконур.</Vendor>
|
<Vendor>ООО "Профи-Софт", код партнера 42575-13, г.Байконур.</Vendor>
|
||||||
<Version>3.0.0.6</Version>
|
<Version>3.0.0.7</Version>
|
||||||
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
<DefaultLanguage>Language.Русский</DefaultLanguage>
|
||||||
<BriefInformation>
|
<BriefInformation>
|
||||||
<v8:item>
|
<v8:item>
|
||||||
|
|||||||
@@ -111,6 +111,22 @@
|
|||||||
КонецПопытки;
|
КонецПопытки;
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
// Извлекает имя листа сотрудника из формулы вида ='ИмяЛиста'!C2
|
||||||
|
// Возвращает имя листа или пустую строку.
|
||||||
|
&НаКлиенте
|
||||||
|
Функция ИзвлечьИмяЛистаИзФормулы(Формула)
|
||||||
|
Если Формула = Неопределено Тогда Возврат ""; КонецЕсли;
|
||||||
|
ТекстФормулы = СокрЛП("" + Формула);
|
||||||
|
Если Не СтрНачинаетсяС(ТекстФормулы, "='") Тогда Возврат ""; КонецЕсли;
|
||||||
|
|
||||||
|
// Ищем закрывающую кавычку после ='
|
||||||
|
ПозицияНачала = 3; // после ='
|
||||||
|
ПозицияКонца = СтрНайти(ТекстФормулы, "'!", , , ПозицияНачала);
|
||||||
|
Если ПозицияКонца = 0 Тогда Возврат ""; КонецЕсли;
|
||||||
|
|
||||||
|
Возврат Сред(ТекстФормулы, ПозицияНачала, ПозицияКонца - ПозицияНачала);
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
// Ищет лист по имени (регистронезависимо).
|
// Ищет лист по имени (регистронезависимо).
|
||||||
&НаКлиенте
|
&НаКлиенте
|
||||||
Функция НайтиЛист(Книга, ИмяЛиста)
|
Функция НайтиЛист(Книга, ИмяЛиста)
|
||||||
@@ -387,8 +403,24 @@
|
|||||||
КоличествоСтрок = ЛистРасчет.Rows.Count;
|
КоличествоСтрок = ЛистРасчет.Rows.Count;
|
||||||
|
|
||||||
Пока Истина Цикл
|
Пока Истина Цикл
|
||||||
|
// Попытка 1: читаем значение напрямую (xls)
|
||||||
ФИО = ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 0);
|
ФИО = ПрочитатьЯчейкуСтрока(ЛистРасчет, Ном, 0);
|
||||||
|
|
||||||
|
// Попытка 2: если значение пустое — проверяем формулу (xlsm)
|
||||||
|
ЛистСотрудника = Неопределено;
|
||||||
|
Если Не ЗначениеЗаполнено(ФИО) Тогда
|
||||||
|
Формула = ЛистРасчет.Cells(Ном, 1).Formula;
|
||||||
|
Если ЗначениеЗаполнено(Формула) Тогда
|
||||||
|
ИмяЛиста = ИзвлечьИмяЛистаИзФормулы(Формула);
|
||||||
|
Если ЗначениеЗаполнено(ИмяЛиста) Тогда
|
||||||
|
ЛистСотрудника = НайтиЛист(КонтекстExcel.Книга, ИмяЛиста);
|
||||||
|
Если ЛистСотрудника <> Неопределено Тогда
|
||||||
|
ФИО = ПрочитатьЯчейкуСтрока(ЛистСотрудника, 2, 3);
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
Если Не ЗначениеЗаполнено(ФИО) Тогда
|
Если Не ЗначениеЗаполнено(ФИО) Тогда
|
||||||
ПустыхПодряд = ПустыхПодряд + 1;
|
ПустыхПодряд = ПустыхПодряд + 1;
|
||||||
Если ПустыхПодряд >= МаксПустых Тогда Прервать; КонецЕсли;
|
Если ПустыхПодряд >= МаксПустых Тогда Прервать; КонецЕсли;
|
||||||
@@ -403,8 +435,12 @@
|
|||||||
ПрогрессЗаписи = 25 + 65 * (Ном - 1) / Макс(КоличествоСтрок, 1);
|
ПрогрессЗаписи = 25 + 65 * (Ном - 1) / Макс(КоличествоСтрок, 1);
|
||||||
Состояние("Расчет ЗП: " + ФИО, ПрогрессЗаписи);
|
Состояние("Расчет ЗП: " + ФИО, ПрогрессЗаписи);
|
||||||
|
|
||||||
// Чтение расчетных данных
|
// Если есть лист сотрудника — читаем из него, иначе из РАСЧЕТ
|
||||||
Строка = ПрочитатьСтрокуРасчета(ЛистРасчет, Ном, ФИО, ИндексЗаголовков);
|
Если ЛистСотрудника <> Неопределено Тогда
|
||||||
|
Строка = ПрочитатьСтрокуРасчета(ЛистСотрудника, 2, ФИО, ИндексЗаголовков);
|
||||||
|
Иначе
|
||||||
|
Строка = ПрочитатьСтрокуРасчета(ЛистРасчет, Ном, ФИО, ИндексЗаголовков);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
// Чтение личных данных
|
// Чтение личных данных
|
||||||
ЛичныеДанные = ПрочитатьЛичныеДанные(КонтекстExcel.Книга, ФИО);
|
ЛичныеДанные = ПрочитатьЛичныеДанные(КонтекстExcel.Книга, ФИО);
|
||||||
@@ -415,7 +451,11 @@
|
|||||||
МассивДанных.Добавить(Строка);
|
МассивДанных.Добавить(Строка);
|
||||||
|
|
||||||
// Чтение страховых взносов
|
// Чтение страховых взносов
|
||||||
СтрВзносов = ПрочитатьСтрокуВзносов(ЛистРасчет, Ном, ФИО, ИндексЗаголовков);
|
Если ЛистСотрудника <> Неопределено Тогда
|
||||||
|
СтрВзносов = ПрочитатьСтрокуВзносов(ЛистСотрудника, 2, ФИО, ИндексЗаголовков);
|
||||||
|
Иначе
|
||||||
|
СтрВзносов = ПрочитатьСтрокуВзносов(ЛистРасчет, Ном, ФИО, ИндексЗаголовков);
|
||||||
|
КонецЕсли;
|
||||||
Если СтрВзносов <> Неопределено Тогда
|
Если СтрВзносов <> Неопределено Тогда
|
||||||
МассивВзносов.Добавить(СтрВзносов);
|
МассивВзносов.Добавить(СтрВзносов);
|
||||||
КонецЕсли;
|
КонецЕсли;
|
||||||
|
|||||||
Reference in New Issue
Block a user