Группа: Пользователи
Сообщений: 38
Спасибо сказали: 1 раз
Рейтинг: 0
1C 8.2 УТ 10.3
Если отправлять письмо из ФормыЭлемена Контрагента, то все отлично. В Кому вписывается адрес из представления Адрес электронной почты контрагента для обмена электронными документами. Причем отлично работает как на встроенном клиенте, так и на внешнем (outlook) Если нужно отправить письмо из документа, то тут проблема. Пустое поля. Прошарил инет: есть способ, который подходит для УП 10.3, но не подходит для нас, т.к у нас своя форма печати, в ней процедура:
Процедура ДействияФормыОтправитьПоEmail(Кнопка) РасширениеФайла = ""; ТипПересылаемогоФайла = Неопределено; Если Кнопка.Имя = "ОтправитьКакMXL" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL; РасширениеФайла = ".mxl"; ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML; РасширениеФайла = ".html"; ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97; РасширениеФайла = ".xls"; ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF; РасширениеФайла = ".pdf"; Иначе Возврат; КонецЕсли;
НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_"); // сохраним ПФ во временный каталог ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла; Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла); КонецЕсли;
Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы); УправлениеЭлектроннойПочтой.ОткрытьПисьмоПочтовогоКлиентаОперационнойСистемы(СтруктураПараметров); Иначе СтруктураНовогоПисьма = Новый Структура(); СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы); СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,,); Если СтруктураПисьма = Неопределено Тогда Возврат КонецЕсли; ВложенияПисьмаТЗ = СтруктураПисьма.Форма.ВложенияПисьмаТЗ.Добавить(); Файл = Новый Файл(ИмяФайлаСообщения); ВложенияПисьмаТЗ.ИмяФайла = Файл.Имя; ВложенияПисьмаТЗ.Наименование = ОбъектПредставление; Попытка ВложенияПисьмаТЗ.Данные = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаСообщения), Новый СжатиеДанных); Исключение ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки()); КонецПопытки; УдалитьФайлы(ИмяФайлаСообщения); КонецЕсли; КонецПроцедуры // ДействияФормыОтправитьПоEmail()
Все великолепно работает, кроме вышеописанной проблемки.
Поковыряв, своими неопытными рученками нашел где формируется адрес:
Общий модуль УправлениеЭлектроннойПочтой:
// Функция определяет адрес электронной почты объекта // // Параметры // Объект - СправочникСсылка, для которого необходимо определить адрес электронной почты // Функция ОпределитьАдресПолучателя(Объект) Экспорт
Адрес = ""; ТаблицаЗапроса = Запрос.Выполнить().Выгрузить(); ТаблицаЗапроса.Индексы.Добавить("ЗначениеПоУмолчанию"); Если ТаблицаЗапроса.Количество() > 0 Тогда СтрокаПоУмолчанию = ТаблицаЗапроса.Найти(Истина, "ЗначениеПоУмолчанию"); Если СтрокаПоУмолчанию <> Неопределено Тогда Адрес = СтрокаПоУмолчанию.Представление; Иначе Адрес = ТаблицаЗапроса[0].Представление; КонецЕсли; КонецЕсли;
Возврат Адрес;
КонецФункции
Пожалуйста, помогите, изменить запрос так, чтобы вписывался адрес электронки текущего Контрагента из заказа покупателя. И если возможно, и из РеализацииТоваровУслуг. А если возможно, то Ваще из любого документа имеющего Контрагента.
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0
Мне кажется, что использовать функцию НаписатьПисьмо не получится, т.к. она заточена под типовые документы, вам надо дорабатывать и её, или писать свою (или нет?). Адрес можно получить так:
Группа: Основатель
Сообщений: 13981
Из: Киев
Спасибо сказали: 4549 раз
Рейтинг: 3678.1
Я наверное что-то не понял. Откуда вы сейчас вызываете функцию ОпределитьАдресПолучателя() ? В том контексте, откуда она вызывается есть ссылка на документ (конкретный заказ или реализация)? Я полагаю, что должна быть, поэтому нужно просто вызвать функцию с нужным параметром, вроде:
Vzonder @ Вчера, 22:50
, УТ для Украины 2.3. Будет работать только если в контексте формы отправки E-mail есть ссылка на документа или контрагента. Если у Вас отправка происходит из общей формы "ПечатьДокументов", то не взлетит. Я давненько такое допиливал под УТП. Пришлось допиливать код в 3 или 4-х участках конфигурации.
Процедура ДействияФормыОтправитьПоEmail(Кнопка) РасширениеФайла = ""; ТипПересылаемогоФайла = Неопределено; Если Кнопка.Имя = "ОтправитьКакMXL" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL; РасширениеФайла = ".mxl"; ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML; РасширениеФайла = ".html"; ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97; РасширениеФайла = ".xls"; ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF; РасширениеФайла = ".pdf"; Иначе Возврат; КонецЕсли;
НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_"); // сохраним ПФ во временный каталог ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла; Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла); КонецЕсли;
//Flexy Адрес = ОпределитьАдресПолучателя(ДокументСсылка.Контрагент); //--
Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы);
УправлениеЭлектроннойПочтой.ОткрытьПисьмоПочтовогоКлиентаОперационнойСистемы(СтруктураПараметров); Иначе СтруктураНовогоПисьма = Новый Структура(); СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы);
Группа: Пользователи
Сообщений: 38
Спасибо сказали: 1 раз
Рейтинг: 0
Flexy @ Сегодня, 12:01
,
Насколько я могу понимать, наименование контрагента имеется в табличной части, в представлении. Возможно его от туда вытащить? В макете он выражен так: <ТекстПокупатель> <ПредставлениеПолучателя> На всякий - прилагаю весть код:
/////////////////////////////////////////////////////////////////////////////// // ПЕРЕМЕННЫЕ МОДУЛЯ Перем Объект Экспорт; // Объект, который печатается Перем ОбъектПредставление Экспорт; // Представление объекта. Используется для формирования заголовка, имен сохраняемых файлов и т.п. Если не задано, то будет построено по "Объект" Перем ДополнительноКПредставлению Экспорт; // Строка, которая будет выведена дополнительно в конец заголовка формы Перем Принтеры; // Список установленных в системе принтеров Перем ИмяТекПринтера; // Имя принтера (как оно установлено в системе) на который будет осуществляться вывод
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
Функция ПолучитьПредставление(Объект)
//+CRM Если Объект = Неопределено Тогда Возврат ""; КонецЕсли; //-CRM
// Определим тип переданного нам объекта (для всех "объектов" получим ссылки на них) Попытка ТипЗнчОбъекта = ТипЗнч(Объект.Ссылка); Исключение ТипЗнчОбъекта = ТипЗнч(Объект); КонецПопытки;
// Определим представление в зависмоти от типа переданного нам объекта Представление = ""; Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнчОбъекта) Тогда Представление = дкПолучитьПредставление(Объект); ИначеЕсли Справочники.ТипВсеСсылки().СодержитТип(ТипЗнчОбъекта) Тогда Представление = Объект.Метаданные().Синоним; КонецЕсли;
Возврат Представление; КонецФункции
// Приводит произвольную строку к идентификатору, который затем можно использовать как ключ структуры // Преобразование выполняется разрушающим способом (обратное преобразование невозможно) Функция обСтрокуКID(Стр) Экспорт Ст=обСтрокаПоМаске(Стр,"_0123456789 |ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz |АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя"); Возврат ?(Найти("0123456789",Лев(Ст,1))>0,"_"+Ст,Ст); КонецФункции // обСтрокуКID()
// Функция возвращает строку символов, полученную из исходной <Стр> GOAN // заменой всех символов, не входящих в <Маска> на символ <Симв> Функция обСтрокаПоМаске(Стр,Маска="",Симв="") Экспорт Ст=""; Если ПустаяСтрока(Маска) Тогда Возврат Ст; КонецЕсли; Для Сч=1 По СтрДлина(Стр) Цикл Сим=Сред(Стр,Сч,1); Если Найти(Маска,Сим)>0 Тогда Ст=Ст+Сим; Иначе Ст=Ст+Симв; КонецЕсли; КонецЦикла; Возврат Ст; КонецФункции // обСтрокаПоМаске
// Возвращает представление для документа // Параметры // ЭтотОбъект - <ДокументСсылка> или <ДокументОбъект> // АльтернативноеНазвание - Строка, используется, если хотим заменить синоним документа // Возвращаемое значение: // Строка - Строка представления документа Функция дкПолучитьПредставление(ЭтотОбъект, АльтернативноеНазвание = "") Экспорт Попытка ТекстПредставления=?(ПустаяСтрока(АльтернативноеНазвание), ЭтотОбъект.Метаданные().Синоним, АльтернативноеНазвание)+" № "+СокрЛП(ЭтотОбъект.Номер)+" от "+Формат(ЭтотОбъект.Дата,"ДФ=dd.MM.yyyy"); Исключение ТекстПредставления="Неправильный тип объекта!"; КонецПопытки; Возврат ТекстПредставления; КонецФункции // ПолучитьПредставление()
//////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ - ДЕЙСТВИЯ КОМАНДНЫХ ПАНЕЛЕЙ ФОРМЫ
// Процедура отправляет отчет по электронной почте в виде табличного документа mxl Процедура ДействияФормыОтправитьПоEmail(Кнопка) РасширениеФайла = ""; ТипПересылаемогоФайла = Неопределено; Если Кнопка.Имя = "ОтправитьКакMXL" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL; РасширениеФайла = ".mxl"; ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML; РасширениеФайла = ".html"; ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97; РасширениеФайла = ".xls"; ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF; РасширениеФайла = ".pdf"; Иначе Возврат; КонецЕсли; НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_");
// сохраним ПФ во временный каталог ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла; Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла); КонецЕсли; // //+CRM Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы);
СтруктураНовогоПисьма = Новый Структура(); СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы);
СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,,); Если СтруктураПисьма = Неопределено Тогда Возврат КонецЕсли; ВложенияПисьмаТЗ = СтруктураПисьма.Форма.ВложенияПисьмаТЗ.Добавить(); Файл = Новый Файл(ИмяФайлаСообщения); ВложенияПисьмаТЗ.ИмяФайла = Файл.Имя; ВложенияПисьмаТЗ.Наименование = ОбъектПредставление; Попытка ВложенияПисьмаТЗ.Данные = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаСообщения), Новый СжатиеДанных); Исключение ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки()); КонецПопытки; УдалитьФайлы(ИмяФайлаСообщения); КонецЕсли; //-CRM
КонецПроцедуры // ДействияФормыОтправитьПоEmail()
// Процедура сохраняет табличный документ в формате MXL под введенным пользователем именем файла Процедура ДействияФормыСохранитьКакMXL(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение табличного документа"; Диалог.Фильтр = "Табличный документ (*.mxl)|*.mxl"; Диалог.Расширение = "mxl"; Диалог.ПолноеИмяФайла = СтрЗаменить(ОбъектПредставление,".","_"); Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойКаталогФайлов"); Если Диалог.Выбрать() Тогда Если НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла) Тогда ЭлементыФормы.ТабличныйДокумент.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.MXL); КонецЕсли; КонецЕсли;
КонецПроцедуры
// Процедура сохраняет табличный документ в формате HTML под введенным пользователем именем файла Процедура ДействияФормыСохранитьКакHTML(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение веб-страницы"; Диалог.Фильтр = "Веб-страница (*.html)|*.html"; Диалог.Расширение = "html"; Диалог.ПолноеИмяФайла = СтрЗаменить(ОбъектПредставление,".","_"); Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойКаталогФайлов"); Если Диалог.Выбрать() Тогда Если НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла) Тогда ЭлементыФормы.ТабличныйДокумент.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.HTML); КонецЕсли; КонецЕсли;
КонецПроцедуры // ДействияФормыСохранитьКакHTML()
Процедура ДействияФормыСохранитьКакXLS(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение документа Excel"; Диалог.Фильтр = "Документ Excel (*.xls)|*.xls"; Диалог.Расширение = "xls"; Диалог.ПолноеИмяФайла = СтрЗаменить(ОбъектПредставление,".","_"); Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойКаталогФайлов"); Если Диалог.Выбрать() Тогда Если НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла) Тогда ЭлементыФормы.ТабличныйДокумент.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.XLS97); КонецЕсли; КонецЕсли;
КонецПроцедуры
// Процедура сохраняет табличный документ в формате PDF под введенным пользователем именем файла Процедура ДействияФормыСохранитьКакPDF(Кнопка)
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Заголовок = "Сохранение документа PDF"; Диалог.Фильтр = "Документ PDF (*.pdf)|*.pdf"; Диалог.Расширение = "pdf"; Диалог.ПолноеИмяФайла = СтрЗаменить(ОбъектПредставление,".","_"); Диалог.Каталог = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"),"ОсновнойКаталогФайлов"); Если Диалог.Выбрать() Тогда Если НЕ ПустаяСтрока(Диалог.ПолноеИмяФайла) Тогда ЭлементыФормы.ТабличныйДокумент.Записать(Диалог.ПолноеИмяФайла, ТипФайлаТабличногоДокумента.PDF); КонецЕсли; КонецЕсли; КонецПроцедуры
// Процедура печатает табличный документ на выбраном принтере Процедура ОсновныеДействияФормыПечать(Кнопка) ЭлементыФормы.ТабличныйДокумент.ИмяПринтера = ИмяТекПринтера; ЭкземпляровНаСтранице=0;//обПраво("КоличествоСтраницНаЛисте",глПрава); Если ЭкземпляровНаСтранице<>0 И ЭкземпляровНаСтранице<>1 И ЭкземпляровНаСтранице<>2 Тогда ЭкземпляровНаСтранице=0; КонецЕсли; ЭлементыФормы.ТабличныйДокумент.ЭкземпляровНаСтранице=ЭкземпляровНаСтранице; ЭлементыФормы.ТабличныйДокумент.Напечатать(НЕ ПустаяСтрока(ИмяТекПринтера)); ЧислоКопий = ЭлементыФормы.ТабличныйДокумент.КоличествоЭкземпляров; КонецПроцедуры
// Получает список принтеров установленных в системе и предлагает пользователю // выбрать принтер для печати Процедура ОсновныеДействияФормыСписокПринтеров(Кнопка) // Посмотрим был ли ранее составлен список принтеров, которые установлены в системе, если нет, тогда попытаемся получить его Если ТипЗнч(Принтеры) <> Тип("СписокЗначений") Тогда Принтеры = Новый СписокЗначений; Состояние("Составляется список принтеров. Подождите."); Попытка Locator = Новый COMОбъект("WbemScripting.SWbemLocator"); Сервисы = Locator.ConnectServer("."); Объекты = Сервисы.InstancesOf("Win32_Printer");
// Теперь переберем все принтеры системы Для каждого Принтер из Объекты Цикл ИмяПринтера = Принтер.Name; Пока Найти(ИмяПринтера,"\") > 0 Цикл ИмяПринтера = Сред(ИмяПринтера, Найти(ИмяПринтера,"\")+1); КонецЦикла; ИмяПринтера = СокрЛП(ИмяПринтера);
// Предложим пользователю выбрать один из принтеров Результат = ВыбратьИзМеню(Принтеры,ЭлементыФормы.кнВспомогательная); Если Результат = Неопределено Тогда Возврат; КонецЕсли;
// Установим пометку у "текушего" принтера в списке Принтеры.ЗаполнитьПометки(ЛОЖЬ); Результат.Пометка = ИСТИНА;
// Обработаем результат выбора ИмяТекПринтера = ?(Результат.Значение = "ДиалогВыбораПринтера","",Результат.Значение); ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст = "Печать"+?(ПустаяСтрока(ИмяТекПринтера),""," на <"+Результат.Представление+">");
// Произведем эмуляцию нажатия клавишь. По ходу дела это единственный способ открыть окно просмотра печати WHSShell = Новый COMОбъект("WScript.Shell"); WHSShell.SendKeys("%"); WHSShell.SendKeys("~"); WHSShell.SendKeys("{DOWN 10}"); WHSShell.SendKeys("~"); КонецПроцедуры
//////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ, ВЫЗЫВАЕМЫЕ ИЗ ЭЛЕМЕНТОВ ФОРМЫ
// "Вспомним" о том, на каком принтере в последний раз печатали ИмяТекПринтера = ЭлементыФормы.ТабличныйДокумент.ИмяПринтера; ПредставлениеТекПринтера = ИмяТекПринтера; Пока Найти(ПредставлениеТекПринтера,"\") > 0 Цикл ПредставлениеТекПринтера = Сред(ПредставлениеТекПринтера, Найти(ПредставлениеТекПринтера,"\")+1); КонецЦикла; ПредставлениеТекПринтера = СокрЛП(ПредставлениеТекПринтера);
// Допишем имя текущего принтера к кнопке "Печать" и подготовим вспомогательную кнопку ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст = "Печать" + ?(ПустаяСтрока(ИмяТекПринтера),""," на <"+ПредставлениеТекПринтера+">"); ЭлементыФормы.кнВспомогательная.Заголовок = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст; ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево - 1; // необходимо чтобы установилать "автоширина" кнопки ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево + 1 - (ЭлементыФормы.кнВспомогательная.Ширина - 46) + 1;
// Если табличный документ в режиме "Только просмотр", то сделаем серыми несколько кнопок ДоступностьКнопок = НЕ ЭлементыФормы.ТабличныйДокумент.ТолькоПросмотр; // ЭлементыФормы.ДействияФормы.Кнопки.ОткрытьВExcel .Доступность = ДоступностьКнопок; ЭлементыФормы.ДействияФормы.Кнопки.СохранитьКакMXL .Доступность = ДоступностьКнопок; ЭлементыФормы.ДействияФормы.Кнопки.СохранитьКакHTML.Доступность = ДоступностьКнопок; Для каждого ТекКнопка Из ЭлементыФормы.ДействияФормы.Кнопки.ОтправитьПоEmail.Кнопки Цикл ТекКнопка.Доступность = ДоступностьКнопок; КонецЦикла; КонецПроцедуры
Процедура ДействияФормыОтправитьПоEmail(Кнопка) РасширениеФайла = ""; ТипПересылаемогоФайла = Неопределено; Если Кнопка.Имя = "ОтправитьКакMXL" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL; РасширениеФайла = ".mxl"; ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML; РасширениеФайла = ".html"; ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97; РасширениеФайла = ".xls"; ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF" Тогда ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF; РасширениеФайла = ".pdf"; Иначе Возврат; КонецЕсли;
НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_"); // сохраним ПФ во временный каталог ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла; Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла); КонецЕсли;
// Flexy Адрес = ""; ЭтоДокумент = ЗначениеЗаполнено(Объект) И Метаданные.Документы.Содержит(Объект.Метаданные()); Если ЭтоДокумент И ОбщегоНазначения.ЕстьРеквизитДокумента("Контрагент", Объект.Метаданные()) Тогда Адрес = ОпределитьАдресПолучателя(Объект.Контрагент); КонецЕсли; //--
Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы);
УправлениеЭлектроннойПочтой.ОткрытьПисьмоПочтовогоКлиентаОперационнойСистемы(СтруктураПараметров); Иначе СтруктураНовогоПисьма = Новый Структура(); СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы);
Группа: Пользователи
Сообщений: 38
Спасибо сказали: 1 раз
Рейтинг: 0
Flexy @ Сегодня, 17:20
,
{ОбщаяФорма.ПечатьДокументов.Форма(120,17)}: Процедура или функция с указанным именем не определена (ОпределитьАдресПолучателя) Адрес = <<?>>ОпределитьАдресПолучателя(Объект.Контрагент); (Проверка: Толстый клиент (обычное приложение))
{ОбщаяФорма.ПечатьДокументов.Форма(120,17)}: Процедура или функция с указанным именем не определена (ОпределитьАдресПолучателя) Адрес = <<?>>ОпределитьАдресПолучателя(Объект.Контрагент); (Проверка: Толстый клиент (обычное приложение))
Ну дык исправьте на:
Адрес = УправлениеЭлектроннойПочтой.ОпределитьАдресПолучателя(Объект.Контрагент);
Все отлично заработало!!! УРА. Простите меня за тупость. Я новичок нулевого уровня... Конфигуратор открыл впервые в конце декабря. Пришлось, кризис и сокращения и вот я поневоле. пытаюсь облегчить жизнь сотрудникам в отделе...
Группа: Пользователи
Сообщений: 38
Спасибо сказали: 1 раз
Рейтинг: 0
Vzonder @ Сегодня, 21:17
,
Получилось. Сделал по аналогии:
Копии = ""; ЭтоДокумент = ЗначениеЗаполнено(Объект) И Метаданные.Документы.Содержит(Объект.Метаданные()); Если ЭтоДокумент И ОбщегоНазначения.ЕстьРеквизитДокумента("Организация", Объект.Метаданные()) Тогда Копии = УправлениеЭлектроннойПочтой.ОпределитьАдресПолучателя(Объект.Организация);
КонецЕсли;
И соответственно:
спКипии = Новый СписокЗначений; спКипии.Добавить(Копии, "Обязательная Копия обратно!!!");
СтруктураНовогоПисьма.Вставить("Копии", спКипии);
Все работает великолепно, и тут выясняется, что счета, из ЗаказПокупателя - прекрасно проставляет А Торг12 из РеализацияТоваровУслуг - нет ((((
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!