gifts2017

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

Опубликовал Oxana Coffeeholic (perepetulichka) в раздел Программирование - Практика программирования

Обработка представляет собой шаблон для разработчика.
В обработке описаны процедуры подключения к файлу 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 с данными:

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

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

 

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

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
ОбработкаЗагрузкиФайлаИЛИФайловИзКаталога.epf
.epf 10,33Kb
26.09.14
28
.epf 10,33Kb 28 Скачать
Загрузка файлов Excel из каталога 1С 3.0
.epf 7,89Kb
30.01.15
19
.epf 7,89Kb 19 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей (AlexeyK1) 09.03.16 10:00
в SQL варианте работать не будет, необходимо на сервер передать файл через ДвоичныеДанные
2. Oxana Coffeeholic (perepetulichka) 09.03.16 10:14
(1) AlexeyK1, с чего вдруг? У нас все базы серверные, каталог с файлом просто должен быть доступен (расшарен) для сервера.
3. Oxana Coffeeholic (perepetulichka) 09.03.16 10:22
Ну и понятное дело Excel должен быть установлен на сервере.
В противном случае пользуйтесь mxl, xml, txt и тп.
Эта обработка больше подойдет в том случае, если пользователь хочет вводить и контролировать данные в удобном для него формате и затем загружать в 1С.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа