Версия для печати темы (https://pro1c.org.ua/index.php?s=4a76b80110af04323b4366a1c1a24aa3&showtopic=50634)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Выгрузка табличной части документа в Excel

Автор: DenitScout 23.02.19, 11:31

Здравствуйте, возникла проблема при выгрузке документа "РасходнаяНакладная" в файл.
При выгрузке табличной части в Excel выдаёт ошибку
Поле объекта не обнаружено (Товар)
ExcelЛист.Cells(ТекущаяСтрока,1).Value = Выборка.Товар;
Название всех реквизитов написано правильно.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|    РасхНакл.Товары.Товар,
|    РасхНакл.Товары.Цена,
|    РасхНакл.Товары.Количество,
|    РасхНакл.Товары.Стоимость,
|    РасхНакл.Товары.НДС,
|    РасхНакл.Товары.СуммаСНДС
|ИЗ
|    Документ.РасходнаяНакладная КАК РасхНакл
|ГДЕ
|    РасхНакл.Номер = &Номер";
Запрос.УстановитьПараметр("Номер",РасходнаяНакладная.Номер);
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
        ExcelЛист.Cells(ТекущаяСтрока,1).Value = Выборка.Товар;
        ExcelЛист.Cells(ТекущаяСтрока,2).Value = Выборка.Цена;
        ExcelЛист.Cells(ТекущаяСтрока,3).Value = Выборка.Количество;
        ExcelЛист.Cells(ТекущаяСтрока,4).Value = Выборка.Стоимость;
        ExcelЛист.Cells(ТекущаяСтрока,5).Value = Выборка.НДС;
        ExcelЛист.Cells(ТекущаяСтрока,6).Value = Выборка.СуммаСНДС;
        ТекущаяСтрока = ТекущаяСтрока + 1;
КонецЦикла;


Автор: sava1 23.02.19, 11:47

Цитата(DenitScout @ 23.02.19, 11:31) *
ВЫБРАТЬ | РасхНакл.Товары.Товар,


ВЫБРАТЬ 
    РасхНакл.Товары.Товар как Товао,

Автор: DenitScout 23.02.19, 11:58

sava1 @ Сегодня, 12:47 * ,
Возникла ошибка
{Обработка.ВыгрузкаВExcel.Форма.Форма.Форма(57)}: Ошибка при установке значения атрибута контекста (Value)
ExcelЛист.Cells(ТекущаяСтрока,1).Value = Выборка.Товар;
по причине:
Произошла исключительная ситуация (0x800a03ec)

Автор: cwant 23.02.19, 12:07

DenitScout @ Сегодня, 11:31 * ,
Попробуйте перед записью в первую ячейки преобразовать товар принудительно в строку СокрЛП(Выборка.Товар)
Но алиасы тоже лучше задать для каждого реквизита

Автор: DenitScout 23.02.19, 12:17

cwant @ Сегодня, 13:07 * , Теперь проходит без ошибок, но документ Excel пустой, проверял должно быть 2 строки

Автор: TrasserZero 23.02.19, 17:32

DenitScout @ Сегодня, 13:17 * ,
Из кода непонятно как с экселем взаимодействие идет..
Надо что-то типа так если ком-соединением

Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.WorkBooks().Add();
Лист = Книга.Sheets(1);    
Лист.Cells(1,1).Value = "Тест";
Книга.SaveAS("E:\test.xls");
Книга.Close();
Эксель.Quit();

Автор: Alegzander 25.02.19, 8:50

ТекущаяСтрока где определяется?
Перед циклом:
ТекущаяСтрока = 1;

Автор: TipsyKID 25.02.19, 12:42

Не совсем по теме скажу, т.к. возможно Вам надо дополнить конкретный эксель или конкретный лист, но если это создания нового Exel файла с нуля, то лучше вообще сделать это штатными механизмами 1с:

Запрос вставить в скд, программно сформировать его выполнение в табличный документ а табличный документ сохранить через метод

Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLSX);


Т.к. этот геморой с Exel как COMОбъект очень разнообразен.

Автор: Vidocq05 26.02.19, 13:25

Цитата(TipsyKID @ 25.02.19, 12:42) *
Запрос вставить в скд, программно сформировать его выполнение в табличный документ а табличный документ сохранить через метод

Не совсем понял Ваш метод. Можно подробнее?

Я использую во внешней обработке "Конструктор запроса с обработкой результата" и на первой вкладке выбираю Тип обработки "Вывод в табличный документ". Потом, если нужно, корректирую и
МойТабДок.Записать(ПолноеИмяФайла,ТипФайлаТабличногоДокумента.XLSX);

Но Ваш метод мне тоже интересен.

Автор: TipsyKID 26.02.19, 15:06

Vidocq05 @ Сегодня, 13:25 * ,

Как то так, разници между обработкой и просто куском кода нет, лишь то откуда брать макет из обработки, из общего макета или макета документа:

&НаСервере
Процедура ВывестиСКДВТабличныйДокумент(МакетСКД, ТабличныйДокумент, КомпоновщикНастроек = Неопределено)
    
    Если КомпоновщикНастроек = Неопределено Тогда
        КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
        КомпоновщикНастроек.ЗагрузитьНастройки(МакетСКД.НастройкиПоУмолчанию);        
    КонецЕсли;
    
    Настройки = КомпоновщикНастроек.ПолучитьНастройки();  
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    
    МакетКомпоновки = КомпоновщикМакета.Выполнить(МакетСКД, Настройки);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТабличныйДокумент);
    
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
КонецПроцедуры

&НаСервере
Процедура КомандаВывестиВТабличныйДокументНаСервере()
    
    Обработка =  РеквизитФормыВЗначение("Объект");
    Макет = Обработка.ПолучитьМакет("Макет");    
    
    ТабличныйДокумент = Новый ТабличныйДокумент;
    ВывестиСКДВТабличныйДокумент(Макет,ТабличныйДокумент);
    
    ТабличныйДокумент.Записать(<ПолныйПутьКФайлу>,ТипФайлаТабличногоДокумента.XLSX);
    
КонецПроцедуры

&НаКлиенте
Процедура КомандаВывестиВТабличныйДокумент(Команда)
    КомандаВывестиВТабличныйДокументНаСервере();
КонецПроцедуры

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua