v3.0.0.16: fix xlsm reading - direct cell access for employee sheets

This commit is contained in:
Профи-Софт
2026-07-08 21:02:42 +00:00
parent 80ae5cde84
commit e24495e2db
2 changed files with 33 additions and 3 deletions
@@ -220,6 +220,36 @@
Возврат 15;
КонецФункции
// Читает данные из листа сотрудника напрямую из ячеек.
// Формулы в РАСЧЕТ ссылаются на: C2(ФИО), C3(Должность), D3(Счет), A5(Вид занятости),
// и OFFSET-формулы для месячных данных (строка 12 + смещение по A4).
&НаКлиенте
Функция ПрочитатьДанныеИзЛистаСотрудника(ЛистСотрудника, ФИО)
Строка = Новый Структура;
Строка.Вставить("ФИО", ФИО);
Строка.Вставить("Должность", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 3, 3)); // C3
Строка.Вставить("СчетБК", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 3, 4)); // D3
Строка.Вставить("ВидЗанятости", ПрочитатьЯчейкуСтрока(ЛистСотрудника, 5, 1)); // A5
// Месяц загрузки определяет смещение для OFFSET-формул
// Базовая строка данных — строка 12, смещение = месяц
БазоваяСтрока = 12;
Смещение = Объект.МесяцЗагрузки;
Если Не ЗначениеЗаполнено(Смещение) Тогда Смещение = 1; КонецЕсли;
СтрокаДанных = БазоваяСтрока + Смещение;
// Часовая норма (столбец C, т.е. колонка 3)
Строка.Вставить("Оклад", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 3, ФИО + " Оклад"));
Строка.Вставить("КоличествоСтавок", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 4, ФИО + " Ставки"));
Строка.Вставить("ОтработаноДней", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 5, ФИО + " Отработано"));
Строка.Вставить("ИтогоНачислено", ПрочитатьЯчейкуЧисло(ЛистСотрудника, СтрокаДанных, 10, ФИО + " Итого начислено"));
Строка.Вставить("НДФЛ", 0); // НДФЛ не на листе сотрудника
Строка.Вставить("ИтогоУдержано", 0); // Удержания не на листе сотрудника
Строка.Вставить("ВсегоНаРуки", 0); // Итого на руки не на листе сотрудника
Возврат Строка;
КонецФункции
// Определяет номер строки первого сотрудника (первая непустая строка после заголовков).
&НаКлиенте
Функция НайтиСтрокуПервогоСотрудника(ЛистРасчет, НомерСтрокиЗаголовков)
@@ -444,9 +474,9 @@
ПрогрессЗаписи = 25 + 65 * (Ном - 1) / Макс(КоличествоСтрок, 1);
Состояние("Расчет ЗП: " + ФИО, ПрогрессЗаписи);
// Если есть лист сотрудника — читаем из него, иначе из РАСЧЕТ
// Если есть лист сотрудника — читаем напрямую из его ячеек
Если ЛистСотрудника <> Неопределено Тогда
Строка = ПрочитатьСтрокуРасчета(ЛистСотрудника, 2, ФИО, ИндексЗаголовков);
Строка = ПрочитатьДанныеИзЛистаСотрудника(ЛистСотрудника, ФИО);
Иначе
Строка = ПрочитатьСтрокуРасчета(ЛистРасчет, Ном, ФИО, ИндексЗаголовков);
КонецЕсли;