helpf.pro
Регистрация

v8: Загрузка с Excel в Табличное поле

Ermak
14.12.2015 11:55Прочитано: 1078

Добрый день! Подскажите как мне при загрузке с xls к Наименование сделать тип Справочник.Номенклатура в табличном поле

Код 1C v 8.х
 Если ПустаяСтрока(ИмяФайла) Тогда
Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
Возврат;
КонецЕсли;

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

Попытка
// Открытие файла Microsoft Excel
Состояние("Открытие файла Microsoft Excel...");
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
Исключение
Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
КонецПопытки;

Попытка
// Обработка файла Microsoft Excel
Состояние("Обработка файла Microsoft Excel...");
// Читаем данные первого листа книги
ExcelЛист = ExcelФайл.Sheets(1);

// Определить количество строк и колонок выбранного листа книги Excel
xlCellTypeLastCell = 11;
ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
Исключение
Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
КонецПопытки;

// Создание описателя типов для таблицы значений
КЧ = Новый КвалификаторыЧисла(15,2);
КС = Новый КвалификаторыСтроки(50);
Массив = Новый Массив;
Массив.Добавить(Тип("Строка"));
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
Массив.Очистить();

Массив.Добавить(Тип("Число"));
ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);

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

// Создать колонки табличного документа
ТаблицаДокумента.Колонки.Добавить("Номер",ОписаниеТиповС,"Номер",2);
ТаблицаДокумента.Колонки.Добавить("КодУслуги",ОписаниеТиповС,"КодУслуги",2);
ТаблицаДокумента.Колонки.Добавить("Наименование",ОписаниеТиповС,"Наименование",15);
ТаблицаДокумента.Колонки.Добавить("Ценна",ОписаниеТиповЧ,"Ценна",2);


Номер=0;
// Последовательное чтение строк с выбранного листа
Для Строка = 1 По ExcelПоследняяСтрока Цикл

// Обработка нажатия Ctrl + Break
ОбработкаПрерыванияПользователя();

// Добавить данные в табличную часть экранной формы
Стр=ТаблицаДокумента.Добавить();

Номер = Номер + 1;
//ExcelЛист.Range(ExcelЛист.Cells(Строка,5).MergeArea.Address).Select();
//ExcelЛист.Selection.Merge();


Попытка
Если ПустаяСтрока(ExcelЛист.Cells(Строка, 2).Value) Тогда
Продолжить;
КонецЕсли;
Стр.Номер=Номер;
Стр.КодУслуги=ExcelЛист.Cells(Строка, 1).Value;
Стр.Наименование=ExcelЛист.Cells(Строка, 2).Value;
Стр.Ценна=ExcelЛист.Cells(Строка, 3).Value;

Исключение
// Не редко происходит ошибка конвертации отдельной ячейки документа
Сообщить("Ошибка чтения строки файла Microsoft Excel." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);

КонецПопытки;
// Отобразить информацию о ходе выполнения обработки
Состояние("Обработка файла Microsoft Excel : "
+ "строка " + Строка + " из " + ExcelПоследняяСтрока);
 
КонецЦикла;
 
// Закрыть COM соединение для экономии памяти
ExcelПриложение.Quit();
 
// Отобразить результаты загрузки в форме элемента
ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();
Yandex
Возможно, вас также заинтересует
Реклама на портале
Ermak
14.12.2015 12:28Ответ № 1

Сделал без ТП, но выдает ошибку

Ошибка чтения строки файла Microsoft Excel.22{Форма.Форма.Форма(129)}: Ошибка при вызове метода контекста (Записать): Запись не верна! Значение поля "Услуга" не может быть пустым!: ТарифыУслуги: 14.12.2015, (Регистр сведений: Тарифы по услугам; Номер строки: 1)Ошибка чтения строки файла Microsoft Excel.23

{Форма.Форма.Форма(129)}: Ошибка при вызове метода контекста (Записать): Запись не верна! Значение поля "Услуга" не может быть пустым!: ТарифыУслуги: 14.12.2015, (Регистр сведений: Тарифы по услугам; Номер строки: 1)

