<<

стр. 9
(всего 10)

СОДЕРЖАНИЕ

>>


Команда
Описание команды
RunDLL32.EXE %SystemRoot%\
Открыть файл с изображением, имя кото-
System32\shimgvw.dll,
рого передано в параметре %1, в програм-
ImageView_Fullscreen %1
ме просмотра изображений и факсов.
Доступна в Windows XP/2003
RunDLL32.EXE SHELL32.DLL,
Открытие диалога О программе.
ShellAboutW
Доступна в Windows 2000/XP/2003
RunDLL32.EXE SHELL32.DLL,
ShellAboutA
RunDLL32.EXE SHELL.DLL,
Открытие диалога Применить системные
RestartDialog
настройки для перезагрузки или выклю-
чения компьютера.
Доступна в Windows 95/98/ME
RunDLL32.EXE shell32.dll,
Открыть файл, переданный в параметре
ShellExec RunDLL %1
%1, в зарегистрированном для него при-
ложении.
Доступна в Windows 2000/XP/2003
RunDLL32.EXE user32.dll,
Открыть диалог Заблокировать компью-
LockWorkStation
тер, вызываемый при нажатии комбина-
ции клавиш <Ctrl>+<Alt>+<Del>.
Доступна в Windows 2000/XP/2003


В листинге 7.5 приведены примеры использования различных команд
rund!132.



