Автоматизация директ-маркетинга (на примере ООО "Дело Системы")
Разработка подсистемы в программе "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. Программный код формы документа «Телефонный звонок»
&НаКлиенте
Процедура СоздатьКонтактВыполнить()
ВзаимодействияКлиент.СоздатьКонтакт(
Объект.АбонентПредставление, Объект.АбонентКак Связаться, Объект.Ссылка, СписокИнтерактивноСоздаваемыхКонтактов
);
КонецПроцедуры
&НаКлиенте
Процедура СвязанныеВзаимодействияВыполнить()
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Предмет", Объект.Предмет);
ОткрытьФорму("ЖурналДокументов.Взаимодействия.ФормаСписка", ПараметрыОтбора, ЭтаФорма, , Окно);
КонецПроцедуры
&НаКлиенте
Процедура КонтактНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ВзаимодействияКлиент.ВыбратьКонтакт(Объект.Предмет, Объект.АбонентКакСвязаться, Объект.АбонентПредставление, Объект.АбонентКонтакт, Ложь, Ложь, Истина) Тогда
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПредставлениеКонтактаПриИзменении(Элемент)
ПроверитьДоступностьСозданияКонтакта();
КонецПроцедуры
&НаКлиенте
Процедура КонтактПриИзменении(Элемент)
ПроверитьДоступностьСозданияКонтакта();
КонецПроцедуры
&НаКлиенте
Процедура ОтработатьПослеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ВзаимодействияКлиент.ОбработатьВыборВПолеОтработатьПосле(Объект.ОтработатьПосле, ВыбранноеЗначение, СтандартнаяОбработка, Модифицированность);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьДоступностьСозданияКонтакта()
Элементы.СоздатьКонтакт.Доступность = (Не ЗначениеЗаполнено(Объект.АбонентКонтакт)) И (Не ПустаяСтрока(Объект.АбонентПредставление));
Подобные документы
Разработка системы для автоматизации процессов подготовки и отправки сообщений деловым партнерам организации по электронной почте. Требования к структуре и функционированию данной системы, основные этапы ее создания и порядок введения в действие.
курсовая работа [1,4 M], добавлен 20.11.2013Основные методологии адаптивных жизненных циклов IT-проектов. Внедрение системы автоматизации маркетинга Marketo для управления отношениями с клиентами торгового предприятия "Spirit". Доработка корпоративного сайта компании для учета данных о клиентах.
дипломная работа [1,4 M], добавлен 28.08.2016Требования и порядок учета клиентов в современном бизнесе. Обзор современного рынка программных продуктов, предназначенных для автоматизации системы взаимоотношений с клиентами. Разработка и внедрение программного комплекса на предприятии ООО ТСС НН.
дипломная работа [2,9 M], добавлен 15.09.2012Формирование и предоставление бухгалтерской информации в электронном виде внешним контролирующим органам. Сущность комплекса задач по автоматизации учета банковских операций, ее реализация программе "1С: Бухгалтерия". Особенности технология автоматизации.
курсовая работа [1,2 M], добавлен 23.09.2016Разработка информационной подсистемы "ЮГСтрой-Заказ" в СУБД 1С:Предприятие для автоматизации работы с клиентами. Уменьшение времени обработки запроса (времени работы с клиентом), защита базы данных, обеспечение простоты пользовательского интерфейса.
дипломная работа [4,7 M], добавлен 01.07.2011Последовательность разработки системы для оптимизации работы магазина интерьерных товаров, позволяющей хранить данные в одной базе и работать с ней с помощью удобного интерфейса клиентского приложения. Тестирование информационной системы. Листинг модулей.
дипломная работа [2,9 M], добавлен 07.07.2012Автоматизация рабочего места оператора, принимающего звонки от населения. Описание информационной инфраструктуры. Характеристика комплекса задач, подлежащих автоматизации для более комфортной работы оператора. Структурный состав программного продукта.
отчет по практике [36,7 K], добавлен 04.04.2015Делопроизводство бумажных и электронных документов. Современные системы электронного документооборота и системы автоматизации классического делопроизводства. Создание безбумажного делопроизводства в загруженных участках управленческой деятельности.
курсовая работа [501,8 K], добавлен 08.12.2010Краткая характеристика организационной структуры управления ООО "Строительная компания "Инжтех". Использование программных средств "ГАРАНТ" и "1С:Бухгалтерия" на предприятии. Расчет экономической эффективности системы автоматизации на предприятии.
курсовая работа [1,2 M], добавлен 11.11.2015Описание разработанной подсистемы автоматизации, алгоритм ее работы. Структуры базы данных и составных частей подсистемы. Затраты на разработку программного продукта и эффект от внедрения подсистемы. Руководство по работе с программным комплексом.
дипломная работа [3,0 M], добавлен 02.02.2009