Автоматическое уведомление клиентов по электронной почте в программе 1С: УВС

Публикация № 1042530

Управление - Документооборот и делопроизводство

УВС уведомление клиентов пользователей регламентные задания электронная почта

В данной статье предлагается внешняя обработка для конфигурации 1С: Управление ветеринарными сертификатами, выполняющая автоматическую рассылку писем по электронной почте клиентам компании, с целью уведомления о сформированных ветеринарно-сопроводительных документах.

В данной статье я хочу предложить полезную обработку для отраслевой конфигурации 1С: Управление Ветеринарными Сертификатами (УВС). Назначение предлагаемой обработки - автоматическая рассылка писем по электронной почте клиентам компании, с целью уведомления о сформированных ветеринарно-сопроводительных документов (ВСД).

Для кого будет полезна данная статья? Во-первых, для всех, кому приходится работать с программой 1С: УВС. Во-вторых, всем кому интересен вопрос формирования и отправки электронных писем средствами библиотеки БСП, с прикреплением к ним печатных форм. Также в статье рассмотрен вопрос реализации регламентного задания через внешнюю обработку.

Автоматизация уведомления клиентов - довольно распространенная задача, которую часто приходится решать, в том числе и 1С программистам, в контексте различных типовых и не очень конфигураций. Ниже представлен один из вариантов решения.

Представим себе ситуацию, когда некая компания, занимающаяся оптовой торговлей, поставляет своим клиентам продукты питания. Часть из них, как известно, подлежит ветеринарно-санитарному контролю (экспертизе). В соответствии с этим клиенты хотят получать ВСД, причем как можно раньше. Получать ВСД вместе с привезенной продукцией не всегда и не всех устраивает. В некоторых ситуациях чем раньше получены ВСД, тем клиенту лучше. Операторы при отгрузке продукции оформляют в программе УВС документы Транспортная операция, на основе которых рассматривается заявка о возможности и правомерности осуществления перевозки продукции. В случае одобрения заявки в программе автоматически формируются ВСД, доступные пользователю на закладке ВСД формы документа Транспортная операция. Для документа ВСД в конфигурации УВС реализовано несколько печатных форм. Наиболее подходящая нам - "Штрих-коды ВСД с дополнительной информацией" - она формирует т.н. форму 4 ветеринарной справки. Её и будем печатать и прикреплять в письму. Правда она содержит не штрих-код а QR-код - но мы на это не будем обращать внимание.

Сформулируем задачу в терминах понятных и близких 1С разработчикам: требуется реализовать регламентное задание на основе внешней обработки для автоматического уведомления клиента о сформированных ВСД, в виде электронного письма, с прикрепленными листами ВСД. Используем мы для всего этого конечно же БСП, которая хоть и частично, но все-таки встроена в конфигурацию УВС. 

Решение:

0) Настраиваем системную учетную запись, которую мы и мы будем использовать для отправки писем.

1) В справочнике ВидыКонтактнойИнформации добавляем новый элемент "EMail" в группу "Контактная информация справочника "Хозяйствующие субъекты"". В этом поле мы будем хранить адрес электронной почты контрагента. Заполняем для тех контрагентов, кому нужно отправлять уведомления.

2) Реализуем внешнюю обработку, в модуле объекта которой как обычно реализуем функцию СведенияОВнешнейОбработке:

Функция СведенияОВнешнейОбработке() Экспорт
	
	ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
    ПараметрыРегистрации.Вид				= ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка(); 
    ПараметрыРегистрации.Версия 			= "1.0.0.1";
	ПараметрыРегистрации.Наименование		= "ОтправкаУведомленияКонтрагентамПоЭлПочте";
	ПараметрыРегистрации.БезопасныйРежим 	= ЛОЖЬ;
	ПараметрыРегистрации.Информация			= "Обработка отправляет контрагентам уведомление по эл. почте по факту успешно обработанной заявки (док. ТраснпортнаяОперация)";
	
	НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
    НоваяКоманда.Представление = НСтр("ru = 'Отправка уведомления контрагентам по эл. почте'");
    НоваяКоманда.Идентификатор = "ОтправкаУведомленияКонтрагентамПоЭлПочте";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода(); 
	
	Возврат ПараметрыРегистрации;

