Загрузка из Excel в 1С

Несомненно, одним из самых распространенных способов массового занесения информации в информационную систему является загрузка информации в 1С из Excel. Ниже я рассмотрю пошаговое создание обработки загрузки данных.

MS Excel — программа для работы с электронными таблицами, созданная компанией Microsoft. Она предоставляет возможности экономико-статистических расчетов, графические инструменты и язык макропрограммирования VBA. Excel является одним из наиболее популярных приложений в мире.

Обработку мы будем делать универсальную.
1. Создание обработки загрузки и её формы

Тут мы особо ничего не будем придумывать, сделаем поле ввода для выбора файла на диске, кнопку “Прочитать” для чтения файла и заполнения табличной части.
2 Обработчик выбора файла

При нажатии на выбор файла необходимо отображать диалог выбора файла в ОС. Сделать это очень просто. Необходимо на обработчик “НачалоВыбора” в поле ввода файла указать следующий код:

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

Если ДиалогВыбора.Выбрать() Тогда
ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
КонецЕсли;

3 Обработка данных из Excel и загрузка в 1С

Для начала мы очищаем информацию в таблице, находим файл на диске, подключаемся к Excelчерез COM-объект и проводим все технические настройки:

//очищаем таблицу и удаляем колонки
Таблица.Очистить();
Таблица.Колонки.Очистить();
ЭлементыФормы.Таблица.Колонки.Очистить();

//подключаемся к эксел
Попытка
Excel = Новый COMОбъект(“Excel.Application”);
Excel.WorkBooks.Open(ИмяФайла);
Состояние(“Обработка файла Microsoft Excel…”);
Исключение
Сообщить(“Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!”);
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

Попытка
//Открываем необходимый лист
Excel.Sheets(1).Select(); // лист 1, по умолчанию
Исключение
//Закрываем Excel
Excel.ActiveWorkbook.Close();
Excel = 0;
Сообщить(“Файл “+Строка(ИмяФайла)+” не соответствует необходимому формату! Первый лист не найден!”);
ОтменитьТранзакцию();
Возврат;
КонецПопытки;

//Получим количество строк и колонок.
//В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel
Версия = Лев(Excel.Version,Найти(Excel.Version,”.”)-1);
Если Версия = “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 строку файла и генерируем колонки на форме с наименованиями из файла:

//считываем первую строку и генерируем колонки

Сч = 1;
Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл
ИмяКолонки = Excel.Cells(1, Сч).Text;
ИмяБезПробелов = СтрЗаменить(ИмяКолонки,” “,”»); // убираем из имени колонок пробелы
Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);
НоваяКолонка = ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяКолонки);
НоваяКолонка.Данные = ИмяБезПробелов;
Сч = Сч + 1;
КонецЦикла;

После формирования колонок, считываем тело файла эксель и построчно заносим данные в табличное поле:

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

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

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

НоваяСтрока = Таблица.Добавить();

Для НомерКолонки = 1 по Таблица.Колонки.Количество() Цикл
//заполняем строку значениями
ТекущееЗначение = Excel.Cells(НС, НомерКолонки).Text;
ИмяКолонки = Таблица.Колонки[НомерКолонки-1].Имя;
НоваяСтрока[ИмяКолонки] = ТекущееЗначение;
КонецЦикла;

КонецЦикла;

В результате мы получаем загруженные данные из excel c такими же колонками.

Запись опубликована в рубрике Программирование и сопровождение 1с. Добавьте в закладки постоянную ссылку.

Добавить комментарий

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

*

code