Довольно часто, анализируя метод, возникает вопрос "Кто когда и какие изменения внес в него последний раз?"
Для ответа на этот вопрос при использовании хранилища конфигурации приходится вручную перебирать сравнения последних версий текущего модуля и искать...
TurboConf скрипт "ИР Адаптер" обеспечивает в конфигураторе 1С 8 доступ к функциям мощной подсистемы Инструменты разработчика Tormozit (ИР)
TurboConf повышает эффективность работы в Конфигураторе 1С и помогает программисту автоматизировать свои задачи.
В некоторых версиях БСП форма отчета скрывает заголовки ряда параметров. В том числе с типом "Стандартный период". Данную функцию нужно вставить в модуль отчета и вызывать в обработчике ПослеЗаполненияПанелиБыстрыхНастроек(). Подключить обработчик можно в событии ОпределитьНастройкиФормы
Процедура ОпределитьНастройкиФормы(Параметр, КлючВарианта, НастройкиОтчета) Экспорт
НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
КонецПроцедуры
Процедура ПослеЗаполненияПанелиБыстрыхНастроек(ФормаОтчета, ПараметрыОбновления) Экспорт
ПочинитьЗаголовкиПериодов(ФормаОтчета);
КонецПроцедуры
Процедура ПочинитьЗаголовкиПериодов(ФормаОтчета)
ЗаголовкиЭлементов = Новый Массив;
Для Каждого ПараметрСКД Из СхемаКомпоновкиДанных.Параметры Цикл
ЗначениеТипа = ПараметрСКД.ТипЗначения.ПривестиЗначение(Неопределено);
Если ТипЗнч(ЗначениеТипа) = Тип("СтандартныйПериод") Тогда
ЗаголовкиЭлементов.Добавить(ПараметрСКД.Заголовок + ":");
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементФормы Из ФормаОтчета.Элементы Цикл
СвойстваЭлемента = Новый Структура("ПоложениеЗаголовка,Заголовок,ПутьКДанным");
ЗаполнитьЗначенияСвойств(СвойстваЭлемента, ЭлементФормы);
Если СвойстваЭлемента.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет
И ЗаголовкиЭлементов.Найти(СвойстваЭлемента.Заголовок) <> Неопределено Тогда
ЭлементФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ОпределитьНастройкиФормы(Параметр, КлючВарианта, НастройкиОтчета) Экспорт
НастройкиОтчета.События.ПослеЗаполненияПанелиБыстрыхНастроек = Истина;
КонецПроцедуры
Процедура ПослеЗаполненияПанелиБыстрыхНастроек(ФормаОтчета, ПараметрыОбновления) Экспорт
ПочинитьЗаголовкиПериодов(ФормаОтчета);
КонецПроцедуры
Процедура ПочинитьЗаголовкиПериодов(ФормаОтчета)
ЗаголовкиЭлементов = Новый Массив;
Для Каждого ПараметрСКД Из СхемаКомпоновкиДанных.Параметры Цикл
ЗначениеТипа = ПараметрСКД.ТипЗначения.ПривестиЗначение(Неопределено);
Если ТипЗнч(ЗначениеТипа) = Тип("СтандартныйПериод") Тогда
ЗаголовкиЭлементов.Добавить(ПараметрСКД.Заголовок + ":");
КонецЕсли;
КонецЦикла;
Для Каждого ЭлементФормы Из ФормаОтчета.Элементы Цикл
СвойстваЭлемента = Новый Структура("ПоложениеЗаголовка,Заголовок,ПутьКДанным");
ЗаполнитьЗначенияСвойств(СвойстваЭлемента, ЭлементФормы);
Если СвойстваЭлемента.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет
И ЗаголовкиЭлементов.Найти(СвойстваЭлемента.Заголовок) <> Неопределено Тогда
ЭлементФормы.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция восстановления из JSON может использоваться для того, чтобы преобразовать данные JSON в типы платформы 1С, которые либо 1. не могут являться результатом автоматического преобразования, либо 2. чтобы просто изменить получаемые данные, если есть такая необходимость. В данном примере из json файла где ИНН, КПП контрагента - пустая строка, заменим на значение - Пустая строка ИНН (КПП)
// Структура JSON файла:
{
"Info": [
{
"Наименование": "Global Trade Company GmbH",
"НаименованиеПолное": "Global Trade Company GmbH",
"ИНН": "",
"КПП": "",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 1; Город - 1; Индекс - 1"
},
{
"Наименование": "Kikinda (Сербия)",
"НаименованиеПолное": "Kikinda (Сербия)",
"ИНН": "",
"КПП": "",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 2; Город - 2; Индекс - 2"
},
{
"Наименование": "Koenig Holding GmbH",
"НаименованиеПолное": "Koenig Holding GmbH",
"ИНН": "",
"КПП": "",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 3; Город - 3; Индекс - 3"
},
{
"Наименование": "АВИКА",
"НаименованиеПолное": "АВИКА",
"ИНН": "4825005381",
"КПП": "482201001",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 4; Город - 4; Индекс - 4"
},
{
"Наименование": "АвтБанк АКБ",
"НаименованиеПолное": "АКБ АвтБанк",
"ИНН": "",
"КПП": "",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 5; Город - 5; Индекс - 5"
}
]
}
//Код в модуле формы:
&НаСервере
Функция ФункцияВосстановленияСериализуемогоЗначения(Свойство, Значение, ДополнительныеПараметры) Экспорт
Если Свойство = "ИНН" ИЛИ Свойство = "КПП" Тогда
Если ПустаяСтрока(Значение) Тогда
Возврат "Пустая строка " + Свойство;
КонецЕсли;
КонецЕсли;
КонецФункции // ()
&НаСервере
Процедура ВыполнитьЧтениеДанныхНаСервере()
// Проверка наличия файла по пути;
ПутьНаСервере1 = "C:\Users\SystemX\Desktop\TestJSON_1.json";
ФайлJSON = Новый Файл(ПутьНаСервере1);
Если НЕ ФайлJSON.Существует() Тогда
ОбщегоНазначения.СообщитьПользователю("Файл отсутствует по пути: " + ПутьНаСервере1);
Возврат;
КонецЕсли;
ЧтениеJSON = Новый ЧтениеJSON();
Попытка
ЧтениеJSON.ОткрытьФайл(ПутьНаСервере1, "UTF-8");
Исключение
КонецПопытки;
ПрочитанноеЗначение = ПрочитатьJSON(ЧтениеJSON, Ложь,,, "ФункцияВосстановленияСериализуемогоЗначения", ЭтотОбъект);
ЧтениеJSON.Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЧтениеДанных(Команда)
ВыполнитьЧтениеДанныхНаСервере();
КонецПроцедуры
// Структура JSON файла:
{
"Info": [
{
"Наименование": "Global Trade Company GmbH",
"НаименованиеПолное": "Global Trade Company GmbH",
"ИНН": "",
"КПП": "",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 1; Город - 1; Индекс - 1"
},
{
"Наименование": "Kikinda (Сербия)",
"НаименованиеПолное": "Kikinda (Сербия)",
"ИНН": "",
"КПП": "",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 2; Город - 2; Индекс - 2"
},
{
"Наименование": "Koenig Holding GmbH",
"НаименованиеПолное": "Koenig Holding GmbH",
"ИНН": "",
"КПП": "",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 3; Город - 3; Индекс - 3"
},
{
"Наименование": "АВИКА",
"НаименованиеПолное": "АВИКА",
"ИНН": "4825005381",
"КПП": "482201001",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 4; Город - 4; Индекс - 4"
},
{
"Наименование": "АвтБанк АКБ",
"НаименованиеПолное": "АКБ АвтБанк",
"ИНН": "",
"КПП": "",
"ЮрФизЛицо": "Юридическое лицо",
"ТекущаяДата": "2023-09-03T16:45:44Z",
"ДанныеАдреса": "Страна - 5; Город - 5; Индекс - 5"
}
]
}
//Код в модуле формы:
&НаСервере
Функция ФункцияВосстановленияСериализуемогоЗначения(Свойство, Значение, ДополнительныеПараметры) Экспорт
Если Свойство = "ИНН" ИЛИ Свойство = "КПП" Тогда
Если ПустаяСтрока(Значение) Тогда
Возврат "Пустая строка " + Свойство;
КонецЕсли;
КонецЕсли;
КонецФункции // ()
&НаСервере
Процедура ВыполнитьЧтениеДанныхНаСервере()
// Проверка наличия файла по пути;
ПутьНаСервере1 = "C:\Users\SystemX\Desktop\TestJSON_1.json";
ФайлJSON = Новый Файл(ПутьНаСервере1);
Если НЕ ФайлJSON.Существует() Тогда
ОбщегоНазначения.СообщитьПользователю("Файл отсутствует по пути: " + ПутьНаСервере1);
Возврат;
КонецЕсли;
ЧтениеJSON = Новый ЧтениеJSON();
Попытка
ЧтениеJSON.ОткрытьФайл(ПутьНаСервере1, "UTF-8");
Исключение
КонецПопытки;
ПрочитанноеЗначение = ПрочитатьJSON(ЧтениеJSON, Ложь,,, "ФункцияВосстановленияСериализуемогоЗначения", ЭтотОбъект);
ЧтениеJSON.Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьЧтениеДанных(Команда)
ВыполнитьЧтениеДанныхНаСервере();
КонецПроцедуры
Функция преобразования, используемая при сериализации данных в JSON, вызывается для всех свойств, тип которых не поддерживает преобразование в формат JSON на прямую. В "функции преобразования" разработчик напрямую может проанализировать переданный объект и
Использование типового окна печати для вывода табличного документа (выдержка с Инфостарт https://infostart.ru/1c/articles/394727/)
НаКлиенте
Процедура КомандаПечати(Команда)
ТабличныйДокументДляПечати = ПолучитьТаблчныйДокумент();
Коллекция = У...
Пример процедуры для получение данных юридического лица по ИНН используя бесплатное API. Данный способ был реализован на YouTube канале "IRONSKILLS".
// Описание функции
//
// Параметры:
// ИНН - Тип.Строка - Строка с ИНН
// продолжен...
Вы знали, что TurboConf умеет периодически сохранять тексты открытых модулей?
Это может быть полезно в случае аварийного завершения конфигуратора или каких-то других случаев потери набранного кода.
Включить функцию можно на вкладке Разработчикам, в разд...
Раскладываем URL по полочкам
Введение
Потребовалось написать функцию, разбора URL на составляющие, беглое гугление не дало полноценный результат (да, плохо искал), а значит нужно написать самому. В ходе разработки парсинга, получилась полезная функция, ...
Если хочется упросить парсинг строк, то можно воспользоваться этой функцией
Введение
Как-то потребовалось мне написать функцию разбора URL (она опубликована тут) и сразу захотелось упросить себе жизнь. В результате несколькоих итераций и родилась данная...
Выводит месяц строкой из полученной даты
&НаСервере
Функция ФорматМесяц(ДатаИсходная)
Месяц = Нрег(Формат(ДатаИсходная, "ДЛФ=DD"));
Месяц = СтрЗаменить(Месяц, Лев(Месяц, СтрНайти(Месяц, " ")), "");
Месяц = Лев(Месяц, СтрНайти(Месяц, " "));
Возврат Месяц;
КонецФункции //ФорматМесяц
&НаСервере
Функция ФорматМесяц(ДатаИсходная)
Месяц = Нрег(Формат(ДатаИсходная, "ДЛФ=DD"));
Месяц = СтрЗаменить(Месяц, Лев(Месяц, СтрНайти(Месяц, " ")), "");
Месяц = Лев(Месяц, СтрНайти(Месяц, " "));
Возврат Месяц;
КонецФункции //ФорматМесяц
Сортировка дерева значений с изменением направления
Инфостарт Александр Цегельников
&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьДанныеФормыДерево(КоллекцияСортировки, КолонкаСортировки, ВключатьПодчиненные = Ложь, ПоВозрастанию = Истина)
КоллекцияСтрок = КоллекцияСортировки.ПолучитьЭлементы();
СортироватьДанныеФормыКоллекция(КоллекцияСтрок, КолонкаСортировки, ПоВозрастанию);
Если ВключатьПодчиненные Тогда
Для Каждого ТекущаяСтрока Из КоллекцияСтрок Цикл
СортироватьДанныеФормыДерево(ТекущаяСтрока, КолонкаСортировки, ВключатьПодчиненные, ПоВозрастанию);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьДанныеФормыКоллекция(КоллекцияСтрок, КолонкаСортировки, ПоВозрастанию = Истина)
ПараметрыЗначений = Новый Соответствие;
СортированныеЗначения = Новый СписокЗначений;
Для Каждого ТекущаяСтрока Из КоллекцияСтрок Цикл
ТекущееЗначение = ТекущаяСтрока[КолонкаСортировки];
ПараметрыЗначения = ПараметрыЗначений.Получить(ТекущееЗначение);
Если ПараметрыЗначения = Неопределено Тогда
ПараметрыЗначения = Новый Массив;
ПараметрыЗначений.Вставить(ТекущееЗначение, ПараметрыЗначения);
СортированныеЗначения.Добавить(ТекущееЗначение);
КонецЕсли;
ПараметрыЗначения.Добавить(ТекущаяСтрока);
КонецЦикла;
СортированныеЗначения.СортироватьПоЗначению(?(ПоВозрастанию, НаправлениеСортировки.Возр, НаправлениеСортировки.Убыв));
НовыйИндекс = 0;
Для Каждого ТекущееЗначение Из СортированныеЗначения Цикл
МассивСтрок = ПараметрыЗначений.Получить(ТекущееЗначение.Значение);
Для Каждого ТекущаяСтрока Из МассивСтрок Цикл
ТекущийИндекс = КоллекцияСтрок.Индекс(ТекущаяСтрока);
ШагСдвига = НовыйИндекс - ТекущийИндекс;
Если НЕ ШагСдвига = 0 Тогда
КоллекцияСтрок.Сдвинуть(ТекущийИндекс, ШагСдвига);
КонецЕсли;
НовыйИндекс = НовыйИндекс + 1;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьДанныеФормыДерево(КоллекцияСортировки, КолонкаСортировки, ВключатьПодчиненные = Ложь, ПоВозрастанию = Истина)
КоллекцияСтрок = КоллекцияСортировки.ПолучитьЭлементы();
СортироватьДанныеФормыКоллекция(КоллекцияСтрок, КолонкаСортировки, ПоВозрастанию);
Если ВключатьПодчиненные Тогда
Для Каждого ТекущаяСтрока Из КоллекцияСтрок Цикл
СортироватьДанныеФормыДерево(ТекущаяСтрока, КолонкаСортировки, ВключатьПодчиненные, ПоВозрастанию);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура СортироватьДанныеФормыКоллекция(КоллекцияСтрок, КолонкаСортировки, ПоВозрастанию = Истина)
ПараметрыЗначений = Новый Соответствие;
СортированныеЗначения = Новый СписокЗначений;
Для Каждого ТекущаяСтрока Из КоллекцияСтрок Цикл
ТекущееЗначение = ТекущаяСтрока[КолонкаСортировки];
ПараметрыЗначения = ПараметрыЗначений.Получить(ТекущееЗначение);
Если ПараметрыЗначения = Неопределено Тогда
ПараметрыЗначения = Новый Массив;
ПараметрыЗначений.Вставить(ТекущееЗначение, ПараметрыЗначения);
СортированныеЗначения.Добавить(ТекущееЗначение);
КонецЕсли;
ПараметрыЗначения.Добавить(ТекущаяСтрока);
КонецЦикла;
СортированныеЗначения.СортироватьПоЗначению(?(ПоВозрастанию, НаправлениеСортировки.Возр, НаправлениеСортировки.Убыв));
НовыйИндекс = 0;
Для Каждого ТекущееЗначение Из СортированныеЗначения Цикл
МассивСтрок = ПараметрыЗначений.Получить(ТекущееЗначение.Значение);
Для Каждого ТекущаяСтрока Из МассивСтрок Цикл
ТекущийИндекс = КоллекцияСтрок.Индекс(ТекущаяСтрока);
ШагСдвига = НовыйИндекс - ТекущийИндекс;
Если НЕ ШагСдвига = 0 Тогда
КоллекцияСтрок.Сдвинуть(ТекущийИндекс, ШагСдвига);
КонецЕсли;
НовыйИндекс = НовыйИндекс + 1;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Создает элемент на форме. Возможно вставить перед выбранным элементом
Функция СоздатьЭлементФормы(Форма, ИмяЭлемента, ТипЭлемента, РодительЭлемента, ЭлементПеред = Неопределено) Экспорт
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = Форма.Элементы.Добавить(ИмяЭлемента, ТипЭлемента, РодительЭлемента);
Иначе
НовыйЭлемент = Форма.Элементы.Вставить(ИмяЭлемента, ТипЭлемента, РодительЭлемента, ЭлементПеред);
КонецЕсли;
Возврат НовыйЭлемент;
КонецФункции
Функция СоздатьЭлементФормы(Форма, ИмяЭлемента, ТипЭлемента, РодительЭлемента, ЭлементПеред = Неопределено) Экспорт
Если ЭлементПеред = Неопределено Тогда
НовыйЭлемент = Форма.Элементы.Добавить(ИмяЭлемента, ТипЭлемента, РодительЭлемента);
Иначе
НовыйЭлемент = Форма.Элементы.Вставить(ИмяЭлемента, ТипЭлемента, РодительЭлемента, ЭлементПеред);
КонецЕсли;
Возврат НовыйЭлемент;
КонецФункции
Шаблон кода основных данных, который поможет быстро формировать печатные формы для ЗУП.
Функция ПолучитьДанные() Возвращает структуру параметров. Функция принимает следующие параметры:
ОбъектНаПечать (Объект, откуда была вызвана команда),
Отказ (Задал
Всплывающее окно для произвольного оповещения пользователя о событии
ПоказатьПредупреждение(
Неопределено, "ТекстПредупреждения", 3, "Заголовок");
ПоказатьПредупреждение(
Неопределено, "ТекстПредупреждения", 3, "Заголовок");
Кейс неэффективного использования собственных серверов под 1С и решение по оптимизации.
- Ты чего такой грустный?
- Да вот сервер вчера упал.
- А что ты его до сих пор не поднял?
- Поднял, он со стола упал...
Ситуация страшная, но этого можно избежать, ...
Функция ПолучитьНомер(Строка)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.MultiLine = Истина;
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
Шаблон = "№ 0*(\d+)";
RegExp.Pattern = Шаблон;
Matches=RegExp.Execute(Строка);
Возврат Matches;
КонецФункции
Функция ПолучитьНомер(Строка)
RegExp = Новый COMОбъект("VBScript.RegExp");
RegExp.MultiLine = Истина;
RegExp.Global = Истина;
RegExp.IgnoreCase = Истина;
Шаблон = "№ 0*(\d+)";
RegExp.Pattern = Шаблон;
Matches=RegExp.Execute(Строка);
Возврат Matches;
КонецФункции
Для перехода нажмите Ctrl + левую кнопку мыши на нужном вам идентификаторе.
Также можно автоматически закрывать окно выбора Объекта перехода.
При первом появлении такого окна, появится окно с включением функции автозакрытия.
Если окно не появляется, настро...
В TurboConf можно создавать процедуры и функции одновременно с их первым использованием.
После того, как вы где-то в коде написали имя метода и необходимые параметры, нажмите Ctrl+Shift+M.
Программа автоматически определит названия метода, типов, параме...
Сохраняем табличный документ как html текст, отправляем на почту используя протокол smtp. Плюс в том, что при открытии сообщения на почте сразу будем видеть отчет (не прибегая к скачиванию файла и тп)
// Описание ПочтовогоПрофиля;
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
// SMTP (отправляем сообщение);
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.yandex.com";
//ПочтовыйПрофиль.АдресСервераIMAP = "imap.yandex.com";
ПочтовыйПрофиль.ПользовательSMTP = "xxxxx.xxxxxx@yandex.ru";
ПочтовыйПрофиль.ПарольSMTP = "tcbbrwraduriuusz";
ПочтовыйПрофиль.Пользователь = "xxxxx.xxxxxx@yandex.ru";
ПочтовыйПрофиль.Пароль = "tcbbrwraduriuusz";
ПочтовыйПрофиль.ПортSMTP = 465;
//ПочтовыйПрофиль.ПортIMAP = 993;
ПочтовыйПрофиль.Таймаут = 30; // мс;
ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;
// ИнтернетПочта;
Почта = Новый ИнтернетПочта;
ПодключеноУспешно = Ложь;
Попытка
Почта.Подключиться(ПочтовыйПрофиль, ПротоколИнтернетПочты.IMAP);
ПодключеноУспешно = Истина;
Исключение
КонецПопытки;
// Проверка;
Если НЕ ПодключеноУспешно Тогда
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ОписаниеОшибки(),
УровеньЖурналаРегистрации.Ошибка,,, "Сообщение- не было отправлено!");
Возврат;
Иначе
АдресФайлаВложения = ПолучитьИмяВременногоФайла(".txt");
// Формирование отчета;
ТаблДок = Новый ТабличныйДокумент;
// Формируем отчет (какой хотим);
Отчеты.ABCXYZАнализНоменклатуры.Создать().СкомпоноватьРезультат(ТаблДок);
ТаблДок.Записать(АдресФайлаВложения, ТипФайлаТабличногоДокумента.HTML);
ТекстHTML = "";
ТекДок = Новый ТекстовыйДокумент;
ТекДок.Прочитать(АдресФайлаВложения);
ТекстHTML = ТекДок.ПолучитьТекст();
// Формирование сообщения;
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.Тема = СтрШаблон("Отчет ""Остатки товаров организаций"" от %1", Формат(ТекущаяДата(), "ДЛФ=DD"));
ПочтовоеСообщение.Важность = ВажностьИнтернетПочтовогоСообщения.Наивысшая;
ПочтовоеСообщение.Тексты.Добавить(ТекстHTML, ТипТекстаПочтовогоСообщения.HTML);
//
ПочтовоеСообщение.Отправитель.Адрес = "xxxxx.xxxxxx@yandex.ru";
ПочтовоеСообщение.Получатели.Добавить("xxxxx.xxxxxx@yandex.ru");
//ИнтернетПочтовоеВложение = ПочтовоеСообщение.Вложения.Добавить(АдресФайлаВложения, "Остатки товаров организаций");
Попытка
СоответствиеОтвет = Почта.Послать(ПочтовоеСообщение,, ПротоколИнтернетПочты.SMTP);
Исключение
КонецПопытки;
КонецЕсли;
// Описание ПочтовогоПрофиля;
ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;
// SMTP (отправляем сообщение);
ПочтовыйПрофиль.АдресСервераSMTP = "smtp.yandex.com";
//ПочтовыйПрофиль.АдресСервераIMAP = "imap.yandex.com";
ПочтовыйПрофиль.ПользовательSMTP = "xxxxx.xxxxxx@yandex.ru";
ПочтовыйПрофиль.ПарольSMTP = "tcbbrwraduriuusz";
ПочтовыйПрофиль.Пользователь = "xxxxx.xxxxxx@yandex.ru";
ПочтовыйПрофиль.Пароль = "tcbbrwraduriuusz";
ПочтовыйПрофиль.ПортSMTP = 465;
//ПочтовыйПрофиль.ПортIMAP = 993;
ПочтовыйПрофиль.Таймаут = 30; // мс;
ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;
ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;
// ИнтернетПочта;
Почта = Новый ИнтернетПочта;
ПодключеноУспешно = Ложь;
Попытка
Почта.Подключиться(ПочтовыйПрофиль, ПротоколИнтернетПочты.IMAP);
ПодключеноУспешно = Истина;
Исключение
КонецПопытки;
// Проверка;
Если НЕ ПодключеноУспешно Тогда
ЖурналРегистрации.ДобавитьСообщениеДляЖурналаРегистрации(ОписаниеОшибки(),
УровеньЖурналаРегистрации.Ошибка,,, "Сообщение- не было отправлено!");
Возврат;
Иначе
АдресФайлаВложения = ПолучитьИмяВременногоФайла(".txt");
// Формирование отчета;
ТаблДок = Новый ТабличныйДокумент;
// Формируем отчет (какой хотим);
Отчеты.ABCXYZАнализНоменклатуры.Создать().СкомпоноватьРезультат(ТаблДок);
ТаблДок.Записать(АдресФайлаВложения, ТипФайлаТабличногоДокумента.HTML);
ТекстHTML = "";
ТекДок = Новый ТекстовыйДокумент;
ТекДок.Прочитать(АдресФайлаВложения);
ТекстHTML = ТекДок.ПолучитьТекст();
// Формирование сообщения;
ПочтовоеСообщение = Новый ИнтернетПочтовоеСообщение;
ПочтовоеСообщение.Тема = СтрШаблон("Отчет ""Остатки товаров организаций"" от %1", Формат(ТекущаяДата(), "ДЛФ=DD"));
ПочтовоеСообщение.Важность = ВажностьИнтернетПочтовогоСообщения.Наивысшая;
ПочтовоеСообщение.Тексты.Добавить(ТекстHTML, ТипТекстаПочтовогоСообщения.HTML);
//
ПочтовоеСообщение.Отправитель.Адрес = "xxxxx.xxxxxx@yandex.ru";
ПочтовоеСообщение.Получатели.Добавить("xxxxx.xxxxxx@yandex.ru");
//ИнтернетПочтовоеВложение = ПочтовоеСообщение.Вложения.Добавить(АдресФайлаВложения, "Остатки товаров организаций");
Попытка
СоответствиеОтвет = Почта.Послать(ПочтовоеСообщение,, ПротоколИнтернетПочты.SMTP);
Исключение
КонецПопытки;
КонецЕсли;