КонецФункции

Также мы реализуем процедуру ВыполнитьКоманду, которая и будет вызываться по расписанию нашего регламентного задания:

Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт
  Если ИдентификаторКоманды = "ОтправкаУведомленияКонтрагентамПоЭлПочте" Тогда
	  ВыполнитьОтправкуУведомлений();
  КонецЕсли;
КонецПроцедуры

Процедура ВыполнитьОтправкуУведомлений будет реализована в этом же модуле, к её реализации мы вернемся несколько позже.

3) Размышляем на тему того, как мы будем запоминать для каких ВСД уведомления уже отправлены, а для каких надо отправлять. Потому что 2 раза одну и туже одобренную заявку отправлять не нужно. Если бы в УВС была реализована подсистема Свойства из БСП, то и вопросов бы не было - лично я добавил бы в документ ВСД дополнительный булевый реквизит УведомлениеОтправлено. Но так как в версии УВС 2.0.8.1 БСП внедрена не полностью и именно подсистемы Свойства в программе нет - придется выдумывать что-то другое. "Вскрывать" и дорабатывать типовую конфигурацию я не люблю, но в данном случае, возможно, это наиболее простой способ. Я предлагаю добавить в конфигурацию регистр сведений, который позволит нам "помнить" для каких ВСД мы уже отправили уведомление (не периодический, без регистратора).
 

4) Собственно сам алгоритм анализа ситуации с заявками и отправки уведомлений. Схема предельно простая: запросом получаем все необходимые данные, обрабатывая их формируем и отправляем письма.

