Имя: Пароль:
1C
1С v8
УТ 10.3 Отправка печатной формы документа по электронной почте
, ,
0 immurz
 
14.05.16
11:31
Конкретно, печатная форма заказа покупателя. Задача - подставлять автоматом почту контрагента. Откапал функцию которая отевечает за заполнение. Это -ОбщиеМодули.УправлениеЭлектроннойПочтой.НаписатьПисьмо()

В начале функции

...
    Перем СписокФайловВложений;
    Перем ГруппаУчетнойЗаписи;
    Перем Кому;
    Перем Копии;
...

И далее

...
    СтруктураНовогоПисьма.Свойство("Кому", Кому);
    Если ТипЗнч(Кому) = Тип("СписокЗначений") Тогда
        Для каждого ЭлементСписка Из Кому Цикл
            Если ПустаяСтрока(ЭлементСписка.Значение) Тогда
                Продолжить;
            КонецЕсли;
            СтрокаТЧ = Письмо.КомуТЧ.Добавить();
            СтрокаТЧ.АдресЭлектроннойПочты = ЭлементСписка.Значение;
            СтрокаТЧ.Представление         = ЭлементСписка.Представление;
            Если НЕ ПустаяСтрока(Письмо.Кому) Тогда
                Письмо.Кому = Письмо.Кому + ", ";
            КонецЕсли;
            Если ПустаяСтрока(ЭлементСписка.Представление) Тогда
                Письмо.Кому = Письмо.Кому + ЭлементСписка.Значение;
            Иначе
                Письмо.Кому = Письмо.Кому + ЭлементСписка.Представление + " <" + ЭлементСписка.Значение + ">";
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;

...


Как я понял, можно определить глобальную переменную Кому. Но не в модуле формы, не в модуле объекта документа определение переменной не помогло.
Есть какие нибудь идеи?
1 Lexey_
 
14.05.16
11:34
(0) в структуре СтруктураНовогоПисьма передавай
2 immurz
 
14.05.16
11:49
(1) Это вызывается из ОбщиеФормы.НастройкаОтправкиОтчета.ОсновныеДействияФормыОК

СтруктураСозданногоПисьма = УправлениеЭлектроннойПочтой.НаписатьПисьмо(глЗначениеПеременной("глТекущийПользователь"), СтруктураНовогоПисьма,,,,,, Истина, Ложь);
    
    ЭтаФорма.Закрыть();
    
    Если ТипЗнч(СтруктураСозданногоПисьма) = Тип("Структура") Тогда
        СтруктураСозданногоПисьма.Форма.Открыть();
    КонецЕсли;

Так что ничего не могу передать.
3 Lexey_
 
14.05.16
11:52
(2) не вижу связи между "Это вызывается из ОбщиеФормы..." и "Так что ничего не могу передать."
4 immurz
 
14.05.16
11:55
Потому что у меня там нет данных о контрагенте.
5 immurz
 
14.05.16
11:58
(3) Тем более  

СтруктураНовогоПисьма.Свойство("Кому", Кому);

Т.е. в функции формирования письма все равно перезаписывается значение.
6 Lexey_
 
14.05.16
11:59
(4) ну передавай или вызывай из другого места, придумай что-нибудь
7 RomanYS
 
14.05.16
11:59
(5) читается, а не перезаписывается
8 Lexey_
 
14.05.16
11:59
(5) чейта оно перезаписывается?
9 immurz
 
14.05.16
12:05
(7) (8) Перепутал.

(6) Ну так я и пытаюсь через глобальную переменную передать. Не просто так они там в начале функции. Но что то никак.
10 Lexey_
 
14.05.16
12:06
(9) кто тебе сказал, что они глобальные?
11 RomanYS
 
14.05.16
12:07
(9) они там чтобы можно было в них читать как в (5), они не глобальные
12 ДенисЧ
 
14.05.16
12:07
(9) не используй глобальные переменные
13 immurz
 
14.05.16
12:15
(10) (11) Плохо.

(12) А что ж мне использовать?
14 Lexey_
 
14.05.16
12:16
(13) используй (1)
15 immurz
 
14.05.16
12:20
(14) У меня нет данных об отправителе там, где она определяется.
16 RomanYS
 
14.05.16
12:22
(15) в общей форме печати?
17 immurz
 
14.05.16
12:31
(16)  ОбщиеФормы.НастройкаОтправкиОтчета.ОсновныеДействияФормыОК

