helpf.pro
Регистрация

v8: Выводить отчет с 1С в Excel

Ermak
21.02.2013 12:52Прочитано: 8590
Добрый день! Подскажите может кто делал такое, чтобы выводить отчет в excel. Например у меня есть форма в excel

title

в конфигураторе есть два документа Материалы для авто и Материалы для самолетов с реквизитами Организация и табл. частью номенклатура, кол-во, цена, сумма. Как сделать чтобы сформировались данные в этой форме excel.
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
21.02.2013 14:36Ответ № 1
(0) Ermak, так выведи в табличный документ и сохрани как excel
Ermak
21.02.2013 14:45Ответ № 2
В том то и дело что хотелось бы выводить в эксель, в дальнейшем может быть очень сложная форма, в 1с не получиться у меня сделать
E_Migachev
21.02.2013 14:48Ответ № 3
(2) Ermak, вот пример выгрузки
Код 1C v 8.х
 Попытка
// Загрузка объекта Microsoft Excel
Состояние("Выгрузка данных из 1С в Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при запуске Microsoft Excel."
+ Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;

// Создадим книгу, по умолчанию в ней уже есть листы
Книга = ExcelПриложение.WorkBooks.Add();

// Используем первый лист книги Excel
Лист = Книга.WorkSheets(1);

// Сформировать шапку документа в первой строке листа
Колонка = 1;
Для каждого стр из ТП цикл
Если стр.Выгружать Тогда
Лист.Cells(1, Колонка).Value = стр.НазваниеРеквизита;
Колонка = Колонка + 1;
КонецЕсли;
КонецЦикла;

// Выгрузить данные справочника
выборка = Справочники[ИмяСправочника].Выбрать();
СтрокаЛиста = 2;
Пока выборка.Следующий() Цикл
Колонка = 1;
Для каждого стр из ТП цикл

Если стр.Выгружать Тогда
Попытка
// Установить значение в строке и колонке
Если ТипЗнч(выборка[стр.НазваниеРеквизита])=Тип("Число") Тогда
// Установить формат для типа Число
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "0,00";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Формат(выборка[стр.НазваниеРеквизита],"ЧГ=0");
иначе
// Для всех других типов установим формат "Текстовый"
Лист.Cells(СтрокаЛиста, Колонка).NumberFormat = "@";
Лист.Cells(СтрокаЛиста, Колонка).Value =
Строка(выборка[стр.НазваниеРеквизита]);
КонецЕсли;
исключение
// в случае ошибки вывести номер строки и колонки
Сообщить("Ошибка установки значения для: " +
выборка[стр.НазваниеРеквизита]);
Сообщить("Стр: " +СтрокаЛиста+ " Кол: " +
Колонка+ " Рек: " + стр.НазваниеРеквизита);
КонецПопытки;
Колонка = Колонка + 1;
КонецЕсли;

КонецЦикла;
СтрокаЛиста = СтрокаЛиста + 1;
Состояние("Экспорт из 1С в Excel " + СтрокаЛиста);
КонецЦикла;

// Сохраним созданную книгу в файл xls
Книга.SaveAs(имяФайла);

// Обязательно закроем соединение с COM объектом для освобождения памяти
ExcelПриложение.Quit();

Сообщить("Файл выгружен успешно: " + имяФайла );
подробнее: v8.x: Выгрузка данных в Excel с установкой разных параметров
Ermak
21.02.2013 15:01Ответ № 4
(3) E_Migachev, А есть у вас в файле обработки и что получится в excel, так нагляднее будет?
E_Migachev
21.02.2013 15:48Ответ № 5
(4) Ermak, вот пример: Скачивать файлы может только зарегистрированный пользователь!
1C обработка выгружает выбранный справочник в Excel
E_Migachev
21.02.2013 15:55Ответ № 6
+ пример выгрузки с указанием Конкретных ячеек:
Код 1C v 8.х
 Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяВременногоФайла);

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Пользователь;
ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
ExcelЛист.Cells(13, 10).Value = Моб;


Для каждого СтрокаТабл из ТаблДанных Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));

ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Значение;
КонецЦикла;
Ermak
21.02.2013 18:27Ответ № 7
(6) E_Migachev, Выгрузка справочника в эксель это не то, а вот пример по выгрузки с указанными ячейками это мне нужно, можете пример показать?
E_Migachev
22.02.2013 01:55Ответ № 8
так это же один и тот же код, только в обработке по выгрузке справочников ячейка указывается программно:
Код 1C v 8.х
 Лист.Cells(СтрокаЛиста, Колонка).Value   

а тут принудительно:
Код 1C v 8.х
 ExcelЛист.Cells(13, 10).Value    
