Подбор электронной почты в реквизит на форме внешней обработки

1. user1898973 24.10.24 15:35 Сейчас в теме
Здравствуйте, прошу помощи. Есть внешняя обработка для отправки сообщений контрагентам. (1С БП 3.0) Нужно сделать подбор электронной почты для нескольких получателей. Пробовала добавлять реквизит "Получатель" с типом справочник ссылка контрагенты. Но как от туда достать именно адреса электронных адресов не могу сообразить .
По теме из базы знаний
Найденные решения
6. LeeAreHim 30.10.24 09:34 Сейчас в теме
(5)
Пока Выборка.Следующий() Цикл
Объект.Адрес = Выборка.АдресЭП;
КонецЦикла;

Вы каждый раз перезаполняете реквизит объекта "Адрес". Скорее всего у Вас этот реквизит типа Поле ввода.
Можно попробовать многострочный режим у этого реквизита использовать.
Или лучше добавить Реквизит таблица значений и в цикле добавлять строки адресов.
И при заполнении получателей, тоже циклом из таблицы получать адреса.
Для Каждого Получатель Из <Таблица где заполнены адреса> Цикл
Письмо.Получатели.Добавить(Получатель.<имя колонки таблицы, куда добавлен адрес>);
КонецЦикла;
user1898973; VyacheslavShilov; Alex_E; +3 Ответить
7. Alex_E 2374 30.10.24 09:58 Сейчас в теме
(5) Выгрузите адреса в массив сразу:
...
    Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
    МассивАдресов = Запрос.выполнитьр().Выгрузить().ВыгрузитьКолонку("АдресЭП");
...

дальше, например, обрабатывайте массив в цикле - по каждому адресу почты отправляете отдельное письмо, или создайте список адресов, если тело письма для всех одинаково и надо отправить его всем одним письмом.
user1898973; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Alex_E 2374 24.10.24 16:32 Сейчас в теме
Получить почту сожно например так:
Функция ПолучитьМыло(КонтрагентСсылка)
	Запрос = НОвый Запрос(
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	КонтрагентыКонтактнаяИнформация.АдресЭП КАК АдресЭП
	|ИЗ
	|	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
	|ГДЕ
	|	КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EmailКонтрагенты)
	|	И КонтрагентыКонтактнаяИнформация.Ссылка = &Ссылка"
	);
	Запрос.УстановитьПараметр("Ссылка", КонтрагентСсылка);
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка.АдресЭП;
	Иначе
		Возврат "E-mail не задан";
	КонецЕсли;
КонецФункции
Показать
VyacheslavShilov; user1898973; +2 Ответить
3. user1898973 30.10.24 08:18 Сейчас в теме
Спасибо за помощь, электронные адреса получила. Теперь встал вопрос, как их все добавить в реквизит? Если пишу реквизит=выборка, добавляется всего лишь один адрес, а не нужное количество. Подскажите, как это реализовать?
4. Alex_E 2374 30.10.24 08:32 Сейчас в теме
5. user1898973 30.10.24 09:05 Сейчас в теме
&НаСервере
Процедура ОтправкаПисьмаНаСервере() 
	
	МассивОбъектов = Новый Массив;
	МассивОбъектов = Получатель.ВыгрузитьЗначения();
	
	Запрос=Новый Запрос(
	"ВЫБРАТЬ
	|	КонтрагентыКонтактнаяИнформация.АдресЭП КАК АдресЭП
	|ИЗ
	|	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
	|ГДЕ
	|	КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.EmailКонтрагенты)
	|	И КонтрагентыКонтактнаяИнформация.Ссылка В(&МассивОбъектов)"
	);
	Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
	Выборка=Запрос.Выполнить().Выбрать();  
	
	Пока Выборка.Следующий() Цикл 
		Объект.Адрес =  Выборка.АдресЭП; 	
	КонецЦикла;	
	Письмо = Новый ИнтернетПочтовоеСообщение;
	Письмо.Тема = Объект.ЗаголовокПисьма;
	Письмо.Тексты.Добавить(Объект.ТекстПисьма);
	Письмо.Получатели.Добавить(Объект.Адрес); 
	РаботаСПочтовымиСообщениями.ОтправитьПисьмо(Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты, Письмо);
	
	
	КонецПроцедуры

&НаКлиенте
	Процедура ОтправкаПисьма(Команда)
		ОтправкаПисьмаНаСервере();
	КонецПроцедуры
Показать
6. LeeAreHim 30.10.24 09:34 Сейчас в теме
(5)
Пока Выборка.Следующий() Цикл
Объект.Адрес = Выборка.АдресЭП;
КонецЦикла;

Вы каждый раз перезаполняете реквизит объекта "Адрес". Скорее всего у Вас этот реквизит типа Поле ввода.
Можно попробовать многострочный режим у этого реквизита использовать.
Или лучше добавить Реквизит таблица значений и в цикле добавлять строки адресов.
И при заполнении получателей, тоже циклом из таблицы получать адреса.
Для Каждого Получатель Из <Таблица где заполнены адреса> Цикл
Письмо.Получатели.Добавить(Получатель.<имя колонки таблицы, куда добавлен адрес>);
КонецЦикла;
user1898973; VyacheslavShilov; Alex_E; +3 Ответить
7. Alex_E 2374 30.10.24 09:58 Сейчас в теме
(5) Выгрузите адреса в массив сразу:
...
    Запрос.УстановитьПараметр("МассивОбъектов",МассивОбъектов);
    МассивАдресов = Запрос.выполнитьр().Выгрузить().ВыгрузитьКолонку("АдресЭП");
...

дальше, например, обрабатывайте массив в цикле - по каждому адресу почты отправляете отдельное письмо, или создайте список адресов, если тело письма для всех одинаково и надо отправить его всем одним письмом.
user1898973; +1 Ответить
8. user1898973 02.11.24 10:22 Сейчас в теме
Всем огромное спасибо, получилось.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот