Отправка почты через CDO (работает c SSL) &НаСервереБезКонтекста
Функция ПолучитьДанныеЯщикаСистемнойЗаписи()
СистемнаяУчетнаяЗаписьЭлектроннойПочты = Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты;
СтруктураНастроек = Новый Структура;
СтруктураНастроек.Вставить("СерверSMTP", СокрЛП(СистемнаяУчетнаяЗаписьЭлектроннойПочты.СерверИсходящейПочтыSMTP));
СтруктураНастроек.Вставить("ПользовательSMTP",СокрЛП(СистемнаяУчетнаяЗаписьЭлектроннойПочты.ПользовательSMTP));
СтруктураНастроек.Вставить("ПарольSMTP", СокрЛП(СистемнаяУчетнаяЗаписьЭлектроннойПочты.ПарольSMTP));
СтруктураНастроек.Вставить("ПортSMTP", СистемнаяУчетнаяЗаписьЭлектроннойПочты.ПортSMTP);
СтруктураНастроек.Вставить("Отправитель", СокрЛП(СистемнаяУчетнаяЗаписьЭлектроннойПочты.АдресЭлектроннойПочты));
СтруктураНастроек.Вставить("ИспользоватьSSL", СистемнаяУчетнаяЗаписьЭлектроннойПочты.ИспользоватьSSL);
Возврат СтруктураНастроек;
КонецФункции
//обработка, пример который приведен содержит ТЧ "НаОтправку" с реквизитами "Контрагент" - ссылка на справочник и "Файл" - строка, путь к файлу
//ПолучитьМассивКлиентов() - функция возвращает перечень всех клиентов из данной ТЧ
//
//АдресПолучателя(ЭлементМассива) - функция возвращает e-mail клиента
&НаКлиенте
Процедура ОтправкаПисем()
//тут был прочий код, не относящийся к отправке, он удален
МассивКлиенты = ПолучитьМассивКлиентов();
Для Каждого ЭлементМассива Из МассивКлиенты Цикл
//***************************************
Если АдресПолучателя(ЭлементМассива) = "" Тогда
Сообщить("У контрагента "+ЭлементМассива+" не указан email, письмо отправлено не будет!");
Продолжить;
КонецЕсли;
Кому = АдресПолучателя(ЭлементМассива);
Тема = "Документы";
Текст = "Документы";
СтруктураНастроек = ПолучитьДанныеЯщикаСистемнойЗаписи();
CDO_СерверSMTP = СтруктураНастроек.СерверSMTP;
CDO_ПользовательSMTP = СтруктураНастроек.ПользовательSMTP;
CDO_ПарольSMTP = СтруктураНастроек.ПарольSMTP;
CDO_ПортSMTP = СтруктураНастроек.ПортSMTP;
Отправитель = СтруктураНастроек.Отправитель;
ИспользоватьSSL = СтруктураНастроек.ИспользоватьSSL;
Письмо = Новый COMОбъект("CDO.Message");
Письмо.to = Кому;
Письмо.from = Отправитель;
Письмо.Sender = Отправитель;
//Письмо.cc=Копия;
//Письмо.bcc=СкрКопия;
Отбор = Новый Структура();
Отбор.Вставить("Контрагент",ЭлементМассива);
НайденныеСтроки = Объект.НаОтправку.НайтиСтроки(Отбор);
Для КАЖДОГО СтрДокументы ИЗ НайденныеСтроки ЦИКЛ
Письмо.AddAttachment(СокрЛП(СтрДокументы.Файл));
КонецЦикла;
Письмо.Subject = Тема;
Письмо.TextBody = Текст;
Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing").Value = 2;
Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver").Value = CDO_СерверSMTP;
Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate").Value = 1;// 0 - Do not authenticate; 1 - basic (clear-text) authentication; 2 - NTLM
Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername").Value = CDO_ПользовательSMTP;
Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword").Value = CDO_ПарольSMTP;
Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport").Value = CDO_ПортSMTP;
Если ИспользоватьSSL Тогда
Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = True;
КонецЕсли;
//Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl").Value = ИспользоватьSSL;
Письмо.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout").Value = 60;
Попытка
Письмо.Configuration.Fields.Update();
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Попытка
Письмо.Send();
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Сообщить("Все...");
КонецПроцедуры
Категория:
Работа с Интернет, Почтой (Mail), FTP Массив ~ Как получить последний элемент массива Код 1C v 8.х Массив = Новый Массив();
Массив.Добавить("ЭлементОдин");
Массив.Добавить("ЭлементДва");
Массив.Добавить("ЭлементТри");
Массив.Добавить("ЭлементЧетыре");
ПроследнийЭлементМассива = Массив[Массив.Количество() - 1];
// ПроследнийЭлементМассива = ЭлементЧетыре
Категория:
Работа с Массивом, Структурой, Соответств… Импорт документа Excel через web-клиент Во время реализации задачи по регистрации продаж дистрибьюторов на основании Excel документов столкнулся с интересной задачей. Необходимо реализовать загрузку файла и на стороне сервера обработать его, заполнив табличную часть документа.
Решение состоит из двух функций: клиентской и серверной.
Клиентская часть инициирует выбор файла, передачу выбранного файла на сервер и передача управления серверной процедуре.
Код 1C v 8.2 УП #НаКлиенте
Процедура ИмпортИзВнешнегоФайла(Команда)
//Выбор и загрузка файла.
Если НЕ ПодключитьРасширениеРаботыСФайлами() Тогда
УстановитьРасширениеРаботыСФайлами();
КонецЕсли;
Если ПодключитьРасширениеРаботыСФайлами() Тогда
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
Фильтр = "Текст(*.xls)|*.xls";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.Заголовок = "Выберите файл для импорта";
Если ДиалогОткрытияФайла.Выбрать() Тогда
Объект.МедицинскиеРаботники.Очистить();
ДанныеНачинаютсяС = 1;
Если Не ВвестиЧисло(ДанныеНачинаютсяС, "Данные начинаются со строки", 2, 0) Тогда
Возврат;
КонецЕсли;
МассивФайлов = ДиалогОткрытияФайла.ВыбранныеФайлы;
ПомещаемыеФайлы = Новый Массив;
Для Каждого Файл Из МассивФайлов Цикл
ТекФайл = Новый Файл(Файл);
Описание = Новый ОписаниеПередаваемогоФайла(Файл, "");
ПомещаемыеФайлы.Добавить(Описание);
КонецЦикла;
ПомещенныеФайлы = Новый Массив;
Если ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы, , Ложь, УникальныйИдентификатор) Тогда
//Запуск импорта
ИмпортироватьФайлИзВременногоХранилищаВТЗ(ПомещенныеФайлы, ДанныеНачинаютсяС);
КонецЕсли;
Иначе
Предупреждение("Файл(ы) не выбран!");
КонецЕсли;
Иначе
Предупреждение(НСтр("ru ='Данная возможность недоступна, так как не подключено расширение работы с файлами.'", "ru"));
КонецЕсли;
КонецПроцедуры //ИмпортИзВнешнегоФайла()
Серверная процедура перебирает полученные на сервер файлы. Получает COM-объекты и импортирует данные.
Код 1C v 8.2 УП #НаСервере
Процедура ИмпортироватьФайлИзВременногоХранилищаВТЗ(МассивФайлов, ДанныеНачинаютсяС)
ДокументОбъект = РеквизитФормыВЗначение("Объект");
//Обход файлов, записанных во временное хранилище
Для Каждого ЭлементМассива Из МассивФайлов Цикл
ФайлИзХранилища = ПолучитьИзВременногоХранилища(ЭлементМассива.Хранение);
ВременныйФайл = ПолучитьИмяВременногоФайла("xls");
//Сохранение во временнный файл на диске
ФайлИзХранилища.Записать(ВременныйФайл);
//Импорт
Док = ПолучитьCOMОбъект(ВременныйФайл);
ФИОУчастника = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 2).Value;
Пока СокрЛП(ФИОУчастника) ="" Цикл
// Добавление строки с файла в документ
НоваяСтрока = ДокументОбъект.МедицинскиеРаботники.Добавить();
НоваяСтрока.Фио = ФИОУчастника;
НоваяСтрока.Учреждение = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 7).Value;
НоваяСтрока.Адрес = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 3).Value;
НоваяСтрока.Телефон = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 4).Value;
НоваяСтрока.ЭлПочта = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 5).Value;
НоваяСтрока.Образование = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 6).Value;
ДанныеНачинаютсяС = ДанныеНачинаютсяС + 1;
ФИОУчастника = Док.Sheets(1).Cells(ДанныеНачинаютсяС, 2).Value;
КонецЦикла;
Сообщить("Импорт завершён");
Док.Application.Quit();
КонецЦикла;
ЗначениеВРеквизитФормы(ДокументОбъект, "Объект");
КонецПроцедуры //ИмпортироватьФайлИзВременногоХранилищаВТЗ()
Источник Категория:
Работа с Microsoft Office и OpenOffice Массив ~ Добавление, копирование элементов из массива в массив Код 1C v 8.х Для каждого ЭлементМассива Из Массив1 Цикл
Массив2.Добавить(ЭлементМассива);
КонецЦикла;
Категория:
Работа с Массивом, Структурой, Соответств… Как получить данные о зарегистрированных пользователях информационной базы? Получение данных о пользователях
Код 1C v 8.х Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ЭлементМассива Из Выборка Цикл
ИмяПользователя = ЭлементМассива.Имя;
ПолноеИмяПользователя = ЭлементМассива.ПолноеИмя;
ЕстьПароль = ЭлементМассива.ПарольУстановлен;
Роли = ЭлементМассива.Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль.Имя;
КонецЦикла;
КонецЦикла;
В указанной процедуре работа по получению списка пользователей начинается с обращения к свойству глобального контекста ПользователиИнформационнойБазы. Метод ПолучитьПользователей() возвращает массив объектов ПользовательИнформационнойБазы, который обходится потом в цикле.
Для 1С 7.7 посмотрите Пример получения списка пользователей из файла users.usr Категория:
Пользователь, роль доступа, интерфейс Как получить список зарегистрированных пользователей базы 1С Код 1C v 8.х Выборка = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ЭлементМассива Из Выборка Цикл
ИмяПользователя = ЭлементМассива.Имя;
ПолноеИмяПользователя = ЭлементМассива.ПолноеИмя;
ЕстьПароль = ЭлементМассива.ПарольУстановлен;
Роли = ЭлементМассива.Роли;
Для Каждого Роль Из Роли Цикл
ИмяРоли = Роль.Имя;
КонецЦикла;
КонецЦикла;
Код 1C v 7.x // Функция возвращает список зарегистрированных для выбранной
// базы пользователей. Если пользователи не определены, список
// будет пуст.
//
функция сзПолучитьПользователей(стрПутьКБазе)
// Создаем список значений для возврата
Ответ = создатьобъект("СписокЗначений");
// Формируем полное имя файла, в котором 1С
// хранит информацию о пользователях базы.
стрИмяФайла = стрПутьКБазе + "\UsrDEF\Users.USR";
// Проверим его наличие.
если фс.СуществуетФайл(стрИмяФайла) > 0 тогда
// Создаем объект FSO для работы с файлами.
обФСО = создатьобъект("Scripting.FileSystemObject");
// Открываем файл пользователей как текстовый.
тхтФайл = обФСО.OpenTextFile(стрИмяФайла);
// Инициализация первоначальных переменных
// Загружаем в буфер(тестовую строку) информацию из файла.
стрБуфер = "";
чисПозиция = 0;
// Перебеирать файл придеться посимвольно, так как 1С не совсеми
// символами может работать коректно если они находяться в строке.
пока тхтФайл.AtEndOfStream = 0 цикл
// Получаем очередную позицию в файле.
чисПозиция = чисПозиция + 1;
// Получаем символ из данной позиции.
стрСимв = тхтФайл.Read(1);
// Если код символа больше 31
если кодсимв(стрСимв) > 31 тогда
// Тогда добавляем его к буферу.
стрБуфер = стрБуфер + стрСимв;
конецесли;
конеццикла;
// После формирования буфера начнем искать пользователей в нем.
// Признаком для пользователя будет строка '{"UserItemType","Page.'
стрПоиска = "{""UserItemType"",""Page.";
// Получаем позицию первого пользователя.
чисПозиция = найти(стрБуфер, стрПоиска);
// Проверяем если в буфере нужная нам строка
если чисПозиция > 0 тогда
// Если есть, вырезаем из строки ненужную информацию.
стрБуфер = сред(стрБуфер, чисПозиция);
// Позиция после отрезания становиться в единицу
чисПозиция = 1;
конецесли;
// В цикле получаем информацию о пользователях БД
пока чисПозиция > 0 цикл
// Удаляем из буфера 'мусор'
стрБуфер = сред(стрБуфер, чисПозиция + 22);
// Находим признак начала информации об имени пользователя.
чисСмещение = найти(стрБуфер, """,""") + 3;
// Перемещаем начало буфера на начало информации об имени пользователя
стрБуфер = сред(стрБуфер, чисСмещение);
// Получаем имя пользователя
стрИмяПользователя = лев(стрБуфер, найти(стрБуфер, """,""") - 1);
// Добовляем имя к нашему списку.
Ответ.ДобавитьЗначение(стрИмяПользователя);
// Получаем очередную позицию информации о пользователе
чисПозиция = найти(стрБуфер, стрПоиска);
конеццикла;
конецесли;
// Возращаем полученный список значений содержащий в себе список пользователей базы
возврат Ответ;
конецфункции
еще Пример получения списка пользователей из файла users.usr Категория:
Полезные, Универсальные Функции Массив ~ Как Свернуть Массив? Код 1C v 8.х
НовыйМассив = Новый Массив; Соответствие = Новый Соответствие;
Для каждого ЭлементМассива Из Массив Цикл
Соответствие.Вставить(ЭлементМассива);
КонецЦикла;
Для каждого КлючИЗначение Из Соответствие Цикл
НовыйМассив.Добавить(КлючИЗначение.Значение);
КонецЦикла;
Категория:
Работа с Массивом, Структурой, Соответств…