Ermak
22.02.2013 08:39Ответ № 9
(8) E_Migachev, я хотел бы посмотреть, как сделать обращение к переменой, например я в форме напишу переменную "КолМатерАвто" и в эту переменю буду заноситься данные с документа. И как прописать если у меня будет 1000 строк чтобы он заносил данные куда надо.
Mokey
22.02.2013 10:14Ответ № 10
(9) Ermak "И как прописать если у меня будет 1000 строк чтобы он заносил данные куда надо",
в цикле, пока 1000 строк не переберёте, а куда надо , так в (8) E_Migachev, уже сказали.
Ermak
22.02.2013 10:21Ответ № 11
а по этому? " я хотел бы посмотреть, как сделать обращение к переменой, например я в форме напишу переменную "КолМатерАвто" и в эту переменю буду заноситься данные с документа"
Ermak
22.02.2013 10:23Ответ № 12
(10) Mokey, Это указывается определенная ячейка

Код 1C v 8.х
  ExcelЛист.Cells(13, 10).Value    


А как прописать чтобы он по данной колонки и строке заполнял N количество
Mokey
22.02.2013 10:24Ответ № 13
(11) Ermak,

Лист.Cells(СтрокаЛиста, Колонка).Value = КолМатерАвто;
Mokey
22.02.2013 10:26Ответ № 14
точнее вопрос можно услышать? я пока не догоняю, что Вы хотите изобразить, к сожалению.
Ermak
22.02.2013 10:29Ответ № 15
Я так понимаю этим кодом 1С будет искать переменную КолМатерАвто в форме excel и подставлять данные. А переменная КолМатерАвто должна также называться как и в документе от куда будут браться данные или нет?

Код 1C v 8.х
 Лист.Cells(СтрокаЛиста, Колонка).Value = КолМатерАвто;   
Mokey
22.02.2013 10:36Ответ № 16
При чём тут переменная эксель, если Вы из документа (или откуда-то из 1С) выгружаете?
Ermak
22.02.2013 12:28Ответ № 17
Я где то видел пример с вордом, пишеться перемена в форме ворда и когда идет выгрузка данных из 1с в ворд то данные подставляются в переменые в форме ворда, вот я и про эксель так и думаю, если в экселе прописать переменую в какой нибудь ячейки то как будут данные попадать с 1с в эту ячейку? Конечно может я что то не так понимаю.
Изменено 22.02.13 12:29:08
Mokey
22.02.2013 13:41Ответ № 18
(17) Ermak Конечно может я что то не так понимаю., вот это правильное утверждение. )))
Mokey
22.02.2013 13:43Ответ № 19
В ворде прописываются переменные в макете, чтобы можно было найти их и заменить на текст из выгрузки, а в экселе ячейка уже готова сама по себе принять данные.
Ermak
22.02.2013 14:09Ответ № 20
(19) Mokey, а можете показать пример полностью готового код а не кусочек

Код 1C v 8.х
  Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяВременногоФайла);

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Пользователь;
ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
ExcelЛист.Cells(13, 10).Value = Моб;


Для каждого СтрокаТабл из ТаблДанных Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));

ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Значение;
КонецЦикла;
Mokey
22.02.2013 14:51Ответ № 21
а зачем строку и столбец таким извращённым способом вычислять? И второе: СтрокаТабл.Значение... Значение - это что, колонка таблицы значений?
Ermak
22.02.2013 15:18Ответ № 22
(21) Mokey, Это мне пример показал (6) E_Migachev, если есть что наглядней можете показать
Mokey
22.02.2013 15:20Ответ № 23
Я не знаю Ваших задач, а примеров кучу можно показать, но они все разные будут, Вам какую задачу надо решить?
Ermak
22.02.2013 18:00Ответ № 24
(23) Mokey, я здесь описал, (0) Ermak
Ermak
26.02.2013 09:57Ответ № 25
*03
Mokey
26.02.2013 10:00Ответ № 26
(25) Ermak, применительно к Вашей проблеме есть два варианта:
1. Создать шаблон эксель и на основании него заполнять таблицу (код заполнения описан тут выше, естесственно, применяете к Вашей задаче)
2. Создавать чистую книгу, заполнять её (см. выше) и форматировать (объединяя ячейки).

Вы скажите, на каком этапе у Вас случился затык?
Изменено 26.02.13 10:03:31
Ermak
26.02.2013 10:27Ответ № 27
мне нужен первый вариант, но код который написан выше он ссылается на ячейку а мне нужно к переменно которая будет написана в ячейки эксель шаблона, вот я и прошу покажите пример как обращаться к переменной
E_Migachev
26.02.2013 12:26Ответ № 28
(27) Ermak, к переменной ни как, только к ячейкам:
Код 1C v 8.х
 Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяВременногоФайла);

Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Пользователь;
ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
ExcelЛист.Cells(13, 10).Value = Моб;


