Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 фев 2025, 18:00

Ошибка при загрузке из Excel

Автор maxxi, 19 янв 2025, 12:39

0 Пользователей и 1 гость просматривают эту тему.

maxxi

&НаКлиенте
Процедура Сформировать(Команда)
   
    тзРасход.Очистить();
   
    Если ФорматФайла="XLSX" Тогда
       
        ПрочитатьФайл_XLSX();
       
    КонецЕсли;
   
    СформироватьНаСервере();
   
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////

&НаКлиенте
Процедура ПутьКФайлам1НачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
    Проводник = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
   
    Проводник.Заголовок="Файлни танланг: ";
           
    Если ФорматФайла="XLSX" Тогда
   
        Фильтр="Файл Excel (*.xlsx)| *.xlsx";
       
    Иначе
       
        Возврат;
       
    КонецЕсли;
   
    Проводник.Фильтр=Фильтр;
   
    Оповещение = Новый ОписаниеОповещения("ПослеВыбораФайла",ЭтотОбъект);
   
    Проводник.Показать(Оповещение);

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

////////////////////////////////////////////////////////////////////////////////

&НаКлиенте
Процедура ПослеВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
   
    Если ВыбранныеФайлы = Неопределено  Тогда
       
        Возврат;
       
    КонецЕсли;
   
    ПутькФайлам=ВыбранныеФайлы[0];
   
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////

&НаСервере
Процедура ПрочитатьФайл_XLS_НаСервере(АдресДанных)
   
    ТабДок= Новый ТабличныйДокумент;
   
    Данные= ПолучитьИзВременногоХранилища(АдресДанных);
   
    ПутьКФайлуНаСервере=ПолучитьИмяВременногоФайла("xlsx");
   
    Данные.Записать(ПутьКФайлуНаСервере);
   
    Попытка
       
        ТабДок.Прочитать(ПутьКФайлуНаСервере, СпособЧтенияЗначенийТабличногоДокумента.Значение);
               
    Исключение
   
        Сообщение= Новый СообщениеПользователю;
       
        Сообщение.Текст="Файл не найден" + ОписаниеОшибки();
       
        Сообщение.Сообщить();
       
        Возврат;
           
    КонецПопытки;
   
    КоличествоСтрок= ТабДок.ВысотаТаблицы;
   
    Для НомерСтроки=2 По КоличествоСтрок Цикл
       
        СтрокаДанных=тзРасход.Добавить();
   
        СтрокаДанных.Источник=ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки,"ЧГ=0") + "C"+1).ТекущаяОбласть.Текст;
       
        СтрокаДанных.План=ТабДок.ПолучитьОбласть("R" + Формат(НомерСтроки,"ЧГ=0") + "C"+2).ТекущаяОбласть.Текст;
               
    КонецЦикла;
   
           
КонецПроцедуры

/////////////////////////////////////////////////////////////////////////////

&НаКлиенте
Процедура ПрочитатьФайл_XLSX()
   
    ДанныеФайла= Новый ДвоичныеДанные(ПутьКФайлам);
   
    АдресДанных=ПоместитьВоВременноеХранилище(ДанныеФайла,УникальныйИдентификатор);
   
    ПрочитатьФайл_XLS_НаСервере(АдресДанных);
   
КонецПроцедуры

/////////////////////////////////////////////////////////////////////////////

&НаСервере
Процедура СформироватьЁйилганНаСервере_Харажат()
   
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТЧ.Источник КАК Источник,
        |    ТЧ.План КАК План
        |ПОМЕСТИТЬ вт_Файл
        |ИЗ
        |    &ТЧ КАК ТЧ
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    вт_Файл.Источник КАК Источник,
        |    вт_Файл.План КАК План
        |ИЗ
        |    вт_Файл КАК вт_Файл";
   
    Запрос.УстановитьПараметр("ТЧ",тзРасход.Выгрузить());
   
/////////////////////////////////////////////////////////////////////////////////////////

    РезультатЗапроса = Запрос.Выполнить();
   
    Выборка = РезультатЗапроса.Выбрать();
   
    тзРасход.Очистить();
   
    Пока Выборка.Следующий() Цикл
       
        ТЧ=тзРасход.Добавить();
       
        ТЧ.Источник=Выборка.Источник;

        ТЧ.План=Выборка.План
   
    КонецЦикла;
   
    Сообщить("Количество строк в таблице значений: " + тзРасход.Количество());
   
КонецПроцедуры

///////////////////////////////////////////////////////////////////////////////////////


Уважаемые, уже 2 день не могу загрузить данные из файла. Вроде все сделал по фен-шую, но данные не грузяться.

Другие обработки точно с таким кодом, работает норм.

Внизу фото структуры файла и ТЗ.

После сформирования ТЗ пусто, даже нет ошибки.

Спасибо.

antoneus

А зачем тут запрос? Вы в него выгружаете таблицу значений, данные кладете в ВТ, выбираете эти же данные из ВТ и кладете обратно в таблицу значений.

Ну, ладно. А если заполнять таблицу так:

Для НомерСтроки=2 По КоличествоСтрок Цикл
       
        СтрокаДанных=тзРасход.Добавить();
   
        СтрокаДанных.Источник=ТабДок.Область(НомерСтроки, 1).Текст;
       
        СтрокаДанных.План=ТабДок.Область(НомерСтроки, 2).Текст;
               
    КонецЦикла;

maxxi

antoneus, "А зачем тут запрос?" Данные из файла мне нужны дальнейшем для соединение с другими таблицами.

antoneus

Моим кодом заполняется? Таблица пустая, без строк или строки есть, но пустые? Что отладчик говорит?

maxxi


antoneus

Пусто - строк нет или есть строки, но пустые? Опять клещами приходится вытягивать.

maxxi

antoneus, ничего не отображается. Но пустые строки добавляются, данных нет.

antoneus

Файл и обработку дайте посмотреть.

maxxi


antoneus

Все работает. Вот тут убрал пробел

Фильтр="Файл Excel (*.xlsx)| *.xlsx";
получилось

Фильтр="Файл Excel (*.xlsx)|*.xlsx";
а то вообще ни одного файла не видно было, как вы проверяли - непонятно.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск