8.х Обработка загрузки из excel в 1с 8.1(не универсальная)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ифкпфт009, 23 апр 2014.

  1. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте, суть такая - при нажатии на кнопку загрузка, обработка не заполняет форму данными из excel.

    Код:
    ТаблицаДокумента.Колонки.Добавить("Номер",ОписаниеТиповС,"Номер",5);
    ТаблицаДокумента.Колонки.Добавить("Артикул",ОписаниеТиповС,"Артикул",11);
    ТаблицаДокумента.Колонки.Добавить("Описание",ОписаниеТиповС,"Описание",25);
    ТаблицаДокумента.Колонки.Добавить("Цена",ОписаниеТиповЧ,"Цена",6);
    
    // Последовательное чтение строк с выбранного листа
    Для Строка = 1 По ExcelПоследняяСтрока Цикл
    
    // Обработка нажатия Ctrl + Break
    ОбработкаПрерыванияПользователя();
    
    // Добавить данные в табличную часть экранной формы
    Стр=ТаблицаДокумента.Добавить();
    Стр.Номер = Строка;
    Попытка
    Стр.Артикул = ExcelЛист.Cells(Строка, 1).Value;
    Стр.Описание = ExcelЛист.Cells(Строка, 2).Value;
    Стр.Цена = ExcelЛист.Cells(Строка, 3).Value;
    через отладку
    Стр.Артикул - у него значение пусто

    Вопрос - что сделать чтобы он видел это значение?
    возможно ли что дело в екселевском файле?
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    если у вас в ячейке в Excel ничего нет, то и в Стр.Артикул ничего не попадет.
    под отладчиком посмотрите, что в ExcellЛист.Cells(Строка, 1).Value
  3. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    я к примеру артикул написал, он никакие значения не видит.
    утречком отпишусь.
  4. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    ExcelЛист.Cells(Строка, 1).Value
    значение - пусто
    тип - неопределено
  5. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а вы тот ли лист книги екселя берете?
  6. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    там нет листов, тупо общий.
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    что значит тупо общий... данные в екселе на листе, так что давайте код в студию как вы вообще ексель получаете. И вообше. На данном ресурсе не один раз обсуждалось как выгрузить в ексель, потрудитесь поискать
  8. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Код:
    ФайлНаДиске = Новый Файл(ПолеВвода1);
        Если Не ФайлНаДиске.Существует() Тогда
            Сообщить("Укажите путь к файлу загрузки");
            Возврат;
        КонецЕсли;
         Попытка
            
        Состояние("Загрузка Microsoft Excel...");
        ExcelПриложение = Новый COMОбъект("Excel.Application");
      Исключение
        Сообщить("Ошибка при загрузке Microsoft Excel." + ОписаниеОшибки(), СтатусСообщения.Внимание);
        Возврат;
      КонецПопытки;
    
      Попытка
       
        Состояние("Открытие файла Microsoft Excel...");
        ExcelФайл = ExcelПриложение.WorkBooks.Open(ПолеВвода1);
      Исключение
        Сообщить("Ошибка открытия файла Microsoft Excel." + ОписаниеОшибки(), СтатусСообщения.Внимание);
    КонецПопытки;   
    
    Попытка
        Состояние("Обработка файла Microsoft Excel...");
        // Читаем данные первого листа книги
        ExcelЛист = ExcelФайл.Sheets();
        // Определить количество строк и колонок выбранного листа книги Excel
        xlCellTypeLastCell = 11;
        ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
        ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
      Исключение
        Сообщить("Ошибка открытия листа №1 Microsoft Excel." + ОписаниеОшибки(), СтатусСообщения.Внимание);
       
        ExcelПриложение.Quit();
    КонецПопытки;
    
            // Создание описателя типов для таблицы значений
            КЧ = Новый КвалификаторыЧисла(15,2);
            КЧ2 = Новый КвалификаторыЧисла(15,3);
              КС = Новый КвалификаторыСтроки(50);
            Массив = Новый Массив;
              Массив.Добавить(Тип("Строка"));
              ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
            Массив.Очистить();
              Массив.Добавить(Тип("Число"));
              ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
            Массив.Добавить(Тип("Число"));
              ОписаниеТиповЧ2 = Новый ОписаниеТипов(Массив, , ,КЧ2);
            ТипЧисло = Новый ОписаниеТипов("Число");
           
            ТЗ = Новый ТаблицаЗначений;
                   
            ТЗ.Колонки.Добавить("Товар");
           
            ТЗ.Колонки.Добавить("Код");
           
            ТЗ.Колонки.Добавить("ЕдИзм");
           
            ТЗ.Колонки.Добавить("Вес");
           
            ТЗ.Колонки.Добавить("Объем");
    
            //// Очистить предыдущие значения
           
            ТЗ.Очистить();
            ТЗ.Колонки.Очистить();
           
            // Создать колонки табличного документа
            ТЗ.Колонки.Добавить("Товар", ОписаниеТиповС, "Товар",50);
            ТЗ.Колонки.Добавить("Номер", ОписаниеТиповС, "Номер", 15);
            ТЗ.Колонки.Добавить("ЕдИзм", ОписаниеТиповС, "ЕдИзм", 10);
            ТЗ.Колонки.Добавить("Вес", ОписаниеТиповЧ, "Вес", 10);
            ТЗ.Колонки.Добавить("Объем", ОписаниеТиповЧ2, "Объем", 10);
           
            // Последовательное чтение строк с выбранного листа
            Для Строка = 1 по ExcelПоследняяСтрока Цикл
           
            ОбработкаПрерыванияПользователя();
           
            // Добавить данные в табличную часть экранной формы
           
            стр = тз.Добавить();
            стр.Номер = Строка;
           
            Попытка
               
                стр.Товар = ExcelЛист.Cells(Строка, 2).Value;
                Стр.Номер = ExcelЛист.Cells(Строка, 4).Value;
                Стр.ЕдИзм = ExcelЛист.Cells(Строка, 6).Value;
                Стр.Вес = ExcelЛист.Cells(Строка, 9).Value;
                   Стр.Объем = ТипЧисло.ПривестиЗначение(ExcelЛист.Cells(Строка, 10).Value);// * 1000;
            Исключение
                Сообщить("Ошибка чтения строки файла Microsoft Excel." + Строка + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
            КонецПопытки;
            Состояние("Обработка файла Microsoft Excel : " + "строка " + Строка + " из " + ExcelПоследняяСтрока);
        КонецЦикла;
       
         // Закрыть COM соединение для экономии памяти   
        ExcelПриложение.Quit();
       
            
      Состояние ("Загружаем данные в таблицу....");
            Запрос = Новый Запрос;
            Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
            Запрос.Текст = "ВЫБРАТЬ
                           |    ТЗ.Номер,
                           |    ТЗ.ЕдИзм,
                           |    ТЗ.Вес,
                           |    ТЗ.Объем
                           |ПОМЕСТИТЬ ТЗ
                           |ИЗ
                           |    &ТЗ КАК ТЗ
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    Номенклатура.Ссылка КАК Наименование,
                           |    Номенклатура.Код,
                           |    ЕдиницыИзмерения.Ссылка КАК ЕдИзм_БД,
                           |    ТЗ.ЕдИзм КАК ЕдИзм_Файл,
                           |    ЗначенияСвойствОбъектов.Значение КАК Объем_БД,
                           |    ТЗ.Объем КАК ОбъемИзм_файл,
                           |    ЗначенияСвойствОбъектов1.Значение КАК Брутто_БД,
                           |    ТЗ.Вес КАК БруттоИзм_файл
                           |ИЗ
                           |    ТЗ КАК ТЗ
                           |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Номенклатура
                           |        ПО ТЗ.Номер = Номенклатура.Код
                           |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
                           |        ПО (Номенклатура.Ссылка = ЕдиницыИзмерения.Владелец)
                           |            И (Номенклатура.БазоваяЕдиницаИзмерения = ЕдиницыИзмерения.ЕдиницаПоКлассификатору)
                           |            И (ЕдиницыИзмерения.ПометкаУдаления = ЛОЖЬ)
                           |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов1
                           |        ПО (ЗначенияСвойствОбъектов1.Свойство = &Свойство1)
                           |            И (ЗначенияСвойствОбъектов1.Объект = ЕдиницыИзмерения.Ссылка)
                           |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                           |        ПО (ЗначенияСвойствОбъектов.Свойство = &Свойство)
                           |            И (ЕдиницыИзмерения.Ссылка = ЗначенияСвойствОбъектов.Объект)";
                              
            Запрос.УстановитьПараметр("Свойство",ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоКоду("23-0000003"));
            Запрос.УстановитьПараметр("Свойство1",ПланыВидовХарактеристик.СвойстваОбъектов.Брутто);
            Запрос.УстановитьПараметр("ТЗ",ТЗ);
            ТабличноеПоле = запрос.Выполнить().Выгрузить();
            ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
            ЭлементыФормы.ТабличноеПоле.Колонки.Наименование.Доступность = Ложь;
            ЭлементыФормы.ТабличноеПоле.Колонки.Код.Доступность = ЛОЖЬ;
            ЭлементыФормы.ТабличноеПоле.Колонки.ЕдИзм_БД.Доступность = ЛОЖЬ;
            ЭлементыФормы.ТабличноеПоле.Колонки.ЕдИзм_Файл.Доступность = ЛОЖЬ;
            ЭлементыФормы.ТабличноеПоле.Колонки.Объем_БД.Доступность = ЛОЖЬ;
            ЭлементыФормы.ТабличноеПоле.Колонки.Брутто_БД.Доступность = ЛОЖЬ;
            ЭлементыФормы.ТабличноеПоле.Колонки.Наименование.Ширина = 80;
            ЭлементыФормы.ТабличноеПоле.Колонки.Код.Ширина = 15;
            ЭлементыФормы.ТабличноеПоле.Колонки.ЕдИзм_БД.Ширина = 15;
            ЭлементыФормы.ТабличноеПоле.Колонки.ЕдИзм_Файл.Ширина = 15;
            ЭлементыФормы.ТабличноеПоле.Колонки.Объем_БД.Ширина = 10;
            ЭлементыФормы.ТабличноеПоле.Колонки.ОбъемИзм_файл.Ширина = 15;
            ЭлементыФормы.ТабличноеПоле.Колонки.Брутто_БД.Ширина = 10;
            ЭлементыФормы.ТабличноеПоле.Колонки.БруттоИзм_файл.Ширина = 15;
    
  9. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вот тут надо номер листа указать
    Код:
    ExcelЛист = ExcelФайл.Sheets(1);
  10. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
  11. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    я не могу оттуда посмотреть... прикрепите тут если можно...
  12. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    стояло так, случайно убрал, где-то в другом месте косяк
    --- Объединение сообщений, 24 апр 2014 ---
    вот

    Вложения:

  13. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вы начинаете считывать с 1 строки, а данные в вашем екселе начинаются куда позже, или вы для показа подредактировали ексель
  14. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    нет, дан вот ексель такого типа
    --- Объединение сообщений, 24 апр 2014 ---
    первый раз пишу обработку и не совсем понимаю в чем тут дело
    --- Объединение сообщений, 24 апр 2014 ---
    согласен данные начинаются с 8 строки
    Код:
     Для Строка = 8 по ExcelПоследняяСтрока Цикл
    --- Объединение сообщений, 24 апр 2014 ---
    ничего не изменилось)
    Последнее редактирование: 24 апр 2014
  15. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    ну набросала, может и не оптимально, но таблица заполняется из екселя...
    Код:
    Процедура КнопкаВыполнитьНажатие(Кнопка)
       
      //тут получить имя файла в переменную ВыбФайл 
       
        //***** пытаемся открыть файл
        ексель = Неопределено;
        Попытка                                                            
            ексель = Новый COMОбъект("Excel.Application");
            книга = ексель.Workbooks.Open(ВыбФайл);
            лист = книга.WorkSheets(1);
            Сообщить("Файл успешно открыт");
        Исключение
            Сообщить("Ошибка при открытии файла");
            Возврат;
        КонецПопытки;
       
        Попытка
            ВсегоСтрок = Лист.Cells(1, 1).SpecialCells(11).Row;
           
    //определим таблицу для загрузки данных
            ТаблицаДокумента = Новый ТаблицаЗначений;
            ОписаниеТиповС = Новый ОписаниеТипов("Строка");
            ОписаниеТиповЧ = Новый ОписаниеТипов("Число");
            ТаблицаДокумента.Колонки.Добавить("Номер",ОписаниеТиповС,"Номер",5);
            ТаблицаДокумента.Колонки.Добавить("Артикул",ОписаниеТиповС,"Артикул",11);
            ТаблицаДокумента.Колонки.Добавить("Описание",ОписаниеТиповС,"Описание",25);
            ТаблицаДокумента.Колонки.Добавить("Цена",ОписаниеТиповЧ,"Цена",6);
    
            // Последовательное чтение строк с выбранного листа
            Для Стр = 8 По ВсегоСтрок Цикл
    
                // Обработка нажатия Ctrl + Break
                //ОбработкаПрерыванияПользователя();
    
                // Добавить данные в табличную часть экранной формы
                нс = ТаблицаДокумента.Добавить();
                нс.Номер     = Стр;
                нс.Артикул     = лист.Cells(Стр, 1).Value;
                нс.Описание = лист.Cells(Стр, 2).Value;
                нс.Цена     = лист.Cells(Стр, 3).Value;
               
            КонецЦикла;
           
        Исключение
            Сообщить(ОписаниеОшибки());
        КонецПопытки;
       
        Сообщить("Загрузка завершена");
       
    КонецПроцедуры
    
    --- Объединение сообщений, 24 апр 2014 ---
    в вашем посте 8 нафига вы 2 раза колонки создаете? масло масленное у вас там
  16. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    да это курсовая, дана обработка но нужно ее переделать под файл экселя формата который скинул, как мне сказали он предназначен для загрузки другого формата, хотел узнать какого..ничего не сказал.
    --- Объединение сообщений, 24 апр 2014 ---
    но это пол беды)) там еще кое что должно быть, но пока разобраться надо почему данные с екселя не вбивает.
    попробую ваш код.
    Последнее редактирование: 24 апр 2014
  17. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Вообщем не правильный код
    он работает если я простую книгу сделаю и заполню данными, он видит все значения.
    Но ведь у меня шаблон!
    с таким типом этот код не работает, значения не подставляет, тобишь надо как-то подругому подключаться.
    я вот не пойму как??
  18. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    тот код что я вам показала, я опробовала на вашем же файле, все считалось хорошо... таблица заполнилась. Может у вас далее работа с этой таблицей не катит?
  19. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    извеняюсь, теперь через отладчик значения видит.
    --- Объединение сообщений, 24 апр 2014 ---
    вопрос такой
    он заполняет форму на этом этапе?
    Код:
    Стр.Товар = ExcelЛист.Cells(Строка, 2).Value;
                Стр.Номер = ExcelЛист.Cells(Строка, 4).Value;
                Стр.ЕдИзм = ExcelЛист.Cells(Строка, 6).Value;
                Стр.Вес = ExcelЛист.Cells(Строка, 9).Value;
                   Стр.Объем = ТипЧисло.ПривестиЗначение(ExcelЛист.Cells(Строка, 12).Value);// * 1000;
    
    или на этапе Запроса?
  20. TopicStarter Overlay
    ифкпфт009
    Offline

    ифкпфт009 Опытный в 1С

    Регистрация:
    23 апр 2014
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    у меня такое чувство, что код живет своей жизнью
    щас уже частично подставляет.
    хотя ничего не делал.
Похожие темы
  1. Slava917
    Ответов:
    5
    Просмотров:
    4.451
  2. Сандра
    Ответов:
    2
    Просмотров:
    1.098
  3. Саша82
    Ответов:
    1
    Просмотров:
    753
  4. Nigelist
    Ответов:
    4
    Просмотров:
    3.055
  5. Ресурс
    Ответов:
    2
    Просмотров:
    1.587
Загрузка...

Поделиться этой страницей