Для каждого СтрокаТабл из ТаблДанных Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));

ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Значение;
КонецЦикла;

КонецЕсли;

ExcelПриложение.Visible = истина;
Mokey
26.02.2013 16:43Ответ № 29
(27) Ermak, минуточку, а откуда в экселе взялась переменная?
(9) Ermak, вот тут вижу, но что Вы вкладываете в слово "Форма"? вот что меня выбило из седла! Форма в Вашем понимании - это экселевский документ, что ли?
Изменено 26.02.13 16:45:38
Ermak
26.02.2013 17:07Ответ № 30
Да в моем контексте я имел ввиду Форма экселевский документ )
Mokey
27.02.2013 11:57Ответ № 31
(30) Ermak, скажите, а зачем Вам переменную в экселе иметь? Чем не нравится (или тяжело) заполнять ячейки адресно? В ворде понятно, там не к чему "привязаться", поэтому в текст (шаблон) вставляют переменные, которые заменяются на искомый текст. А в экселе и так всё поделено уже на квадратики, только заполняй, хоть вдоль, хоть поперёк)))
Изменено 27.02.13 11:58:59
Ermak
27.02.2013 14:14Ответ № 32
(31) Mokey, понятно
Mokey
27.02.2013 15:21Ответ № 33
(32) Ermak, с таким подходом вы не найдёте ответов на Ваши вопросы. Я бы, например, был не прочь посмотреть на Форму эксель с переменной.
Ermak
27.02.2013 17:15Ответ № 34
(33) Mokey, Я вроде писал что я видел в ворде как сделано, там используется перемена вот и думал что аналогично в экселе делается, но теперь буду пробовать с ячейками. Спасибо за помощь. )
Mokey
27.02.2013 17:41Ответ № 35
(34) Ermak, так ведь в самом начале сказали, что нельзя, а Вы всё не верили. Удачи.
Ermak
04.03.2013 10:46Ответ № 36
(28) E_Migachev, подскажите пример как обратиться к самому шаблону эксель, который лежит в папки.
E_Migachev
04.03.2013 11:35Ответ № 37
Код 1C v 8.х
 ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяВременногоФайла);   

где ИмяВременногоФайла - путь к файлу
Ermak
06.03.2013 10:10Ответ № 38
У меня таблицы значений из за этого ругается

{Форма.Форма.Форма(23,29)}: Переменная не определена (ТаблДанных)


Как можно по другому сделать


Код 1C v 8.х
 Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\1.xls");


Состояние("Обработка файла Microsoft Excel...");
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Док.Клиент.Наименование;
//ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
//ExcelЛист.Cells(13, 10).Value = Моб;


Для каждого СтрокаТабл из ТаблДанных Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));

ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Значение;
КонецЦикла;

//КонецЕсли;

ExcelПриложение.Visible = истина;

КонецПроцедуры
Mokey
06.03.2013 10:30Ответ № 39
(38) Ermak, так она по этому кусочку кода и неопределена. Что у Вас ТаблДанных?
Ermak
06.03.2013 10:39Ответ № 40
У меня нет таблицы данных, я беру данные с реквизитов Док.Клиент.Наименование;
Mokey
06.03.2013 10:45Ответ № 41
А как Вы тогда обращаетесь к ТаблДанных? Объявите её в процедуре, инициализируйте и тогда обращайтесь. Или обращайтесь непосредственно к реквизитам Док.Клиент.....
Ermak
06.03.2013 10:48Ответ № 42
Покажите пример как обращаться к реквизитам.
Mokey
06.03.2013 10:53Ответ № 43
Во-первых, надо знать, откуда запускается эта процедура
Во-вторых, какие вообще реквизиты есть и какого типа данных.
Если Адресная информация в Вашем случае - это табличная часть справочника, то надо непосредственно так:
Для Каждого СтрокаТабл Из Док.Клиент.ТЧ_Адреса, где ТЧ_Адреса - это та самая табличная чать, в Вашем случае может по-другому называться
Да, и здесь мы подразумеваем, что процедура запускается в теле модуля Док, у которого есть реквизит Клиент.
Изменено 06.03.13 10:54:58
Ermak
06.03.2013 11:15Ответ № 44
1. Процедура запускается с внешней обработки
2. тип справочник, но может быть и числовой
3. Я не понимаю что за табличная часть ТЧ_Адреса
Возьмем на пример документ оказание услуг, мне нужно выгрузить реквизит Клиент и реквизит с табличной части Ценна, покажите пример как это сделать
Mokey
06.03.2013 12:05Ответ № 45
у меня нет под рукой документа ОказаниеУслуг, к сожалению. Что-то мы всё вокруг да около ходим. Клиент - это реквизит документа, а Цена - реквизит табличной части, так?
как вызывается внешняя обработка? как в неё передаётся ссылка (или объект) на документ?
Как называется ТЧ документа?
(много вопросов, потому что Вы хотите конкретный пример под Ваши потребности, не желая подставлять в приведённые коды свои данные)
Ermak
06.03.2013 12:10Ответ № 46
1. Клиент и Цена это правильно
2. Внешняя обработка вызывается просто через файл открыть, вы это имели ввиду?
Передается так
Код 1C v 8.х
 Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();   

