|
Таблица.Записать(путь+"отчет.xls","XLS");
ЗагрузитьВнешнююКомпоненту("V7Plus.dll");
Почта=СоздатьОбъект("AddIn.V7Mail");
Почта.Подключиться();
Почта.НовоеСообщение();
Почта.ДобавитьАдрес("general@nalog.ru");
Почта.ДобавитьФайл(путь+"отчет.xls");
Почта.Послать();
Почта.Отключиться();
|
Процедура ПереброскаВПочтовика()
myOlApp = CreateObject("Outlook.Application");
myItem = myOlApp.CreateItem(0); //olMailItem=0
//Адрес
myRecipient = myItem.Recipients.Add("axm2000@mail.ru");
myRecipient.Type=1;
//Тема
myItem.Subject = "Счет № "+НомерДок+" от "+ДатаДок;
//Тело
myItem.Body ="Счет находится в прикрепленном файле"
//Аттачменты
myAttachments = myItem.Attachments();
myAttachments.Add( "C:\\1cFiletmp.xls", 1, 1, "Счет № "+НомерДок+" от "+ДатаДок);
ФС.УдалитьФайл("C:\\1cFiletmp.xls");
//myItem.Display();
myItem.Send();
КонецПроцедуры
Предварительно напиши часть кода для печати счета в файл (догадайся какой).
Все. Если есть соединение то отправит сразу, нет поместит в исходящие.
Это для MS Outlook. Outlook Express механизма ОЛЕ не поддерживает. Никакой
внешней библиотеки не надо, по крайне мере для MS Outlook.
Как при отправке письма через Outlook указать обратный
адрес:
OLE_Outlook=СоздатьОбъект("Outlook.Application");
Mail = OLE_Outlook.CreateItem(0);
.....
Mail.ReplyRecipientNames="kto-to@gte-to.tam" //обратный адрес |
обЭксел = СоздатьОбъект("Excel.Application"); //создаем объект
НашФайл = обЭксел.Workbooks.Open(СокрЛП(ИмяФайла)); //Открываем файл
НашЛист = НашФайл.Sheets(1); //Устанавливаем нужный лист
Знач1 = НашЛист.Cells(1,1); // Считываем значение, здесь: из первой ячейки первой строки
//Если нужно считать несколько значений то организуем цикл
Для i = 1 По Знач1 Цикл
Знач = НашЛист.Cells(i,1).Value;
КонецЦикла;
ОбЭксел.WorkBooks.close();
ОбЭксел.Quit(); |
db=CreateObject("ADODB.Connection");
rs=CreateObject("ADODB.Recordset");
db.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\temp.xls;Extended Properties=""Excel 8.0;""";
db.Open();
rs.ActiveConnection = db;
rs.CursorType = 3;
rs.LockType = 2;
rs.Source = "Select * from [Лист1$]";
rs.Open();
Пока rs.Eof()=0 Цикл
Сообщить(rs.Fields(0).Value);
//обрабатываем Recordset
rs.MoveNext();
КонецЦикла;
rs.Close();
db.Close(); |
Как при работе
с Excel через OLE обойти предупреждения
Excel требует подтверждений пользователя, например, при удалении листа
из рабочей книги. При этом процесс обработки останавливается. Как сделать
чтобы он не задавал таких вопросов?
Эксель = СоздатьОбъект("Excel.Application");
.....
Эксель.DisplayAlerts = 0;
..... а здесь делаешь че-нить пакостное
Эксель.DisplayAlerts = 1;
Формат числа при выгрузке в Excel
При выгрузке данных в Excel числа типа 9237642437 отображаются 9,23764Е+11.
Есть такая фича у Excel: если перед числом (или другим значением) поставить
апостроф ('), эксель это понимает как то, что ему подсовывают текст,
а апостроф отображаться не будет, т.е. напиши так: '9237642437
Для того, чтобы открыть файл *.mxl в Excel
Необходимо внести в реестр следующую информацию:
REGEDIT4
[HKEY_CURRENT_USER\Software\Microsoft\Office\10.0\Excel\Converters]
"Moxel"="1С:Предприятие (*.mxl),...\\bin\\mxl2xl.dll,
*.mxl"
где:
<...> это пусть к каталогу 1С-Предприятия
<10.0> это номер версии Экселя - XP. Для 2000 это будет 9.0, 97
- 8.0, 95 - 7.0
Как определить, когда закончились данные на листе при загрузке данных
из Excel
SpecialCells(11) - "последняя" ячейка
Например, если нужен номер строки последней ячейки, то LastRow=ExcelApp.Cells(1,1).SpecialCells(11).Row;
Обработка ошибочных значений
При обработке через OLE ячеек, содержащих ошибочные значения (#ДЕЛ/0!;#ЗНАЧ!;#ЧИСЛО! и т.п.) 1С зависает при обращении к
свойству Value - не помогает даже конструкция Попытка-Исключение.
Обойти эту неприятность можно очень просто - проверять перед обращением к Value свойство Text:
СписокОшибокЁкселя=СоздатьОбъект("СписокЗначений");
СписокОшибокЁкселя.ДобавитьЗначение("#ПУСТО!");
СписокОшибокЁкселя.ДобавитьЗначение("#ДЕЛ/0!");
СписокОшибокЁкселя.ДобавитьЗначение("#ЗНАЧ!");
СписокОшибокЁкселя.ДобавитьЗначение("#ССЫЛКА!");
СписокОшибокЁкселя.ДобавитьЗначение("#ИМЯ?");
СписокОшибокЁкселя.ДобавитьЗначение("#ЧИСЛО!");
СписокОшибокЁкселя.ДобавитьЗначение("#Н/Д");
//Для англ. версии
СписокОшибокЁкселя.ДобавитьЗначение("#NULL!");
СписокОшибокЁкселя.ДобавитьЗначение("#DIV/0!");
СписокОшибокЁкселя.ДобавитьЗначение("#VALUE!");
СписокОшибокЁкселя.ДобавитьЗначение("#REF!");
СписокОшибокЁкселя.ДобавитьЗначение("#NAME?");
СписокОшибокЁкселя.ДобавитьЗначение("#NUM!");
СписокОшибокЁкселя.ДобавитьЗначение("#N/A");
//...
ТекстЯчейки=Ячейка.Text;
Если СписокОшибокЁкселя.НайтиЗначение(ТекстЯчейки)=0 Тогда
Сообщить(Ячейка.Value);
Иначе
Сообщить(ТекстЯчейки);
КонецЕсли;
|
Процедура ACCESS()
dbe=CreateObject("DAO.DBEngine.36");
wksp=dbe.Workspaces(0);
db=0;
// в ковычках имя фаила с расширением MDB
Если ФС.СуществуетФайл(КаталогПользователя()+"sr.mdb")=0 Тогда
// создание файла базы данных с русским порядком сортировки
db=wksp.CreateDataBase(КаталогПользователя()+"mars_sr.mdb",";LANGID=0x0419;CP=1251;COUNTRY=0");
// DDL - запрос на создание таблицы
// описание языка DDL (подмножество SQL) смотрите в хелпе по MS Access
// не пытайтесь делать это с другими форматами - DDL через DAO поддерживается только для MDB
//Создадим еще таблицу
db.Execute("CREATE TABLE BANKS
|(REC_IND INTEGER,
|BANKCODE INTEGER,
|BANKNAME TEXT ,
|ModifiedFlg BIT,
|ChangeSeqFlg BIT);"
);
// индекс на нужные поля
db.Execute("CREATE INDEX REC_IND ON BANKS (REC_IND);");
Иначе
// просто открываем базу данных в разделенном режиме
db=wksp.OpenDataBase(КаталогПользователя()+"sr.mdb");
// и очищаем имеющиеся данные
db.Execute("DELETE * FROM BANKS;");
КонецЕсли;
// rs-это как раз сама таблица, куда мы будем добавлять записи
rs=db.OpenRecordset("BANKS");
// добавление записи
rs.AddNew();
// присвоение значений полям
rs.REC_IND = "1";
rs.BANKCODE = "34";
rs.BANKNAME = "Инвест";
rs.ModifiedFlg = "1";
// запомним запись
rs.Update();
// и так далее ...
db.Close(); // закрытие базы данных
КонецПроцедуры |
Акцесс = СоздатьОбъект("ADODB.CONNECTION");
Попытка
СтрокаПодключения="Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mybase.mdb;Uid=Admin;Pwd=";
Акцесс.Open(СтрокаПодключения);
Исключение
Сообщить("Все плохо:"+ОписаниеОшибки());
Возврат;
КонецПопытки;
Команда = СоздатьОбъект("ADODB.Command");
Команда.ActiveConnection=Акцесс;
ТекстСелект = "SELECT * FROM tblCustoms";
НаборЗаписей = СоздатьОбъект("ADODB.RecordSet");
Команда.CommandText=ТекстСелект;
Попытка
НаборЗаписей=Команда.Execute;
Исключение
Сообщить("Обломись:"+ОписаниеОшибки());
КонецПопытки;
Попытка
НаборЗаписей.MoveFirst();
Исключение //нет записей в рекордсете
НаборЗаписей.Close();
Возврат;
КонецПопытки;
Пока НаборЗаписей.EOF()=0 Цикл
ИНН = НаборЗаписей.Fields("INN").Value;
//ну и т.д.
НаборЗаписей.MoveNext();
КонецЦикла;
НаборЗаписей.Close();
Для
тех, у кого в базе Акцесс создана рабочая группа (есть файлик mdw), строка
подключения будет такая:
СтрокаПодключения="Driver= Microsoft Access Driver (*.mdb)};systemDB=C:\wg.mdw;Dbq=C:\mybase.mdb;Uid=Admin;Pwd="; |
|
|