Процедура ВыполнитьПоискНужныхДокументов() Экспорт
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
	               |	КонтрагентыКонтактнаяИнформация.Ссылка КАК Контрагент,
	               |	КонтрагентыКонтактнаяИнформация.АдресЭП КАК АдресЭП
	               |ПОМЕСТИТЬ ВТ_Контрагенты
	               |ИЗ
	               |	Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
	               |ГДЕ
	               |	НЕ КонтрагентыКонтактнаяИнформация.Ссылка.ПометкаУдаления
	               |	И КонтрагентыКонтактнаяИнформация.АдресЭП <> """"
	               |	И КонтрагентыКонтактнаяИнформация.Тип = &ТипКИЭлПочта
	               |	И КонтрагентыКонтактнаяИнформация.Вид = &ВидКИЭлПочта
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ТранспортныеОперации.Ссылка КАК Документ,
	               |	ТранспортныеОперации.КонтрагентПолучатель КАК Контрагент,
	               |	ТранспортныеОперации.ПредприятиеПолучатель КАК Предприятие,
	               |	ТаблицаСтатусДокумента.Статус КАК Статус
	               |ПОМЕСТИТЬ ВТ_Документы
	               |ИЗ
	               |	Документ.ТранспортныеОперации КАК ТранспортныеОперации
	               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЖурналРегистрацииСостоянийЗаявокНаОформлениеОпераций.СрезПоследних(, ДокументСсылка ССЫЛКА Документ.ТранспортныеОперации) КАК ТаблицаСтатусДокумента
	               |		ПО (ТаблицаСтатусДокумента.ДокументСсылка = ТранспортныеОперации.Ссылка)
	               |ГДЕ
	               |	ТранспортныеОперации.Дата >= &Дата
	               |	И ТранспортныеОперации.КонтрагентПолучатель В
	               |			(ВЫБРАТЬ
	               |				ВТ_Контрагенты.Контрагент
	               |			ИЗ
	               |				ВТ_Контрагенты КАК ВТ_Контрагенты)
	               |	И ТаблицаСтатусДокумента.Статус = &Статус
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ВТ_Документы.Документ КАК Документ,
	               |	ВТ_Документы.Контрагент КАК Контрагент,
	               |	ВТ_Документы.Предприятие КАК Предприятие,
	               |	ВТ_Документы.Статус КАК Статус,
	               |	ВТ_Контрагенты.АдресЭП КАК АдресЭП
	               |ПОМЕСТИТЬ ВТ_ДокументыСАдресомЭлПочты
	               |ИЗ
	               |	ВТ_Документы КАК ВТ_Документы
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Контрагенты КАК ВТ_Контрагенты
	               |		ПО ВТ_Документы.Контрагент = ВТ_Контрагенты.Контрагент
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ВТ_ДокументыСАдресомЭлПочты.Документ КАК Документ,
	               |	ВТ_ДокументыСАдресомЭлПочты.Контрагент КАК Контрагент,
	               |	ВТ_ДокументыСАдресомЭлПочты.Предприятие КАК Предприятие,
	               |	ВТ_ДокументыСАдресомЭлПочты.Статус КАК Статус,
	               |	ВТ_ДокументыСАдресомЭлПочты.АдресЭП КАК АдресЭП
	               |ПОМЕСТИТЬ ВТ_НеотправленныеДанные
	               |ИЗ
	               |	ВТ_ДокументыСАдресомЭлПочты КАК ВТ_ДокументыСАдресомЭлПочты
	               |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусУведомленияКонтрагентаОЗаявке КАК СтатусУведомленияКонтрагентаОЗаявке
	               |		ПО ВТ_ДокументыСАдресомЭлПочты.Документ = СтатусУведомленияКонтрагентаОЗаявке.Документ
	               |			И ВТ_ДокументыСАдресомЭлПочты.Контрагент = СтатусУведомленияКонтрагентаОЗаявке.Контрагент
	               |ГДЕ
	               |	СтатусУведомленияКонтрагентаОЗаявке.Дата ЕСТЬ NULL
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ВТ_НеотправленныеДанные.Документ КАК Документ,
	               |	ВТ_НеотправленныеДанные.Документ.Номер КАК НомерДокумента,
	               |	ВТ_НеотправленныеДанные.Документ.Дата КАК ДатаДокумента,
	               |	ВТ_НеотправленныеДанные.Документ.НомерТТН КАК НомерТТН,
	               |	ВТ_НеотправленныеДанные.Документ.ДатаТТН КАК ДатаТТН,
	               |	ВТ_НеотправленныеДанные.Документ.СерияТТН КАК СерияТТН,
	               |	ВТ_НеотправленныеДанные.Контрагент КАК Контрагент,
	               |	ВТ_НеотправленныеДанные.Контрагент.Наименование КАК НаименованиеКонтрагента,
	               |	ВТ_НеотправленныеДанные.Документ.КонтрагентОтправитель.Наименование КАК НаименованиеКонтрагентаОтправителя,
	               |	ВТ_НеотправленныеДанные.Предприятие КАК Предприятие,
	               |	ВТ_НеотправленныеДанные.Статус КАК Статус,
	               |	ВТ_НеотправленныеДанные.АдресЭП КАК АдресЭП
	               |ИЗ
	               |	ВТ_НеотправленныеДанные КАК ВТ_НеотправленныеДанные
	               |ИТОГИ ПО
	               |	Контрагент,
	               |	АдресЭП
	               |;
	               |
	               |////////////////////////////////////////////////////////////////////////////////
	               |ВЫБРАТЬ
	               |	ТранспортныеОперацииТаблицаВСД.ВСД КАК ВСД,
	               |	ТранспортныеОперацииТаблицаВСД.ВСД.Номер КАК НомерВСД,
	               |	ТранспортныеОперацииТаблицаВСД.ВСД.Дата КАК ДатаВСД,
	               |	ТранспортныеОперацииТаблицаВСД.Ссылка КАК Документ
	               |ИЗ
	               |	Документ.ТранспортныеОперации.ТаблицаВСД КАК ТранспортныеОперацииТаблицаВСД
	               |ГДЕ
	               |	ТранспортныеОперацииТаблицаВСД.Ссылка В
	               |			(ВЫБРАТЬ
	               |				ВТ_НеотправленныеДанные.Документ КАК Документ
	               |			ИЗ
	               |				ВТ_НеотправленныеДанные КАК ВТ_НеотправленныеДанные)
	               |
	               |УПОРЯДОЧИТЬ ПО
	               |	Документ,
	               |	ВСД";

	Запрос.УстановитьПараметр("Дата", 			НачалоДня(ТекущаяДата()));
	Запрос.УстановитьПараметр("Статус", 		Справочники.СтатусыЗаявок.УспешноОбработана);	
	Запрос.УстановитьПараметр("ВидКИЭлПочта", 	Справочники.ВидыКонтактнойИнформации.НайтиПоНаименованию("EMail"));
	Запрос.УстановитьПараметр("ТипКИЭлПочта", 	Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);

	РезПакет = Запрос.ВыполнитьПакет();
	
	времУчЗаписьЭлПочты = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
	времТекДата			= ТекущаяДата();
	
	ВыборкаКонтрагентов = РезПакет[4].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
	ТЗ_ВСД = РезПакет[5].Выгрузить();
	
	Пока ВыборкаКонтрагентов.Следующий() Цикл

		ВыборкаЭлПочтаКонтрагента = ВыборкаКонтрагентов.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
		Пока ВыборкаЭлПочтаКонтрагента.Следующий() Цикл
			
			ВыборкаДокументы = ВыборкаЭлПочтаКонтрагента.Выбрать();
			Пока ВыборкаДокументы.Следующий() Цикл
				
				ОтборВСД = Новый Структура("Документ", ВыборкаДокументы.Документ);
				времМассивВСД = ТЗ_ВСД.НайтиСтроки(ОтборВСД);
				
				Если времМассивВСД.Количество() > 0 Тогда
					
					НачатьТранзакцию();
					Попытка		
						времОписание = "Подготовка отправки уведомления контрагенту " 
							+ СТРОКА(ВыборкаДокументы.НаименованиеКонтрагента) + " по ТТН " + СТРОКА(ВыборкаДокументы.НомерТТН)
							+ " от " + СТРОКА(ВыборкаДокументы.ДатаТТН) + ", серия " + СТРОКА(ВыборкаДокументы.СерияТТН);

						ЗаписьЖурналаРегистрации(
							"ОтправкаУведомленияОбУспешнойОбработкиЗаявки.Подготовка",
							УровеньЖурналаРегистрации.Информация,
							,
							,
							времОписание);

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

					Исключение
						Если ТранзакцияАктивна() Тогда
							ОтменитьТранзакцию();
						КонецЕсли;
						ВызватьИсключение;
					КонецПопытки;
					
					Если ТранзакцияАктивна() Тогда
						ЗафиксироватьТранзакцию();
					КонецЕсли;
						
				КонецЕсли;
				//Если времМассивВСД.Количество() > 0 Тогда
				
			КонецЦикла;

		КонецЦикла;
		
	КонецЦикла;

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

Код и алгоритм запроса в комментариях не нуждается. Для удобства отладки механизма я использую запись в журнал регистрации. А вот процедура ОтправитьЭлектронноеПисьмоУведомления более интересная, хотя бы потому что именно в ней происходит формирование электронных писем.

Функция ОтправитьЭлектронноеПисьмоУведомления(УчЗаписьЭлПочты, ДанныеОЗаявке, ИдентификаторПочтовогоСообщения, МассивВСД)

	УведомлениеОтправлено = ЛОЖЬ;
	
	// Массив временных файлов, который нужно будет обязательно
	// удалить в конце работы данного алгоритма
	МассивУдаляемыхФайлов = Новый Массив;

	Попытка

		массивВложений = Новый Массив;
		//   * Вложения - Массив - файлы, которые необходимо приложить к письму (описания в виде структур):
		//     ** Представление - Строка - имя файла вложения;
		//     ** АдресВоВременномХранилище - Строка - адрес двоичных данных вложения во временном хранилище.
		//     ** Кодировка - Строка - кодировка вложения (используется, если отличается от кодировки письма).
		//     ** Идентификатор - Строка - (необязательный) используется для отметки картинок, отображаемых в теле письма.

		темаПисьма = "Успешно обработана заявка № " + СТРОКА(ДанныеОЗаявке.НомерДокумента) + " от " + СТРОКА(ДанныеОЗаявке.ДатаДокумента);

		телоПисьма = темаПисьма + "." + СИМВОЛЫ.ПС;

		// Поместим прикрепленные к транспортной операции документы ВСД в массив
		массивДокументовВСД = Новый Массив;
		
		// Имеет смысл отправлять письмо, только если для данной транспортной
		// операции найдены ВСД
		Если МассивВСД.Количество() > 0 Тогда
			телоПисьма = телоПисьма + СИМВОЛЫ.ПС + СИМВОЛЫ.ПС + "Список ВСД:";
			
			Для Каждого стрВСД ИЗ МассивВСД Цикл
				массивДокументовВСД.Добавить(стрВСД.ВСД);
				телоПисьма = телоПисьма + СИМВОЛЫ.ПС + "    " + СТРОКА(стрВСД.НомерВСД) + " от " + СТРОКА(стрВСД.ДатаВСД);
			КонецЦикла;
			
			// Сформируем табличный документ для всех ВСД привязаных к текущей транспортной операции
			ТабДокВСД = Документы.ВСД.СформироватьПечатнуюФормуСжатогоВСДСИнформацией(массивДокументовВСД, Неопределено);
			// Получаем путь временного файла на диске
			ВремФайлНаДиске = ПолучитьИмяВременногоФайла("pdf");
			// Сохраним табличный документ во временный файл
			ТабДокВСД.Записать(ВремФайлНаДиске, ТипФайлаТабличногоДокумента.PDF);	
			// Добавляем временный файл в массив удаляемых файлов
			МассивУдаляемыхФайлов.Добавить(ВремФайлНаДиске);
			
			// Помещаем сохраненный временный файл во временное хранилище
			ДвоичныеДанные = Новый ДвоичныеДанные(ВремФайлНаДиске);
			Идентификатор  = Новый УникальныйИдентификатор;	
			АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанные, Идентификатор);

			// Формируем вложение для нашего письма
			времВложение = Новый Структура("Представление,АдресВоВременномХранилище,Кодировка,Идентификатор");
			времВложение.Представление				= "ВСД " + Строка(ДанныеОЗаявке.НомерДокумента) + ".pdf";
			времВложение.АдресВоВременномХранилище	= АдресВоВременномХранилище;
			//времВложение.Кодировка
			//времВложение.Идентификатор

			массивВложений.Добавить(времВложение);
			
		КонецЕсли;

		телоПисьма = телоПисьма + СИМВОЛЫ.ПС + СИМВОЛЫ.ПС
			+ "С уважением," + СИМВОЛЫ.ПС 
			+ "  Некто";

		СтруктураПолучатель = Новый Структура("Адрес,Представление");
		СтруктураПолучатель.Адрес			= ДанныеОЗаявке.АдресЭП;
		СтруктураПолучатель.Представление	= ДанныеОЗаявке.НаименованиеКонтрагента;
		
		времПолучателиСообщения = Новый Массив;
		времПолучателиСообщения.Добавить(СтруктураПолучатель);

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

		времПараметрыПисьма = Новый Структура();	
		времПараметрыПисьма.Вставить("Кому", 						ДанныеОЗаявке.АдресЭП);
		времПараметрыПисьма.Вставить("ПолучателиСообщения",			времПолучателиСообщения);
		//времПараметрыПисьма.Вставить("Копии",						времКопии);
		времПараметрыПисьма.Вставить("Тема",						темаПисьма);
		времПараметрыПисьма.Вставить("Тело",						телоПисьма);
		времПараметрыПисьма.Вставить("Важность",					ВажностьИнтернетПочтовогоСообщения.Обычная);
		времПараметрыПисьма.Вставить("АдресОтвета",					времАдресаОтвета);
		времПараметрыПисьма.Вставить("УведомитьОДоставке",			ЛОЖЬ); // ИСТИНА);
		времПараметрыПисьма.Вставить("УведомитьОПрочтении",			ЛОЖЬ); // ИСТИНА);
		времПараметрыПисьма.Вставить("ТипТекста",					Перечисления.ТипыТекстовЭлектронныхПисем.ПростойТекст);

		// Вложения
		Если массивВложений.Количество() > 0 Тогда
			времПараметрыПисьма.Вставить("Вложения", массивВложений);
		КонецЕсли;
		
		ИдентификаторПочтовогоСообщения = РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчЗаписьЭлПочты, времПараметрыПисьма);

		ЗаписьЖурналаРегистрации(
			"ОтправкаУведомленияОбУспешнойОбработкиЗаявки.ОтправкаЭлПисьма",
			УровеньЖурналаРегистрации.Информация,
			,
			,
			"Электронное письмо успешно отправлено");

		УведомлениеОтправлено = ИСТИНА;

	Исключение

		ЗаписьЖурналаРегистрации(
			"ОтправкаУведомленияОбУспешнойОбработкиЗаявки.ОтправкаЭлПисьма",
			УровеньЖурналаРегистрации.Ошибка,
			,
			,
			"Ошибка при отправке электронного письма: " + СТРОКА(ОписаниеОшибки()));

	КонецПопытки;
	
	// Удаляем временные файлы
	Для Каждого фл ИЗ МассивУдаляемыхФайлов Цикл 
		УдалитьФайлы(фл);
	КонецЦикла;
	
	Возврат УведомлениеОтправлено;

КонецФункции


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

Как видно код данной процедуры "заправлен" достаточным количество комментариев. При использовании процедуры ОтправитьПочтовоеСообщение модуля РаботаСПочтовымиСообщениями советую тщательно изучить описание её параметров.

Процедура ЗаписатьФактОтправкиУведомленияВРегСведений создает запись в регистре сведений СтатусУведомленияКонтрагентаОЗаявке. Приводить её код я не стану, потому что это это распространенная типовая задача.

Далее требуется добавить нашу ВО в программу, указав для неё возможность запуска по расписанию и определив само расписание. После этого, как говорится, все должно работать. Буду рад, если кому то мое творчество принесет пользу. 

Все это было протестировано и успешно работает на версии УВС 2.0.8.1 в клиент-серверном варианте работы программы. Благодарю за внимание! Буду благодарен за ваши комментарии, отзывы и советы.

Скачать файлы

Наименование Файл Версия Размер
UVSEMailClientsNotification

.epf 8,37Kb
0
.epf 1.0.0.1 8,37Kb Скачать

Специальные предложения

Оставьте свое сообщение

См. также

Проблема сопоставления товара при приемке маркированной продукции на примере обуви в конфигурации 1С:Розница

Оптовая торговля Розничная торговля v8 Розница Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m)

В статье описывается проблема сопоставления товара при приемке товаров маркированной продукции применительно к типовым конфигурациям на примере 1С:Розница.

1 стартмани

16.11.2020    3700    gzharkoj    3    

Работа с табачной продукцией в УТ 11.4

Оптовая торговля Розничная торговля v8::ОУ УТ11 Розничная и сетевая торговля (FMCG) Россия УУ Абонемент ($m)

Практическая работа с маркированным товаром - табачной продукцией (с изюминкой).

1 стартмани

28.09.2020    3089    zemskov    22    

Автоматизация процесса формирования документов реализации в лизинговой компании

Бухгалтерия Оптовая торговля v8 v8::БУ БП3.0 Россия БУ Абонемент ($m)

Лизинговым компаниям каждый месяц приходится формировать большое количество документов реализации в соответствии с графиком платежей, указанным в договоре. Ввиду того, что имеются все необходимые данные, процесс может быть автоматизирован.

1 стартмани

20.11.2019    2758    yurikmellon    4    

Отображение истории выполнения по всем задачам комплексного процесса в документообороте

Документооборот и делопроизводство Практика программирования v8 ДО УУ Абонемент ($m)

Коллеги, предлагаю вашему вниманию доработку для вывода полной истории в задачах комплексного процесса.

1 стартмани

15.09.2019    8007    pavelpribytkin96    8    

Обмен с интернет-магазином на платформе DOCPART

WEB Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 1cv8.cf Абонемент ($m)

В настоящее время существует множество платформ для создания интернет-магазинов. Удобные и не очень, платные или бесплатные. У каждого решения найдутся свои сторонники, но наличие оперативного обмена с учётной системой важно для любой платформы. В этой публикации мы рассмотрим одну из популярных платформ для создания интернет-магазина по продаже автозапчастей Docpart и организацию обмена данными с ней.

10 стартмани

04.07.2019    5817    Johny_v    24    

Совместное использование 1С:Сервер взаимодействия и Документооборот 8 КОРП, редакция 2.1.13 - Уведомления для рабочего стола

Пользователю системы Работа с интерфейсом Интеграция Документооборот и делопроизводство Документооборот и делопроизводство v8 ДО УУ Абонемент ($m)

С версии ДО 2.1.13 в программу встроена подсистема Обсуждения. Данная подсистема позволяет производить уведомление пользователей без необходимости открытия программы.

1 стартмани

18.06.2019    14514    ilya.rudziak    10    

Печать чеков на Меркурии 119Ф USB по сети

Фискальный регистратор Кассовые операции Оптовая торговля Розничная торговля Кассовые операции Оптовая торговля Розничная торговля v8 1cv8.cf Россия НУ Абонемент ($m)

Стандартный драйвер Меркурия 119Ф usb не позволяет осуществлять печать на фискальный регистратор с другого компьютера, поэтому был сделан простейший http сервер, который транслирует post запросы в вызовы методов com-объекта.

1 стартмани

06.06.2019    6151    philya    6    

EGAIS Scan - приложение для ТСД

Терминал сбора данных Мобильная разработка Оптовая торговля Розничная торговля Учет ТМЦ Оптовая торговля Розничная торговля Учет ТМЦ v8 УТ10 УПП1 УТ11 КА2 Россия УУ Абонемент ($m)

Каждый, кто занимается торговлей алкогольной продукцией, сталкивался с проблемами сканирования акцизных марок и трудностями при взаимодействии с учетной системой 1С. Приложение EGAIS Scan - простое и оптимальное решение для выполнения быстрой приемки и отгрузки алкогольной продукции.

1 стартмани

17.04.2019    5617    MrChe    3    

Раскрашенный log-файл без HTML и СМС (используем Форматированный документ в личных целях)

Практика программирования Оптовая торговля Оптовая торговля Разработка v8::ОУ УТ11 КА2 Россия УУ Абонемент ($m)

Иногда пользователям отдается на откуп загрузка каких то данных, результат загрузки которых желательно раскрасить если и не всеми цветами радуги, то хотя бы светофором. Один из вариантов – это использовать Форматированную строку. Следите за руками:

1 стартмани

08.02.2019    3328    kembrik    2    

Вывод веса и объема номенклатуры в УТ 11

Оптовая торговля Практика программирования Оптовая торговля v8 УТ11 Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m)

Статья ориентирована на программиста и содержит пример реализации вывода веса и объема номенклатуры В ТЧ "Товары" документа "ЗаказКлиента" в УТ 11.4.

1 стартмани

03.12.2018    7000    triviumfan    10    

Альтернативный пересчет упаковок товаров в типовых конфигурациях

Практика программирования Оптовая торговля Учет ТМЦ Оптовая торговля Учет ТМЦ v8 v8::ОУ УТ11 КА2 Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m)

Рассмотрен вариант пересчета упаковок, при котором исходное количество товара не изменяется, а происходит пересчет упаковок друг относительно друга.

1 стартмани

24.11.2018    11808    gzharkoj    14    

Yep Cart. Пишем интернет-магазин на http-сервисах OneScript

Оптовая торговля Розничная торговля OneScript v8 УУ Абонемент ($m)

В статье описана демонстрационная конфигурация, реализующая простейший интернет магазин на http-сервисах OneScript, интегрированный с 1С:Предприятие.

1 стартмани

16.04.2018    17050    blackhole321    33    

Автоматическое оповещение пользователей при проведении документа Поступление товаров, с возможностью дублировать сообщения другому сотруднику

Практика программирования Обработка документов Документооборот и делопроизводство Документооборот и делопроизводство v8 v8::ОУ УТ11 Россия Абонемент ($m)

Данная разработка автоматически оповещает пользователя о поступлении товара по заказу клиента. Схема работы : Заказ клиента > Заказ поставщику > Поступление товаров. Оповещается пользователь, который создавал заказ клиента (менеджер). Оповещение выводится на экран и ждет подтверждения о прочтении. После подтверждения - фиксируется время прочтения оповещения. Есть возможность просматривать все сообщения по пользователю за любой период. Есть возможность дублировать сообщение другим пользователям. Например, если менеджер в отпуске, и его заменяет другой менеджер, и оповещения будут отправляться второму (третьему и т.д.).

1 стартмани

26.02.2018    13721    Natali307192013    8    

Массовая рассылка писем с HTML. Отправить письмо или почту через 1С с картинками, изображениями, таблицами и прочим

Email v8 1cv8.cf Абонемент ($m)

Если вам необходимо создать красивое письмо и отправить его средствами 1С, вам поможет эта статья.

1 стартмани

15.12.2017    39757    rpgshnik    26    

Опыт интеграции 1С с системой Меркурий (Часть 5)

Внешние источники данных Интеграция Оптовая торговля Оптовая торговля v8::ОУ 1cv8.cf Сельское хозяйство и рыболовство Транспорт, автопарки, такси Оптовая торговля, дистрибуция, логистика Пищевая промышленность Россия БУ УУ Абонемент ($m)

Описывается опыт внедрения в 1С системы работы с ветеринарно-сопроводительными документами Меркурий. Интеграция еще в процессе и приветствуется обмен опытом.

1 стартмани

10.07.2017    61600    axxell    33    

Знакомство с 1С:Документооборот. История автоматизации и доработок. Печатная форма Лист согласования

Практика программирования Документооборот и делопроизводство Документооборот и делопроизводство v8 ДО УУ Абонемент ($m)

Документооборот 2.1.10.2 ПРОФ, КОРП. История автоматизации и доработок. Ввод на основании внутреннего документа из задачи согласование с переносом прикрепленных файлов(копировать и вставить файлы). ПФ Лист согласования для процесса Согласование и для справочника Внутренние документы(печатается с историей). Автоматическая загрузка справочника по com-соединению из другой базы. Печатные формы работают и на последнем релизе 2.1.20.5.

1 стартмани

04.07.2017    21251    SPonomareff    19    

Практика создания заказной внешней печатной формы для УТ 11.3

Печатные формы документов Оптовая торговля Оптовая торговля v8 v8::ОУ УТ11 Оптовая торговля, дистрибуция, логистика Россия УУ Абонемент ($m)

Внешняя печатная форма "Счёт на оплату" для конфигурации Управление торговлей, редакция 11.3

1 стартмани

09.05.2017    26346    zemskov    11    

Адресная система хранения на складе

Практика программирования Оптовая торговля Учет ТМЦ Оптовая торговля Учет ТМЦ v8 УУ Абонемент ($m)

Решение тестового задания. Разбор ошибок.

1 стартмани

22.10.2016    11565    vasvl123    6    

Руководство пользователя. УТ 10.3 Рабочее место кассира.

Пользователю системы Оптовая торговля Розничная торговля Оптовая торговля Розничная торговля v8 КА1 УТ10 Россия УУ Абонемент ($m)

Развернутая инструкция для работы пользователя в типовом интерфейсе кассира конфигурации 1С: Управление торговлей 10.3. Подробно с иллюстрациями описаны основные действия кассира.

1 стартмани

22.06.2016    38713    zhuravlev_as    5    

Сложные отчеты для управляемых форм с использованием СКД: просто. На примере отчета ABC анализ номенклатуры, клиентов для УТ11

Практика программирования Оптовая торговля Оптовая торговля v8::СКД УТ11 УУ Абонемент ($m)

Не очень часто, но все же, иногда приходится сталкиваться с необходимостью создания отчета, который очень сложно скомпоновать на "чистом" СКД, в этом случае альтернативой может являться следующая последовательность действий для получения итогового отчета: 1. при помощи одной схемы компоновки данных получить необходимую выборку данных; 2. запрограммировать (на языке 1С) некое преобразование этих данных; 3. при помощи другой схемы компоновки данных - произвести вывод необходимой информации в табличный документ. Как оказалось эта процедура не слишком сложная, хотя и немного запутанная.

1 стартмани

12.08.2013    62220    mxm2    21