3. ТЧ документа называется ПереченьНоменклатуры
Mokey
06.03.2013 12:41Ответ № 47
Код 1C v 8.х
 Для каждого СтрокаТабл из Док.ПереченьНоменклатуры Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));
ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Цена;
КонецЦикла;

Я подразумеваю, что в ПереченьНоменклатуры есть реквизиты Адрес и Цена
Только мне всё равно непонятно, зачем такие сложности в поиске Строки и Столбца, какой в этом великий смысл, объясните, пожалуйста.
Изменено 06.03.13 12:43:05
Ermak
06.03.2013 12:56Ответ № 48
Выдал ошибку

{Форма.Форма.Форма(14)}: Недостаточно фактических параметров
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();


В ПереченьНоменклатуры есть реквизиты только Цена, адреса нет вообще.
У меня есть очень сложный шаблон excel, я хочу сделать около 10 документов куда будут заполняться значения а потом с помощью обработки выгружать эти значения с документов в этот шаблон excel.
Ermak
06.03.2013 13:10Ответ № 49
Че та я запутался, вот мой код

Код 1C v 8.х
 Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\1.xls");


Состояние("Обработка файла Microsoft Excel...");
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
ExcelЛист = ExcelФайл.Sheets(1);

ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Док.Клиент.Наименование;
//ExcelЛист.Cells(11, 10).Value = "Почта" + Емеля;
//ExcelЛист.Cells(13, 10).Value = Моб;


Для каждого СтрокаТабл из Док.ПереченьНоменклатуры Цикл
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Адрес, Найти(ВРег(СтрокаТабл.Адрес), "C") + 1));
ExcelЛист.Cells(Строка, Столбец).Value = СтрокаТабл.Цена;
КонецЦикла;

//КонецЕсли;

ExcelПриложение.Visible = истина;

Попытка
ExcelФайл.SaveAs("D:\1c\1.xls");
Исключение
Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
Возврат;
КонецПопытки;
КонецПроцедуры

Изменено 06.03.13 13:12:18
Mokey
06.03.2013 13:52Ответ № 50
Это только кусочек кода, проблема в вызове процедуры
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();
зачем такое?
Строка = Число(Сред(СтрокаТабл.Адрес, 2, Найти(ВРег(СтрокаТабл.Адрес), "C") - 2));
что тогда Адрес в этом примере?
Ermak
06.03.2013 14:07Ответ № 51
Что то я совсем запутался, давай те с начала, я писал что у меня один реквизит Клиент а второй Тбличная Часть - ПереченьНоменклатуры - Цена

Этим я ищу реквизит Клиент

Код 1C v 8.х
 Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();    


Передаю данные в ячейку

Код 1C v 8.х
 ExcelЛист.Cells(10, 10).Value = Док.Клиент.Наименование;


А как сделать потом его в цикле я не понимаю!

И реквизит Цена то не понимаю как задать чтобы его данные попадали в шаблон excel
Mokey
06.03.2013 15:04Ответ № 52
Этим я ищу реквизит Клиент

Код 1C v 8.х
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту();

Где Вы тут ищете и что?
Цикл я Вам написал уже, просто, видимо, Вы выдернули откуда-то кусок кода, а как его применить, и возможно ли его применить, не знаете.

Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту(Клиент, "Клиент");
тогда уж так
а цикл я Вам уже показал
Ermak
06.03.2013 15:35Ответ № 53
Док = Документы.ОказаниеУслуги.НайтиПоРеквизиту(Клиент, "Клиент");
тогда уж так


