Имя: Пароль:
1C
1С v8
Обращение к реквизиту справочника из модуля формы
,
0 Oleg37701
 
25.04.21
12:47
Здравствуйте, я новичок в 1с, простите заранее на глупые вопросы.

Есть модуль формы Документа. Написал Процедуру при нажатии на кнопку, отправлять данные на email.

Вот только нужно, чтобы получатель был НЕ фиксированный в коде : Письмо.Получатели.Добавить(****@mail.ru), а чтобы подставлялся из реквизита справочника (Справочник Email). В справочнике есть следующие реквизиты: EmailАдрес, ФИО

Так вот, не получается сделать ссылку на реквизит справочника из модуля формы. Буду благодарен за помощь
1 Oleg37701
 
25.04.21
12:48
Вот сам код. Сама процедура отправки выполняется на сервере:


&НаСервере  
Процедура SMTPОтправка()
    Профиль = Новый ИнтернетПочтовыйПрофиль;
   Профиль.АдресСервераSMTP = "smtp.yandex.ru";
   Профиль.ПользовательSMTP = "[email protected]";
   Профиль.ПарольSMTP = "***";
   Профиль.ИспользоватьSSLSMTP = Истина;
   Профиль.ПортSMTP = 465;
   Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;

   Письмо = Новый ИнтернетПочтовоеСообщение;
   Текст = Письмо.Тексты.Добавить("Текст");
   Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
   Письмо.Тема = "В бухгалтерию";
   Письмо.Отправитель = "[email protected]";
   Письмо.ИмяОтправителя = "1c";
  
  ПолучательПисьма = Объект.Email.EmailАдес;
   Письмо.Получатели.Добавить(ПолучательПисьма);
  
  
  
    
   Почта = Новый ИнтернетПочта;
   Попытка
      Почта.Подключиться(Профиль);
      Сообщить("Соединение с почтовым сервером установлено");
   Исключение
       Сообщить("Не удалось подключиться к серверу по причине: ");
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
   Попытка
      Почта.Послать(Письмо);
      Сообщить("Письмо отправлено в бухгалтерию!");
   Исключение
       Сообщить("Не удалось отправить письмо");
       Сообщить(ОписаниеОшибки());
   КонецПопытки;
    
   Почта.Отключиться();
   Сообщить("Соединение завершено");
КонецПроцедуры
2 ДенисЧ
 
25.04.21
12:50
На форму вытаскиваешь поле ввода, тип - справочник емыло, имя ЕМылоПолучателя
Ну, это если ты не хочешь это в документе хранить.
Пользователь выбирает, по кнопоке отправить обращаешься к ЕМылоПолучателя, берёшь нужный реквизит.
Твоя запись ПолучательПисьма = Объект.Email.EmailАдес; - обращение к реквизиту документа. А в документе, как я понял, у тебя его нет
3 Oleg37701
 
25.04.21
12:53
А можно не вытаскивать это на форму документа, а сразу обращаться к справочнику Email ?Чтообы тянуть оттуда? (2)
4 ДенисЧ
 
25.04.21
13:07
(3) А к какому элементу справочника ты будешь обращаться? Если ты это знаешь - можешь не вытягивать на форму
5 hhhh
 
25.04.21
13:12
(3) какой смысл тогда? если у вас один единственный email? вся фишка в том, что пользователь программы может сам выбрать, кому он хочет отправить.
6 Oleg37701
 
25.04.21
13:30
(5) Смысл в том, что в Справочнике Email есть - несколько реквизитов - EmailАдрес, Событие, ФИО.
И в зависимости от документа ( Счет на оплату, Задача). Письмо будет посылаться по заполненному справочнику.

Допустим:

Справочник Email

EmailАдрес ФИО Событие

[email protected]  Иванов Отправка счета
[email protected] Петров Задача

То есть, Email пользователь заводит под конкретное событие в Справочнике.
7 Oleg37701
 
25.04.21
13:30
(4) Есть справочник Email, там есть реквизит EmailАдрес. Я хочу к нему обратиться из формы документа.
8 hhhh
 
25.04.21
13:39
(6) тогда да, можно не вытаскивать на форму.
9 RomanYS
 
25.04.21
13:41
(7) Ну в (1) ты к нему и обратился. Что не получилось то?
10 Oleg37701
 
25.04.21
13:45
(9) Появляется ошибка:Поле объекта не обнаружено.

Тогда я добавил реквизит в этот документ со ссылкой на справочник. Ошибка пропала. Сейчас ошибок не выдает, пишет, что отправлено но при этом не отправляет. Не приходят письма.
11 Oleg37701
 
25.04.21
13:51
(8) А просто хранить реквизит со ссылкой на справочник в документе ?
12 hhhh
 
