Найти в Дзене
Программист 1С

Учимся программировать в 1С 8.3. Импорт/загрузка в 1С 8.3. данных из Excel-файла.

Универсальный метод с программным созданием колонок и их наименований в 1С в соответствии с колонками из Excel-файла. Создадим внешнюю обработку в 1С 8.3. (обычные формы). ИмяФайла - имя поля, в которое загружается наименование файла EXCEL-источника. На кнопке “Выполнить» напишем Процедуру для импорта из Excel. __________________________________________________________________________________________ Процедура КнопкаВыполнитьНажатие(Кнопка) // Процедура для импорта/загрузки в 1 8.3 (обычные формы) данныз из Excel-файла. // Универсальный метод с программным созданием колонок и их наименований в 1С в соответствии с колонками из Excel-файла. // ИмяФайла - имя поля,в которое загружается наименование файла EXCEL-источника. Если Не ЗначениеЗаполнено(ИмяФайла) тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Файл для загрузки не выбран!Выберите файл."; Сообщение.Сообщить(); ПодключитьРасширениеРаботыСФайлами(); Режим = РежимДиалогаВыбораФайла.Открытие; ДиалогОткрытияФайла = Н

Универсальный метод с программным созданием колонок и их наименований в 1С в соответствии с колонками из Excel-файла.

Создадим внешнюю обработку в 1С 8.3. (обычные формы).

ИмяФайла - имя поля, в которое загружается наименование файла EXCEL-источника.

-2

На кнопке “Выполнить» напишем Процедуру для импорта из Excel.

-3
-4
-5
-6

__________________________________________________________________________________________

Процедура КнопкаВыполнитьНажатие(Кнопка)

// Процедура для импорта/загрузки в 1 8.3 (обычные формы) данныз из Excel-файла.

// Универсальный метод с программным созданием колонок и их наименований в 1С в соответствии с колонками из Excel-файла.

// ИмяФайла - имя поля,в которое загружается наименование файла EXCEL-источника.

Если Не ЗначениеЗаполнено(ИмяФайла) тогда

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Файл для загрузки не выбран!Выберите файл.";

Сообщение.Сообщить();

ПодключитьРасширениеРаботыСФайлами();

Режим = РежимДиалогаВыбораФайла.Открытие;

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);

ДиалогОткрытияФайла.ПолноеИмяФайла = "";

Фильтр = "Таблица(*.xls)|*.xls";

ДиалогОткрытияФайла.Фильтр = Фильтр;

ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки в 1С.";

Если ДиалогОткрытияФайла.Выбрать() Тогда

ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;

Иначе

Возврат;

КонецЕсли;

КонецЕсли;

Таблица = Новый ТаблицаЗначений;

//Очищаем табличную часть и удаляем колонки

ТЧ_ИсточникEXCEL.Очистить();

ТЧ_ИсточникEXCEL.Колонки.Очистить();

ЭлементыФормы.ТЧ_ИсточникEXCEL.Колонки.Очистить();

// Открываем Excel

Попытка

Excel = Новый COMОбъект("Excel.Application");

Excel.WorkBooks.Open(ИмяФайла);

Состояние("Обработка файла Microsoft Excel...");

Исключение

Сообщить("Ошибка при открытии файла Excel! Загрузка не будет произведена!");

Сообщить(ОписаниеОшибки());

Возврат;

КонецПопытки;

Попытка

//Открываем лист Excel

Excel.Sheets(1).Select(); // по умолчанию лист 1

Исключение

//Закрываем Excel

Excel.ActiveWorkbook.Close();

Excel = 0;

Сообщить("Файл "+Строка(ИмяФайла)+" не соответствует необходимому формату!");

ОтменитьТранзакцию();

Возврат;

КонецПопытки;

// Получаем количество строк и колонок в EXCEL-файле.

// Определяем версию Excel

Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);

Если Версия = "8" тогда

Сообщить("Версия8");

ФайлКолСтрок= Excel.Cells.CurrentRegion.Rows.Count;

ФайлКолКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);

Иначе

ФайлКолСтрок= Excel.Cells(1,1).SpecialCells(11).Row;

ФайлКолКолонок = Excel.Cells(1,1).SpecialCells(11).Column;

Конецесли;

// Считываем 1 строку EXCEL-файла и генерируем колонки в нашей табличной части обработки с именем "ТЧ_ИсточникEXCEL" с наименованиями из EXCEL-файла

Сч = 1;

Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл

ИмяКолонки = Excel.Cells(1, Сч).Text;

ИмяКолонки = СтрЗаменить(ИмяКолонки," ","");//убираем из имени колонок пробелы

ИмяКолонки = СтрЗаменить(ИмяКолонки,"-","");//убираем из имени колонок знак= -

ИмяКолонки = СтрЗаменить(ИмяКолонки,".","");//убираем из имени колонок знак=.

ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ","");

ТЧ_ИсточникEXCEL.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);

НоваяКолонка = ЭлементыФормы.ТЧ_ИсточникEXCEL.Колонки.Добавить(ИмяБезПробелов, ИмяКолонки);

НоваяКолонка.Данные = ИмяБезПробелов;

Сч = Сч + 1;

КонецЦикла;

// Заносим данные в табличное поле "ТЧ_ИсточникEXCEL" :

Для НС = 2 по ФайлКолСтрок Цикл // НС указываем с какой строки начинать обработку

Сообщить("Файл "+Строка(ИмяФайла)+": Обрабатывается первый лист "+Строка(Формат(?(ФайлКолСтрок=0,0,((100*НС)/ФайлКолСтрок)),"ЧЦ=3; ЧДЦ=0"))+" %");

ОбработкаПрерыванияПользователя(); //Для того,чтобы пользователь мог выйти из цикла нажатием ctrl+break

//Заполняем строку наше табличной части "ТЧ_ИсточникEXCEL" значениями

НоваяСтрока = ТЧ_ИсточникEXCEL.Добавить();

Для НомерКолонки = 1 по ТЧ_ИсточникEXCEL.Колонки.Количество() Цикл

ТекущееЗначение = Excel.Cells(НС, НомерКолонки).Text;

ИмяКолонки = ТЧ_ИсточникEXCEL.Колонки[НомерКолонки-1].Имя;

НоваяСтрока[ИмяКолонки] = ТекущееЗначение;

КонецЦикла;

КонецЦикла;

//Закрываем Excel

Excel.DisplayAlerts = 0;

Excel.Quit();

Excel.DisplayAlerts = 1;

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

__________________________________________________________________________________________

-7