а если у меня 20 будет реквизитов к каждому обращаться, или есть способ лучше?
Ermak
06.03.2013 15:37Ответ № 54
Всеравно не понимаю Док.ПереченьНоменклатуры это обращается к табличной части ПереченьНоменклатуры но к ней относиться только реквизит Цена а Клиент не в ТЧ
Mokey
06.03.2013 15:41Ответ № 55
Понимаете ли, НайтиПоРеквизиту() - это не обращение, это поиск в базе ссылки, в данном случае документа, по искомому реквизиту. Я теперь уже и не знаю, в каком направлении Вас консультировать, то ли азы 1С, но в таком случае говорится "учите матчасть", потому что без неё выгрузить в эксель будет трудно.
Я пытался задать наводящие вопросы по Вашему же коду, чтобы давать конкретные советы, но Вы запутались совсем))
Изменено 06.03.13 15:42:40
Ermak
06.03.2013 17:10Ответ № 56
тогда я уже очень сильно запутался, давно не обращался к 1С *01
Ermak
06.03.2013 17:18Ответ № 57
Подскажите как обращаться к реквизитам с внешней обработки?
Mokey
07.03.2013 09:38Ответ № 58
Для начала, нужно найти (или передать в обработку) ссылку на объект, к реквизитам которго Вы хотите обращаться. А там уже как обычно, в примерах выше показано, как обращаться, через точку.
Ermak
07.03.2013 12:08Ответ № 59
В этом у меня путаница как выбрать, покажите на примере
Изменено 07.03.13 12:08:45
Ermak
07.03.2013 12:27Ответ № 60
Сделал так но почему то не выводит значение Цена а только Дату

Код 1C v 8.х
 Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\1.xls");


Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

Док = Документы.ОказаниеУслуги.ПолучитьСсылку();


ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";



Для каждого СтрокаТабл из Док.ПереченьНоменклатуры Цикл
Строка = Число(Сред(СтрокаТабл.Цена, 2, Найти(ВРег(СтрокаТабл.Цена), "C") - 2));
Столбец = Число(Сред(СтрокаТабл.Цена, Найти(ВРег(СтрокаТабл.Цена), "C") + 1));
ExcelЛист.Cells(2, 2).Value = СтрокаТабл.Цена;
КонецЦикла;



ExcelПриложение.Visible = истина;

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

Изменено 07.03.13 12:27:42
Ermak
07.03.2013 12:56Ответ № 61
Попробовал таким способом, теперь выводит но почему то только одного клиента а их у меня пять, почему не понимаю

Код 1C v 8.х
 Процедура КнопкаВыполнитьНажатие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\1.xls");


Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);



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

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Док = Выборка.Ссылка.ПолучитьОбъект();
ExcelЛист.Cells(8, 7).Value = Формат(ТекущаяДата(), "ДЛФ=ДД") + " г.";
ExcelЛист.Cells(10, 10).Value = Док.Клиент.Наименование;
КонецЦикла;


ExcelПриложение.Visible = истина;


КонецПроцедуры
Ermak
12.03.2013 15:12Ответ № 62
Сделал такую процедуру

Код 1C v 8.х
 	 Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\1.xls");


Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

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


Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 1;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.Номенклатура.Наименование;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.Количество;
ExcelЛист.Cells(Номерстроки, 4).Value = Результат.Цена;
ExcelЛист.Cells(Номерстроки, 5).Value = Результат.Стоимость;

НомерСтроки = НомерСтроки + 1;
КонецЦикла;

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


Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 4;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.Номенклатура.Наименование;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.Количество;
ExcelЛист.Cells(Номерстроки, 4).Value = Результат.Цена;
ExcelЛист.Cells(Номерстроки, 5).Value = Результат.Стоимость;

НомерСтроки = НомерСтроки + 1;
КонецЦикла;

ExcelПриложение.Visible = истина;

Выдает ошибку

