В Управлении торговлей 10.3 в печатных формах документов есть кнопка "отправить по электронной почте", правда ей можно воспользоваться, если в настройках учета установлена галка "использовать встроенный почтовый клиент". Т.к. встроенный почтовый клиент часто не используют, этот удобный механизм не задействуется. Поэтому для отправки печатной формы накладной необходимо ее сначала сохранить на диск, затем вложить в письмо внешнего почтового клиента.
Ниже описаны изменения в конфигурации, которые необходимо внести, для автоматического создания письма во внешнем почтовом клиенте по кнопке "отправить по электронной почте ". Тестировалось для 8.1 УТ 10.3.
-
Для начала в конфигураторе, если не включена возможность изменений, ее необходимо включить (конфигурация - поддержка- настройка поддержки)
-
Добавить общий модуль "_управлениеПочтой" (см. рис2), в него скопировать процедуры: "ОтправитьПечатнуюФормуВнешнимТранспортом" и "КорректировкаНаименования" (ниже приведены см. п. 4).
-
В общем модуле "УправлениеОтчетами" отредактировать процедуру "ОтправитьДокументПоЭлектроннойПочте", закомментировав сообщение и добавив вызов нашей процедуры "ОтправитьПечатнуюФормуВнешнимТранспортом". Редактируемый фрагмент этой процедуры:
Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
//ОбщегоНазначения.СообщитьОбОшибке("Отправлять документы по электронной почте можно только из встроенного почтового клиента.
// |В настоящее время в настройках параметров учета установлено использование основного почтового клиента операционной системы.");
//Предупреждение("Операция не выполнена");
_управлениеПочтой.ОтправитьПечатнуюФормуВнешнимТранспортом (Документ, УправлениеПользователями.ПолучитьЗначениеПоУмолчанию (ПараметрыСеанса.ТекущийПользователь,"ОсновнойКаталогФайлов"),ИмяФайлаВложения); // изменения программиста начало
Возврат;
КонецЕсли;
-
4. Текст модуля _управлениеПочтой:
Процедура ОтправитьПечатнуюФормуВнешнимТранспортом (ПолеТабличногоДокумента, КаталогФормирования="",имяФайлаВложения) Экспорт
Расширение="xls";
Файл = Новый Файл(КаталогФормирования);
Если Файл.Существует() Тогда
ИмяФайла = КаталогФормирования;
Иначе
ИмяФайла = КаталогВременныхФайлов();
КонецЕсли;
Если Не ПустаяСтрока(ИмяФайла) Тогда
Если Не Прав(ИмяФайла, 1) = "\" Тогда
ИмяФайла = ИмяФайла + "\";
КонецЕсли;
КонецЕсли;
ОтносительноеИмя =КорректировкаНаименования(имяФайлаВложения, ложь);
ИмяФайлаБезРасширения = ИмяФайла + ОтносительноеИмя;
ИмяФайла = ИмяФайлаБезРасширения + ".xls";
ПолеТабличногоДокумента.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS97);
Почта=Новый Почта;
Почта.Подключиться();
Сообщ=Новый ПочтовоеСообщение;
Сообщ.Тема=имяФайлаВложения;
Сообщ.Текст="";
ВыбФайл=Новый Файл(ИмяФайла);
Если ВыбФайл.Существует() Тогда
Данные=Новый ДвоичныеДанные(ИмяФайла);
Сообщ.Вложения.Добавить(Данные,ВыбФайл.Имя);
КонецЕсли;
//УчетнаяЗапись=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь,"ОсновнаяУчетнаяЗапись");
//Сообщ.Получатели.Добавить(УчетнаяЗапись.АдресЭлектроннойПочты);
Почта.Послать(Сообщ,);
Почта.Отключиться();
Попытка
УдалитьФайлы(ИмяФайла);
//Сообщить("Удален файл "+ИмяФайла);
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
Функция КорректировкаНаименования(Знач ИсходнаяСтрока, Выводитьсообщения=Истина)
Наименование=СокрЛП(ИсходнаяСтрока);
ДлиннаНаим=СтрДлина(Наименование);
СписокЗаменяемыхимволов=новый СписокЗначений;
Если ДлиннаНаим=0 Тогда
Сообщение="Не заполнена проверяемая строка!";
#Если Клиент Тогда
Если Выводитьсообщения Тогда
Сообщить(Сообщение);
КонецЕсли;
#КонецЕсли
КонецЕсли;
Для i=0 По ДлиннаНаим-1 Цикл
Стр=Прав(Наименование,ДлиннаНаим-i);
// руск. алф. 192- 255 англ. алф. мал. 65-90 англ. алф. бол. 97-122 пробел=32 цифры АSCI дес.
Если (((КодСимвола(Стр)>1039) И (КодСимвола(Стр)<1106)) ИЛИ ((КодСимвола(Стр)>64) И (КодСимвола(Стр)<94)) ИЛИ ((КодСимвола(Стр)>96) И (КодСимвола(Стр)<123)) ИЛИ ((КодСимвола(Стр)>47) И (КодСимвола(Стр)<58)) И (КодСимвола(Стр)<>32)) Тогда
Иначе
СписокЗаменяемыхимволов.Добавить(Лев(Стр,1));
КонецЕсли;
КонецЦикла;
Для каждого ЭлементСписка Из СписокЗаменяемыхимволов Цикл
Если ЭлементСписка.Значение=" " Тогда
Наименование=СтрЗаменить(Наименование,ЭлементСписка.Значение,"_");
Сообщение="В наименование колонки "+ИсходнаяСтрока+" встречается недопустимый символ (пробел) "+ЭлементСписка.Значение+", он будет заменен на '_'";
#Если Клиент Тогда
Если Выводитьсообщения Тогда
Сообщить(Сообщение);
КонецЕсли;
#КонецЕсли
Иначе
Наименование=СтрЗаменить(Наименование,ЭлементСписка.Значение,"");
Сообщение="В наименование колонки "+ИсходнаяСтрока+" встречается недопустимый символ "+ЭлементСписка.Значение+", он будет удален";
#Если Клиент Тогда
Если Выводитьсообщения Тогда
Сообщить(Сообщение);
КонецЕсли;
#КонецЕсли
КонецЕсли
КонецЦикла;
Возврат Наименование;
КонецФункции