// Открытие диалога выбора программы для открытия файла boot.ini
ЗапуститьПриложение("RunDLL32.EXE SHELL32.DLL,OpenAs_RunDLL
с:\boot.ini");
// Открывает диалог "Отключение и извлечение аппаратного устройства"
ЗапуститьПриложение("RunDLL32.EXE shel!32.dll,Control_RunDLL hot-
plug, dll");
// Открыть изображение в программе просмотра изображений и факсов
ЗапуститьПриложение("RunDLL32.EXE %SystemRoot%\System32\shimgvw.dll,
ImageView_Fullscreen с:\picture.jpg");
// Открыть файл booklc.doc в зарегистрированном для DOC-файлов приложении
ЗапуститьПриложение("RunDLL32.EXE shel!32.dll,ShellExec_RunDLL
c:\booklc.doc");
// Заблокировать компьютер
ЗапуститьПриложение("RunDLL32.EXE user32.dll,LockWorkStation");
Глава 8


Интернет-технологии

Работа с электронной почтой
В связи с бурным развитием интернет-программирования поддержка серви-
са электронной почты стала весьма распространенной задачей для програм-
мистов.
Чтобы эффективно решить задачу доступа к электронной почте, пользователю,
в своей программе, необходимо понять основы ее устройства. Электронная
почта представляет собой совокупность протоколов, регламентирующих об-
мен данными по сети, а также программных средств, реализующих эти про-
токолы и предоставляющих пользователю соответствующие интерфейсы.
Основными протоколами являются протоколы передачи (отсылки) и чтения
писем, которые работают поверх TCP/IP (Transmission Control Protocol/
Internet Protocol — протокол управления передачей данных Интернет). Для
передачи сообщений по TCP-соединению подавляющее большинство про-
граммных средств пользуется протоколом SMTP (Simple Mail Transfer Protocol).
Для приема почтовых сообщений в Интернете обычно используется прото-
кол РОРЗ (Post Office Protocol 3).
Непосредственное использование в конфигурациях системы "1С:Предприятие"
команд протоколов SMTP и РОРЗ не представляется возможным. В связи
с этим для работы с электронной почтой будут использоваться средства бо-
лее высокого уровня (внешние компоненты, приложения и стандартные
объекты системы).


Использование команды mailto
Самый простой способ подготовить письмо для отправки — это просто от-
крыть окно создания нового письма почтового клиента, используемого
в системе по умолчанию, воспользовавшись при этом системной командой
mailto: (ЛИСТИНГ 8.1).
282 Глава 8



I/ Открывает окно нового сообщения с заполненными полями
// "Кому", "Тема" и "Текст сообщения".
ЗапуститьПриложение("mailto:mav@erpg.ru;boss@erpg.ru?subject=
Пример%20темы&Ьос1у=Здавствуйте!%ОЗДоступ%20открыт.");
// Открывает окно нового сообщения с заполненным адресом получателя
ЗапуститьПриложение("mailto:mav@erpg.ru");
// Открывает окно нового сообщения с заполненным адресом получателя
и полями "Копия" и "Скрытая копия"
ЗапуститьПриложение("mailto:mav@erpg.ru?subject=npMMep%20TeMbi&cc=
erpgSerpg.ru&bcc=boss@erpg.ru");


Синтаксис команды maiito:
mailto:<KoMy>?subject=<TeMa>&cc=<KonnH>&bcc=<CKpbiraHKonHH>?&body= <Текст>.
Рассмотрим параметры команды:
П subject — тема (заголовок) письма;
О ее — строка с адресами электронной почты, перечисленными через точку
с запятой, указывающая адресатов копии сообщения;
П Ьсс — строка с адресами электронной почты, перечисленными через
точку с запятой, указывающая адресатов скрытой копии сообщения;
П body — текст сообщения без пробелов и знаков переноса строк.

Внимание
Обратите внимание, что текст, следующий после команды maiito:, должен
быть без пробелов. Для указания пробела в тексте используется метка %20,
а для указания символа переноса строки — %0d.



Использование интерфейса MAPI
Для совместимости и стандартизации программного доступа к приложени-
ям, которые работают с электронной почтой, Microsoft разработала набор
интерфейсов, называемых MAPI (Messaging Application Program Interface).
Архитектура MAPI описывает так называемую подсистему MAPI, которая
обеспечивает взаимодействие клиентских приложений с различными служ-
бами почтовой системы, такими как служба хранения информации, транс-
портная служба и т. д. Все почтовые клиенты, которые предназначены для
функционирования в операционной системе Microsoft Windows, должны
поддерживать интерфейсы MAPI. С другой стороны, MAPI — это приклад-
ной интерфейс, который был создан для того, чтобы разработчики на раз-
Интернет-технологии 283

личных языках программирования, в том числе и на встроенном языке сис-
темы "1С:Предприятие", имели бы возможность добавлять в свои приложения
функцию для работы с электронной почтой. С точки зрения прикладной про-
граммы, подсистема MAPI — это набор динамических библиотек, содержащих
функции и объектно-ориентированные интерфейсы, благодаря которым взаи-
модействуют клиентские и серверные части почтовых приложений. Это значит,
что, если в системе функционирует почтовый клиент, совместимый с MAPI
(а их подавляющее большинство), то можно обратиться к нему через MAPI-
интерфейс посредством некоторых вызовов и выполнить нужные операции,
например, сформировать и отправить письмо. При этом пользователь обращает-
ся к почтовому клиенту, используемому в системе по умолчанию, и всего лишь
"поручает" ему выполнить необходимые действия. Как он это сделает, зависит
лишь от его настроек. Отсюда возникают и минусы, и плюсы.
Основной минус в том, что MAPI ограничивает возможности программиро-
вания набором своих интерфейсов и функциональными возможностями
почтового клиента. Более того, различные почтовые клиенты могут иметь
различный набор команд.
Плюсы состоят в том, что всегда можно найти отправленное системой
письмо в папке Исходящие или Отправленные, а полученное — в папке
Входящие почтового клиента. При этом не нужно заботиться о подключении
к Интернету (почтовый клиент сам все отправит при первом подключении).
Корпорация Microsoft поставляет элемент управления MSMAPI32.OCX, содер-
жащий простые компоненты ActiveX, позволяющие работать с MAPI из среды
любых языков программирования, поддерживающих OLE-автоматизацию.
ActiveX содержит два объекта: MAPisession и MAPiMessage. MApisession от-
вечает за установление и окончание сеанса связи с провайдером Интернета.
Его функции и свойства позволяют задать параметры установления соеди-
нения, а затем, при необходимости, разорвать его. MAPiMessages предостав-
ляет функции и свойства для работы с почтовыми сообщениями.
Оба объекта можно создать в конфигурации системы "1C:Предприятие".
Для версии 7.7 — используется функция создатьобъект, а для версии 8.0 —
Новый СОМОбъект.
Для инициализации сеанса связи (сессии) необходимо вызвать функцию
signdn объекта MAPisession, а для того чтобы использовать объект
MAPiMessages, нужно СВЯЗЭТЬ 6ГО С объектом MAPISession (ЛИСТИНГ 8.2). Для
завершения сессии вызывается функция signoff объекта MAPisession.

. Инициализация сеанса связи MAPI
.„ : : :


// Элемент управления Session
SessionCtrl = СоздатьОбъект("MSMAPI.MAPISession")
// Элемент управления Messages
284 Глава 8
MessageCtrl = СоздатьОбъект("MSMAPI.MAPIMessages");
// Задаем имя пользователя
SessionCtrl.UserName = "MyName";
// Задаем пароль пользователя
SessionCtrl.Password = "MyPassword";
// Открываем сессию
SessionCtrl.SignOn();
// Связываем элементы управления, используя идентификатор сессии
MessageCtrl.SessionID = SessionCtrl.SessionID;
// ...
// Закрываем сессию
SessionCtrl.SignOff();

Свойства UserName и Password объекта MAPISession задают имя профиля
и пароль доступа к нему, если в качестве почтовой системы используется
Microsoft Mail. Если же применяется Microsoft Outlook, эти свойства ни на
что не влияют, а в качестве активной учетной записи используется учетная
запись, выставленная по умолчанию.
Для чтения входящих писем используется метод Fetch, после вызова кото-
рого заполняется коллекция сообщений объекта MAPiMessages. После за-
полнения коллекции переменная MessageCtrl содержит письмо с индексом,
который определяется свойством Msgindex.
В листинге 8.3 приведен пример вывода содержания писем, находящихся
в папке Входящие.




// Элемент управления Session
SessionCtrl = СоздатьОбъект("MSMAPI.MAPISession");
// Элемент управления Messages
MessageCtrl = СоздатьОбъект("MSMAPI.MAPIMessages");
// Открываем сессию
SessionCtrl.SignOn();
// Связываем элементы управления, используя идентификатор сессии
MessageCtrl.SessionID = SessionCtrl.SessionID;.

// Выбирать для отображения все почтовые сообщения.
// Если вы хотите отображать только непрочитанные сообщения,
// нужно присвоить свойству FetchUnreadOnly значение -1 (Истина)
Интернет-технологии 265

MessageCtrl.FetchUnreadOnly =0; // Ложь
// Выбрать письма
MessageCtrl.Fetch();
Для Ном = 0 по MessageCtrl.MsgCount - 1 Цикл
// Установить индекс для сообщения
MessageCtrl.Msglndex = Ном;
// Сформировать текст из темы и тела почтового сообщения
ТекстПисьма = "Тема: " + MessageCtrl.MsgSubject + "Текст: " +
MessageCtrl.MsgNoteText;
Сообщить(ТекстПисьма);
КонецЦикла;


// Закрываем сессию
SessionCtrl.SignOff();


С помощью данного кода будет получен список всех тем и текстов писем из
папки Входящие. Свойства MsgSubject И MsgNoteText объекта MAPIMessages
возвращают тему и содержание письма. Возможно получить доступ и
к другой информации, заложенной в письмах. Например, для вывода имени
и электронного адреса отправителя можно использовать свойства
MsgOrigDisplayName И MsgOrigAddress соответственно, СВОЙСТВО
MsgDateReceived будет содержать дату получения письма.
Для создания письма снова используется объект MAPIMessages. Перед от-
правкой нужно задать несколько необходимых параметров и, если нужно,
присоединить файлы (листинг 8.4).




// Элемент управления Session
SessionCtrl = СоздатьОбъект("MSMAPI.MAPISession");
// Элемент управления Messages
MessageCtrl = СоздатьОбъект("MSMAPI.MAPIMessages");


// Открываем сессию
SessionCtrl.SignOn();
// Связываем элементы управления, используя идентификатор сессии
MessageCtrl.SessionID = SessionCtrl.SessionID;

// Подготовиться к отправке сообщения
MessageCtrl.Compose();
286 Глава 8

// Установить e-mail получателя
MessageCtrl.RecipAddress = "mav@erpg.ru";
// Установить тему сообщения
MessageCtrl.MsgSubject = "Заголовок тестового письма";
// Заполнить тело сообщения
MessageCtrl.MsgNoteText = "Это тестовое письмо";


// Присоединяем к письму два файла
MessageCtrl.Attachmentlndex = 0;
MessageCtrl.AttachmentPathName = ("C:\filel.txt");
MessageCtrl.Attachmentlndex = 1;
MessageCtrl.AttachmentPathName = ("C:\file2.txt");


// Отправить без отображения стандартного диалога отправки сообщения
MessageCtrl.Send(0);


// Закрываем сессию
SessionCtrl.SignOff();


Примечание
Указывая в качестве параметра метода send значение "Истина" (-1), можно
разрешить показ окна Создание нового письма.


Использование компоненты V7Plus.dll
Внешняя компонента V7Plus.dll состоит из четырех объектов: WMail,
VVSysInfo,VVHttpReader И XMLParser.

^ Примечание
В данной главе будет рассматривается только объект работы с электронной по-
чтой — V7Mail, который позволяет работать с любым почтовым клиентом, рабо-
тающим через MAPI (например, Microsoft Outlook Express или Microsoft Outlook).

Инициализация внешней компоненты осуществляется с помощью метода
Загрузитьвнешнююкомпоненту("v7Pius.dll"), а для доступа к свойствам и мето-
дам объекта необходимо вызвать функцию co3flaTb06beKT("Addin.v7Maii"),
которая возвращает ссылку на объект WMail.
Рассмотрим общий алгоритм получения писем:
1. Установка соединения с помощью метода подключиться.
Интернет-технологии 287

2. Инициализация процесса приема сообщений с помощью метода
ВыбратьСообщения.
3. Организация цикла получения сообщений с помощью метода
ПолучитьСообщение.
4. С ПОМОЩЬЮ методов ПрочйтатьСообщение И ПолучитьФайл МОЖНО ПОЛу-
чить доступ к тексту сообщения и присоединенным файлам.
5. С помощью свойств заголовок и Текст можно получить доступ к заго-
ловку сообщения и его тексту.
6. Завершение работы с почтой происходит с помощью метода Отключиться.
Пример реализации данного алгоритма приведен в листинге 8.5.

——— —:-
г 8.5. Чтение входящих писем через компоненту V7Plus.dll

Перем Путь, ИмяФайла;


// Загрузка компоненты V7Plus.dll
ЗагрузитьВнешнооКомпоненту("VVPlus.dll");
Почта = СоздатьОбъект("Addln.VVMail");


ТекстДок=СоздатьОбъект("Текст") ;
// Инициализируем сеанс работы с почтой в соответствии
//с выбранным на закладке свойств компоненты типом почты и параметрами
подключения
Почта.Подключиться();
// Инициализируем процесс получения сообщений
Почта.ВыбратьСообщения();
Пока Почта.ПолучитьСообщение() = 1 Цикл
// Получаем адрес, с которого было отправлено сообщение
АдресОтправителя=Почта.АдресОтправителя();
// Тема сообщения
Заголовок=Почта.Заголовок;
// Получаем содержимое сообщения (текст и присоединенные файлы)
Почта.ПрочйтатьСообщение(0);
// Текст сообщения
Текст=Почта.Текст;
// Получить имя и каталог следующего присоединенного файла сообщения
Пока Почта.ПолучитьФайл(Путь, ИмяФайла) = 1 Цикл
ТекстДок.Открыть(ПутЫ-ИмяФайла);
ТекстДок.ТолькоПросмотр(1);
288 Глава 8

ТекстДок.Показать(Заголовок);
КонецЦикла;
КонецЦикла;


// Завершает сеанс работы с почтой
Почта.Отключиться();


Алгоритм отправки сообщения будет состоять из следующих шагов.
1. Установка соединения с помощью метода подключиться.
2. Инициализация процесса создания нового сообщения с помощью метода
НовоеСообщение.
3. С помощью метода ДобавитьАдрес можно задать один или несколько
адресов получателей.
4. С помощью метода добавитьФайл можно прикрепить один или несколько
файлов к сообщению.
5. С помощью свойств Заголовок и текст можно задать заголовок сообще-
ния и его текст.
6. Отправка сообщения происходит посредством вызова метода послать.
7. Завершение работы с почтой происходит с помощью метода Отключиться.
В листинге 8.6 приведен пример отправки сообщения с помощью компо-
ненты V7Plus.dll.




// Загрузка компоненты V7Plus.dll
ЗагрузитьВнешнююКомпоненту("V7Plus.dll");
Почта = СоздатьОбъект("АоШп.У7Ма11") ;


// Метод Подключиться инициализирует сеанс работы с почтой MAPI
// с соответствующими параметрами подключения и паролем.
Почта.Подключиться("MAPI","", " )
";
// Инициализируем создание нового сообщения
Почта.НовоеСообщение();
// Добавляем адрес в список адресов получателей
Почта.ДобавитьАдрес("mavgerpg.ru") ;
// Добавляем имя нового файла в список присоединенных файлов сообщения
Почта.ДобавитьФайл("С:\file.txt");
// Тема сообщения
Интернет-технологии 289

Почта.Заголовок="Привет!";
// Текст сообщения
Почта.Текст="Добрый день! Жду результатов совещания.";
// Отправить сообщение
Почта.Послать();
// Завершает сеанс работы с почтой
Почта.Отключиться();


Е^˜" Примечание
Подробное описание всех методов и свойств объекта v7Mail можно найти в
документации к компоненте.

Так как объект v?Maii компоненты V7Plus.dll работает через интерфейс
MAPI, то при работе с ней сохраняются все особенности — плюсы и мину-
сы использования интерфейса MAPI, которые были описаны ранее.

Использование компоненты Rom-Mail.dll
Все вышеописанные методы интеграции с электронной почтой используют
интерфейс MAPI. Для работы напрямую с почтовыми серверами через про-
токолы РОРЗ и SMTP в системе "1С:Предприятие 7.7" лучше всего исполь-
зовать компоненту Rom-Mail.dll, которая распространяется бесплатно авто-
ром Олегом Ризвановым.
Компонентой поддерживаются следующие функции:
П стандарты MIME, UU-ENCODE;
О кодирование Base64 и QuotedPrintable;
П основные таблицы кодировок кириллицы: DOS, Windows-1251, KOI8-R,
MAC;
П сообщения, состоящие из нескольких частей (multipart);
П отправка, получение, сохранение вложенных файлов (attachment);
О отправка тела сообщения в форматах TEKCT(plain/text), HTML(plain/html),
RTF(richable);
П доступ как к указанной строке тела сообщения (построчное чтение), так
и получение всего тела сообщения сразу;
П использование полей СС (копия) и ВСС (скрытая копия);
П настройка параметров соединения на странице свойств компоненты;
П сохранение соединения (keep alive);
П настройка аутентификации на странице свойств;
290 Глава 8

П возможность установки произвольного значения полей АдресОтправителя
(From) и ИмяОтправителя (FromName), а также оставлять эти значения
пустыми;
П выбор вида аутентификации при входе на SMTP-сервер;
П возможность выбора — забирать или оставлять сообщения на сервере;
П возможность установки каталога для сохранения вложений;
О пометка/снятие пометки на удаление;
0 20 направлений перекодировки в различные таблицы кодировок;
П поддержка функции контроля соединения (Ping).
Внешняя компонента ROM-Mail.dll содержит только один объект AddlnMail.
В листинге 8.7 приведен пример загрузки внешней компоненты.
{]"˜˜:˜'˜;"˜˜""'-˜'^˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜˜-˜- - ".- -—----—-—,-„„, .--—.--—----..-„_-„,
1 Листинг 8.7. Загрузка внешней компоненты ROM-Mail.dll

// Загрузка внешней компоненты
Если ЗагрузитьВнешнююКомпоненту{"ROM-Mail.dll") = 1 Тогда
// Создание объекта AddlnMail
ВК = СоздатьОбъект("Addln.AddlnMail");
Иначе
Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;


Для чтения писем с РОРЗ-сервера необходимо заполнить параметры под-
ключения к нему и вызвать метод подключиться с параметром "Прием" (лис-
тинг 8.8). После подключения необходимо в цикле выбрать все сообщения.

I Листинг 8.8. Чтение писем с РОРЗ-сервера

// Загрузка внешней компоненты
Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll") = 1 Тогда
// Создание объекта AddlnMail
ВК = СоздатьОбъект("Addln.AddlnMail");
Иначе
Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;
// NetBIOS-имя или IP-адрес сервера приема сообщений (РОРЗ)
Интернет-технологии 291

ВК.СерверПриема = "pop.server.ru";
// Порт сервера приема сообщений
ВК.ПортПриема = 110;
// Логин для аутентификации на РОРЗ-сервере
ВК.Логин = "user";
// Пароль для аутентификации на РОРЗ-сервере
ВК.Пароль = "password";
// 1 - оставлять письма на РОРЗ-сервере, 0 - удалять письма с сервера
ВК.ОставлятьНаСервере = 1;
// Разрешить/запретить показ модальных окон предупреждений
ВК.ПоказыватьПредупреждения = 0;
// Выполняет подключение к серверу
Если ВК.Подключиться;"Прием")=0 Тогда
Предупреждение("Не удалось подключиться к серверу!");
Возврат;
КонецЕсли;
// Выборка писем
Для Индекс = 1 По ВК.КоличествоСообщений() Цикл
// Получает сообщение с заданным номером
ВК.ПолучитьСообщение(Индекс);
// Заполняем данные письма в таблицу значений
ТЗ.НоваяСтрока();
ТЗ.Отправитель = ВК.ИмяОтправителя;
ТЗ. Адрес = ВК.ДцресОтправителя;
ТЗ.Тема = ВК.Тема;
ТЗ.Получатель = ВК.ДцресПолучателя;
TS.MessagelD = ВК.IDMessage; // Идентификатор сообщения
ТЗ.Копия = ВК.СС;
ТЗ.Тело = ВК.Тело;
// Имя файла-вложения или список файлов (строка, с разделителем " "
;)
ТЗ.Вложения = ВК.Вложения;
ТЗ.Дата = ВК.ДатаОтправки;
ТЗ.Размер = ВК.Размер; // Размер сообщения в байтах
КонецЦикла;
// Разрывает установленные соединения
ВК.Отключиться();

В данном примере вся информация о письмах добавляется в таблицу значе-
ний с идентификатором тз.
292 Глава 8

^˜ Примечание
Инициализация данной таблицы значений лежит за рамками данного примера.


При получении тела письма оно может быть в произвольной кодировке.
Чтобы преобразовать его к удобочитаемому виду, можно воспользоваться
методом перекодировать, первым параметром которого указывается текст
письма, а вторым — номер направления перекодировки:
1. Из ALT в ISO.
2. Из ALT в KOI.
3. Из ALT в MAC.
4. Из ALT в WIN.
5. Из ISO в ALT.
6. Из ISO в KOI.
7. Из ISO в MAC.
8. Из ISO в WIN.
9. Из KOI в ALT.
10. Из KOI в ISO.
11. Из КО1вМАС.
12. Из KOI в WIN.
13. Из MAC в ALT.
14. Из MAC в ISO.
15. Из MAC в KOI.
16. Из MAC в WIN.
17. Из WIN в ALT.
18. Из WIN в ISO.
19. Из WIN в KOI.
20. Из WIN в MAC.
Метод Перекодировать возвращает строку в кодировке, соответствующей
номеру направления преобразования.
В цикле выборки писем, после получения очередного письма, при наличии
вложенных файлов, можно сохранить их на жестком диске. Ниже приведен
пример сохранения всех вложенных файлов в корневом каталоге диска (лис-
тинга 8.9).
Интернет-технологии _^ 293


<нг 8.9. Сохранение вложенных файлов на диск



Для Индекс = 1 По ВК. КоличествоСообщений ( ) Цикл

ВК. Получить Сообщение (Индекс) ;
// ...
Если ПустоеЗначение (ВК. Вложения) = 0 Тогда
// Получаем тело сообщения с заданным номером
ВК.ПолучитьТело (Индекс) ;
// Выбираем все вложенные файлы письма
Для НомерФайла = 1 По ВК.КоличествоФайлов () Цикл
// Получение строки с именем файла-вложения
ИмяФайла = ВК.ПолучитьФайл (НомерФайла) ;
// Сохранение файла
ВК.СохранитьФайл (НомерФайла, "С:\" + ИмяФайла);
КонецЦикла ;
КонецЕсли;
КонецЦикла ;


Для отправки письма через SMTP-сервер необходимо подключиться к поч-
товому серверу, заполнить атрибуты письма и вызвать метод отправить.
В листинге 8.10 приведен пример отправки одиночного письма.
™ . -----,

стинг 8.10. Отправка письма через SMTP-сервер

// Загрузка внешней компоненты
Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll") = 1 Тогда
// Создание объекта AddlnMail
ВК = СоздатьОбъектГАсШп.AddlnMail") ;
Иначе
Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;
// NetBIOS-имя или IP-адрес сервера отправки сообщений (SMTP)
ВК.СерверОтправки = "smtp.server.ru";
// Порт сервера отправки сообщений (SMTP)
ВК.ПортОтправки = 25;
// Логин для аутентификации на SMTP-сервере
ВК.Логин = "user";
294 Глава 8

11 Пароль для аутентификации на SMTP-сервере
ВК.Пароль = "password";
// SMTP-серверу требуется проверка подлинности
ВК.АутентификацияПриОтправке = 1;
// Выполняет подключение к серверу
Если ВК.Подключиться("Отправка") = 0 Тогда
Предупреждение("Не удалось подключиться к серверу!");
Возврат;
КонецЕсли;

ВК.АдресОтправителя = "mav@erpg.ru";
ВК.ИмяОтправителя = "Андрей Михайлов";
ВК.АдресПолучателя = "Получатель! <userl@server.ru>; Получатель2
<user2@server.rua>";
ВК.Копия = "Получатель3 <user3@server.ru>";
ВК.СкрытаяКопия = "Получатель4 <user4@server.ru>";
ВК.Тема = "Тема письма";
ВК.Тело = "Пример отправки письма";
ВК.Вложения = "C:\Temp\example.ert; C:\Temp\Readme.doc";
ВК.KowipoBKa="windows-1251";
ВК.ТипПисьма = 0; // text/plain
ВК.Важность =1; // Высокая
ВК.ПодтверждениеДоставки = 0;
ВК.ПодтверждениеПрочтения = 1;
// Выполнить отправку сообщений с SMTP-сервера
Если ВК.Отправить() = 1 Тогда
Предупреждение("Сообщение отправлено!");
Иначе
Предупреждение("Не удалось отправить сообщение!");
КонецЕсли;
// Разрывает установленные соединения
ВК.Отключиться();


Данный пример демонстрирует отправку письма текстового типа. Для его
отправки в формате appiication/rtf или text/html необходимо в свойстве
ТипПисьма указать соответственно значение i или 2 и выполнить метод за-
грузитьизфайла, который загружает тело письма из указанного файла.
В компоненте ROM-Mail.dll реализован дополнительный метод Ping, кото-
рый возвращает процент потерь. После выполнения метода свойство
pingText содержит результат выполнения метода ping (листинг 8.11).
Интернет-технологии 295




// NetBIOS-имя или IP-адрес хоста
Host = "erpg.ru";
// Загрузка внешней компоненты
Если ЗагрузитьВнешнююКомпоненту("ROM-Mail.dll") = 1 Тогда
// Создание объекта AddlnMail
ВК = СоздатьОбъект("Addln.AddlnMail");
Иначе
Сообщить("Не удалось загрузить ROM-Mail.dll");
Возврат;
КонецЕсли;
// Отправляем пакет размером 72 байта по протоколу ICMP
ВК.Ping(Host) ;
// Вывести результат выполнения метода Ping
Сообщить(BK.PingText);


Результатом выполнения данного кода будет сообщение вида:
"IP-адрес: 194.135.22.201; Байт отправлено: 72; Байт получено: 72; TTL: 128;
Потерь 0%".
Компонента ROM-Mail.dll имеет страницу свойств, атрибуты которой уста-
навливаются из меню Сервис | Параметры системы "1С:Предприятие". При
использовании страницы свойств создавать объект и инициализировать
компоненту следует в глобальном модуле.

Использование объекта Почта :




В системе "1C:Предприятие" (версия 8.0) для работы с электронной почтой
существует объект почта, который является аналогом объекта v?Maii в сис-
теме "1С:Предприятие" (версия 7.7) в том смысле, что он тоже работает по
технологии MAPI.
Рассмотрим все объекты, которые необходимо знать при работе с электрон-
ной почтой.
П Почта — основной объект, предназначенный для подключения, отключе-
ния соединения, а также для отправки и получения писем.
П почтовоесообщение — содержит информацию о письме, такую как: тема,
текст письма, адресаты, вложения и т. п.
П почтовыйАдрес — содержит информацию о почтовом адресе (электрон-
ный адрес и имя пользователя).
296 Глава 8

G ПочтовыеАдрес — СОДСрЖИТ КОЛЛ6КЦИЮ Элементов ПочтовыйАдрес.
П почтовоеВложение — содержит информацию о вложенном файле (данные
и имя файла).
П ПочтовыеВложения — содержит КОЛЛ6КЦИЮ элементов ПочтовоеВложение.
Для подключения к почтовому клиенту используется метод подключиться
объекта почта. Метод Подключиться имеет два параметра. Первый — строко-
вое выражение, обозначающее название профиля для подключения, если
параметр не указан, то используется профиль пользователя, установленный
по умолчанию. Второй параметр — пароль пользователя, если он требуется
при подключении к серверу.
В листинге 8.12 приведен пример подключения к почтовому серверу.




// Создает объект Почта
Почта = Новый Почта;
// Подключение к почтовому серверу
Почта.Подключиться("МА7",);
//...
// Оключение от почтового сервера
Почта.Отключиться();


Для получения почты с сервера используется метод выбрать объекта Почта.
Метод имеет два параметра. Первый — признак выборки только непрочи-
танных сообщений. Второй — признак выборки только конвертов сообще-
ний (т. е. без вложений).
В листинге 8.13 приведен пример выборки писем из профиля, используе-
мого по умолчанию, и записи информации о письмах в табличное поле
ТабличноеПолеИнтернетПочта.


Листинг 8. 13. Чтение сообщений



/ / Создает объект Почта
Почта = Новый Почта;
// Подключение к почтовому серверу для получения почты
Почта . Подключиться ( , ) ;
МассивПисем = Почта. Выбрать (Ложь, Истина);
// Перебираем массив писем
Для каждого Письмо Из МассивПисем Цикл
Интернет-технологии 297

11 Добавляем новую строку в табличное поле
СтрокаТП = ТабличноеПолеИнтернетПочта.Добавить();
Попытка
СтрокаТП.ОтКого = Письмо.Отправитель.Адрес;
Исключение
СтрокаТП.ОтКого = Письмо.Отправитель;
КонецПопытки; ,
Получатели = " ;
"
// Перебираем всех получателей
Для каждого Получатель Из Письмо.Получатели Цикл
Получатели = Получатели + Получатель.Пользователь + " <" +
Получатель.Адрес + "> ";
КонецЦикла;
СтрокаТП.Кому = Получатели;
СтрокаТП.Тема = Письмо.Тема;
СтрокаТП.Текст = Письмо.Текст;
// Перебираем вложения
Для каждого Вложение Из Письмо.Вложения Цикл
// Сохраняем вложение в папке C:\Mail\
Вложение.Данные.Записать("С:\Mail\" + Вложение.Имя);
КонецЦикла;
КонецЦикла;
// включение от почтового сервера
Почта.Отключиться();
/
В приведенном примере есть несколько особенностей:
1. При обращении к свойству отправитель объекта письмо используется
КОНСТРУКЦИЯ Попытка...Исключение...КонецПопытки. Это необходимо
вследствие того, что свойство Отправитель может возвращать значе-
ние типа строка адреса или почтовыйАдрес. Вместо конструкции
Попытка...Исключение...конецПопытки можно анализировать тип возвращае-
мого значения.
2. Все файлы вложений автоматически сохраняются в папке "C:\Mail\".
Вместо этого можно сохранять данные вложений в реквизиты объектов
системы "1C:Предприятие 8.0" типа хранилищеЗначения.
Для отправки писем используется объект почтовоесообщение. В листин-
ге 8.14 приведен пример создания почтового сообщения и его отправки.
298 Глава 8



I/ Создаем почтовое сообщение
Письмо = Новый ПочтовоеСообщение;
Письмо.Тема = Тема;
Письмо.Текст = Текст;
// Добавляем адресата
Письмо.Получатели.Добавить("mav@erpg.ru");
// Добавляем отправителя
Письмо.Отправитель = "boss@erpg.ru";
// Добавляем файл
Письмо.Вложения.Добавить("с:\plan.txt");
// Добавляем произвольные двоичные данные
Архив = Новый ДвоичныеДанные("с:\trade.zip") ,
Письмо.Вложения.Добавить(Архив,"trade.zip");
// Создаем объект Почта
Почта = Новый Почта;
// Отсылаем письмо
Почта.Послать(Письмо);


Е^ Примечание
Полный список свойств и методов каждого объекта приведен в документации.


Использование объекта ИнтернетПочта
Объект ИнтернетПочта присутствует только в системе "1C:Предприятие"
(версия 8.0) и позволяет работать с электронной почтой напрямую через
сервер электронной почты. Другими словами — работа данного объекта не
зависит от установленного почтового клиента.
Объект предназначен для доступа к почтовым серверам с целью отправки
и получения сообщений. В отличие от объекта почта, который работает по
технологии MAPI и требует от пользователя установленного почтового кли-
ента, объект ИнтернетПочта использует интернет-протоколы SMTP и РОРЗ.
Рассмотрим используемые в данном режиме объекты.
О ИнтернетПочта — основной объект, предназначенный для подключения
и отключения от почтового сервера, а также для выборки писем с почто-
вого сервера и отправки сообщений.
П интернетпочтовыйпрофиль —- содержит информацию об учетной записи
пользователя (имя РОРЗ, SMTP-серверов, имя пользователя, пароль и т. п.).
Интернет-технологии 299

П интернетйочтовоеСообщение — содержит информацию о письме (тема,
дата получения, дата отправления, вложения, почтовые адреса отправите-
ля и получателей и т. д.).
П интернетпочтовыйАдрес — содержит информацию о почтовом адресе
(электронный адрес и имя пользователя).
П ИнтернетПочтовыеАдреса — содержит коллекцию элементов Интернет-
почтовыйАдрес.
П интернетТекстПочтовогоСообщения — содержит текст почтового сообще-
ния и его тип (HTML, простой или размеченный текст).
П интернетТекстыПочтовогоСообщения — содержит коллекцию элементов
ИнтернетТекстПочтовогоСообщения.
П интернетпочтовоевложение — содержит информацию о вложенном файле
(данные и имя файла).
П ИнтернетПочтовыеВложения — содержит КОЛЛСКЦИЮ Элементов Интернет-
ПочтовоеВложение.
Для подключения к почтовому серверу используется метод Подключиться,
в параметре которого передается значение типа интернетпочтовыйпрофиль.
В листинге 8.15 приведен пример создания профиля пользователя и под-
ключения к почтовому серверу.
_„ „—__,-__.
15. Подключение к почтовому серверу

Профиль = Новый ИнтернетПочтовыйПрофиль;
// Адрес SMTP-сервера
Профиль.АдресСервераSMTP = "smtp.erpg.ru";
// Адрес РОРЗ-сервера
Профиль.АдресСервераРОРЗ = "pop.erpg.ru";
// Порт протокола SMTP
Профиль.ПортЗМТР = 25;
// Порт протокола РОРЗ
Профиль.ПортРОРЗ = 110;
// Логин пользователя
Профиль.Пользователь = "boss";
// Логин пользователя для аутентификации на SMTP-сервере
Профиль.ПользовательSMTP = "boss";
// Пароль доступа к почтовому ящику
Профиль.Пароль = "neskaju";
// Пароль пользователя для аутентификации на SMTP-сервере
300 _ Глава 8
Профиль. Пароль SMTP = "toje_neskaju";
// Время ожидания удачного исполнения операции в секундах
Профиль . ВремяОжидания = 30;


Почта = Новый ИнтернетПочта;
// Подключение к почтовому серверу
Попытка
Почта . Подключиться (ПолучитьПрофиль ( ) ) ;
Исключение
Сообщить (ОписаниеОшибки ( ) ) ;
Возврат;
КонецПопытки ;



// Отключение от почтового сервера
Почта . Отключиться ( ) ;


^ Примечание
При подключении к почтовому серверу используется конструкция
Попытка... Исключение. ..КонецПопытки. Это необходимо сделать для подстра-
ховки от неудачного подключения.

Для получения писем с почтового сервера используется метод выбрать объ-
екта ИнтернетПочта, который возвращает массив объектов типа Интернет-
ПочтовоеСо общение.
В листинге 8.16 приведен пример получения писем с почтового сервера,
профиль для которого был создан ранее.


зтинг 8.16. Получение писем с почтового сервера

Почта = Новый ИнтернетПочта;
// Подключение к почтовому серверу
Попытка
Почта.Подключить ся(Профиль);
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

ТабличноеПолеИнтернетПочта.Очистить();
Интернет-технологии 303

Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;

// Отключение от почтового сервера
Почта.Отключиться();


^ Примечание
При вызове метода Послать объекта Почта используется конструкция
Попытка...Исключение...КонецПопытки, которая необходима для подстраховки
от неудачной отправки письма. Полный список свойств и методов каждого
объекта приведен в документации.


Работа с протоколом FTP
Аббревиатура FTP расшифровывается как File Transfer Protocol (протокол
передачи файлов). Протокол FTP оптимизирован для передачи файлов, это
и послужило причиной того, что программы, использующие его, стали частью
отдельного сервиса Интернета. Сервис, обеспечивающий доступ к файлам
других компьютеров сети по протоколу FTP, носит одноименное название.
Чтобы воспользоваться протоколом FTP, понадобится специальная про-
грамма, так называемый FTP-клиент. FTP-клиентом может служить браузер
(Microsoft Internet Explorer, Netscape Navigator), программа управления фай-
лами FAR, специализированная программа CuteFTP и др.
Для обеспечения программного доступа к протоколу FTP можно использо-
вать либо вызов программы ftp.exe, либо — объект FTP, являющийся частью
объектной модели системы "1C:Предприятие" (версия 8.0).


Использование программы ftp.exe
Программа ftp позволяет передавать файлы на удаленный компьютер или
получать их оттуда. Она работает с файлами и каталогами удаленного ком-
пьютера.
При работе с функциями ftp необходимо запустить на своем компьютере
программу ftp.exe, которая связывается с серверной программой, работаю-
щей на удаленном компьютере. В дальнейшем, используя возможности ftp,
можно задавать выполняемые серверной программой команды, которые
транслируются в инструкции.
Для запуска программы ftp в контексте конфигурации системы
"1С:Предприятие" (версия 7.7) достаточно вызвать команду командаСистемы,
304 Глава 8

в параметрах которой указать команду ftp с необходимыми параметрами.
Эти параметры помещаются после названия — ftp. Каждый параметр состо-
ит из дефиса (-) и одной буквы и имеет соответствующую команду того же
имени, которая может быть использована внутри ftp.

^˜ Примечание
Следует различать использование опций и соответствующих ftp-команд.

Рассмотрим возможные параметры программы ftp.
П -v — заставляет ftp работать в многословном режиме. В этом режиме со-
общения ftp, посланные удаленной машиной, появляются на экране дис-
плея-приемника. Кроме того, если этот режим используется после
завершения передачи каждого файла, то появляется статистическое со-
общение, уведомляющее об этом. Данный режим устанавливается по
умолчанию, если ftp выполняется интерактивно. Если ftp выполняется
в командном режиме, многословный режим выключен. Для того чтобы
его включить, надо установить опцию -v. Включить этот режим внутри
ftp МОЖНО С ПОМОЩЬЮ КОМаНДЫ verbose.

П -d — заставляет ftp работать в режиме отладки. В этом режиме сообще-
ния ftp, посланные ftp в удаленную машину, отображаются на экране
дисплея-передатчика. Если не используется эта опция — информация не
отображается. Вызвать этот режим в ftp можно также используя команду
debug.
О -i — данная опция означает не интерактивную работу.
П -п — опция позволяет предотвратить использование ftp-авторегистрации,
во время связи с удаленной машиной. Когда установлен режим автореги-
страции, ftp идентифицирует вас автоматически на удаленной машине и
регистрирует вас на ней. Если вы используете -n-опцию для отключения
автоматической регистрации, вы должны будете использовать команду
user, чтобы вручную зарегистрироваться на удаленной машине.
П -д — является причиной лишения имен файлов, созданных в среде опе-
рационной системы UNIX, их расширений, например, таких как универ-
сальное — *. Если не используется эта опция, ftp расширяет имена фай-
лов с помощью универсального расширения в списке файлов. Вместо
ЭТОЙ ОПЦИИ МОЖНО ИСПОЛЬЗОВаТЬ Команду glob.

П -з:ИмяФайла — определяет выполнение команды ftp в пакетном режиме.
В файле, имя которого указывается в параметре, описывается последова-
тельность команд. Данный режим является основным для автоматизации
работы с протоколом FTP посредством системы "1С:Предприятие".
В листинге 8.18 приведен пример работы с FTP-сервером посредством па-
кетного файла.
305
Интернет-технологии




/I Соединение с сервером
ТекстКоманды = "open ftp.server.ru
// Имя пользователя
I user
// Пароль пользователя
I password
// Выполняем команды программы ftp...
//...
// Закрыть связь с сервером
Iquit
I"; .
// Имя временного файла
ИмяФайла = КаталогИБО + "ftp\transfer.ftp";
// Создаем временный файл для пакетного выполнения команды ftp
Текст = СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(ТекстКоманды) ;
Текст.Записать(ИмяФайла);
// Выполняем команду ftp в пакетном режиме
КомандаСистемы("ftp -s:" + ИмяФайла);
// Удаляем временный файл
ФС.УдалитьФайл(ИмяФайла);


Из приведенного примера видно, что текст пакетного файла обязательно
начинается с команды open, после которой указывается имя сервера. Сле-
дующими двумя строками следуют имя пользователя и пароль. Заканчивает-
ся текст пакетного файла командой quit.
В табл. 8.1 приведен полный список команд программы ftp.

Таблица 8.1. Команды программы ftp

Команда Описание команды

append Добавляет содержимое локального файла в конец удаленного файла.
Например: append <имя локального файла> <имя файла
удаленной машины>

ascii Установка режима передачи файлов в формате ASCII (По умолчанию
код всегда ASCII)


] 1 Зак. 722
Глава 8
306

Таблица 8.1 (продолжение)

Команда Описание команды
Выдача звукового сигнала по завершении команд. Чтобы прекратить
bell
подачу сигнала, нужно снова вызвать эту команду
Установка режима передачи файлов в двоичном формате
binary

Закрывает все открытые связи
bye
или quit
Изменение рабочего каталога на удаленном компьютере. Например:
cd
cd / u s r / b i n
Завершение сеанса работы ftp и закрытие текущей связи
close

Включение и выключение режима отладки
debug
delete Удаление файла на удаленном компьютере. Например:
delete <имя файла для удаления>
dir Вывод детального списка каталога удаленного компьютера. На-
пример:
dir /usr/bin.
Если имя каталога не указывать, то будет распечатан текущий каталог
удаленного компьютера. Для того чтобы занести результаты выполне-
ния команды в файл, необходимо указать имя выходного файла. На-
пример: dir /usr/bin printfile.
Если необходимо напечатать текущий каталог в файл, необходимо
вызвать команду:
dir . printfile
где "." означает текущий каталог
get Копирует файл из удаленного компьютера на локальный. Например:
или recv get <имя файла удаленной машины> <имя файла вашей машины>.
Если просто указать имя файла удаленного компьютера, который
нужно скопировать, то скопированный файл на вашей машине будет
иметь то же самое имя
glob Переключение метасимвольного расширения имен локальных фай-
лов. Эта команда запрещает такое универсальное расширение имен
файлов, созданных в среде операционной системы UNIX, как — '*'
hash Переключает вывод символа "#" на экране пользователя после каж-
дого блока данных, который посылается удаленному компьютеру.
Размер блоков данных может быть различным в зависимости от вер-
сии программного обеспечения. Для того чтобы увидеть текущее
состояние данного режима, с командой ftp должен использоваться
режим отладки. Эта команда включает и выключает выдачу симво-
ла "#" на экран пользователя
Интернет-технологии 307

Таблица 8.1 (продолжение)

Команда Описание команды
led Изменяет рабочий каталог, используемый ftp. Например:
led /usr/mav.
Если вы не задали имя каталога, то будет использоваться "стартовый"
каталог
Is Распечатывает аббревиатурный список содержания каталога удален-
ного компьютера, с которого установлена связь. Например:
Is / u s r / b i n .
Если имя каталога не определено, будет распечатан текущий. Можно
также задать команду записи этих данных в файл. Это делается ftp,
если указано имя файла локальной машины, куда следует поместить
листинг каталога. Например:
Is /usr/bin printfile.
Имя каталога нужно задать до вывода файла (printfile). Например,
если вам необходимо распечатать текущий каталог в файл с именем
p r i n t f i l e : Is . p r i n t f i l e
где символ "." ставится для указания, что каталог текущий
mdelete Удаляет список файлов на удаленном компьютере. Например:
mdelete <имя 1-го файла> < имя 2-го файла > . . .
mdir Выводит листинг директории удаленного компьютера, и результат
помещается в файл локальной машины. Можно задать список фай-
лов удаленной машины и имя файла локальной машины, куда помес-
тить результат при вызове команды. Например:
mdir <имя 1-го файла> <имя 2-го файла>... printfile
mget Копирование одного или более файлов с удаленного компьютера.
Файлы после копирования будут иметь те же имена. Можно указать
список файлов для копирования, например:
mget <имя 1-го файла> <имя 2-го файла>...
mkdir Создание каталога на удаленном компьютере. Например:
mkdir /u/mydir
Вывод содержимого нескольких каталогов удаленного компьютера.
mis
В команде можно задать список файлов удаленного компьютера и
имя файла локального компьютера, куда поместить результат при
выполнении команды, например:
mis <имя 1-го файла> ... printfile
input Отправка нескольких файлов. Эта команда копирует один или более
файлов с локального компьютера на удаленный. На удаленном ком-
пьютере файлы будут иметь те же имена. Например:
mput <1-й файл> <2-й файл> машины...
Глава 8
308

Таблица 8.1 (окончание)

Команда Описание команды
open Подключение к протоколу FTP удаленного компьютера. Эта команда
устанавливает связь с удаленным компьютером, в который предпола-
гается передача файлов. Например:
open ftp.server.ru
prompt Переключение интерактивной подсказки для составных команд. Эта
команда переключает запросы к ftp между одноместными (обрабаты-
вают один файл) и многоместными командами (например, такими как
mget). Эта команда подключается и отключается при повторном наборе
put Отправка одного файла. Эта команда перемещает файл с локального
или send компьютера на удаленный. Например:
put <имя локального файла> <имя удаленного файла> или
put <имя локального файла>
pwd Вывод рабочего каталога удаленного компьютера
quote Отправка произвольных команд ftp, которые поддерживает удаленный
сервер. Список доступных команд может быть отображен на экране
с помощью команды remotehelp
remotehelp Получение справочных сведений с удаленного сервера. Эта команда за-
прашивает помощь ftp на удаленном компьютере, с которым установлена
связь на данный момент времени. Запрашиваемая информация сообща-
ет о том, какие команды поддерживает удаленный компьютер
rename Переименование файла на удаленном компьютере. Например:
rename <имя 1-го файла> <имя 2-го файла>
mdir Вывод содержимого нескольких каталогов удаленного компьютера.
Например:
rmdir /usr/mydir
Выводит текущее состояние режимов bell, form, hash, glob, port, type
status
type Установка типа передачи файлов. Допустимы двоичный и коды ASCII.
Эта команда аналогична командам ascii и binary. Если не указан
тип при вызове команды, то устанавливается ASCII
trace Переключение трассировки пакетов. Эта команда включается и от-
ключается при ее повторным наборе
user Отправка сведений о новом пользователе. Команда позволяет поль-
зователю идентифицировать самого себя на удаленном компьютере
при установлении связи. Например: user mike cat myaccount
verbose Переключение режима вывода сообщений. Данная команда включа-
ется и выключается при повторном наборе. В режиме отладки прото-
кольные сообщения, посланные удаленной машиной, появляются на
терминале локальной машины. Кроме того, в этом режиме отобража-
ется статистика процесса вывода после передачи каждого файла
Интернет-технологии 309

В листинге 8.19 приведен пример работы пакетного режима команды ftp при
работе с файлами.




// Соединение с сервером
ТекстКоманды = "open ftp.server.ru
// Имя пользователя
luser
// Пароль пользователя
(password
// Получить файл с сервера на локальную машину
[get file.rtf c:\file.rtf
Iget file.mp3 c:\mp3\file.mp3
// Записать файл на сервер с локальной машины
Iput c:\file.htm file.htm
Iput c:\docs\file.txt file.txt
// Удалить файл с сервера
[delete file.rtf
// Создать новый каталог на FTP-сервере
Imkdir newdir
// Закрыть связь с сервером
Iquit




// Имя временного файла
ИмяФайла = КаталогИБО + "ftp\transfer.ftp";
// Создаем временный файл для пакетного выполнения команды ftp
Текст = СоздатьОбъект("Текст");
Текст.ДобавитьСтроку(ТекстКоманды);
Текст.Записать(ИмяФайла);
// Выполняем команду ftp в пакетном режиме
КомандаСистемы("ftp -s:" + ИмяФайла);
// Удаляем временный файл
ФС.УдалитьФайл(ИмяФайла);
310 Глава 8


Использование объекта РТРСоединение
В системе "1C:Предприятие" (версия 8.0) для работы с удаленными компью-
терами через протокол FTP предназначен объект гтрсоединение. С по-
мощью данного объекта можно выполнять типовые действия с файлами,
например, такие как: скачивать и закачивать файлы, переименовывать их,
обращаться к их свойствам, создавать каталоги и т. д.
Для установления соединения с FTP-сервером проще всего воспользоваться
конструктором объекта гтрсоединение, который имеет следующие параметры:
П Сервер — сервер, с которым осуществляется соединение;
О порт — порт сервера, с которым осуществляется соединение (по умолча-
нию 21);
О имя пользователя — имя пользователя на указанном сервере;
CJ пароль пользователя — пароль пользователя на указанном сервере;
G прокси — значение типа ИнтернетПрокси (прокси, используемый для со-
единения с сервером);
П пассивное соединение — булево значение, определяющее тип ftp-соединения
(по умолчанию — ложь).
Поле установки соединения с помощью метода УстановитьТекущийКаталог
можно указать текущий каталог сервера, с которым будет происходить рабо-
та в дальнейшем. Далее можно работать с файлами и каталогами удаленного
компьютера. В листинге 8.20 приведен пример вывода содержимого каталога
в табличное поле.

I Листинг 8.20. Вывод содержимого каталога ftp

// Соединение с удаленным сервером
FTP = Новый ГТРСоединение("ftp.server.ru",21,"user","password",,
// Установка текущего каталога
FTP.УстановитьТекущийКаталог("httpd/www/");
// Получить массив файлов, расположенных в текущем каталоге
МассивФайлов = ЕТР.НайтиФайлыС'",);
// Выбрать файлы их массива
Для каждого Файл Из МассивФайлов Цикл
// Добавить информацию о файле в табличное поле
СтрокаТП = ТабличноеПолеФайлы.Добавить();
СтрокаТП.Имя = Файл.Имя;
СтрокаТП.ПолноеИмя = Файл.ПолноеИмя;
// Определяем, соответствует ли файловый объект файлу
Интернет-технологии 311

Если Файл.ЭтоФайл() Тогда
СтрокаТП.ВремяИзменения = Файл.ПолучитьВремяИзменения ();
СтрокаТП.Размер = Файл.Размер();
КонецЕсли;
КонецЦикла;

Для удаления файлов на сервере предназначен метод удалить объекта
РТРСоединение.
В программном коде, приведенном в листинге 8.21, показаны примеры уда-
ления одного файла и группы файлов.
' '
""""" '": ' " '.˜'""˜""""^""'

пенном компьютере

// Соединение с удаленным сервером
FTP = Новый ЕТРСоединение("ftp.server.ru",21,"user","password",,);
// Установка текущего каталога
РТР.УстановитьТекущийКаталог("usr/mav/");
Попытка
// Удаляет файл на сервере
FTP.Удалить("data.txt");
// Удаляет группу файлов на сервере
FTP.Удалить("tmp/", "*.txt");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

Во втором вызове метода Удалить, в коде, который представлен в листин-
ге 8.21, используется маска, по которой определяются файлы, подлежащие
удалению.
Для копирования файла с удаленного компьютера на локальный предназна-
чена команда получить. В параметрах этой команды указывается имя файла
источника и имя файла локального компьютера (листинг 8.22).

энного компьютера на локальный

// Соединение с удаленным сервером
FTP = Новый ЕТРСоединение("ftp.server.ru",21,"user","password",,);
// Установка текущего каталога
ЕТР.УстановитьТекущийКаталог("usr/mav/");
// Выбор папки для сохранения файла
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.ВыборКаталога);
312 Глава 8

Диалог.Каталог = "с:\";
Диалог.Заголовок = "Выберите папку для сохранения...";
Диалог.МножественныйВыбор = Ложь;
Если Диалог.Выбрать() Тогда
Попытка
// Сохраняет файл из указанного адреса на локальный компьютер
// Имя файла удаленного компьютера содержится в переменной <ИмяФайла>
FTP.Получить(ИмяФайла, Диалог.Каталог + " " + ИмяФайла);
\
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;

В приведенном примере для определения локального каталога, в котором
сохраняется файл, используется объект ДиалогВыбораФайла, описание мето-
дов и свойств которого можно найти в документации.
Для обратного действия, т. е. для копирования файла с локального компью-
тера на удаленный, используется метод записать. Пример использования
этого метода приведен в листинге 8.23.



// Соединение с удаленным сервером
FTP = Новый ГТРСоединение("ftp.server.ru",21,"user","password",,);
// Установка текущего каталога
FTP.УстановитьТекущийКаталог("usr/mav/");
// Выбор файла для загрузки файла на ftp
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Каталог = "с:\";
Диалог.Заголовок = "Выберите файл для загрузки на ftp...";
Диалог.МножественныйВыбор = Ложь;
Если Диалог.Выбрать() Тогда
Попытка
//Из полного имени выделяем только имя файла
ИмяФайла = Сред(Диалог.ПолноеИмяФайла, СтрДлина(Диалог.Каталог)+1);
// Записывает файл с локального компьютера на ftp
FTP.Записать(Диалог.ПолноеИмяФайла, ИмяФайла);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЕсли;
Глава 9


Использование Active Directory
Service Interfaces
Понятие ADSI
Технология Active Directory Service Interfaces (ADSI) предоставляет объектную
модель, которая обеспечивает единообразный, не зависящий от конкрет-
ного сетевого протокола, доступ из программ или сценариев WSH к функ-
циям различных каталогов (Active Directory для Windows 2000/Windows
Server 2003, Windows Directory Service для Windows NT 4.0, NDS для Novell
NetWare 4.x/5.x).
Объекты ADSI включены в операционные системы Windows XP/2000/2003,
а также могут быть установлены в более ранних версиях, для чего их нужно
загрузить с сервера компании Microsoft.
Для пользователей локальных или глобальных сетей важно уметь находить и
использовать объекты разных типов (зарегистрированные пользователи, дос-
тупные сетевые принтеры и очереди печати и т. д.), которых в крупной сети
может быть огромное количество. Администраторы сети должны поддержи-
вать эти объекты в работоспособном состоянии. Под службой каталога
(Directory Service) понимается та часть распределенной компьютерной сис-
темы (компьютерной сети), которая предоставляет средства для поиска и
использования имеющихся сетевых ресурсов. Другими словами, служба ка-
талога — это единое образование, объединяющее данные об объектах сети и
совокупность служб, осуществляющих манипуляцию этими данными.
В гетерогенной (неоднородной) компьютерной сети могут одновременно
функционировать несколько различных служб каталогов, например,
NetWare Bindery для Novell Netware 3.x, NDS для Novell NetWare 4.x/5.x,
Windows Directory Service для Windows NT 4.0 или Active Directory для
Windows 2000. Естественно, для прямого доступа к разным службам катало-
гов приходится использовать различные инструментальные средства, что
усложняет процесс администрирования сети в целом.
314 Глава 9

Для решения этой проблемы фирмой Microsoft была разработана технология
Active Directory Service Interfaces (ADSI), которая предоставляет набор объ-
ектов ActiveX, обеспечивающих единообразный, не зависящий от конкрет-
ного сетевого протокола, доступ к функциям различных каталогов. Немало-
важным фактом является то, что объекты ADSI включены в операционные
системы Windows ХР/2000. Также они могут быть установлены в более ран-
них версиях операционной системы, для чего их нужно скачать с сервера
Microsoft.
Служба Active Directory состоит из четырех основных частей:
П Служба DNS (Domain Name Service);
П WinNT Provider Service',
О NWCOMPATProvider Service;
П Протокол LDAP (Lightweight Directory Access Protocol).
Традиционная в сетях TCP/IP служба DNS используется, в частности, для
поиска контроллеров домена, а благодаря протоколу LDAP клиенты могут
по имени находить в каталоге Active Directory нужные объекты и получать
доступ к их атрибутам. С помощью службы WinNT Provider производится
доступ к доменам сети в операционных системах Windows NT, а посредст-
вом службы NWCOMPAT — в Novell NetWare 3.x.
В данной главе будет рассмотрена только служба WinNT Provider, как самая
простая и наиболее используемая.
Применяя объекты ADSI и службы WinNT Provider можно, например:
О получить список имеющихся в локальной сети доменов;
П получить список имеющихся в домене рабочих станций;
П получить список всех групп, определенных в домене или на компьютере;
П добавить и удалить пользователя домена или компьютера;
П определить всех пользователей заданной группы или все группы, в кото-
рые входит определенный пользователь;
П просмотреть атрибуты пользователя и изменить его пароль.
Далее будут рассмотрены практические примеры работы с ADSI.



Формирование дерева объектов
WinNT Provider
Все объекты службы WinNT Provider представляются в виде дерева, структу-
ра которого определена в табл. 9.1.
Использование Active Directory Service Interfaces 315

Таблица 9.1. Иерархия классов WinNT Provider

Имя класса Описание
Namespace Самый верхний уровень пространства имен.
Пример:
Obj = ПолучитьСОМОбъект("WinNT://")
Domain Домен Windows NT.
Пример:
Obj = ПолучитьСОМОбъект("WinNT://MyDomain")
User Учетная запись пользователя.
Пример:
ОЬд=ПолучитьСОМОбъект ("WinNT: //MyDomain/User" )
Group Группа учетных записей, управляющая правами доступа.
Пример:
ОЬ]=ПолучитьСОМОбъект ("WinNT: //MyDomain/Group")
UserGroupCollection Пользователи группы
GroupCollection Прочие группы
Computer Windows NT-сервер или рабочая станция.
Пример:
ОЬз=ПолучитьСОМОбъект ("WinNT: //MyServer")
PrintJob Очередь задач принтера.
Пример:
ОЬ]=ПолучитьСОМОбъект("WinNT://MyServer/aPrinter")
PrintJobsCollection Коллекция задач принтера
PrintQueue Очередь задач программы-планировщика принтера
Service Запущенные сервисы
FileService Сервис доступа к файлам
FileShare Общедоступные файлы
Resource Ресурсы сервиса
Session Активные файловые подключения
User Локальные пользователи.
Пример:
Obj = Получить СОМОбъект("WinNT://MyServer/User")
Локальные группы.
Group
Пример:
Obj =• ПолучитьСОМОбъект("WinNT://MyServer/Group")
Глава 9
316

Таблица 9.1 (окончание)
Описание
Имя класса
UserCollection Коллекция локальных пользователей группы
GroupCollection Коллекция локальных групп
Schema Схема WinNT-контейнера
Схема определения классов
Class

Property Схема определения свойств
Syntax Синтаксис свойств


В качестве имени домена необходимо указывать имя NETBIOS, т. к. WinNT
Provider не поддерживает работу с DNS-именами.
Для создания определенного объекта необходимо подсоединиться к целево-
му контейнеру используя функцию Получитьсомобъект. Для точной иденти-
фикации класса создаваемого объекта можно указать его имя через запятую
(листинг 9.1).




// Создание объекта очереди задач принтера на компьютере "Сотр"
Queue = ПолучитьСОМОбъект("WinNT:// Domain/Comp/aPrinter,printQueue");
// Создание объекта пользователя "MAV"
User = ПолучитьСОМОбъект("WinNT:// Domain/MAV,user");
// Создание объекта компьютера "Сотр"
Computer = ПолучитьСОМОбъект("WinNT://Сотр");

Для формирования дерева объектов WinNT Provider используется рекурсив-
ная процедура ВывестиУровеньПространства, показанная в листинге 9.2.


<<

стр. 9
(всего 10)

СОДЕРЖАНИЕ

>>