{Форма.Форма.Форма(56)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос2.Выполнить().Выбрать();
по причине:
{(1, 1)}: Ожидается выражение "ВЫБРАТЬ"
Ermak
12.03.2013 15:16Ответ № 63
Хотел еще спросить как сделать, нужно чтобы Номенклатура выводилась в одну колонку по порядку строки из двух регистров, у меня сейчас первый регистр должен выводить номенклатуру в 1 строке а второй регистр выводить номенклатуру в 4 строке. Может я конечно что то не так делаю поправьте меня.
Mokey
12.03.2013 15:17Ответ № 64
(62) Ermak, в показанном коде нет такой строки
Ermak
12.03.2013 15:19Ответ № 65
(64) Mokey, извиняюсь перепутал. Подскажите по этому (63) Ermak,
Mokey
12.03.2013 15:20Ответ № 66
(63) Ermak, создайте один запрос-объединение, тогда обход будет по одной коллекции значений
Ermak
12.03.2013 16:07Ответ № 67
Подскажите как правильно сделать запрос-объединение, я что то не правильно делаю

Код 1C v 8.х
 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Организация,
| Квартал,
| Номенклатура,
| Группа,
| Подгруппа,
| БазЕдиница,
| Тип,
| Количество КАК ФКоличество,
| Цена КАК ФЦена,
| Сумма КАК ФСумма
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1"
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| Организация,
| Квартал,
| Номенклатура,
| Группа,
| Подгруппа,
| БазЕдиница,
| Тип,
| Количество КАК ФорКоличество,
| Цена КАК ФорЦена,
| Сумма КАК ФорСумма
|ИЗ
| РегистрНакопления.Форма2 КАК Форма2";

Результат = Запрос.Выполнить().Выбрать();
Mokey
12.03.2013 16:48Ответ № 68
Код 1C v 8.х
 Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Форма1.Организация КАК Организация,
| Форма1.Квартал КАК Квартал,
| Форма1.Номенклатура КАК Номенклатура,
| Форма1.Группа КАК Группа,
| Форма1.Подгруппа КАК Подгруппа,
| Форма1.БазЕдиница КАК БазЕдиница,
| Форма1.Тип КАК Тип,
| Количество КАК ФКоличество,
| Цена КАК ФЦена,
| Сумма КАК ФСумма,
| 0 КАК ФорКоличество,
| 0 КАК ФорЦена,
| 0 КАК ФорСумма
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1"
|ОБЪЕДИНИТЬ
|ВЫБРАТЬ
| Форма2.Организация,
| Форма2.Квартал,
| Форма2.Номенклатура,
| Форма2.Группа,
| Форма2.Подгруппа,
| Форма2.БазЕдиница,
| Форма2.Тип,
| 0,
| 0,
| 0,
| Форма2.Количество,
| Форма2.Цена,
| Форма2.Сумма
|ИЗ
| РегистрНакопления.Форма2 КАК Форма2";

Результат = Запрос.Выполнить().Выбрать();
Ermak
12.03.2013 17:13Ответ № 69
Все получилось большое спасибо!!!
*05

Вопросик еще один, выгрузил я в ecel, если у ячейки нет значения то ставит 0, а можно сделать чтобы чистая ячейка оставалась?

А если я буду объединять три или n регистров, как тогда будет
| 00,
| 00,
| 00,

и т.д
Изменено 12.03.13 17:23:41
Mokey
12.03.2013 17:39Ответ № 70
(69) Ermak
А если я буду объединять три или n регистров, как тогда будет
| 00,
| 00,
| 00,
, нет, сколько будете добавлять, столько будет строчек, каждая строчка - это поле в запросе и, соответственно, колонка в итоговой таблице. А 0 выводит, потому что формат ячейки, по всей видимости, текст, а надо общий или число, тогда 0 не будет выводиться.
Ermak
12.03.2013 19:09Ответ № 71
(70) Mokey, Спасибо большое!
Ermak
13.03.2013 11:14Ответ № 72
Я переделал свой запрос, сделал по проще. Не понимаю почему выдает оишбку

{Форма.Форма.Форма(114)}: Ошибка при установке значения атрибута контекста (Value)
ExcelЛист.Cells(Номерстроки, 20).Value = Результат.ФорКоличество;
по причине:
Произошла исключительная ситуация (0x800a03ec)


Код 1C v 8.х
  Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\1.xls");


Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Количество
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Количество
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Цена
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФЦена,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Цена
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорЦена,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Сумма
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФСумма,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Сумма
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорСумма,
| Форма1.Номенклатура,
| Форма1.Группа,
| Форма1.Подгруппа,
| Форма1.БазЕдиница,
| Форма1.Тип
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1";


Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 2;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.Группа;
ExcelЛист.Cells(Номерстроки, 2).Value = Результат.Подгруппа;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.Номенклатура.Наименование;
ExcelЛист.Cells(Номерстроки, 4).Value = Результат.Тип;
ExcelЛист.Cells(Номерстроки, 5).Value = Результат.БазЕдиница;
ExcelЛист.Cells(Номерстроки, 10).Value = Результат.ФКоличество;
ExcelЛист.Cells(Номерстроки, 11).Value = Результат.ФЦена;
ExcelЛист.Cells(Номерстроки, 12).Value = Результат.ФСумма;
ExcelЛист.Cells(Номерстроки, 20).Value = Результат.ФорКоличество;
ExcelЛист.Cells(Номерстроки, 21).Value = Результат.ФорЦена;
ExcelЛист.Cells(Номерстроки, 22).Value = Результат.ФорСумма;

НомерСтроки = НомерСтроки + 1;
КонецЦикла;

ExcelПриложение.Visible = истина;
Ermak
13.03.2013 11:25Ответ № 73
Разобрался в чем ошибка!
Вот исходный код кому интересен

Код 1C v 8.х
  Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\1.xls");


Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets(1);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Количество
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Количество
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Цена
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФЦена,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Цена
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорЦена,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Сумма
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма1.ПустаяСсылка)
| КОНЕЦ КАК ФСумма,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Сумма
| ИНАЧЕ ЗНАЧЕНИЕ(Документ.Форма2.ПустаяСсылка)
| КОНЕЦ КАК ФорСумма,
| Форма1.Номенклатура,
| Форма1.Группа,
| Форма1.Подгруппа,
| Форма1.БазЕдиница,
| Форма1.Тип
|ИЗ
| РегистрНакопления.Форма1 КАК Форма1";


