diff --git a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl index 076ee85..337d35d 100644 --- a/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl +++ b/DataProcessors/ЗагрузкаДанныхИзExcel/Forms/Форма/Ext/Form/Module.bsl @@ -158,6 +158,34 @@ Возврат -1; КонецФункции +// Находит строку заголовков, содержащую ключевые слова ("Сотрудник" или "Должность"). +// Обеспечивает совместимость с xls (строка 15) и xlsm (строка 16). +&НаКлиенте +Функция НайтиСтрокуЗаголовков(ЛистРасчет) + // Ключевые слова заголовков (в нижнем регистре) + КлючевыеСлова = Новый Массив; + КлючевыеСлова.Добавить("сотрудник"); + КлючевыеСлова.Добавить("должность"); + КлючевыеСлова.Добавить("счет"); + + // Ищем в диапазоне строк 10-20 (с запасом) + Для Ном = 10 По Мин(20, ЛистРасчет.Rows.Count) Цикл + Для Каждого КлючевоеСлово Из КлючевыеСлова Цикл + Для Колонка = 1 По Мин(5, ЛистРасчет.Columns.Count) Цикл + Значение = ЛистРасчет.Cells(Ном, Колонка).Value; + Если Значение <> Неопределено Тогда + Если СтрНайти(НРег(СокрЛП("" + Значение)), КлючевоеСлово) > 0 Тогда + Возврат Ном; + КонецЕсли; + КонецЕсли; + КонецЦикла; + КонецЦикла; + КонецЦикла; + + // Если не нашли — возвращаем 15 по умолчанию (для xls) + Возврат 15; +КонецФункции + // Определяет номер строки первого сотрудника (первая непустая строка после заголовков). &НаКлиенте Функция НайтиСтрокуПервогоСотрудника(ЛистРасчет, НомерСтрокиЗаголовков) @@ -197,6 +225,7 @@ Строка.Вставить("ФИО", ФИО); // Поиск колонок по заголовкам + // Маппинг: "Счет БК" в Excel = "Лицевой счет сотрудника в банке для зарплатного проекта" в 1С ЗиКГУ КолДолжность = НайтиКолонкуПоЗаголовку(ИндексЗаголовков, "должность"); КолСчетБК = НайтиКолонкуПоЗаголовку(ИндексЗаголовков, "счет"); КолВидЗанятости = НайтиКолонкуПоЗаголовку(ИндексЗаголовков, "вид занятости"); @@ -327,7 +356,7 @@ СтатусЗагрузки = "Анализ заголовков..."; Состояние("Анализ заголовков...", 22); - НомерСтрокиЗаголовков = 15; + НомерСтрокиЗаголовков = НайтиСтрокуЗаголовков(ЛистРасчет); ИндексЗаголовков = СоздатьИндексЗаголовков(ЛистРасчет, НомерСтрокиЗаголовков); // Этап 6: Определение строки первого сотрудника