Добрый день! Подскажите может кто делал такое, чтобы выводить отчет в excel. Например у меня есть форма в excel
в конфигураторе есть два документа Материалы для авто и Материалы для самолетов с реквизитами Организация и табл. частью номенклатура, кол-во, цена, сумма. Как сделать чтобы сформировались данные в этой форме excel.
(8) E_Migachev, я хотел бы посмотреть, как сделать обращение к переменой, например я в форме напишу переменную "КолМатерАвто" и в эту переменю буду заноситься данные с документа. И как прописать если у меня будет 1000 строк чтобы он заносил данные куда надо.
(9) Ermak "И как прописать если у меня будет 1000 строк чтобы он заносил данные куда надо",
в цикле, пока 1000 строк не переберёте, а куда надо , так в (8) E_Migachev, уже сказали.
а по этому? " я хотел бы посмотреть, как сделать обращение к переменой, например я в форме напишу переменную "КолМатерАвто" и в эту переменю буду заноситься данные с документа"
Я так понимаю этим кодом 1С будет искать переменную КолМатерАвто в форме excel и подставлять данные. А переменная КолМатерАвто должна также называться как и в документе от куда будут браться данные или нет?
Я где то видел пример с вордом, пишеться перемена в форме ворда и когда идет выгрузка данных из 1с в ворд то данные подставляются в переменые в форме ворда, вот я и про эксель так и думаю, если в экселе прописать переменую в какой нибудь ячейки то как будут данные попадать с 1с в эту ячейку? Конечно может я что то не так понимаю.Изменено 22.02.13 12:29:08
В ворде прописываются переменные в макете, чтобы можно было найти их и заменить на текст из выгрузки, а в экселе ячейка уже готова сама по себе принять данные.
(25) Ermak, применительно к Вашей проблеме есть два варианта:
1. Создать шаблон эксель и на основании него заполнять таблицу (код заполнения описан тут выше, естесственно, применяете к Вашей задаче)
2. Создавать чистую книгу, заполнять её (см. выше) и форматировать (объединяя ячейки).
Вы скажите, на каком этапе у Вас случился затык?Изменено 26.02.13 10:03:31
мне нужен первый вариант, но код который написан выше он ссылается на ячейку а мне нужно к переменно которая будет написана в ячейки эксель шаблона, вот я и прошу покажите пример как обращаться к переменной
(27) Ermak, минуточку, а откуда в экселе взялась переменная? (9) Ermak, вот тут вижу, но что Вы вкладываете в слово "Форма"? вот что меня выбило из седла! Форма в Вашем понимании - это экселевский документ, что ли?Изменено 26.02.13 16:45:38
(30) Ermak, скажите, а зачем Вам переменную в экселе иметь? Чем не нравится (или тяжело) заполнять ячейки адресно? В ворде понятно, там не к чему "привязаться", поэтому в текст (шаблон) вставляют переменные, которые заменяются на искомый текст. А в экселе и так всё поделено уже на квадратики, только заполняй, хоть вдоль, хоть поперёк)))Изменено 27.02.13 11:58:59
(33) Mokey, Я вроде писал что я видел в ворде как сделано, там используется перемена вот и думал что аналогично в экселе делается, но теперь буду пробовать с ячейками. Спасибо за помощь.
А как Вы тогда обращаетесь к ТаблДанных? Объявите её в процедуре, инициализируйте и тогда обращайтесь. Или обращайтесь непосредственно к реквизитам Док.Клиент.....
Во-первых, надо знать, откуда запускается эта процедура
Во-вторых, какие вообще реквизиты есть и какого типа данных.
Если Адресная информация в Вашем случае - это табличная часть справочника, то надо непосредственно так:
Для Каждого СтрокаТабл Из Док.Клиент.ТЧ_Адреса, где ТЧ_Адреса - это та самая табличная чать, в Вашем случае может по-другому называться
Да, и здесь мы подразумеваем, что процедура запускается в теле модуля Док, у которого есть реквизит Клиент.Изменено 06.03.13 10:54:58
1. Процедура запускается с внешней обработки
2. тип справочник, но может быть и числовой
3. Я не понимаю что за табличная часть ТЧ_Адреса
Возьмем на пример документ оказание услуг, мне нужно выгрузить реквизит Клиент и реквизит с табличной части Ценна, покажите пример как это сделать
у меня нет под рукой документа ОказаниеУслуг, к сожалению. Что-то мы всё вокруг да около ходим. Клиент - это реквизит документа, а Цена - реквизит табличной части, так?
как вызывается внешняя обработка? как в неё передаётся ссылка (или объект) на документ?
Как называется ТЧ документа?
(много вопросов, потому что Вы хотите конкретный пример под Ваши потребности, не желая подставлять в приведённые коды свои данные)
Я подразумеваю, что в ПереченьНоменклатуры есть реквизиты Адрес и Цена
Только мне всё равно непонятно, зачем такие сложности в поиске Строки и Столбца, какой в этом великий смысл, объясните, пожалуйста.Изменено 06.03.13 12:43:05
{Форма.Форма.Форма(14)}: Недостаточно фактических параметров
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
В ПереченьНоменклатуры есть реквизиты только Цена, адреса нет вообще.
У меня есть очень сложный шаблон excel, я хочу сделать около 10 документов куда будут заполняться значения а потом с помощью обработки выгружать эти значения с документов в этот шаблон excel.
Это только кусочек кода, проблема в вызове процедуры
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
зачем такое?
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
что тогда Адрес в этом примере?
Код 1C v 8.х
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
Где Вы тут ищете и что?
Цикл я Вам написал уже, просто, видимо, Вы выдернули откуда-то кусок кода, а как его применить, и возможно ли его применить, не знаете.
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту(Клиент, "Клиент");
тогда уж так
а цикл я Вам уже показал
Всеравно не понимаю Док.ПереченьНоменклатуры это обращается к табличной части ПереченьНоменклатуры но к ней относиться только реквизит Цена а Клиент не в ТЧ
Понимаете ли, НайтиПоРеквизиту() - это не обращение, это поиск в базе ссылки, в данном случае документа, по искомому реквизиту. Я теперь уже и не знаю, в каком направлении Вас консультировать, то ли азы 1С, но в таком случае говорится "учите матчасть", потому что без неё выгрузить в эксель будет трудно.
Я пытался задать наводящие вопросы по Вашему же коду, чтобы давать конкретные советы, но Вы запутались совсем))Изменено 06.03.13 15:42:40
Для начала, нужно найти (или передать в обработку) ссылку на объект, к реквизитам которго Вы хотите обращаться. А там уже как обычно, в примерах выше показано, как обращаться, через точку.
{Форма.Форма.Форма(56)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос2.Выполнить().Выбрать();
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
Хотел еще спросить как сделать, нужно чтобы Номенклатура выводилась в одну колонку по порядку строки из двух регистров, у меня сейчас первый регистр должен выводить номенклатуру в 1 строке а второй регистр выводить номенклатуру в 4 строке. Может я конечно что то не так делаю поправьте меня.
(69) Ermak
А если я буду объединять три или n регистров, как тогда будет
| 00,
| 00,
| 00,, нет, сколько будете добавлять, столько будет строчек, каждая строчка - это поле в запросе и, соответственно, колонка в итоговой таблице. А 0 выводит, потому что формат ячейки, по всей видимости, текст, а надо общий или число, тогда 0 не будет выводиться.
Я переделал свой запрос, сделал по проще. Не понимаю почему выдает оишбку
{Форма.Форма.Форма(114)}: Ошибка при установке значения атрибута контекста (Value)
ExcelЛист.Cells(Номерстроки, 20).Value = Результат.ФорКоличество;
по причине:
Произошла исключительная ситуация (0x800a03ec)
{Форма.Форма.Форма(82)}: Преобразование значения к типу Число не может быть выполнено
ExcelЛист.Cells(Номерстроки, 19).Value = Число(Результат.ФорКоличество);
(82) Mokey, все получилось спасибо. Я на счет нулей в ячейках где нет значений, я сделал формат ячейки Общий, все равно нули, может можно через код как то сделать?
1. Почему то после выгрузки просит файл сохранить только потом его открываешь и смотришь, как сделать чтобы он просто открывал файл с выгруженными данными
2. Мне нужно суммировать по реквизиту КомуНазначено, тип справочник Пользователи.
ПодскажитеИзменено 29.03.13 15:16:57
Выдает ошибку {Форма.ОтчетОбИсполненныхКонтрольныхПоручениях.Форма(53)}: Значение не является значением объектного типа (Наименование)
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.КомуНазначено.Наименование;