Результат = Запрос.Выполнить().Выбрать();
НомерСтроки = 2;
Пока Результат.Следующий() Цикл
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.Группа;
ExcelЛист.Cells(Номерстроки, 2).Value = Результат.Подгруппа;
ExcelЛист.Cells(Номерстроки, 3).Value = Результат.Номенклатура.Наименование;
ExcelЛист.Cells(Номерстроки, 4).Value = Результат.Тип;
ExcelЛист.Cells(Номерстроки, 5).Value = Результат.БазЕдиница;
ExcelЛист.Cells(Номерстроки, 10).Value = Строка(Результат.ФКоличество);
ExcelЛист.Cells(Номерстроки, 11).Value = Строка(Результат.ФЦена);
ExcelЛист.Cells(Номерстроки, 12).Value = Строка(Результат.ФСумма);
ExcelЛист.Cells(Номерстроки, 20).Value = Строка(Результат.ФорКоличество);
ExcelЛист.Cells(Номерстроки, 21).Value = Строка(Результат.ФорЦена);
ExcelЛист.Cells(Номерстроки, 22).Value = Строка(Результат.ФорСумма);

НомерСтроки = НомерСтроки + 1;
КонецЦикла;

ExcelПриложение.Visible = истина;
Ermak
13.03.2013 12:45Ответ № 74
Я выгрузил данные в эксель, хочу теперь в экселе сложить все данные СУММА() а он не складывает, почему?
Ermak
13.03.2013 12:48Ответ № 75
Пытаюсь сделать условие по организации, чтобы данные передавались в нужный документ и не работает, что не так

Код 1C v 8.х
 	 Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
Если ЭлементыФормы.Организация.Значение = "МКС" Тогда
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\МКС.xls");
ИначеЕсли ЭлементыФормы.Организация.Значение = "ППК" Тогда
ExcelФайл = ExcelПриложение.WorkBooks.Open("D:\1c\ППК.xls");
Иначе
Предупреждение ("Выберите организацию!!!");
КонецЕсли;


Состояние("Обработка файла Microsoft Excel...");

ExcelЛист = ExcelФайл.Sheets("Услуги");

Изменено 13.03.13 12:48:56
E_Migachev
13.03.2013 14:23Ответ № 76
(75) Ermak, потому что организация это справочник и тебе надо сверять ссылкой
или сверяй наименование
Код 1C v 8.х
 Если  СокрЛП(ЭлементыФормы.Организация.Наименование) = "МКС" Тогда   
Ermak
13.03.2013 16:11Ответ № 77
Выдает ошибку

{Форма.Форма.Форма(22)}: Значение не является значением объектного типа (Sheets)
ExcelЛист = ExcelФайл.Sheets("Услуги");


Я выгрузил данные в эксель, хочу теперь в экселе сложить все данные СУММА() а он не складывает, почему?
E_Migachev
13.03.2013 17:15Ответ № 78
похоже что не получается открыть или прочитать твой файл
Mokey
13.03.2013 19:48Ответ № 79
(77) Ermak, потому что
ExcelЛист.Cells(Номерстроки, 10).Value = Строка(Результат.ФКоличество);
ExcelЛист.Cells(Номерстроки, 11).Value = Строка(Результат.ФЦена);
ExcelЛист.Cells(Номерстроки, 12).Value = Строка(Результат.ФСумма);
ExcelЛист.Cells(Номерстроки, 20).Value = Строка(Результат.ФорКоличество);
ExcelЛист.Cells(Номерстроки, 21).Value = Строка(Результат.ФорЦена);
ExcelЛист.Cells(Номерстроки, 22).Value = Строка(Результат.ФорСумма);
Вы перевели все числовые значения в строку
Ermak
13.03.2013 21:28Ответ № 80
(79) Mokey, а как тогда нужно?
так ExcelЛист.Cells(Номерстроки, 10).Value = Результат.ФКоличество; он выдает ошибку, ругается на синтаксис Value
Ermak
14.03.2013 10:17Ответ № 81
Числовой сделал, ругаеться

