Если отправлять письмо из ФормыЭлемена Контрагента, то все отлично. В Кому вписывается адрес из представления Адрес электронной почты контрагента для обмена электронными документами. Причем отлично работает как на встроенном клиенте, так и на внешнем (outlook) Если нужно отправить письмо из документа, то тут проблема. Пустое поля. Прошарил инет: есть способ, который подходит для УП 10.3, но не подходит для нас, т.к у нас своя форма печати, в ней процедура:
Процедура ДействияФормыОтправитьПоEmail(Кнопка)
РасширениеФайла = "";
ТипПересылаемогоФайла = Неопределено;
Если Кнопка.Имя = "ОтправитьКакMXL"Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL;
РасширениеФайла = ".mxl";
ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML"Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML;
РасширениеФайла = ".html";
ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS"Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97;
РасширениеФайла = ".xls";
ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF"Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF;
РасширениеФайла = ".pdf";
ИначеВозврат;
КонецЕсли;
НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_");
// сохраним ПФ во временный каталог
ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла;
Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда
ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла);
КонецЕсли;
ЕслиНЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы);
УправлениеЭлектроннойПочтой.ОткрытьПисьмоПочтовогоКлиентаОперационнойСистемы(СтруктураПараметров);
Иначе
СтруктураНовогоПисьма = Новый Структура();
СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы);
СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,,);
Если СтруктураПисьма = НеопределеноТогдаВозвратКонецЕсли;
ВложенияПисьмаТЗ = СтруктураПисьма.Форма.ВложенияПисьмаТЗ.Добавить();
Файл = Новый Файл(ИмяФайлаСообщения);
ВложенияПисьмаТЗ.ИмяФайла = Файл.Имя;
ВложенияПисьмаТЗ.Наименование = ОбъектПредставление;
Попытка
ВложенияПисьмаТЗ.Данные = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаСообщения), Новый СжатиеДанных);
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
УдалитьФайлы(ИмяФайлаСообщения);
КонецЕсли;
КонецПроцедуры// ДействияФормыОтправитьПоEmail()
Все великолепно работает, кроме вышеописанной проблемки.
Поковыряв, своими неопытными рученками нашел где формируется адрес:
Общий модуль УправлениеЭлектроннойПочтой:
// Функция определяет адрес электронной почты объекта//// Параметры// Объект - СправочникСсылка, для которого необходимо определить адрес электронной почты//Функция ОпределитьАдресПолучателя(Объект)Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Объект", Объект);
Запрос.УстановитьПараметр("Тип" , Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
Запрос.Текст = "
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КонтактнаяИнформация.Представление,
| КонтактнаяИнформация.ЗначениеПоУмолчанию
|ИЗ
| РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
|ГДЕ
| КонтактнаяИнформация.Объект = &Объект
| И
| КонтактнаяИнформация.Тип = &Тип
|";
Адрес = "";
ТаблицаЗапроса = Запрос.Выполнить().Выгрузить();
ТаблицаЗапроса.Индексы.Добавить("ЗначениеПоУмолчанию");
Если ТаблицаЗапроса.Количество() > 0Тогда
СтрокаПоУмолчанию = ТаблицаЗапроса.Найти(Истина, "ЗначениеПоУмолчанию");
Если СтрокаПоУмолчанию <> НеопределеноТогда
Адрес = СтрокаПоУмолчанию.Представление;
Иначе
Адрес = ТаблицаЗапроса[0].Представление;
КонецЕсли;
КонецЕсли;
Возврат Адрес;
КонецФункции
Пожалуйста, помогите, изменить запрос так, чтобы вписывался адрес электронки текущего Контрагента из заказа покупателя. И если возможно, и из РеализацииТоваровУслуг. А если возможно, то Ваще из любого документа имеющего Контрагента.
Про1С-ник
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0
Мне кажется, что использовать функцию НаписатьПисьмо не получится, т.к. она заточена под типовые документы, вам надо дорабатывать и её, или писать свою (или нет?). Адрес можно получить так:
У нас здесь своя атмосфера...
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4613 раз
Рейтинг: 3750.1
Я наверное что-то не понял. Откуда вы сейчас вызываете функцию ОпределитьАдресПолучателя() ? В том контексте, откуда она вызывается есть ссылка на документ (конкретный заказ или реализация)? Я полагаю, что должна быть, поэтому нужно просто вызвать функцию с нужным параметром, вроде:
Танцор с Бубном
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 232 раз
Рейтинг: 0
Vzonder @ Вчера, 22:50
, УТ для Украины 2.3. Будет работать только если в контексте формы отправки E-mail есть ссылка на документа или контрагента. Если у Вас отправка происходит из общей формы "ПечатьДокументов", то не взлетит. Я давненько такое допиливал под УТП. Пришлось допиливать код в 3 или 4-х участках конфигурации.
Процедура ДействияФормыОтправитьПоEmail(Кнопка)
РасширениеФайла = "";
ТипПересылаемогоФайла = Неопределено;
Если Кнопка.Имя = "ОтправитьКакMXL"Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.MXL;
РасширениеФайла = ".mxl";
ИначеЕсли Кнопка.Имя = "ОтправитьКакHTML"Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.HTML;
РасширениеФайла = ".html";
ИначеЕсли Кнопка.Имя = "ОтправитьКакXLS"Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.XLS97;
РасширениеФайла = ".xls";
ИначеЕсли Кнопка.Имя = "ОтправитьКакPDF"Тогда
ТипПересылаемогоФайла = ТипФайлаТабличногоДокумента.PDF;
РасширениеФайла = ".pdf";
ИначеВозврат;
КонецЕсли;
НаименованиеПечатнойФормы = СтрЗаменить(ОбъектПредставление,".","_");
// сохраним ПФ во временный каталог
ИмяФайлаСообщения = КаталогВременныхФайлов() + НаименованиеПечатнойФормы + РасширениеФайла;
Если ТипЗнч(ТипПересылаемогоФайла) = Тип("ТипФайлаТабличногоДокумента") Тогда
ЭлементыФормы.ТабличныйДокумент.Записать(ИмяФайлаСообщения, ТипПересылаемогоФайла);
КонецЕсли;
//Flexy
Адрес = ОпределитьАдресПолучателя(ДокументСсылка.Контрагент);
//--ЕслиНЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Тема", НаименованиеПечатнойФормы);
// Flexy
СтруктураПараметров.Вставить("Адрес", Адрес);
//--
УправлениеЭлектроннойПочтой.ОткрытьПисьмоПочтовогоКлиентаОперационнойСистемы(СтруктураПараметров);
Иначе
СтруктураНовогоПисьма = Новый Структура();
СтруктураНовогоПисьма.Вставить("Тема",НаименованиеПечатнойФормы);
// Flexy
спПолучатели = Новый СписокЗначений;
спПолучатели.Добавить(Адрес, "Адрес");
СтруктураНовогоПисьма.Вставить("Кому", спПолучатели);
//--
СтруктураПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,,);
Если СтруктураПисьма = НеопределеноТогдаВозвратКонецЕсли;
ВложенияПисьмаТЗ = СтруктураПисьма.Форма.ВложенияПисьмаТЗ.Добавить();
Файл = Новый Файл(ИмяФайлаСообщения);
ВложенияПисьмаТЗ.ИмяФайла = Файл.Имя;
ВложенияПисьмаТЗ.Наименование = ОбъектПредставление;
Попытка
ВложенияПисьмаТЗ.Данные = Новый ХранилищеЗначения(Новый ДвоичныеДанные(ИмяФайлаСообщения), Новый СжатиеДанных);
Исключение
ОбщегоНазначения.СообщитьОбОшибке(ОписаниеОшибки());
КонецПопытки;
УдалитьФайлы(ИмяФайлаСообщения);
КонецЕсли;
КонецПроцедуры// ДействияФормыОтправитьПоEmail()
Насколько я могу понимать, наименование контрагента имеется в табличной части, в представлении. Возможно его от туда вытащить? В макете он выражен так: <ТекстПокупатель> <ПредставлениеПолучателя> На всякий - прилагаю весть код:
///////////////////////////////////////////////////////////////////////////////// ПЕРЕМЕННЫЕ МОДУЛЯПерем Объект Экспорт; // Объект, который печатаетсяПерем ОбъектПредставление Экспорт; // Представление объекта. Используется для формирования заголовка, имен сохраняемых файлов и т.п. Если не задано, то будет построено по "Объект"Перем ДополнительноКПредставлению Экспорт; // Строка, которая будет выведена дополнительно в конец заголовка формыПерем Принтеры; // Список установленных в системе принтеровПерем ИмяТекПринтера; // Имя принтера (как оно установлено в системе) на который будет осуществляться вывод////////////////////////////////////////////////////////////////////////////////// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯФункция ПолучитьПредставление(Объект)//+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);
КонецЦикла;
ИмяПринтера = СокрЛП(ИмяПринтера);
Принтеры.Добавить(Принтер.Name,ИмяПринтера,(Принтер.Name=ИмяТекПринтера));
КонецЦикла;
ИсключениеКонецПопытки;
Принтеры.Вставить(0,"ДиалогВыбораПринтера","Диалог выбора принтера",ПустаяСтрока(ИмяТекПринтера));
Состояние();
КонецЕсли;
// Предложим пользователю выбрать один из принтеров
Результат = ВыбратьИзМеню(Принтеры,ЭлементыФормы.кнВспомогательная);
Если Результат = НеопределеноТогдаВозврат;
КонецЕсли;
// Установим пометку у "текушего" принтера в списке
Принтеры.ЗаполнитьПометки(ЛОЖЬ);
Результат.Пометка = ИСТИНА;
// Обработаем результат выбора
ИмяТекПринтера = ?(Результат.Значение = "ДиалогВыбораПринтера","",Результат.Значение);
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст = "Печать"+?(ПустаяСтрока(ИмяТекПринтера),""," на <"+Результат.Представление+">");
// Передвинем вспомогательную кнопку
СтараяШирина = ЭлементыФормы.кнВспомогательная.Ширина;
ЭлементыФормы.кнВспомогательная.Заголовок = "";
ЭлементыФормы.кнВспомогательная.Ширина = 10;
ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево - 1; // необходимо чтобы установилать "автоширина" кнопки
ЭлементыФормы.кнВспомогательная.Заголовок = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст;
ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево + 1; // необходимо чтобы установилать "автоширина" кнопки
ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево - (ЭлементыФормы.кнВспомогательная.Ширина - СтараяШирина);
// Напечатаем
ОсновныеДействияФормыПечать(Неопределено);
КонецПроцедуры// Открывает окно "Предварительный просмотр"Процедура ОсновныеДействияФормыПредварительныйПросмотр(Кнопка)
ТекущийЭлемент = ЭлементыФормы.ТабличныйДокумент;
// Произведем эмуляцию нажатия клавишь. По ходу дела это единственный способ открыть окно просмотра печати
WHSShell = Новый COMОбъект("WScript.Shell");
WHSShell.SendKeys("%");
WHSShell.SendKeys("~");
WHSShell.SendKeys("{DOWN 10}");
WHSShell.SendKeys("~");
КонецПроцедуры////////////////////////////////////////////////////////////////////////////////// ОБРАБОТЧИКИ СОБЫТИЙ, ВЫЗЫВАЕМЫЕ ИЗ ЭЛЕМЕНТОВ ФОРМЫПроцедура ЧислоКопийПриИзменении(Элемент)
ЭлементыФормы.ТабличныйДокумент.КоличествоЭкземпляров = ЧислоКопий;
КонецПроцедуры////////////////////////////////////////////////////////////////////////////////// ПРОЦЕДУРЫ - ОБРАБОТЧИКИ СОБЫТИЙ ФОРМЫПроцедура ПриОткрытии()// Сформеруем заголовок формыЕсли ПустаяСтрока(ОбъектПредставление) Тогда
ОбъектПредставление = ПолучитьПредставление(Объект);
КонецЕсли;
Заголовок = "Печать <" + ОбъектПредставление + "> " + ДополнительноКПредставлению;
// Восстановим ранее сохраненные настройки//ИмяСохраненияПараметров = "ПечатнаяФормаДокументов_" + обСтрокуКID(СтрЗаменить(ОбъектПредставление," ","_")) + "_" + обСтрокуКID(СтрЗаменить(ДополнительноКПредставлению," ","_"));//ЭлементыФормы.ТабличныйДокумент.ИмяПараметровПечати = ИмяСохраненияПараметров;
ЧислоКопий = ЭлементыФормы.ТабличныйДокумент.КоличествоЭкземпляров;
// "Вспомним" о том, на каком принтере в последний раз печатали
ИмяТекПринтера = ЭлементыФормы.ТабличныйДокумент.ИмяПринтера;
ПредставлениеТекПринтера = ИмяТекПринтера;
Пока Найти(ПредставлениеТекПринтера,"\") > 0Цикл
ПредставлениеТекПринтера = Сред(ПредставлениеТекПринтера, Найти(ПредставлениеТекПринтера,"\")+1);
КонецЦикла;
ПредставлениеТекПринтера = СокрЛП(ПредставлениеТекПринтера);
// Допишем имя текущего принтера к кнопке "Печать" и подготовим вспомогательную кнопку
ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст = "Печать" + ?(ПустаяСтрока(ИмяТекПринтера),""," на <"+ПредставлениеТекПринтера+">");
ЭлементыФормы.кнВспомогательная.Заголовок = ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Печать.Текст;
ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево - 1; // необходимо чтобы установилать "автоширина" кнопки
ЭлементыФормы.кнВспомогательная.Лево = ЭлементыФормы.кнВспомогательная.Лево + 1 - (ЭлементыФормы.кнВспомогательная.Ширина - 46) + 1;
// Если табличный документ в режиме "Только просмотр", то сделаем серыми несколько кнопок
ДоступностьКнопок = НЕ ЭлементыФормы.ТабличныйДокумент.ТолькоПросмотр;
// ЭлементыФормы.ДействияФормы.Кнопки.ОткрытьВExcel .Доступность = ДоступностьКнопок;
ЭлементыФормы.ДействияФормы.Кнопки.СохранитьКакMXL .Доступность = ДоступностьКнопок;
ЭлементыФормы.ДействияФормы.Кнопки.СохранитьКакHTML.Доступность = ДоступностьКнопок;
Длякаждого ТекКнопка Из ЭлементыФормы.ДействияФормы.Кнопки.ОтправитьПоEmail.Кнопки Цикл
ТекКнопка.Доступность = ДоступностьКнопок;
КонецЦикла;
КонецПроцедуры////////////////////////////////////////////////////////////////////////////////// ИСПОЛНЯЕМАЯ ЧАСТЬ МОДУЛЯ
ОбъектПредставление = Неопределено;
ДополнительноКПредставлению = Неопределено;
Принтеры = Неопределено;
{ОбщаяФорма.ПечатьДокументов.Форма(120,17)}: Процедура или функция с указанным именем не определена (ОпределитьАдресПолучателя) Адрес = <<?>>ОпределитьАдресПолучателя(Объект.Контрагент); (Проверка: Толстый клиент (обычное приложение))
Танцор с Бубном
Группа: Местный
Сообщений: 1121
Из: Днепра
Спасибо сказали: 232 раз
Рейтинг: 0
Цитата(Vzonder @ 27.01.17, 16:35)
{ОбщаяФорма.ПечатьДокументов.Форма(120,17)}: Процедура или функция с указанным именем не определена (ОпределитьАдресПолучателя) Адрес = <<?>>ОпределитьАдресПолучателя(Объект.Контрагент); (Проверка: Толстый клиент (обычное приложение))
Ну дык исправьте на:
Адрес = УправлениеЭлектроннойПочтой.ОпределитьАдресПолучателя(Объект.Контрагент);
Все отлично заработало!!! УРА. Простите меня за тупость. Я новичок нулевого уровня... Конфигуратор открыл впервые в конце декабря. Пришлось, кризис и сокращения и вот я поневоле. пытаюсь облегчить жизнь сотрудникам в отделе...
Копии = "";
ЭтоДокумент = ЗначениеЗаполнено(Объект) И Метаданные.Документы.Содержит(Объект.Метаданные());
Если ЭтоДокумент И ОбщегоНазначения.ЕстьРеквизитДокумента("Организация", Объект.Метаданные()) Тогда
Копии = УправлениеЭлектроннойПочтой.ОпределитьАдресПолучателя(Объект.Организация);
КонецЕсли;
И соответственно:
спКипии = Новый СписокЗначений;
спКипии.Добавить(Копии, "Обязательная Копия обратно!!!");
СтруктураНовогоПисьма.Вставить("Копии", спКипии);
Все работает великолепно, и тут выясняется, что счета, из ЗаказПокупателя - прекрасно проставляет А Торг12 из РеализацияТоваровУслуг - нет ((((
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!