Код 1C v 8.х
 Процедура ЧтениеXLSФайла(Элемент)
   
    Если ПустаяСтрока(ИмяФайла) Тогда
        Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
        Возврат;
    КонецЕсли;
   
    Попытка
        // Загрузка Microsoft Excel
        Состояние("Загрузка Microsoft Excel...");
        ExcelПриложение = Новый COMОбъект("Excel.Application");
    Исключение
        Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
        Возврат;
    КонецПопытки;
   
    Попытка
        // Открытие файла Microsoft Excel
        Состояние("Открытие файла Microsoft Excel...");
        ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
    Исключение
        Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
    КонецПопытки;
   
    Попытка
        // Обработка файла Microsoft Excel
        Состояние("Обработка файла Microsoft Excel...");
        // Читаем данные первого листа книги
        ExcelЛист = ExcelФайл.Sheets(1);
       
        // Определить количество строк и колонок выбранного листа книги Excel
        xlCellTypeLastCell = 11;
        ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
        ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
    Исключение
        Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
        // Закрыть COM соединение для экономии памяти
        ExcelПриложение.Quit();
    КонецПопытки;
   
    Номер=0;
    // Последовательное чтение строк с выбранного листа
    Для Строка = 1 По ExcelПоследняяСтрока Цикл
       
        // Обработка нажатия Ctrl + Break
        ОбработкаПрерыванияПользователя();
       
        // Добавить данные в табличную часть экранной формы
        //Стр=ТаблицаДокумента.Добавить();
       
        Номер = Номер + 1;
        //ExcelЛист.Range(ExcelЛист.Cells(Строка,5).MergeArea.Address).Select();
        //ExcelЛист.Selection.Merge();
       
        Попытка
            Если ПустаяСтрока(ExcelЛист.Cells(Строка, 2).Value) Тогда
                Продолжить;
            КонецЕсли; 
            //Стр.Номер=Номер;
            //Стр.КодУслуги=ExcelЛист.Cells(Строка, 1).Value;
            //Стр.Номенклатура=ExcelЛист.Cells(Строка, 2).Value;
            //Стр.Ценна=ExcelЛист.Cells(Строка, 3).Value;
            КодУслуги=ExcelЛист.Cells(Строка, 1).Value;
            Номенклатура=ExcelЛист.Cells(Строка, 2).Value;
            Ценна=ExcelЛист.Cells(Строка, 3).Value;
           
            Если Справочники.Номенклатура.НайтиПоНаименованию(Номенклатура).Пустая() Тогда
                НовЭл = Справочники.Номенклатура.СоздатьЭлемент();       
                НовЭл.КодУслуги=КодУслуги;
                НовЭл.Наименование=Номенклатура;
                НовЭл.Записать();
                Движение = РегистрыСведений.ТарифыУслуги.СоздатьНаборЗаписей();
                Движение.Отбор.Услуга.Установить(НовЭл.Наименование);
                Движение.Прочитать();
                НоваяЗапись = Движение.Добавить();
                НоваяЗапись.Период = ТекущаяДата();
                НоваяЗапись.Услуга=НовЭл.Наименование;
                НоваяЗапись.Тариф=Ценна;
                Движение.Записать();               
                //Состояние("Загрузка данных в справочник: "+Номер);
            Иначе
                Продолжить;
            КонецЕсли;         
           
        Исключение
            // Не редко происходит ошибка конвертации отдельной ячейки документа
            Сообщить("Ошибка чтения строки файла Microsoft Excel." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
           
        КонецПопытки;
        // Отобразить информацию о ходе выполнения обработки
        Состояние("Обработка файла Microsoft Excel : "
        + "строка " + Строка + " из " + ExcelПоследняяСтрока);
       
    КонецЦикла;
   
    // Закрыть COM соединение для экономии памяти
    ExcelПриложение.Quit();
   
    // Отобразить результаты загрузки в форме элемента
    //ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
    //ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();
   
КонецПроцедуры // ЧтениеXLSФайла(Элемент)
Ermak
14.12.2015 12:52Ответ № 2
Вопрос закрыт!
Подсказка: Для быстрого поиска ответов - используйте 'Поиск'
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.