Загрузка Excel файлов из каталога в 1С 8


Обработка представляет собой шаблон для разработчика.
В обработке описаны процедуры подключения к файлу Excel (каталогу с файлами Excel) и получения данных из файла.

Данные из файла считываются в функции по такому принципу:

ТабельныйНомер = ExcelЛист.Cells(Row, 2).Text;
Сотрудник = ExcelЛист.Cells(Row, 3).Text;

которая возвращает в качестве результата таблицу значений.

Далее в обработке описан цикл по полученной таблице значений.

 

Вам остается только указать требуемые колонки в функции чтения файла и затем определить, в какой объект конфигурации необходимо записать полученные данные.

 

Загрузка файла (файлов) в 1С 3.0

 

Добавим реквизиты обработки:

ИмяФайла: Строка (150)

ИмяКаталога: Строка (150)

РежимЗагрузки: Число (1)

 

Настроим форму

Свойства «Форма», закладка «Использование»:

АвтоматическоеСохранениеДанных: Использовать.

 

Свойства «ИмяФайла», закладка «Использование»:

КнопкаВыбора: Да

КнопкаОчистки: Да

 

Вставьте текст в модуль формы: 

Функция ПрочитатьФайл(ИмяФайла)

НомерЛистаExcel = 1;
xlLastCell      = 11;

ВыбФайл = Новый Файл(ИмяФайла);
Если НЕ ВыбФайл.Существует() Тогда
Сообщить("Файл не существует!");
Возврат Ложь;
КонецЕсли;

Попытка
Excel = Новый COMОбъект("Excel.Application");
Excel.WorkBooks.Open(ИмяФайла);
ExcelЛист = Excel.Sheets(НомерЛистаExcel);
Исключение
Сообщить("Ошибка. Возможно неверно указан номер листа книги Excel.");
Возврат ложь;
КонецПопытки;

ТЗ = новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("ИмяФайла");
ТЗ.Колонки.Добавить("Сотрудник");
ТЗ.Колонки.Добавить("ФизическоеЛицо");
ТЗ.Колонки.Добавить("Организация");
ТЗ.Колонки.Добавить("Период");
ТЗ.Колонки.Добавить("КалендарныхДней");

ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
// количество активных строк:
RowCount    = ActiveCell.Row;
//количество активных колонок:
ColumnCount = ActiveCell.Column;

// "2" - номер строки, с которой начинаем считывать данные: 
Для Row = 2 По RowCount Цикл
НовСтрока = ТЗ.Добавить();
НовСтрока.ИмяФайла = ИмяФайла;
// позицию (цифру КОЛОНКИ) "Сотрудника" можно запросить у пользователя на форме обработки
//это позиция для примера без запроса указать её у пользователя:
НовСтрока.Сотрудник = ExcelЛист.Cells(Row, 2).Text;
НовСтрока.ФизическоеЛицо = ExcelЛист.Cells(Row, 3).Text;
НовСтрока.Организация = ExcelЛист.Cells(Row, 4).Text;
НовСтрока.Период = ExcelЛист.Cells(Row, 5).Text;
НовСтрока.КалендарныхДней = ExcelЛист.Cells(Row, 6).Text;
КонецЦикла;

Excel.WorkBooks.Close();
Excel = 0;
Возврат ТЗ;
КонецФункции

&НаКлиенте
Процедура ИмяФайлаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.ПолноеИмяФайла = Объект.ИмяФайла;
ДиалогОткрытияФайла.Фильтр = "Документ Excel (*.xls, *.xlsx)|*.xls; *.xlsx";
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл";
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ИмяКаталогаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
ДиалогОткрытияФайла.Каталог = Объект.ИмяКаталога;
ДиалогОткрытияФайла.ИндексФильтра = 0;
ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
ДиалогОткрытияФайла.Заголовок = "Выберите каталог с данными для загрузки";
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.ИмяКаталога = ДиалогОткрытияФайла.Каталог;
КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура ЗагрузитьНаСервере()

Если Объект.РежимЗагрузки = 1 Тогда
МассивФайлов = Новый Массив();
ФайлНаДиске  = Новый Файл(Объект.ИмяФайла);
МассивФайлов.Добавить(ФайлНаДиске);
Иначе
МассивФайлов = НайтиФайлы(Объект.ИмяКаталога, "*.xls", ложь);
Конецесли;

Для каждого ТекФайл из МассивФайлов Цикл
ТаблицаИзФайла = ПрочитатьФайл(ТекФайл.ПолноеИмя);
Для каждого ТекСтрока из ТаблицаИзФайла Цикл
//здесь вы что-то делаете с полученными данными
Сообщить(ТекСтрока.Сотрудник);
КонецЦикла;
КонецЦикла;

КонецПроцедуры

&НаКлиенте
Процедура Загрузить(Команда)
ЗагрузитьНаСервере();
КонецПроцедуры

 Добавьте событие реквизиту формы «ИмяФайла:

Тоже самое проделайте с реквизитом «ИмяКаталога».

Настройте рекизит «РежимЗагрузки», закладка «Основные»: Вид: Поле переключателя.

ВидПереключателя: Тумблер.

Закладка «Расположение»: КоличествоКолонок: 2.

Закладка «Использование»: СписокВыбора:

 

 

Отметьте реквизиты для сохранения:

Добавьте команду «Загрузить». И настройте действие из модуля: Загрузить.

Перенесите команду на форму.

 

Файл 1 с данными:

Остальные файлы примерно такие же.

Результат загрузки (прочтения файлов):

 

Обработка так же приложена к статье.

 

3 Comments

  1. AlexeyK1

    в SQL варианте работать не будет, необходимо на сервер передать файл через ДвоичныеДанные

    Reply
  2. perepetulichka

    (1) AlexeyK1, с чего вдруг? У нас все базы серверные, каталог с файлом просто должен быть доступен (расшарен) для сервера.

    Reply
  3. perepetulichka

    Ну и понятное дело Excel должен быть установлен на сервере.

    В противном случае пользуйтесь mxl, xml, txt и тп.

    Эта обработка больше подойдет в том случае, если пользователь хочет вводить и контролировать данные в удобном для него формате и затем загружать в 1С.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *