From e24495e2db8b902f08ab9b6fdcb4d92da9521f39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D1=80=D0=BE=D1=84=D0=B8-=D0=A1=D0=BE=D1=84=D1=82?= Date: Wed, 8 Jul 2026 21:02:42 +0000 Subject: [PATCH] v3.0.0.16: fix xlsm reading - direct cell access for employee sheets --- Configuration.xml | 2 +- .../Forms/Форма/Ext/Form/Module.bsl | 34 +++++++++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/Configuration.xml b/Configuration.xml index 733ea86..489efa0 100755 --- a/Configuration.xml +++ b/Configuration.xml @@ -60,7 +60,7 @@ Russian Language.Русский ООО "Профи-Софт", код партнера 42575-13, г.Байконур. - 3.0.0.14 + 3.0.0.15 Language.Русский diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl index 82acc6d..61e2ff3 100644 --- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl @@ -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, ФИО, ИндексЗаголовков); + Строка = ПрочитатьДанныеИзЛистаСотрудника(ЛистСотрудника, ФИО); Иначе Строка = ПрочитатьСтрокуРасчета(ЛистРасчет, Ном, ФИО, ИндексЗаголовков); КонецЕсли;