{Форма.Форма.Форма(82)}: Преобразование значения к типу Число не может быть выполнено
ExcelЛист.Cells(Номерстроки, 19).Value = Число(Результат.ФорКоличество);
Mokey
14.03.2013 11:29Ответ № 82
(81) Ermak, потому что Результат.ФорКоличество = Неопределено, или Ссылка какая-то, судя по запросу, скорее всего.
в запросе надо надо делать так:

| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ФКоличество,
Ermak
14.03.2013 11:55Ответ № 83
(82) Mokey, все получилось спасибо. Я на счет нулей в ячейках где нет значений, я сделал формат ячейки Общий, все равно нули, может можно через код как то сделать?
Mokey
14.03.2013 12:02Ответ № 84
т.е. и в пустом экселевском файле нули в ячейках?
Ermak
14.03.2013 12:42Ответ № 85
вот скрин файла

title
Mokey
14.03.2013 14:10Ответ № 86
Попробуйте не выводить значение в ячейку, если оно равно 0.
например:
Код 1C v 8.х
 Если Результат.ФКоличество <> 0 Тогда
ExcelЛист.Cells(Номерстроки, 10).Value = Результат.ФКоличество;
КонецЕсли;
Ermak
14.03.2013 16:21Ответ № 87
(86) Mokey, Все равно выводит 0
Mokey
15.03.2013 09:39Ответ № 88
(87) Ermak, Значит, формат ячеек на самом листе эксель проверяйте
Ermak
15.03.2013 11:10Ответ № 89
когда я загружаю данные формат ячейки случайно не меняется, я имею ввиду который формат был в 1С он не становится в экселе такой же
Ermak
29.03.2013 15:15Ответ № 90
Подскажите что делаю не так

Вот код

Код 1C v 8.х
 Процедура ОсновныеДействияФормыДействие(Кнопка)
Попытка
Состояние("Загрузка Microsoft Excel...");
ExcelПриложение = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
Возврат;
КонецПопытки;
ExcelКнига = ExcelПриложение.WorkBooks.Add();

ExcelЛист = ExcelКнига.WorkSheets(1);

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

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

КонецЦикла;

ExcelПриложение.Quit();

Сообщить("Файл выгружен успешно завершена");
КонецПроцедуры


1. Почему то после выгрузки просит файл сохранить только потом его открываешь и смотришь, как сделать чтобы он просто открывал файл с выгруженными данными
2. Мне нужно суммировать по реквизиту КомуНазначено, тип справочник Пользователи.
Подскажите
Изменено 29.03.13 15:16:57
Ermak
29.03.2013 16:35Ответ № 91
Сделал

Код 1C v 8.х
 "ВЫБРАТЬ
| УниверсальнаяЗадача.Ссылка,
| УниверсальнаяЗадача.КомуНазначено КАК КомуНазначено,
| УниверсальнаяЗадача.ЗадачаПоДокументу,
| УниверсальнаяЗадача.КонтрольныйСрок
|ИЗ
| Задача.УниверсальнаяЗадача КАК УниверсальнаяЗадача
|ГДЕ
| УниверсальнаяЗадача.КонтрольныйСрок МЕЖДУ &Дата1 И &Дата2
|ИТОГИ ПО
| ОБЩИЕ,
| КомуНазначено");



Выдает ошибку
{Форма.ОтчетОбИсполненныхКонтрольныхПоручениях.Форма(53)}: Значение не является значением объектного типа (Наименование)
ExcelЛист.Cells(Номерстроки, 1).Value = Результат.КомуНазначено.Наименование;
Ermak
22.04.2013 15:43Ответ № 92
Подскажите как мне быть. Я когда то делал такой запрос

Код 1C v 8.х
 "ВЫБРАТЬ
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма1
| ТОГДА Форма1.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ФКоличество,
| ВЫБОР
| КОГДА Форма1.Регистратор ССЫЛКА Документ.Форма2
| ТОГДА Форма1.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК ФорКоличество,
| ВЫБОР


Сейчас мне нужно проверить, если значение = Форма №1 тогда ..., вот как я стал делать но выдает ошибку

Код 1C v 8.х
 "ВЫБРАТЬ
| ВЫБОР
| КОГДА Форма1.ФормаПЗ.Наименование = "Форма №1"
| ТОГДА Форма1.Количество
| ИНАЧЕ 0
| КОНЕЦ КАК Кол1,
Ermak
23.04.2013 09:20Ответ № 93
Вопрос закрыт!
Подсказка: Щелникни по Имени пользователя напротив ответа, и тем самым покажешь, что сообщение адресовано ему.
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.