Загрузка файла (файлов) в 1С 3.0 (управляемые формы)
Добавим реквизиты обработки:
ИмяФайла: Строка (150)
ИмяКаталога: Строка (150)
РежимЗагрузки: Число (1)
Настроим форму
Свойства "Форма", закладка "Использование":
АвтоматическоеСохранениеДанных: Использовать.
Свойства "ИмяФайла", закладка "Использование":
КнопкаВыбора: Да
КнопкаОчистки: Да
Вставьте текст в модуль формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Не ЗначениеЗаполнено(Объект.РежимЗагрузки) Тогда
Объект.РежимЗагрузки = 1;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.ПолноеИмяФайла = Объект.ИмяФайла;
ДиалогОткрытияФайла.Фильтр = "Документ Excel (*.xls, *.xlsx)|*.xls; *.xlsx";
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ИмяКаталогаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогОткрытияФайла.Каталог = Объект.ИмяКаталога;
ДиалогОткрытияФайла.ИндексФильтра = 0;
ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
ДиалогОткрытияФайла.Заголовок = "Выберите каталог с данными для загрузки";
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.ИмяКаталога = ДиалогОткрытияФайла.Каталог;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Загрузить(Команда)
Если Объект.РежимЗагрузки = 1 Тогда
Если Не ЗначениеЗаполнено(Объект.ИмяФайла) Тогда
Сообщить("Укажите файл");
КонецЕсли;
МассивФайлов = Новый Массив();
ФайлНаДиске = Новый Файл(Объект.ИмяФайла);
МассивФайлов.Добавить(ФайлНаДиске);
Иначе
Если Не ЗначениеЗаполнено(Объект.ИмяФайла) Тогда
Сообщить("Укажите каталог");
КонецЕсли;
МассивФайлов = НайтиФайлы(Объект.ИмяКаталога, "*.xls", Ложь);
Конецесли;
Для каждого ТекФайл из МассивФайлов Цикл
ПрочитатьФайл(ТекФайл.Имя, ТекФайл.ПолноеИмя);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПрочитатьФайл(ИмяФайла, ПолноеИмя);
Попытка
Эксель = новый COMОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Книга = Эксель.WorkBooks.Open(ПолноеИмя);
Лист = Книга.WorkSheets(1);
ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;
НаборСтрокФайла = Новый Массив;
Для Строка = 2 По ВсегоСтрок Цикл
МассивСтрока = Новый Массив;
Для Колонка = 1 По ВсегоКолонок Цикл
Значение = СокрЛП(Лист.Cells(Строка,Колонка).Value);
МассивСтрока.Добавить(Значение);
КонецЦикла;
НаборСтрокФайла.Добавить(МассивСтрока);
КонецЦикла;
Эксель.Application.Quit();
ПрочитатьФайлНаСервере(НаборСтрокФайла, ИмяФайла, ПолноеИмя);
КонецПроцедуры
&НаСервере
Функция ПрочитатьФайлНаСервере(НаборСтрокФайла, ИмяФайла, ПолноеИмя)
ТЗ = новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИмяФайла");
ТЗ.Колонки.Добавить("Сотрудник");
ТЗ.Колонки.Добавить("ФизическоеЛицо");
ТЗ.Колонки.Добавить("Организация");
ТЗ.Колонки.Добавить("Период");
ТЗ.Колонки.Добавить("КалендарныхДней");
// переносим строки из массива в таблицу значений
Для Каждого МассивСтрока Из НаборСтрокФайла Цикл
НовСтрока = ТЗ.Добавить();
НовСтрока.Сотрудник = МассивСтрока[1]; //колонка в файле, начинается с нуля!
НовСтрока.ИмяФайла = ИмяФайла;
КонецЦикла;
Для каждого Запись из ТЗ Цикл
Сообщить(Запись.Сотрудник);
КонецЦикла;
КонецФункции
Добавьте событие реквизиту формы "ИмяФайла:
Тоже самое проделайте с реквизитом "ИмяКаталога".
Настройте рекизит "РежимЗагрузки", закладка "Основные": Вид: Поле переключателя.
ВидПереключателя: Тумблер.
Закладка "Расположение": КоличествоКолонок: 2.
Закладка "Использование": СписокВыбора:
Отметьте реквизиты для сохранения:
Добавьте команду "Загрузить". И настройте действие из модуля: Загрузить.
Перенесите команду на форму.
Файл 1 с данными:
Второй файл с такими же колонками.
Результат загрузки (прочтения файлов):
Обработки приложены к статье.