Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 3, свеженьких 3
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Выгрузка табличной части документа в Excel          
DenitScout Подменю пользователя
сообщение 23.02.19, 11:31
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

Здравствуйте, возникла проблема при выгрузке документа "РасходнаяНакладная" в файл.
При выгрузке табличной части в 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
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2384
Из: Проскуров
Спасибо сказали: 575 раз
Рейтинг: 559

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


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

DenitScout Подменю пользователя
сообщение 23.02.19, 11:58
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

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

cwant Подменю пользователя
сообщение 23.02.19, 12:07
Сообщение #4

Молчаливый
*
Группа: Пользователи
Сообщений: 2
Спасибо сказали: 0 раз
Рейтинг: 0

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

DenitScout Подменю пользователя
сообщение 23.02.19, 12:17
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 4
Спасибо сказали: 0 раз
Рейтинг: 0

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

TrasserZero Подменю пользователя
сообщение 23.02.19, 17:32
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 38
Спасибо сказали: 3 раз
Рейтинг: 0

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

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


Signature

Alegzander Подменю пользователя
сообщение 25.02.19, 8:50
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 21
Спасибо сказали: 7 раз
Рейтинг: 7

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

TipsyKID Подменю пользователя
сообщение 25.02.19, 12:42
Сообщение #8

Оратор
Иконка группы
Группа: Местный
Сообщений: 408
Из: Киев
Спасибо сказали: 160 раз
Рейтинг: 0

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

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


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


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Vidocq05 Подменю пользователя
сообщение 26.02.19, 13:25
Сообщение #9

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 214
Из: Сумы
Спасибо сказали: 38 раз
Рейтинг: 0

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

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

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

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

TipsyKID Подменю пользователя
сообщение 26.02.19, 15:06
Сообщение #10

Оратор
Иконка группы
Группа: Местный
Сообщений: 408
Из: Киев
Спасибо сказали: 160 раз
Рейтинг: 0

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

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

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

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

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


Сообщение отредактировал TipsyKID - 26.02.19, 15:07


Signature
Специалист : Технологическая платформа 8.х, Бухгалтерия для Украины, Управление торговлей для Украины, Зарплата и Управление Персоналом для Украины

Спасибо сказали: Vidocq05,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.11.20, 18:07
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!