Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: 1С для программиста

  Все выпуски  

RusFAQ.ru: 1С для программиста


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

Народное голосование ПРЕМИИ РУНЕТА-2007!
Голосуем за RusFAQ.ru >>

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / 1С для программиста

Выпуск № 652
от 18.11.2007, 01:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 404, Экспертов: 44
В номере:Вопросов: 2, Ответов: 6


Вопрос № 109039: Вопрос по 1с7.7: Пытаюсь создать объект ole Excel. Но как объект 1с его не видит. текст процедуры в приложении. Может подскажете в чем причина?...
Вопрос № 109104: Здравствуйте уважаемые эксперты. 1с 7.7 Есть документ с некоторым количеством колонок. Пускай К1,К2... Мне нужно установить некое значение в колонку в зависимости от значения переменной Х="К1" или "К2"... Как мне в про...

Вопрос № 109.039
Вопрос по 1с7.7:
Пытаюсь создать объект ole Excel.
Но как объект 1с его не видит. текст процедуры в приложении.

Может подскажете в чем причина?

Приложение:

Отправлен: 12.11.2007, 11:40
Вопрос задала: Оксана/kasy (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: Dmitry Stashenko
Здравствуйте, Оксана/kasy!

Получение данных из Excel.

Доступ из 1С к Excel производится посредством OLE. Например, код
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
позволит нам получить доступ через переменную "Эксель" к запущенному приложению Excel. А далее уже можно получить доступ к книге (файлу), листу и ячейке с данными. Далее примеры кода.

Открытие книги (файла):
Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
ПутьКФайлу - полный путь к файлу книги Excel.

Выбор листа книги для работы с ним:
Лист = Книга.WorkSheets(НомерЛиста);
или
Лист = Книга.WorkSheets(ИмяЛиста);
НомерЛиста - номер листа в книге, ИмяЛиста - имя листа в книге.

Получение значения ячейки листа:
Значение = Лист.Cells(НомерСтроки, НомерКолонки).Value;
НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.

Важно: не забывайте поле выполнения нужных действий добавлять код Эксель.Quit(); , иначе запущенный процесс останется незавершенным и будет занимать память и процессор компьютера.

Вывод данных в Excel.

Для вывода (выгрузки) данных в Excel необходимо либо открыть существующую книгу, либо создать новую, и выбрать рабочий лист для вывода данных. Открытие существующей книги описано выше, а для создания новой книги нужно использовать следующий код:
Попытка
Эксель = СоздатьОбъект("Excel.Application");
Исключение
Сообщить(ОписаниеОшибки() + " Программа Exсel не установлена на данном компьютере!");
Возврат;
КонецПопытки;
Книга = Эксель.WorkBooks.Add();
Так как при создании книги в Excel автоматически создаются листы (Сервис->Параметры->Общие->Листов в новой книге), то нужно лишь произвести выбор листа, с которым будет вестись работа:
Лист = Книга.WorkSheets(НомерЛиста);
либо добавить в книгу новый лист, если необходимо:
Лист = Книга.Sheets.Add();
Следующим шагом будет установка значения ячейки:
Лист.Cells(НомерСтроки, НомерКолонки).Value = Значение;
НомерСтроки, НомерКолонки - номер строки и номер колонки, на пересечении которых находится ячейка.
И в конце нужно произвести запись созданной книги:
Попытка
Книга.SaveAs(ПутьКФайлу);
Исключение
Сообщить(ОписаниеОшибки()+" Файл не сохранен!");
Возврат;
КонецПопытки;
ПутьКФайлу - полный путь к файлу книги Excel (включая имя).
Важно: не забывайте, что в имени файлов не должно содержаться символов / : * ? " > < |.

Приложение:

Ответ отправил: Dmitry Stashenko (статус: Студент)
Ответ отправлен: 12.11.2007, 11:57

Отвечает: DERL.KG
!!!
Здравствуйте, Оксана/kasy!
OLE объекты создаются через CreateObject, а не СоздатьОбъект


Функция СоздатьОбъект() прекрасно работает в модулях 1С с любыми объектами, CreateObject() является равноправным синонимом.

-----
∙ Отредактировал: Сергей Максименко [Elric] (Профессионал)
∙ Дата редактирования: 13.11.2007, 20:02
Ответ отправил: DERL.KG (статус: 7-ой класс)
Ответ отправлен: 12.11.2007, 13:45
Оценка за ответ: 4
Комментарий оценки:
Пробовала и СоздатьОбъект и CreateObject, все равно получается исключение.

Отвечает: Сергей Максименко [Elric]
Здравствуйте, Оксана/kasy!

У Вас скорее всего некорректно установлен MS Excel (или вообще стоит OpenOffice). Участок модуля у Вас в Приложении написан абсолютно корректно и много раз использовался на практике.
---------
В творчестве рождается истина
Ответ отправил: Сергей Максименко [Elric] (статус: Профессионал)
Украина, Киев
Тел.: +38(095)2873210
Организация: "МАКСЕР" - продажа и внедрение "1С:Предприятие"
Адрес: г. Киев
WWW: "1С:Предприятие" - продажа, внедрение, сопровождение
----
Ответ отправлен: 13.11.2007, 20:06


Вопрос № 109.104
Здравствуйте уважаемые эксперты.
1с 7.7
Есть документ с некоторым количеством колонок. Пускай К1,К2...
Мне нужно установить некое значение в колонку в зависимости от значения переменной Х="К1" или "К2"... Как мне в процедуре получить доступ к колонке имея значение Х. Перебор через если то иначе не предлагать.

Приложение:

Отправлен: 12.11.2007, 19:00
Вопрос задал: Александр Павлович (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Dmitry Stashenko
Здравствуйте, Александр Павлович!

Если я правильно вас понял, то речь идет о методе УстановитьАтрибут(). В вашем случае имея колонки К1 и К2, и переменную Х, которая содержит либо К1, либо К2, это выглядит так: УстановитьАтрибут(Х, Значение). Соответственно, частный случай для колонки К1 - это УстановитьАтрибут("К1", Значение). Прошу только учесть, что для документа помимо колонки еще важна строка, в которую производится запись значения.
Ответ отправил: Dmitry Stashenko (статус: Студент)
Ответ отправлен: 12.11.2007, 19:23
Оценка за ответ: 5

Отвечает: Астафьев Александр Николаевич
Здравствуйте, Александр Павлович! Создаем список значений как переменную для всего модуля т.е. в самом верху модуля пишем:
Перем сп;

В процедуре ПриОткрытии() пишем:
сп = СоздатьОбъект("СписокЗначений");
сп.ДобавитьЗначение("Проц_О","опт");
сп.ДобавитьЗначение("Проц_Мо","Мелкопт");
сп.ДобавитьЗначение("Проц_Р","розница");

Создаем Процедуру например:
Процедура ИнфоКолонки()
Поз = сп.НайтиЗначение(Форма.ТекущаяКолонка());
Если поз = 0 Тогда
Сообщить("ничего");
Иначе
сооб = ""; сп.ПолучитьЗначение(поз,сооб)
Сообщить(сооб);
КонецЕсли;
КонецПроцедуры

Честно говоря было плохо понятна связь вашей переменной Х="К1" или "К2"... и примера из приложения. Написал как понял вопрос. При достаточно большом количестве колонок в таблице документа код будет короче чем у Вас.
Ответ отправил: Астафьев Александр Николаевич (статус: 5-ый класс)
Ответ отправлен: 12.11.2007, 20:15
Оценка за ответ: 5
Комментарий оценки:
Отлично

Отвечает: Ромашов Евгений Николаевич
Здравствуйте, Александр Павлович!

ПолучитьСтрокуПоНомеру(НомерСтроки);
ПолучитьАтрибут("Колонка"+к)
Ответ отправил: Ромашов Евгений Николаевич (статус: 4-ый класс)
Ответ отправлен: 13.11.2007, 07:35
Оценка за ответ: 5


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.62.1 от 14.11.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное