Автоматизация директ-маркетинга (на примере ООО "Дело Системы")

Разработка подсистемы в программе "1С: Бухгалтерия предприятия 8" для автоматизации директ-маркетинговых взаимодействий с клиентами ООО "Дело Системы", позволяющей работать с электронной почтой, регистрировать телефонные звонки и планировать встречи.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 14.07.2012
Размер файла 4,9 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Э = Э1+ Э2, /1/

где Э1 - прямой экономический эффект, то есть эффект от уменьшения стоимости и трудоемкости обработки информации;

Э2 - косвенный экономический эффект, являющийся результатом опосредованного влияния обработки данных на процессы управления.

Э1 рассчитывается по формуле (2):

Э1= (С0+Ен*К0) - (С1+Ен*К1), /2/

где С0 , С1 - текущие (эксплуатационные) годовые затраты при базовом и проектируемом вариантах обработки информации соответственно;

К0 , К1 - единовременные капитальные затраты при базовом и проектируемом вариантах обработки информации соответственно.

Экономическая эффективность оценивается трудовыми и стоимостными показателями, которые позволяют измерить экономию от внедрения предлагаемого проекта относительно базового варианта. Существуют абсолютные и относительные трудовые и стоимостные показатели.

К трудовым показателям относятся следующие:

1. Абсолютное снижение трудовых затрат (ДТ) (см. формулу (3)).

ДТ=Т0-Т1 /3/

2. Относительный коэффициент снижения трудовых затрат (Кт1) (см. формулу (4)).

Кт1=ДТ1/ Т0 /4/

3. Индекс снижения трудовых затрат (Iт1) (см. формулу (5)).

Iтj=Т0 /Т1 /5/

Показателями стоимостных затрат являются:

1. Абсолютное снижение стоимостных затрат (ДС1) (см. формулу (6)) .

ДС1=C0-C1 /6/

2. Относительный коэффициент снижения стоимостных затрат (Кс1) (см. формулу (7)).

Кс1=ДС1/ С0 /7/

3. Индекс снижения стоимостных затрат (Iс1) (см. формулу (8)) .

Iсj=С0 /С1 /8/

Процесс создания электронных писем и/или регистрации телефонных звонков и встреч будет занимать примерно одинаковое количество времени при различных вариантах организации труда.

Накладные расходы рассчитываются в размере 65% от заработной платы сотрудника. Часовая амортизация ЭВМ (Ам) рассчитывается по формуле (9). Сумма месячной амортизации составляет 200 руб. В среднем в месяце 21 рабочий день. В день ЭВМ работает в течение 10 часов.

Ам=200/21/10=0.95 руб. /9/

4.3 Расчет показателей экономической эффективности проекта

При оценке показателей эффективности сравниваются затраты на обработку информации при существующем (базовом) варианте и проектируемом, то есть автоматизированном варианте.

Единовременные капитальные затраты определяются по формуле (10):

Кj= Kjосв + Kjразр+ Kjзагр+ Kjприобр, /10/

где Kjосв - затраты на освоение системы;

Kjразр - затраты на разработку системы;

Kjзагр - затраты на загрузку системы;

Kjприобр - затраты на приобретение необходимого обеспечения;

Kjразр рассчитывается по формуле (11):

Kjразр = Тjразр*Цмч*Кмульт+Змес*R0*tразр*(1+Kнр), /11/

где Тjразр - затраты машинного времени на разработку (в часах);

Цмч - цена машинного часа;

Кмульт - коэффициент мультипрограммирования;

Змес - месячная зарплата одного разработчика;

R0 - количество разработчиков;

tразр - время разработки (в месяцах);

Kнр - коэффициент накладных расходов.

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

Для данной системы значения требуемых переменных таковы:

Kнр=0.65

Кмульт=1

R0=1 человек

Змес=3000 руб.

Цмч=0.95 руб.

Тjосв = 60 часов

Тjразр =50 часов

Тjзагр =0.5 часа

Время освоения составляет 2 дня, поэтому примем для данной задачи значение tjосв, равное 0.1 месяца.

tjразр =1 месяц

tjзагр =0.006 месяца

Кjприобр складывается из стоимости приобретаемого технического обеспечения (1/21 от стоимости оборудования, так как примерно такую часть от общего объема работ по времени занимает данный комплекс задач, а для принтера - 1/100), программного обеспечения.

Стоимость системного блока и монитора равна 12500, принтера 3500.

Стоимость программного обеспечения 8750 руб. Из них на данную задачу приходится примерно 500 рублей.

Кjприобр =12500/21+500+3500/100=1098.74 руб.

Кjосв =60*0.95*1+800*1*0.1*(1+0.65)=57+132=189 руб.

Кjразр =50*0.95*1+800*1*1*(1+0.65)=47.50+1320=1367.50 руб.

Кjзагр =0.5*0.95*1+800*1*0.006*(1+0.65)=0.48+7.92=8.4 руб.

Кj=2663.64 руб.

К0=2000 руб.

ДКj=Кj-К0=663.64 руб.

Согласно формуле (2), прямой годовой экономический эффект равен:

Э1=(1693.65+0.15*2000)-( 320.52+ 0.15*2663.64)=1273.58 руб.

Косвенный годовой экономический эффект Э2 равен 5000 рублей в год.

Таким образом, согласно формуле (1), получаем годовой экономический эффект:

Э=1273.58+5000=6273.58 руб.

Расчетный коэффициент эффективности определяется по формуле (12):

Ер=ДСj / ДКj /12/

Ер=2664.83/663.64=4.015

Срок окупаемости проекта Ток=1/Ер

Ток=1/4.015=0.249 года (3 месяца).

Расчеты показывают, что расчетный коэффициент эффективности капитальных вложений больше нормативного, поэтому разработку подсистемы следует считать целесообразной. Срок ее окупаемости составляет примерно 3 месяца.

4.2 Социальный эффект от внедрения проекта

При внедрении подсистемы «Директ-маркетинг» будет наблюдаться положительный социальный эффект. Созданная подсистема имеет простой и интуитивно понятный интерфейс. Внедрение подсистемы позволит ускорить рассылку электронных писем сотрудниками компании, так как имеет возможность импорта списка e-mail адресов. При грамотном подходе этот способ взаимодействия с клиентами компании обязательно обеспечит высокую отдачу. Тем не менее, подсистема «Директ-маркетинг» лишь инструмент. Эффективность рассылки зависит от формы и содержания рассылаемых e-mail сообщений.

Заключение

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

Хотелось бы отметить, что выбор инструмента для отдела продаж и маркетинга является непростой задачей, и рассматривать эту задачу нужно в комплексе с проведением ряда мероприятий по постановке регулярного маркетинга в компании. При внедрении системы автоматизации необходимо принять во внимание множество факторов, в числе которых и уровень подготовки персонала, и его готовность к изменениям, и наличие понимания о необходимости комплексного подхода к задаче на всех уровнях, включая генерального директора или совет директоров. Только в этом случае можно создать эффективную систему, включающую в себя как современные средства автоматизации, так и передовые методики работы коммерческих отделов, одной из которых является директ-маркетинг.

В рамках данного дипломного проекта была разработана подсистемы для автоматизации директ-маркетинговых взаимодействий с клиентами ООО «Дело Системы». Разработанная подсистема отвечает всем требованиям, предъявляемым к ней, позволяет отправлять и получать электронную почту, регистрировать входящие и исходящие звонки, планировать и регистрировать встречи. Благодаря интуитивно понятному интерфейсу и наличию раздела по эксплуатации подсистемы обучение работе с ней протекает в очень короткие сроки.

Таким образом, в ходе дипломного проекта были решены все поставленные задачи и достигнута поставленная цель - разработана подсистема «Директ-маркетинг» для программного продукта «1С: Предприятие 8.2» конфигурации «Бухгалтерия предприятия 2.0»

директ маркетинг бухгалтерия

Список используемой литературы

1. Сулейменова Б.М. Система продвижения товаров и услуг как один из инструментов комплекса маркетинга. Маркетинг в России за рубежом. 2008.

2. Котлер Ф. Основы маркетинга. Краткий курс: Пер. с англ. - М.: Издательский дом "Вильямс", 2007.

3. Бачило С.В., Есинова И.В., Мишина Л.А. Директ-маркетинг: учебно-практическое пособие// Издательство: Дашков и К, 2008.

4. Романов А.А., Панько А.В. Маркетинговые коммуникации - М.: Эксмо, 2006.

5. Маклаков С.В. Моделирование бизнес-процессов с BPwin 4.0 - М.: Диалог-МИФИ, 2002

6. Габец А.П., Гончаров Д.И., Козырев Д.В., Кухлевский Д.С., Радченко М.Г. Профессиональная разработка в системе 1С: Предприятие 8. - М.: 1С-Паблишинг, 2007.

7. Кашаев С.М. 1С: Предприятие 8.2. Программирование и визуальная разработка на примерах// Издательство: БХВ-Петербург, 2011.

8. Радченко М.Г., Хрусталева Е.Ю. 1С: Предприятие 8.2. Практическое пособие разработчика. Примеры и типовые приемы. - М.: 1С-Паблишинг, 2009.

9. Радченко М.Г. 1С: Предприятие 8.2. Коротко о главном. Новые возможности версии 8.2- М.: 1С-Паблишинг, 2009.

10. Методические материалы слушателя Сертифицированного курса фирмы «1С». Введение в конфигурирование в системе «1С: Предприятие 8». Основные объекты. Версия 8.2. - М.: 1С-Учебный центр №3, 2010.

11. Методические материалы слушателя Сертифицированного курса фирмы «1С». Конфигурирование в системе «1С: Предприятие 8». Решение оперативных задач. Версия 8.2. - М.: 1С-Учебный центр №3, 2011.

12. Клуб профессионалов 1С - Все об 1С. www.1c.proclub.ru

13. Фирма 1С [Электронный ресурс]. www.1c.ru

Приложения

Приложение 1. Программный код общих модулей

// Возвращает список доступных видов поиска контактов //

Функция Получить Список Доступных Поисков (ППД Включен, Параметры, Элементы Формы, Для Адресной Книги) Экспорт

Все Списки Поиска = Новый Структура;

Если Для Адресной Книги Тогда

Адрес = "";

Доменный Адрес = "";

Варианты Поиска По Строке = "";

Представление = "";

Иначе

Адрес = Параметры. Адрес;

Доменный Адрес = Получить Доменный Адрес Для Поиска (Параметры. Адрес);

Варианты Поиска По Строке = Получить ВариантыПоискаПоСтроке(Параметры.Представление, Параметры.Адрес);

Представление = Параметры. Представление;

КонецЕсли;

ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, "ПоEmail", НСтр("ru = 'По email'"), Адрес);

ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, "ПоДомену", НСтр("ru = 'По доменному имени'"), ДоменныйАдрес);

Если Не ДляАдреснойКниги Тогда

ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, "ПоТелефону", НСтр("ru = 'По телефону'"), Адрес);

КонецЕсли;

Если ППДВключен Тогда

ДобавитьВариантПоиска(Все Списки Поиска, Элементы Формы, "ПоСтроке", НСтр("ru = 'По строке'"), ВариантыПоискаПоСтроке);

КонецЕсли;

ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, "НачинаетсяС", НСтр("ru = 'Начинается с'"), Представление);

Возврат ВсеСпискиПоиска;

КонецФункции

// Добавляет вариант поиска в список доступных поисков//

Процедура ДобавитьВариантПоиска(ВсеСпискиПоиска, ЭлементыФормы, ИмяВарианта, Представление, Значение)

ЭлементыФормы.ВариантыПоиска.СписокВыбора.Добавить(ИмяВарианта, Представление);

ВсеСпискиПоиска.Вставить(ИмяВарианта, Значение);

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

// Устанавливает текущим контакт в форме "Адресной книге" и "Выборе контактов".//

Процедура УстановитьТекущимКонтакт(Контакт, Форма) Экспорт

Если ТипЗнч(Контакт) = Тип("СправочникСсылка.Пользователи") Тогда

Форма.Элементы.Страницы.ТекущаяСтраница = Форма.Элементы.СтраницаПользователей;

Форма.Элементы.СписокПользователей.ТекущаяСтрока = Контакт;

Иначе

МассивОписанийКонтактов = Взаимодействия КлиентСервер.ПолучитьМассивОписанияВозможныхКонтактов();

ИмяМетаданныхКонтакта = Контакт.Метаданные().Имя;

Для каждого ЭлементМассиваОписания Из МассивОписанийКонтактов Цикл

Если ЭлементМассиваОписания.Имя = ИмяМетаданныхКонтакта Тогда

Форма.Элементы.Страницы.ТекущаяСтраница = Форма.Элементы["Страница_" + ?(ЭлементМассиваОписания.ЕстьВладелец,ЭлементМассиваОписания.ИмяВладельца,ЭлементМассиваОписания.Имя)];

Форма.Элементы["Таблица_" + ЭлементМассиваОписания.Имя].ТекущаяСтрока = Контакт;

Если ЭлементМассиваОписания.ЕстьВладелец Тогда

Форма.Элементы["Таблица_" + ЭлементМассиваОписания.ИмяВладельца].ТекущаяСтрока = Контакт.Владелец;

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Форма["Список_" + ЭлементМассиваОписания.Имя]. Отбор,"Владелец",Контакт.Владелец,,,Истина);

КонецЕсли;

ИначеЕсли ЭлементМассиваОписания.ИмяВладельца = ИмяМетаданныхКонтакта Тогда

Форма.Элементы.Страницы.ТекущаяСтраница = Форма.Элементы["Страница_" + ЭлементМассиваОписания. ИмяВладельца];

ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(Форма["Список_" + ЭлементМассиваОписания.Имя].Отбор,"Владелец",Контакт,,,Истина);

КонецЕсли;

КонецЦикла;

КонецЕсли;

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

// Получает доменный адрес из адреса электронной почты //

Функция ПолучитьДоменныйАдресДляПоиска(Адрес)

Стр = Адрес;

Поз = Найти(Стр, "@");

Возврат ?(Поз = 0, "", Сред(Стр, Поз+1));

КонецФункции

// Формирует варианты поиска по строке //

Функция ПолучитьВариантыПоискаПоСтроке(Представление, Адрес)

Если ПустаяСтрока(Представление) ИЛИ ПустаяСтрока(Адрес) Тогда

Возврат Представление + Адрес;

КонецЕсли;

стрВариантыПоиска = Новый СписокЗначений;

стрВариантыПоиска.Добавить(Представление + " ИЛИ " + Адрес);

стрВариантыПоиска.Добавить(Представление + " И " + Адрес);

Возврат стрВариантыПоиска;

КонецФункции

//Устанавливает предмет взаимодействия //

Процедура УстановитьПредмет(Ссылка, Предмет) Экспорт

Если ЗначениеЗаполнено(Ссылка) Тогда

Объект = Ссылка.ПолучитьОбъект();

Объект.Заблокировать();

Объект.Предмет = Предмет;

Объект.Записать();

КонецЕсли;

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

// Заполняет таблицу значений "Найденные контакты" общих форм "Адресная книга" и "Выбора контактов"//

Процедура ЗаполнитьНайденныеКонтакты(ТабКонтакты,НайденныеКонтакты) Экспорт

Для Каждого Стр Из ТабКонтакты Цикл

новСтр = НайденныеКонтакты.Добавить();

новСтр.Ссылка = Стр.Контакт;

новСтр.Представление = Стр.Представление;

новСтр.НаименованиеКонтакта = Стр.Наименование + ?(ПустаяСтрока(Стр.НаименованиеВладельца), "", " (" + Стр.НаименованиеВладельца + ")");

новСтр.ИмяСправочника = Стр.Контакт.Метаданные().Имя;

КонецЦикла;

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

// Получает представление и всю контактную информацию контакта. //

Процедура ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта(Контакт, Представление, СтрокаКИ,ТипКонтакнойИнформации = Неопределено) Экспорт

Представление = "";

СтрокаКИ = "";

Если Не ЗначениеЗаполнено(Контакт) Тогда

Возврат;

КонецЕсли;

ИмяТаблицы = Контакт.Метаданные().Имя;

ИмяПоляДляНаименованияВладельца = ПолучитьИмяПоляДляНаименованияВладельца(ИмяТаблицы);

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Таблица.Наименование,

| " + ИмяПоляДляНаименованияВладельца + " КАК НаименованиеВладельца,

| Таблица.КонтактнаяИнформация.(

| Тип,

| Представление

| )

|ИЗ

| Справочник." + ИмяТаблицы + " КАК Таблица

|ГДЕ

| Таблица.Ссылка = &Контакт" + ?(ТипКонтакнойИнформации = Неопределено,""," И Таблица.КонтактнаяИнформация.Тип = &ТипКонтактнойИнформации");

Запрос.УстановитьПараметр("Контакт", Контакт);

Запрос.УстановитьПараметр("ТипКонтактнойИнформации",ТипКонтакнойИнформации);

Выборка = Запрос.Выполнить().Выбрать();

Если Не Выборка.Следующий() Тогда

Возврат;

КонецЕсли;

Представление = Выборка.Наименование;

Если Не ПустаяСтрока(Выборка.НаименованиеВладельца) Тогда

Представление = Представление + " (" + Выборка.НаименованиеВладельца + ")";

КонецЕсли;

Для Каждого Стр Из Выборка.КонтактнаяИнформация.Выгрузить() Цикл

Если Стр.Тип <> Перечисления.ТипыКонтактнойИнформации.Другое Тогда

СтрокаКИ = СтрокаКИ + ?(ПустаяСтрока(СтрокаКИ), "", ", ") + Стр.Представление;

КонецЕсли;

КонецЦикла;

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

// Выполняет поиск контактов по строке //

Функция ОсуществитьПоискКонтактовПоСтроке (Форма,ДляАдреснойКниги = Ложь) Экспорт

Форма.НайденныеКонтакты.Очистить();

Если ПустаяСтрока(Форма.СтрокаПоиска) Тогда

Возврат "";

КонецЕсли;

Если ПолнотекстовыйПоиск.ПолучитьРежим ПолнотекстовогоПоиска() = РежимПолнотекстовогоПоиска.Запретить Тогда

Возврат НСтр("ru = 'Использование индекса полнотекстового поиска данных запрещено!'");

КонецЕсли;

масМетаданных = ПолучитьМассивМетаданныхКонтакты();

СписокПоиска = ПолнотекстовыйПоиск.СоздатьСписок(Форма.СтрокаПоиска, 101);

СписокПоиска.ОбластьПоиска = масМетаданных;

СписокПоиска.ПерваяЧасть();

КоличествоНайденныхЭлементов = СписокПоиска.Количество();

Если КоличествоНайденныхЭлементов = 0 Тогда

Возврат "";

КонецЕсли;

масСсылок = Новый Массив;

соотвОписание = Новый Соответствие;

Для Сч = 0 По Мин(КоличествоНайденныхЭлементов, 100)-1 Цикл

ЭлементСписка = СписокПоиска.Получить(Сч);

масСсылок.Добавить(ЭлементСписка.Значение);

соотвОписание.Вставить(ЭлементСписка.Значение, ЭлементСписка.Описание);

КонецЦикла;

Если ДляАдреснойКниги Тогда

ТекстЗапроса = ПолучитьТекстЗапросаПоискКонтактовПоСтрокеСEmail();

Иначе

ТекстЗапроса = ПолучитьТекстЗапросаПоискКонтактовПоСтроке();

КонецЕсли;

Запрос = Новый Запрос;

Запрос.Текст = ТекстЗапроса;

Запрос.УстановитьПараметр("масСсылок", масСсылок);

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

новСтр = Форма.НайденныеКонтакты.Добавить();

новСтр.Ссылка = Выборка.Контакт;

новСтр.Представление = ?(ДляАдреснойКниги,Выборка.Представление,соотвОписание.Получить(Выборка.Контакт));

новСтр.НаименованиеКонтакта = Выборка.Наименование + ?(ПустаяСтрока(Выборка.НаименованиеВладельца), "", " (" + Выборка.НаименованиеВладельца + ")");

КонецЦикла;

Возврат ?(КоличествоНайденныхЭлементов < 101, "", НСтр("ru = 'Уточните параметры поиска. В списке отображены не все найденные контакты!'"));

КонецФункции

// Заполняет табличную часть участники у документов Встреча и Запланированное взаимодействие.//

Процедура ЗаполнитьКонтактыДляВстречи(Контакты, Участники) Экспорт

Если Не КонтактыЗаполнены(Контакты) Тогда

Возврат;

КонецЕсли;

Для Каждого Стр Из Контакты Цикл

новСтр = Участники.Добавить();

Если ТипЗнч(Стр) = Тип("Структура") Тогда

новСтр.Контакт = Стр.Контакт;

новСтр.ПредставлениеКонтакта = Стр.Представление;

новСтр.КакСвязаться = Стр.Адрес;

Иначе

новСтр.Контакт = Стр;

КонецЕсли;

ДозаполнитьПоляКонтактов(новСтр.Контакт, новСтр.ПредставлениеКонтакта, новСтр.КакСвязаться);

КонецЦикла;

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

// Заполняет значения прочих полей в строках табличной части Участники документов взаимодействий. //

Процедура ДозаполнитьПоляКонтактов(Контакт, Представление, Адрес, ТипКонтактнойИнформации = Неопределено) Экспорт

Если Не ЗначениеЗаполнено(Контакт) Тогда

Возврат;

ИначеЕсли Не ПустаяСтрока(Представление) И Не ПустаяСтрока(Адрес) Тогда

Возврат;

КонецЕсли;

// Заполним поле представление

Если ПустаяСтрока(Представление) Тогда

Представление = ?(ЗначениеЗаполнено(Контакт),ОбщегоНазначения.ПолучитьЗначениеРеквизита(Контакт,"Наименование"),"");

КонецЕсли;

// Для всех типов кроме электронной почты

Если ТипКонтактнойИнформации <> Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда

Если ПустаяСтрока(Адрес) Тогда

ПолучитьПредставлениеИВсюКонтактнуюИнформациюКонтакта(Контакт, "", Адрес,ТипКонтактнойИнформации);

КонецЕсли;

Возврат;

КонецЕсли;

// Для адреса электронной почты проверим, введен он или нет

Если Найти(Адрес, "@") <> 0 Тогда

Возврат;

КонецЕсли;

Адреса = ПолучитьНаименованиеИАдресаЭлектроннойПочтыКонтакта(Контакт);

Если Адреса <> Неопределено И Адреса.Адреса.Количество() > 0 Тогда

Элемент = Адреса.Адреса.Получить(0);

Адрес = Элемент.Значение;

КонецЕсли;

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

//Формирует строку-представление списка участников взаимодействия //

Процедура СформироватьСписокУчастников(Объект) Экспорт

Объект.СписокУчастников = "";

Для Каждого Участник Из Объект.Участники Цикл

Объект.СписокУчастников = Объект.СписокУчастников + ?(Объект.СписокУчастников = "","","; ") + Участник.ПредставлениеКонтакта;

КонецЦикла;

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

Процедура ПолучитьПисьма(УчетнаяЗапись, ЕстьОшибки, СтрОшибка, Получено)

// -----------------------------------------------------------------

// Сформируем почтовый профиль и подключимся к почтовому серверу

Профиль = ЭлектроннаяПочта.СформироватьИнтернетПрофиль(УчетнаяЗапись);

Почта = Новый ИнтернетПочта;

Попытка

Почта.Подключиться(Профиль);

Исключение

ЕстьОшибки = Истина;

СтрОшибка = ПолучитьОписаниеОшибки(ИнформацияОбОшибке());

Возврат;

КонецПопытки;

// -----------------------------------------------------------------

// Получим идентификаторы сообщений на сервере

Идентификаторы = Почта.ПолучитьИдентификаторы();

Если Идентификаторы.Количество() = 0 Тогда

// если на сервере сообщений нет, то удалим все записи по учетной записи в регистре сведений ИдентификаторыПолученныхЭлектронныхПисем

УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись);

Почта.Отключиться();

Возврат;

КонецЕсли;

// -----------------------------------------------------------------

// Определим какие сообщения нужно получать

ИдЗагружать = ПолучитьИдентификаторыПисемДляЗагрузки(Идентификаторы, УчетнаяЗапись);

Получено = 0;

Если ИдЗагружать.Количество() <> 0 Тогда

// Получим нужные сообщения

Сообщения = Почта.Выбрать(Ложь, ИдЗагружать);

// Запишем их

Для Каждого Сообщение Из Сообщения Цикл

ЗаписатьВходящееЭлектронноеПисьмо(УчетнаяЗапись, Сообщение, УчетнаяЗапись.ОтветственныйЗаОбработкуПисем);

КонецЦикла;

Получено = Сообщения.Количество();

КонецЕсли;

// -----------------------------------------------------------------

// Удалим ненужные сообщения на сервере

ОставлятьКопии = (УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере <> 0);

ОставлятьДней = УчетнаяЗапись.ОставлятьКопииСообщенийНаСервере;

Если Не ОставлятьКопии Тогда

// удалять все

масУдалять = Идентификаторы;

УдалятьВсе = Истина;

Иначе

масУдалять = ПолучитьИдентификаторыПисемДляУдаленияНаСервере(Идентификаторы, УчетнаяЗапись, ТекущаяДата() - ОставлятьДней*24*60*60);

УдалятьВсе = Ложь;

КонецЕсли;

Если масУдалять.Количество() <> 0 Тогда

Почта.УдалитьСообщения(масУдалять);

КонецЕсли;

// -----------------------------------------------------------------

// Удалим ненужные идентификаторы в регистре сведений

Если УдалятьВсе Тогда

УдалитьИдентификаторыВсехРанееПолученныхПисем(УчетнаяЗапись);

Иначе

УдалитьИдентификаторыРанееПолученныхПисем(УчетнаяЗапись, Идентификаторы, масУдалять);

КонецЕсли;

// -----------------------------------------------------------------

// Отключимся от почтового сервера

Почта.Отключиться();

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

Процедура ЗаписатьВходящееЭлектронноеПисьмо(УчетнаяЗапись, Сообщение, ОтветственныйЗаОбработкуПисем)

НачатьТранзакцию();

// Создадим документ и заполним его реквизиты на основе сообщения

Письмо = Документы.ЭлектронноеПисьмоВходящее.СоздатьДокумент();

Письмо.УчетнаяЗапись = УчетнаяЗапись;

ЗаполнитьДокументЭлектронноеПисьмоВходящее(Письмо, Сообщение);

// Найдем основание письма, проставим предмет и определим контакты

ЗаполнитьПредметИКонтакты(Письмо);

// Заполним ответственного

Ответственный = ?(ЗначениеЗаполнено(Письмо.Предмет), Письмо.Предмет.Ответственный, Неопределено);

Если Не ЗначениеЗаполнено(Ответственный) Тогда

Ответственный = ОтветственныйЗаОбработкуПисем;

КонецЕсли;

Письмо.Ответственный = Ответственный;

// Запишем письмо

Письмо.Записать();

МассивИменВложений = Новый Массив;

//Запишем вложения

Для Каждого Вложение Из Сообщение.Вложения Цикл

МассивИменВложений.Добавить(Вложение.ИмяФайла);

КонецЦикла;

СоответствиеВложенийИПодписей = ФайловыеФункцииКлиентСервер.ПолучитьСоответствиеФайловИПодписей(МассивИменВложений);

Для каждого ЭлементСоответствия Из СоответствиеВложенийИПодписей Цикл

НайденноеВложение = Неопределено;

МассивПодписей = Новый Массив;

Для каждого Вложение Из Сообщение.Вложения Цикл

Если Вложение.ИмяФайла = ЭлементСоответствия.Ключ Тогда

НайденноеВложение = Вложение;

Прервать;

КонецЕсли

КонецЦикла;

Если НайденноеВложение <> Неопределено И ЭлементСоответствия.Значение.Количество() > 0 Тогда

Для каждого Вложение Из Сообщение.Вложения Цикл

Если ЭлементСоответствия.Значение. Найти(Вложение.ИмяФайла) <> Неопределено Тогда

МассивПодписей.Добавить(Вложение);

КонецЕсли;

КонецЦикла;

КонецЕсли;

Если НайденноеВложение <> Неопределено Тогда

ЗаписатьВложениеЭлектронногоПисьма(Письмо.Ссылка, НайденноеВложение,МассивПодписей);

КонецЕсли;

КонецЦикла;

// Запишем идентификатор

ЗаписатьИдентификаторПолученногоПисьма(УчетнаяЗапись, Письмо.ИдентификаторНаСервере, Сообщение.ДатаПолучения);

ЗафиксироватьТранзакцию();

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

// Выполняет процедуру отправки и получения электронных писем.//

Процедура ПолучениеИОтправкаЭлектронныхПисем() Экспорт

// Получим список учетных записей для которых включено автополучение

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| УчетныеЗаписиЭлектроннойПочты.Ссылка

|ИЗ

| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

ЕстьОшибки = Ложь;

СтрОшибка = "";

Получено = 0;

ПолучитьПисьма(Выборка.Ссылка, ЕстьОшибки, СтрОшибка, Получено);

КонецЦикла;

Возврат;

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

Приложение 2. Программный код формы «Адресная книга»

// Переносит текущий контакт из списка "Контакты по предмету" в список "Получатели письма". //

&НаКлиенте

Процедура ДобавитьИзСпискаПредметовВыполнить()

ДобавитьПолучателяИзСпискаПоПредмету();

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

//Изменяет текущую группу получателей письма на группу "Кому".

//&НаКлиенте

Процедура ИзменитьГруппуКомуВыполнить()

ИзменитьГруппу("Кому");

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

//Изменяет текущую группу получателей письма на группу "Копии". //

&НаКлиенте

Процедура ИзменитьГруппуКопииВыполнить()

ИзменитьГруппу("Копии");

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

//Изменяет текущую группу получателей письма на группу "Скрытые".//

&НаКлиенте

Процедура ИзменитьГруппуСкрытыеВыполнить()

ИзменитьГруппу("Скрытые");

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

//Инициирует процесс поиска контактов. //

&НаКлиенте

Процедура КомандаНайтиВыполнить()

Если ПустаяСтрока(СтрокаПоиска) Тогда

Предупреждение(НСтр("ru = 'Не задана строка поиска!'"));

Возврат;

КонецЕсли;

Результат = "";

НайденныеКонтакты.Очистить();

Если ВариантыПоиска = "ПоEmail" Тогда

НайтиПоEmail(Ложь);

ИначеЕсли ВариантыПоиска = "ПоДомену" Тогда

НайтиПоEmail(Истина);

ИначеЕсли ВариантыПоиска = "ПоСтроке" Тогда

Результат = ОсуществитьПоискКонтактовПоСтроке();

ИначеЕсли ВариантыПоиска = "НачинаетсяС" Тогда

НайтиПоНачалуНаименования();

КонецЕсли;

Если Не ПустаяСтрока(Результат) Тогда

Предупреждение(Результат);

КонецЕсли;

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

//Инициирует поиск контактов по адресу электронной почты текущей строки списка "Получатели письма".

//&НаКлиенте

Процедура НайтиПоАдресуВыполнить()

Элементы.Страницы.ТекущаяСтраница = Элементы.ПоискКонтактов;

НайденныеКонтакты.Очистить();

ВариантыПоиска = "ПоEmail";

текДанные = Элементы.ПолучателиПисьма.ТекущиеДанные;

Если текДанные = Неопределено Тогда

Возврат;

КонецЕсли;

СтрокаПоиска = текДанные.Адрес;

Если Не ПустаяСтрока(СтрокаПоиска) Тогда

НайтиПоEmail(Ложь);

КонецЕсли;

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

//Инициирует поиск контактов по представлению текущей строки списка "Получатели письма". //

&НаКлиенте

Процедура НайтиПоПредставлениюВыполнить()

Элементы.Страницы.ТекущаяСтраница = Элементы.ПоискКонтактов;

НайденныеКонтакты.Очистить();

ВариантыПоиска = "ПоСтроке";

текДанные = Элементы.ПолучателиПисьма.ТекущиеДанные;

Если текДанные = Неопределено Тогда

Возврат;

КонецЕсли;

СтрокаПоиска = текДанные.Представление;

Если Не ПустаяСтрока(СтрокаПоиска) Тогда

Результат = ОсуществитьПоискКонтактовПоСтроке();

Если Не ПустаяСтрока(Результат) Тогда

Предупреждение(Результат);

КонецЕсли;

КонецЕсли;

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

//Осуществляет поиск всех адресов электронной почты контакта из списка "Получатели письма" и//предлагает пользователю сделать выбор, если у контакта более одного адреса электронной почты.

&НаКлиенте

Процедура УстановитьАдресКонтактаВыполнить()

текДанные = Элементы.ПолучателиПисьма.ТекущиеДанные;

Если текДанные = Неопределено ИЛИ Не ЗначениеЗаполнено(текДанные.Контакт) Тогда

Возврат;

КонецЕсли;

Результат = Взаимодействия. ПолучитьАдресаЭлектроннойПочтыКонтакта(текДанные.Контакт);

Если Результат.Количество() = 0 Тогда

Возврат;

КонецЕсли;

Если Результат.Количество() = 1 Тогда

Адрес = Результат[0].АдресЭП;

Представление = Результат[0].Представление;

Иначе

спсВыбора = Новый СписокЗначений;

Номер = 0;

Для Каждого Элемент Из Результат Цикл

спсВыбора.Добавить(Номер, Элемент.ВидНаименование + ": " + Элемент.АдресЭП);

Номер = Номер + 1;

КонецЦикла;

выбрЭлемент = спсВыбора.ВыбратьЭлемент();

Если выбрЭлемент = Неопределено Тогда

Возврат;

КонецЕсли;

Индекс = выбрЭлемент.Значение;

Адрес = Результат[Индекс].АдресЭП;

Представление = Результат[Индекс].Представление;

КонецЕсли;

Поз = Найти(Представление, "<");

Представление = ?(Поз = 0, "", СокрЛП(Лев(Представление, Поз-1)));

текДанные.Адрес = Адрес;

Если Не ПустаяСтрока(Представление) Тогда

текДанные.Представление = Представление;

КонецЕсли;

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

// Осуществляет поиск контактов по доменному имени или по адресу электронной почты. //

&НаСервере

Функция НайтиПоEmail(ПоДомену)

Возврат Взаимодействия.НайтиПоEmail(СтрокаПоиска,ПоДомену,ЭтаФорма);

КонецФункции

// Осуществляет поиск контактов по строке //

&НаСервере

Функция ОсуществитьПоискКонтактовПоСтроке()

Возврат Взаимодействия. ОсуществитьПоискКонтактовПоСтроке(ЭтаФорма,Истина);

КонецФункции

// Осуществляет поиск контактов по началу наименования //

&НаСервере

Функция НайтиПоНачалуНаименования()

Возврат Взаимодействия.ПолучитьВсеКонтактыПоНачалу Наименования САдресамиЭлектроннойПочты(СтрокаПоиска,ЭтаФорма);

КонецФункции

// Выбирает файл почтовик

&НаКлиенте

Процедура ВыбратьФайл(Команда)

Режим = РежимДиалогаВыбораФайла.Открытие;

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);

ДиалогОткрытияФайла.ПолноеИмяФайла = "";

Фильтр = "Файл(*.xml)|*.xml";

ДиалогОткрытияФайла.Фильтр = Фильтр;

ДиалогОткрытияФайла.МножественныйВыбор = Ложь;

ДиалогОткрытияФайла.Заголовок = "Выберите файл для отправки";

Если ДиалогОткрытияФайла.Выбрать() Тогда

Элементы.ОтправитьФайлИмя.Заголовок = ДиалогОткрытияФайла.ПолноеИмяФайла;

КонецЕсли;

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

// Заполняет адреса из файла почтовика

&НаКлиенте

Процедура ЗаполнитьАдреса(Команда)

ПолучателиПисьма.Очистить();

ФайлСАдресами = Новый ЧтениеXML;

Попытка

ФайлСАдресами.ОткрытьФайл(Элементы.ОтправитьФайлИмя.Заголовок);

Пока ФайлСАдресами.Прочитать() Цикл

Если ФайлСАдресами.ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда

Сообщить(Строка(ФайлСАдресами.ЛокальноеИмя)+" тип: "+Строка(ФайлСАдресами.ТипУзла));

Если ФайлСАдресами.имя = "Mail" Тогда

Пока ФайлСАдресами.ПрочитатьАтрибут() Цикл

Сообщить("Атрибут: "+Строка(ФайлСАдресами.Значение));

Если ФайлСАдресами.Имя = "Adress" Тогда

Адрес = ФайлСАдресами.Значение;

КонецЕсли;

Если ФайлСАдресами.Имя = "Company" Тогда

Представление = ФайлСАдресами.Значение;

КонецЕсли;

Если ФайлСАдресами.Имя = "Mail Name" Тогда

Контакт = ФайлСАдресами.Значение;

КонецЕсли;

КонецЦикла;

Строка = ПолучателиПисьма.Добавить();

Строка.Адрес = Адрес;

Строка.Представление = Представление;

Строка.Контакт = Контакт;

Настройки = Истина

КонецЕсли;

КонецЕсли;

КонецЦикла;

ФайлСАдресами.Закрыть();

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

Приложение 3. Программный код формы журнала документов «Взаимодействия»

&НаСервереБезКонтекста

//установить флаг "отработано" в выбранных взаимодействиях - серверная часть //

Процедура УстановитьФлагОтработано(Знач Взаимодействия)

ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка");

Для Каждого Взаимодействие Из Взаимодействия Цикл

Если ЗначениеЗаполнено(Взаимодействие)

И ТипЗнч(Взаимодействие) <> ТипГруппировка Тогда

Объект = Взаимодействие.ПолучитьОбъект();

Объект.Отработано = Истина;

Объект.Записать();

КонецЕсли;

КонецЦикла;

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

&НаСервереБезКонтекста

//установить ответственного в выбранных взаимодействиях - серверная часть //

Процедура УстановитьОтветственного(Знач Взаимодействия, Знач Ответственный)

ТипГруппировка = Тип("СтрокаГруппировкиДинамическогоСписка");

Для Каждого Взаимодействие Из Взаимодействия Цикл

Если ЗначениеЗаполнено(Взаимодействие)

И ТипЗнч(Взаимодействие) <> ТипГруппировка

И Взаимодействие.Ответственный <> Ответственный Тогда

Объект = Взаимодействие.ПолучитьОбъект();

Объект.ОтработатьПосле = '0001.01.01';

Объект.Ответственный = Ответственный;

Объект.Записать();

КонецЕсли;

КонецЦикла;

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

&НаСервереБезКонтекста

//установить предмет в выбранных взаимодействиях - серверная часть //

Процедура УстановитьПредмет(Знач МассивВзаимодействия, Знач Предмет)

Для Каждого Взаимодействие Из МассивВзаимодействия Цикл

Если ЗначениеЗаполнено(Взаимодействие)

И ТипЗнч(Взаимодействие) <> Тип("СтрокаГруппировкиДинамическогоСписка")

И Взаимодействие.Предмет <> Предмет Тогда

Взаимодействия.УстановитьПредмет (Взаимодействие, Предмет);

КонецЕсли;

КонецЦикла;

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

&НаСервереБезКонтекста

//устанавливает реквизит "отработать после" в выбранных взаимодействиях - серверная часть //

Процедура ОтложитьОбработку(Знач Взаимодействия, Знач ДатаОтработки)

Для Каждого Взаимодействие Из Взаимодействия Цикл

Если ЗначениеЗаполнено(Взаимодействие)

И ТипЗнч(Взаимодействие) <> Тип("СтрокаГруппировкиДинамическогоСписка")

И Взаимодействие.ОтработатьПосле <> ДатаОтработки Тогда

Объект = Взаимодействие.ПолучитьОбъект();

Объект.ОтработатьПосле = ДатаОтработки;

Объект.Записать();

КонецЕсли;

КонецЦикла;

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

&НаКлиенте

Функция ВыборКорректен()

Для Каждого Элемент Из Элементы.Список.ВыделенныеСтроки Цикл

Если ТипЗнч(Элемент) <> ТипГруппировка Тогда

Возврат Истина;

КонецЕсли;

КонецЦикла;

Возврат Ложь;

КонецФункции

&НаКлиенте

//получить входящую электронную почту

Процедура ПолучитьПочтуВыполнить()

УправлениеЭлектроннойПочтойКлиент.ЗагрузитьПочтуПользователя(Элементы.Список);

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

&НаКлиенте

//установить флаг "отработано" в выбранных взаимодействиях - клиентская часть

Процедура ОтработаноВыполнить()

Если ВыборКорректен() Тогда

УстановитьФлагОтработано(Элементы.Список.ВыделенныеСтроки);

Элементы.Список.Обновить();

КонецЕсли;

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

&НаКлиенте

//установить ответственного в выбранных взаимодействиях - клиентская часть

Процедура ОтветственныйВыполнить()

Если ВыборКорректен() Тогда

Ответственный = ОткрытьФормуМодально("Справочник.Пользователи.Форма.ФормаСписка", Новый Структура("РежимВыбора",Истина));

Если Ответственный <> Неопределено Тогда

Установить Ответственного(Элементы.Список.ВыделенныеСтроки, Ответственный);

Элементы.Список.Обновить();

КонецЕсли;

КонецЕсли;

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

&НаКлиенте

//установить предмет в выбранных взаимодействиях - клиентская часть

Процедура ПредметВыполнить()

Если ВыборКорректен() Тогда

Предмет = ОткрытьФормуМодально ("ЖурналДокументов.Взаимодействия.Форма.ФормаВыборПредмета");

Если Предмет <> Неопределено Тогда

УстановитьПредмет (Элементы.Список.ВыделенныеСтроки, Предмет);

Элементы.Список.Обновить();

КонецЕсли;

КонецЕсли;

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

&НаКлиенте

//устанавливает реквизит "отработать после" в выбранных взаимодействиях - клиентская часть

Процедура ОтложитьОбработкуВыполнить()

Если ВыборКорректен() Тогда

ДатаОтработки = ТекущаяДата();

Если ВвестиДату(ДатаОтработки, "Отработать после") Тогда

ОтложитьОбработку(Элементы.Список.ВыделенныеСтроки, ДатаОтработки);

Элементы.Список.Обновить();

КонецЕсли;

КонецЕсли;

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

Приложение 4. Программный код формы документа «Электронное письмо входящее»

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".

Если Параметры.Свойство("АвтоТест") Тогда

Возврат;

КонецЕсли;

// Запретим создание новых

Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда

Отказ = Истина;

Возврат;

КонецЕсли;

// Установим текст и вид текста

Если Объект.ТипТекста = Перечисления.ТипыТекстовЭлектронныхПисем.HTML Тогда

ТекстПисьма = Объект.ТекстHTML;

ОбработатьТекстHTML();

Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеHTMLДокумента;

Элементы.ТекстПисьма.ТолькоПросмотр = Ложь;

Иначе

ТекстПисьма = Объект.Текст;

Элементы.ТекстПисьма.Вид = ВидПоляФормы.ПолеТекстовогоДокумента;

КонецЕсли;

// Сформируем представление отправителя

ОтправительПредставление = УправлениеЭлектроннойПочтой.ПолучитьПредставлениеАдресата(Объект.ОтправительПредставление, Объект.ОтправительАдрес, Объект.ОтправительКонтакт);

// Сформируем представление Кому и Копии

ПолучателиПредставление = УправлениеЭлектроннойПочтой.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиПисьма);

ПолучателиКопийПредставление = УправлениеЭлектроннойПочтой.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиКопий);

ПолучателиОтветаПредставление = УправлениеЭлектроннойПочтой.ПолучитьПредставлениеСпискаАдресатов(Объект.ПолучателиОтвета);

// Заполним вложения

Если ЗначениеЗаполнено(Объект.Ссылка) Тогда

табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Объект.Ссылка);

Если табВложения.Количество() > 0 Тогда

ЗначениеВРеквизитФормы(табВложения, "Вложения");

Иначе

Элементы.ОткрытьВложение.Видимость = Ложь;

Элементы.СохранитьВложение.Видимость = Ложь;

КонецЕсли;

КонецЕсли;

// Заполним список выбора для поля ОтработатьПосле

Взаимодействия.ЗаполнитьСписокВыбораДляОтработатьПосле(Элементы.ОтработатьПосле.СписокВыбора);

Если Объект.Отработано Тогда

Элементы.ОтработатьПосле.Доступность = Ложь;

КонецЕсли;

ДополнительнаяИнформацияОПисьме = НСтр("ru = 'Создано:'") + " " + Объект.Дата + НСтр("ru = '

|Получено:'") + " " + Объект.ДатаПолучения + НСтр("ru = '

|Важность:'") + " " + Объект.Важность + НСтр("ru = '

|Кодировка:'") + " " + Объект.Кодировка;

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

&НаКлиенте

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)

Если ИмяСобытия = "Контакт создан" И Параметр.Основание = Объект.Ссылка Тогда

Элементы.Участники.ТекущиеДанные.Контакт = Параметр.Ссылка;

Элементы.СоздатьКонтакт.Доступность = Ложь;

Модифицированность = Истина;

Если ПустаяСтрока(Элементы.Участники.ТекущиеДанные.Представление) Тогда

Элементы.Участники.ТекущиеДанные.Представление = Параметр.Наименование;

КонецЕсли;

ИначеЕсли ИмяСобытия = "Создан предмет взаимодействия" И Параметр.Основание = Объект.Ссылка Тогда

Прочитать();

ОтобразитьИзменениеДанных(Объект.Предмет, ВидИзмененияДанных.Изменение);

КонецЕсли;

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

&НаСервере

Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, РежимЗаписи, РежимПроведения)

Взаимодействия.ПередЗаписьюВзаимодействияИзФормы(ТекущийОбъект);

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

&НаКлиенте

Процедура УточнитьКонтактыВыполнить()

РедактироватьПолучателей();

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

&НаКлиенте

Процедура ОткрытьВложениеВыполнить()

ОткрытьВложение();

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

&НаКлиенте

Процедура СохранитьВложениеВыполнить()

ТекущиеДанные = Элементы.Вложения.ТекущиеДанные;

Если ТекущиеДанные <> Неопределено Тогда

ДанныеФайла = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ТекущиеДанные.Ссылка,УникальныйИдентификатор);

ПрисоединенныеФайлыКлиент.СохранитьФайлКак(ДанныеФайла);

КонецЕсли;

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

&НаКлиенте

Процедура ДополнительноВыполнить()

Текст = Новый ТекстовыйДокумент;

Текст.ДобавитьСтроку(ДополнительнаяИнформацияОПисьме);

Текст.ДобавитьСтроку("");

Текст.ДобавитьСтроку("");

Текст.ДобавитьСтроку("-------------------------------------------------");

Текст.ДобавитьСтроку(Объект.ВнутреннийЗаголовок);

Текст.Показать();

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

&НаКлиенте

Процедура СвязанныеВзаимодействияВыполнить()

ОткрытьФормуМодально("ЖурналДокументов.Взаимодействия.ФормаСписка",

Новый Структура("ОбъектОтбора", Объект.Предмет));

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

&НаКлиенте

Процедура ИзменитьКодировку(Команда)

СписокКодировок = УправлениеЭлектроннойПочтой.ПолучитьСписокКодировок();

ВыбраннаяКодировка = СписокКодировок.ВыбратьЭлемент("ВыберитеКодировку",СписокКодировок.НайтиПоЗначению(НРег(Объект.Кодировка)));

Если ВыбраннаяКодировка <> Неопределено Тогда

ПреобразоватьКодировкуПисьма(ВыбраннаяКодировка.Значение);

КонецЕсли;

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

Приложение 5. Программный код формы документа «Электронное письмо исходящее»

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".

Если Параметры.Свойство("АвтоТест") Тогда

Возврат;

КонецЕсли;

Если Объект.Ссылка.Пустая() Тогда

Если Параметры.Свойство("Вложения") Тогда

Для каждого Вложение Из Параметры.Вложения Цикл

новСтр = Вложения.Добавить();

новСтр.Расположение = 2;

новСтр.ИмяФайлаНаКомпьютере = Вложение.Значение;

ИмяФайла = "";

Расширение = "";

ВзаимодействияКлиентСервер. ПолучитьКаталогИИмяФайла(Вложение.Значение, "", ИмяФайла);

новСтр.ИмяФайла = Вложение.Представление;

Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла);

новСтр.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение);

КонецЦикла;

КонецЕсли;

Если Параметры.Свойство("Тема") Тогда

Объект.Тема = Параметры.Тема;

КонецЕсли;

Если Параметры.Свойство("Тело") Тогда

Объект.Текст = Параметры.Тело;

КонецЕсли;

Если Параметры.Свойство("УчетнаяЗапись") Тогда

Объект.УчетнаяЗапись = Параметры.УчетнаяЗапись;

РеквизитыОтправителя = ОбщегоНазначения.ПолучитьЗначенияРеквизитов(Параметры.УчетнаяЗапись,"Ссылка,ИмяПользователя,АдресЭлектроннойПочты");

Объект.ОтправительПредставление = УправлениеЭлектроннойПочтой.ПолучитьПредставлениеАдресата(РеквизитыОтправителя.ИмяПользователя,РеквизитыОтправителя.АдресЭлектроннойПочты,"");

КонецЕсли;

КонецЕсли;

// Заполним список кодировок

СписокКодировок = УправлениеЭлектроннойПочтой.ПолучитьСписокКодировок();

Для Каждого Элемент Из СписокКодировок Цикл

Элементы.Кодировка.СписокВыбора.Добавить(Элемент.Значение);

КонецЦикла;

Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда

Элементы.Отправить.Доступность = Ложь;

Элементы.ОтправительПредставление.ТолькоПросмотр = Истина;

Элементы.ГруппаДоступныТолькоДляЧерновика.ТолькоПросмотр = Истина;

Элементы.СписокПолучателейПисьма.РедактированиеТекста = Ложь;

Элементы.СписокПолучателейКопий.РедактированиеТекста = Ложь;

Элементы.СписокПолучателейСкрытыхКопий.РедактированиеТекста = Ложь;

Элементы.ГруппаДоступныТолькоДляЧерновика.ТолькоПросмотр = Истина;

Элементы.ДобавитьВложение.Доступность = Ложь

Иначе

// Заполним список выбора учетных записей

УправлениеЭлектроннойПочтой.ПолучитьДоступныеУчетныеЗаписиДляОтправки(Элементы.ОтправительПредставление.СписокВыбора);

КонецЕсли;

Для Каждого Стр Из Объект.ПолучателиПисьма Цикл

Если ЗначениеЗаполнено(Стр.Контакт) Тогда

СоответствияАдресовИКонтактов.Добавить(Стр.Контакт, Стр.Адрес);

КонецЕсли;

КонецЦикла;

// Заполним вложения

табВложения = УправлениеЭлектроннойПочтой.ПолучитьВложенияЭлектронногоПисьма(Объект.Ссылка);

Для Каждого Стр Из табВложения Цикл

новСтр = Вложения.Добавить();

новСтр.Ссылка = Стр.Ссылка;

новСтр.ИмяФайла = Стр.ИмяФайла;

новСтр.ИндексКартинки = Стр.ИндексКартинки;

новСтр.Размер = Стр.Размер;

новСтр.Расположение = 0;

КонецЦикла;

Взаимодействия.ЗаполнитьСписокВыбораДляОтработатьПосле(Элементы.ОтработатьПосле.СписокВыбора);

// Если письмо отправлено, переименуем команду "ПодобратьКонтакты"

Если Объект.СтатусПисьма <> Перечисления.СтатусыИсходящегоЭлектронногоПисьма.Черновик Тогда

Элементы.ПодобратьКонтакты.Видимость = Ложь;

Иначе

Элементы.УточнитьКонтакты.Видимость = Ложь;

КонецЕсли;

//подготовить оповещения взаимодействий

Взаимодействия.ПодготовитьОповещения(ЭтаФорма,Параметры);

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

&НаКлиенте

Процедура КнопкаДополнительноВыполнить()

Текст = Новый ТекстовыйДокумент;

Текст.ДобавитьСтроку("Создано: " + Объект.Дата);

Текст.ДобавитьСтроку("Отправлено: " + Объект.ДатаОтправления);

Текст.ДобавитьСтроку("");

Текст.ДобавитьСтроку("");

Текст.ДобавитьСтроку("-------------------------------------------------");

Текст.ДобавитьСтроку("Идентификатор сообщения: " + Объект.ИдентификаторСообщения);

Текст.ДобавитьСтроку("Идентификатор основания: " + Объект.ИдентификаторОснования);

Текст.ДобавитьСтроку("Идентификаторы оснований: " + ПолучитьПредставлениеИдентификаторовОснований(Объект.ИдентификаторыОснований));

Текст.Показать();

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

&НаКлиенте

Процедура ОтработатьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

ВзаимодействияКлиент.ОбработатьВыборВПолеОтработатьПосле(

Объект.ОтработатьПосле, ВыбранноеЗначение, СтандартнаяОбработка, Модифицированность);

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

&НаКлиенте

Процедура ПредставлениеОтправителяОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

Объект.УчетнаяЗапись = ВыбранноеЗначение;

ЭлементСписка = Элемент.СписокВыбора.НайтиПоЗначению(ВыбранноеЗначение);

Если ЭлементСписка <> Неопределено Тогда

СтандартнаяОбработка = Ложь;

Объект.ОтправительПредставление = ЭлементСписка.Представление;

КонецЕсли;

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

&НаКлиенте

Процедура ВложенияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)

ОткрытьВложениеВыполнить();

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

&НаКлиенте

Процедура СписокПолучателейПисьмаПриИзменении(Элемент)

ПреобразоватьИменаПолучателей(Объект.СписокПолучателейПисьма, "ПолучателиПисьма");

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

&НаКлиенте

Процедура СписокПолучателейКопийПриИзменении(Элемент)

ПреобразоватьИменаПолучателей(Объект.СписокПолучателейКопий, "ПолучателиКопий");

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

&НаКлиенте

Процедура СписокПолучателейСкрытыхКопийПриИзменении(Элемент)

ПреобразоватьИменаПолучателей(Объект.СписокПолучателейСкрытыхКопий, "ПолучателиСкрытыхКопий");

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

&НаКлиенте

Процедура ПодобратьКонтактыВыполнить()

РедактироватьСписокПолучателей(Истина);

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

&НаКлиенте

Процедура УточнитьКонтактыВыполнить()

РедактироватьСписокПолучателей(Ложь);

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

&НаКлиенте

Процедура ВложенияПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)

Отказ = Истина;

ДобавитьВложениеВыполнить();

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

&НаКлиенте

Процедура ДобавитьВложениеВыполнить()

#Если Не ВебКлиент Тогда

Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);

Диалог.МножественныйВыбор = Истина;

Если Не Диалог.Выбрать() Тогда

Возврат;

КонецЕсли;

Для Каждого ВыбранныйФайл Из Диалог.ВыбранныеФайлы Цикл

новСтр = Вложения.Добавить();

новСтр.Расположение = 2;

новСтр.ИмяФайлаНаКомпьютере = ВыбранныйФайл;

ИмяФайла = "";

Расширение = "";

ВзаимодействияКлиентСервер.ПолучитьКаталогИИмяФайла(ВыбранныйФайл, "", ИмяФайла);

новСтр.ИмяФайла = ИмяФайла;

Расширение = ВзаимодействияКлиентСервер.ПолучитьРасширениеФайла(ИмяФайла);

новСтр.ИндексКартинки = ФайловыеФункции КлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение);

КонецЦикла;

#Иначе

Адрес = "";

ВыбранныйФайл = "";

Если Не ПоместитьФайл(Адрес, "", ВыбранныйФайл, Истина, УникальныйИдентификатор) Тогда

Возврат;

КонецЕсли;

новСтр = Вложения.Добавить();

новСтр.Расположение = 4;

новСтр.ИмяФайлаНаКомпьютере = Адрес;

новСтр.ИмяФайла = ВыбранныйФайл;

Расширение = ВзаимодействияКлиентСервер. ПолучитьРасширениеФайла(ВыбранныйФайл);

новСтр.ИндексКартинки = ФайловыеФункцииКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение);

ОбновитьОтображениеДанных();

#КонецЕсли

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

&НаКлиенте

Процедура УдалитьВложениеВыполнить()

ДобавитьВложениеВСписокУдаленных();

текДанные = Элементы.Вложения.ТекущиеДанные;

Если текДанные <> Неопределено Тогда

Индекс = Вложения.Индекс(текДанные);

Вложения.Удалить(Индекс); ОбновитьОтображениеДанных();

КонецЕсли;

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

&НаКлиенте

Процедура ОткрытьВложениеВыполнить()

текДанные = Элементы.Вложения.ТекущиеДанные;

Если текДанные = Неопределено Тогда

Возврат;

КонецЕсли;

Если (текДанные.Расположение = 0) ИЛИ (текДанные.Расположение = 1) Тогда

УправлениеЭлектроннойПочтойКлиент.ОткрытьВложение(текДанные.Ссылка,УникальныйИдентификатор);

ИначеЕсли текДанные.Расположение = 2 Тогда

#Если Не ВебКлиент Тогда

ЗапуститьПриложение("""" + текДанные.ИмяФайлаНаКомпьютере + """");

#КонецЕсли

КонецЕсли;

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

&НаСервере

Функция ВыполнитьОтправкуПисьма()

ПараметрыПисьма = Новый Структура;

ДобавитьВПараметрАдресатов(ПараметрыПисьма, "Кому", "ПолучателиПисьма");

ДобавитьВПараметрАдресатов(ПараметрыПисьма, "Копии", "ПолучателиКопий");

ДобавитьВПараметрАдресатов(ПараметрыПисьма, "СкрытыеКопии", "ПолучателиСкрытыхКопий");

ПараметрыПисьма.Вставить("Тема", Объект.Тема);

ПараметрыПисьма.Вставить("Тело", Объект.Текст);

ПараметрыПисьма.Вставить("Кодировка", Объект.Кодировка);

ПараметрыПисьма.Вставить("Важность", УправлениеЭлектроннойПочтой.ПолучитьВажность(Объект.Важность));

Если Не ПустаяСтрока(Объект.ИдентификаторыОснований) Тогда

ПараметрыПисьма.Вставить("ИдентификаторыОснований", Объект.ИдентификаторыОснований);

КонецЕсли;

соотвВложения = Новый Соответствие;

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Файлы.Наименование КАК ПолноеНаименование,

| Файлы.Расширение КАК Расширение,

| Файлы.Ссылка КАК Ссылка,

| Файлы.ЭлектронныеЦифровыеПодписи.(

| НомерСтроки,

| Подпись

| )

|ИЗ

| Справочник.ЭлектронноеПисьмоИсходящееПрисоединенныеФайлы КАК Файлы

|ГДЕ

| Файлы.ВладелецФайла = &ВладелецФайла";

Запрос.УстановитьПараметр("ВладелецФайла", Объект.Ссылка);

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

ИмяФайла = Выборка.ПолноеНаименование + ?(Выборка.Расширение = "", "", "." + Выборка.Расширение);

соотвВложения.Вставить(ИмяФайла, Присоединенные Файлы.ПолучитьДвоичныеДанныеФайла(Выборка.Ссылка));

Для каждого ЭЦП Из Выборка.ЭлектронныеЦифровыеПодписи.Выгрузить() Цикл

соотвВложения.Вставить(Выборка.ПолноеНаименование + "-DS("+ ЭЦП.НомерСтроки + ").p7s",ЭЦП.Подпись.Получить());

КонецЦикла;

КонецЦикла;

ПараметрыПисьма.Вставить("Вложения", соотвВложения);

Возврат ЭлектроннаяПочта.ОтправитьПочтовоеСообщение(Объект.УчетнаяЗапись, ПараметрыПисьма);

КонецФункции

Приложение 6. Программный код формы документа «Телефонный звонок»

&НаКлиенте

Процедура СоздатьКонтактВыполнить()

ВзаимодействияКлиент.СоздатьКонтакт(

Объект.АбонентПредставление, Объект.АбонентКак Связаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов

);

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

&НаКлиенте

Процедура СвязанныеВзаимодействияВыполнить()

ПараметрыОтбора = Новый Структура;

ПараметрыОтбора.Вставить("Предмет", Объект.Предмет);

ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыОтбора, ЭтаФорма, , Окно);

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

&НаКлиенте

Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)

СтандартнаяОбработка = Ложь;

Если ВзаимодействияКлиент.ВыбратьКонтакт(Объект.Предмет, Объект.АбонентКакСвязаться, Объект.АбонентПредставление, Объект.АбонентКонтакт, Ложь, Ложь, Истина) Тогда

Модифицированность = Истина;

КонецЕсли;

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

&НаКлиенте

Процедура ПредставлениеКонтактаПриИзменении(Элемент)

ПроверитьДоступностьСозданияКонтакта();

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

&НаКлиенте

Процедура КонтактПриИзменении(Элемент)

ПроверитьДоступностьСозданияКонтакта();

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

&НаКлиенте

Процедура ОтработатьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)

ВзаимодействияКлиент.ОбработатьВыборВПолеОтработатьПосле(Объект.ОтработатьПосле, ВыбранноеЗначение, СтандартнаяОбработка, Модифицированность);

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

&НаКлиенте

Процедура ПроверитьДоступностьСозданияКонтакта()

Элементы.СоздатьКонтакт.Доступность = (Не ЗначениеЗаполнено(Объект.АбонентКонтакт)) И (Не ПустаяСтрока(Объект.АбонентПредставление));


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.