Процедура ОсновныеДействияФормыOK(Кнопка)
    
    СохранитьЗначения();
    
    СтруктураНовогоПисьма = Новый Структура;
...

Сначала форма выбора печатных форм, потом настройка отправки отчета, потом только заполнение письма и открытие формы письма.
18 RomanYS
 
14.05.16
12:33
(17) ну и передавай по всей цепочке своего контрагента, в чём проблема?
19 immurz
 
14.05.16
12:38
(18) Проблема в том, что это анонизм через общие функции (в которых это нафиг не надо использовать) все прогонять. Я думаю есть какой то более оптимальный вариант.
20 immurz
 
14.05.16
13:48
В общем ладно. Анонизм так анонизм. Если кому надо -

ОбщиеФормы.ПечатьДокументов

КоманднаяПанельФормыОтправитьПоПочте(Кнопка) меняем на

Процедура КоманднаяПанельФормыОтправитьПоПочте(Кнопка)
    УправлениеОтчетами.ОтправитьДокументПоЭлектроннойПочте(ЭлементыФормы.ПолеТабличногоДокумента, Заголовок,ЭтаФорма.ОбъектПечати);
КонецПроцедуры

//////////////////////////////
//////////////////////////////

В ОбщиеМодули.УправлениеОтчетами ОтправитьДокументПоЭлектроннойПочте

меняем на

Процедура ОтправитьДокументПоЭлектроннойПочте(Документ, ИмяФайлаВложения = "",ОбъектПечати = Неопределено) Экспорт

    Если НЕ Константы.ИспользованиеВстроенногоПочтовогоКлиента.Получить() Тогда
        ОбщегоНазначения.СообщитьОбОшибке("Отправлять документы по электронной почте можно только из встроенного почтового клиента.
                         |В настоящее время в настройках параметров учета установлено использование основного почтового клиента операционной системы.");
        Предупреждение("Операция не выполнена");
        Возврат;
    КонецЕсли;
    
    ФормаОтправкиДокумента = ПолучитьОбщуюФорму("НастройкаОтправкиОтчета");
    ФормаОтправкиДокумента.ОбъектПечати     = ОбъектПечати;
    ФормаОтправкиДокумента.Отчет            = Документ;
    ФормаОтправкиДокумента.ИмяФайлаВложения = СтрЗаменить(ИмяФайлаВложения, ".", " ");
    ФормаОтправкиДокумента.ТемаСообщения    = ИмяФайлаВложения;
    ФормаОтправкиДокумента.ОткрытьМодально();

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

//////////////////////////////
//////////////////////////////


В ОбщиеФормы.НастройкаОтправкиОтчета добавляем реквезит ОбъектПечати (СправочникСсылка, ДокументСсылка)

Ну и в начало ОбщиеФормы.НастройкаОтправкиОтчета ОсновныеДействияФормыOK

Процедура ОсновныеДействияФормыOK(Кнопка)
    
    СохранитьЗначения();
    
    СтруктураНовогоПисьма = Новый Структура;


Если (ЭтаФорма.ОбъектПечати <> Неопределено) И (ЭтаФорма.ОбъектПечати.Метаданные().Реквизиты.Найти("Контрагент") <> Неопределено) Тогда
        СписокКому            = Новый СписокЗначений;
        Адрес = УправлениеЭлектроннойПочтой.ОпределитьАдресПолучателя(ЭтаФорма.ОбъектПечати.Контрагент);
        Если НЕ ПустаяСтрока(Адрес) Тогда
            СписокКому.Добавить(Адрес, Строка(ЭтаФорма.ОбъектПечати.Контрагент.Наименование));
        КонецЕсли;
        СтруктураНовогоПисьма.Вставить("Кому", СписокКому);    
    КонецЕсли;

//////////////////////////
//////////////////////////
Как то так.

(18) Да, так действительно проще оказалось.
21 Tarzan_Pasha
 
14.05.16
14:34
(12)как тебя найти? срочно нужен насчет пивных дождей. Дай емейл?
22 RomanYS
 
14.05.16
17:00
(20) конечно проще, я бы посмотрел как бы ты ухитрился привязать свои глобальные переменные к десятку открытых у юзера печатных форм ))

Для "извращенцев" в данном случае есть ещё одно "красивое" решение: писать своего в контрагента, например, в расшифровку какой-нибудь ячейки табдока.