25.04.21
13:53
(10) ну, выведите там

Сообщить("" +  Объект.Email);
Сообщить("" +  Объект.Email.EmailАдес);

может просто ошиблись в адресе?
13 RomanYS
 
25.04.21
13:53
(10) Так включи отладчик и посмотри куда отправляет и где-ты напутал. Если письма уходят, можно ещё свой адрес в копию поставить для отладки... но отладчик точно лучше
14 Злопчинский
 
25.04.21
13:57
Попытка
      Почта.Послать(Письмо);
- а это точно что неотправка письма является ОШИБКОЙ?
15 Oleg37701
 
25.04.21
13:59
(12) Пустые строки выдает, но все равно пишет отправлено.
16 Oleg37701
 
25.04.21
14:00
(14) А почему нет? Цель - отправить, конечный результат - письмо отправлено. Следовательно, если не отправлено - это ошибка. Разве нет?
17 RomanYS
 
25.04.21
14:02
(15) Значит поле Email не заполнено
18 Oleg37701
 
25.04.21
14:04
(17) Лично только что в справочнике заполнял EmailАдрес, он есть. (
19 RomanYS
 
25.04.21
14:05
(18) Поле не заполнено в ДОКУМЕНТЕ
20 Oleg37701
 
25.04.21
14:12
(19) Что-то я туплю. Мне нужно заполнять его в документе, его даже на форме быть не должно. Мне нужно, чтобы данные тянулись со справочника.
21 Oleg37701
 
25.04.21
14:12
(19) НЕ нужно.
22 RomanYS
 
25.04.21
14:20
(20)
Объект - это документ,
Объект.Email - поле документа.

>>Мне нужно, чтобы данные тянулись со справочника
Из какого именно, в справочнике может быть много элементов. Может тебе константа нужна была, а не справочник.

(21) тогда не бери их из документа
23 Oleg37701
 
25.04.21
14:22
(22) Смотрите, у меня есть справочник. В нем три реквизита - EmailАдрес, Событие, ФИО.
И в зависимости от документа ( Счет на оплату, Задача). Письмо будет посылаться по заполненному справочнику.

Допустим:

Справочник Email
EmailАдрес ФИО Событие

[email protected]  Иванов Отправка счета
[email protected] Петров Задача

То есть, Email пользователь заводит под конкретное событие в Справочнике.

То есть:

Получатели должны тянуться из справочника из реквизита "EmailАдрес"
24 RomanYS
 
25.04.21
14:27
(23) Значит в справочнике нужно найти нужный элемент по реквизиту "событие" и из этого элемента взять адрес.
25 Oleg37701
 
25.04.21
14:29
(24) Так вот в том и вопрос.

Процедура отправки я пишу в форме документа. Как из формы мне обратиться к этому справочнику ?
26 Злопчинский
 
25.04.21
14:32
(25) ручками. код написать.
27 Oleg37701
 
25.04.21
14:36
(26) Я несколько вариантов перепробовал. Не получается. Поэтому и написал сюда.
28 Злопчинский
 
25.04.21
14:39
29 Oleg37701
 
25.04.21
14:54
(24) Пробовал как-то так,

ПолучательПисьма = Справочники.Email.НайтиПоРеквизиту("Событие","Оплата счета");
ПолучателиПисьма1 = ПолучательПисьма.EmailАдрес;


Пока тоже безуспешно.
30 Злопчинский
 
25.04.21
15:02
событие - строчный реквизит?
31 Злопчинский
 
25.04.21
15:03
ну и как бы событий "отправка счета" м.б. много. какой именно майл брать?
32 hhhh
 
25.04.21
15:04
(29) реквизит Событие какого типа?
и если найти по реквизиту, тогда реквизит должен быть индексированный. Посмотри, у него стоит галка Индексировать?
33 Oleg37701
 
25.04.21
15:09
(32) (30) Тип: ссылка на перечисления. (32) Стоит не индексировать. (31) Какой email брать - Если получится то все с "отправкой счета".
34 hhhh
 
25.04.21
15:12
(33) а пишешь найти "Оплата счета". Это вообще-то не перечисление.
35 Oleg37701
 
25.04.21
15:20
(34) нужно указать перечисление?
36 Chameleon1980
 
25.04.21
15:20
зацепил попутно изучение запросов
хотя бы основ
37 Chameleon1980
 
25.04.21
15:21
зацепил=зацепи
38 hhhh
 
25.04.21
15:28
(35) надо логику включать. Если там у тебя перечисления, а ты ищешь не перечисление, то что в итоге найдешь?
39 Oleg37701
 
25.04.21
15:29
(38) логично, ничего не найду.
40 Oleg37701
 
25.04.21
15:31
(38) тогда попробую поизучать запросы. И вытащу запросом.