Процедура КоманднаяПанель2ЗаполнитьПоПродажам(Кнопка)
ТаблицаКонтрагентов.Очистить();
СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("Макет");
ЭтотОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
//
Для Каждого ПараметрКомпоновщикНастроек Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
Параметр = Настройки.ПараметрыДанных.Элементы.Найти(ПараметрКомпоновщикНастроек);
Если Параметр = Неопределено Тогда
Параметр = Настройки.ПараметрыДанных.Элементы.Добавить();
ЗаполнитьЗначенияСвойств(Параметр, ПараметрКомпоновщикНастроек);
КонецЕсли;
КонецЦикла;
УстановитьПараметр(Настройки.ПараметрыДанных, "ПериодРегистрации", ПериодРегистрации);
УстановитьПараметр(Настройки.ПараметрыДанных, "Организация", Организация);
УстановитьПараметр(Настройки.ПараметрыДанных, "ДатаДокументов", ДатаДокументов);
УстановитьПараметр(Настройки.ПараметрыДанных, "ОтражатьВБухгалтерскомУчете", ОтражатьВБухгалтерскомУчете);
УстановитьПараметр(Настройки.ПараметрыДанных, "ОтражатьВНалоговомУчете", ОтражатьВНалоговомУчете);
УстановитьПараметр(Настройки.ПараметрыДанных, "ОтражатьВУправленческомУчете", ОтражатьВУправленческомУчете);
Настройки.Отбор.Элементы.Очистить();
Для Каждого Стр Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
НовыйОтбор = Настройки.Отбор.Элементы.Добавить(ТипЗнч(Стр));
ЗаполнитьЗначенияСвойств(НовыйОтбор, Стр);
КонецЦикла;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки);
Таблица = Новый ТаблицаЗначений;
РезультатПредварительный = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
РезультатПредварительный.УстановитьОбъект(Таблица);
РезультатПредварительный.Вывести(ПроцессорКомпоновкиДанных, Истина);
//ТаблицаКонтрагентов = Таблица.Скопировать();
ТаблицаКонтрагентов.Загрузить(Таблица);
ЭлементыФормы.ТаблицаКонтрагентов.Колонки.Отправить.Данные = "";
ЭлементыФормы.ТаблицаКонтрагентов.Колонки.Отправить.ДанныеФлажка = "Отправить";
ЭлементыФормы.ТаблицаКонтрагентов.Колонки.ФормироватьДокументы.Данные = "";
ЭлементыФормы.ТаблицаКонтрагентов.Колонки.ФормироватьДокументы.ДанныеФлажка = "ФормироватьДокументы";
КонецПроцедуры
Процедура ОсновныеДействияФормыОтправитьПоЭлектроннойПочте(Кнопка)
ПомеченныеСтроки = ТаблицаКонтрагентов.НайтиСтроки(Новый Структура("Отправить", Истина));
ИспользуемКомОбъект = Истина;
ОшибкиПриОтправке = Ложь;
Попытка
Outlook = Новый ComОбъект("Outlook.Application");
Исключение
Сообщить("Не возможно подключится к MS Outlook без вмешательства пользователя");
ИспользуемКомОбъект = Ложь;
КонецПопытки;
Если ПомеченныеСтроки.Количество() > 0 Тогда
ЭлементыФормы.ИндикаторСозданияДокументов.Видимость = Истина;
ЭлементыФормы.ИндикаторСозданияДокументов.МинимальноеЗначение = 0;
ЭлементыФормы.ИндикаторСозданияДокументов.МаксимальноеЗначение = ПомеченныеСтроки.Количество();
КонецЕсли;
Для Каждого Стр Из ПомеченныеСтроки Цикл
Если ЗначениеЗаполнено(Стр.Документ) И ЗначениеЗаполнено(Стр.АдресЭлектроннойПочты) Тогда
ДокОб = Стр.Документ.ПолучитьОбъект();
Если ДокОб > Неопределено Тогда
ТемаПисьма = ?(ЗначениеЗаполнено(ЗаголовокПочтовогоСообщения),
ЗаголовокПочтовогоСообщения,
"отчет агента за " + МесяцСтрока + " (просьба подтвердить)");
ТелоПисьма = ?(ЗначениеЗаполнено(ТекстПочтовогоСообщения),
ТекстПочтовогоСообщения,
"Добрый день." + Символы.ПС + "Отправляю Вам отчет агента. Просьба проверить, подписать, поставить печать и скан отчета отправить обратно.");
Если ОтправлятьОтчетКомитентуОПродажах Тогда
ТабДок = ДокОб.ПолучитьТабличныйДокументАктаОГостиничныхУслугахКлиент(ДокОб.Ссылка, Ложь, Истина);
ИмяТемпФайла = ПолучитьИмяВременногоФайла("xls");
Попытка
ТабДок.Записать(ИмяТемпФайла ,ТипФайлаТабличногоДокумента.XLS);
Исключение
СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось прикрепить в почтовое сообщение прикрепить отчет комитенту " + Стр.Документ.Контрагент + "Документ " + Стр.Документ + ". Не сформировался файл Excel.");
ОшибкиПриОтправке = Истина;
Прервать;
КонецПопытки;
КонецЕсли;
Если ОтправлятьАкт И ЗначениеЗаполнено(Стр.Статус) И Стр.Статус > Перечисления.СтатусыДокументов.ОтправленНаСогласование Тогда
ТабДокПечатьАкта = ДокОб.ПечатьАкта(Истина);
ИмяТемпФайлаПечатьАкта = ПолучитьИмяВременногоФайла("xls");
Попытка
ТабДокПечатьАкта.Записать(ИмяТемпФайлаПечатьАкта ,ТипФайлаТабличногоДокумента.XLS);
Исключение
СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось прикрепить в почтовое сообщение прикрепить акт " + Стр.Документ.Контрагент + "Документ " + Стр.Документ + ". Не сформировался файл Excel.");
ОшибкиПриОтправке = Истина;
Прервать;
КонецПопытки;
КонецЕсли;
Если ОтправлятьСчетНаОплатуПокупателю Тогда
ПрикреплятьСчетНаОплатуПокупателю = Ложь;
Если ЗначениеЗаполнено(Стр.СчетНаОплатуПокупателю) Тогда
ДокОбСчетНаОплатуПокупателю = Стр.СчетНаОплатуПокупателю.ПолучитьОбъект();
Если ДокОбСчетНаОплатуПокупателю > Неопределено Тогда
ТабДокСчетНаОплатуПокупателю = ДокОбСчетНаОплатуПокупателю.ПечатьСчетаЗаказаКорректировки("СчетЗаказ", Истина);
ИмяТемпФайлаСчетНаОплатуПокупателю = ПолучитьИмяВременногоФайла("xls");
Попытка
ТабДокСчетНаОплатуПокупателю.Записать(ИмяТемпФайлаСчетНаОплатуПокупателю ,ТипФайлаТабличногоДокумента.XLS);
ПрикреплятьСчетНаОплатуПокупателю = Истина;
Исключение
СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось в почтовое сообщение прикрепить счет " + Стр.Документ.Контрагент + "Документ " + Стр.Документ + ". Не сформировался файл Excel.");
ПрикреплятьСчетНаОплатуПокупателю = Ложь;
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ОтправлятьСчетФактураВыданный Тогда
ПрикреплятьСчетФактураВыданный = Ложь;
//сч.фактуру отправлять только когда согласован
Если ЗначениеЗаполнено(Стр.СчетФактураВыданный) И ЗначениеЗаполнено(Стр.Статус) И Стр.Статус = Перечисления.СтатусыДокументов.Согласован Тогда
ДокОбСчетФактураВыданный = Стр.СчетФактураВыданный.ПолучитьОбъект();
Если ДокОбСчетФактураВыданный > Неопределено Тогда
ДанныеДляПечати = ПолучитьДанныеДляПечатиСчФ(ДокОбСчетФактураВыданный, ДокОб);
ТабДокСчетФактураВыданный = ДокОбСчетФактураВыданный.ПечатьСчетаФактуры(ДанныеДляПечати, "СчетФактура", Истина);
ИмяТемпФайлаСчетФактураВыданный = ПолучитьИмяВременногоФайла("xls");
Попытка
ТабДокСчетФактураВыданный.Записать(ИмяТемпФайлаСчетФактураВыданный ,ТипФайлаТабличногоДокумента.XLS);
ПрикреплятьСчетФактураВыданный = Истина;
Исключение
СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось в почтовое сообщение прикрепить счет фактуру " + Стр.Документ.Контрагент + "Документ " + Стр.Документ + ". Не сформировался файл Excel.");
ПрикреплятьСчетФактураВыданный = Ложь;
КонецПопытки;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ИспользуемКомОбъект Тогда
Письмо = Outlook.CreateItem(0);
Письмо.Subject = ТемаПисьма;
Письмо.Body = ТелоПисьма;
Если ОтправлятьОтчетКомитентуОПродажах Тогда
Письмо.Attachments.Add(ИмяТемпФайла);
КонецЕсли;
Если ОтправлятьАкт И ЗначениеЗаполнено(Стр.Статус) И Стр.Статус > Перечисления.СтатусыДокументов.ОтправленНаСогласование Тогда
Письмо.Attachments.Add(ИмяТемпФайлаПечатьАкта);
КонецЕсли;
Если ОтправлятьСчетНаОплатуПокупателю Тогда
Если ПрикреплятьСчетНаОплатуПокупателю Тогда
Письмо.Attachments.Add(ИмяТемпФайлаСчетНаОплатуПокупателю);
КонецЕсли;
КонецЕсли;
Если ОтправлятьСчетФактураВыданный Тогда
Если ПрикреплятьСчетФактураВыданный Тогда
Письмо.Attachments.Add(ИмяТемпФайлаСчетФактураВыданный);
КонецЕсли;
КонецЕсли;
Письмо.To = Стр.АдресЭлектроннойПочты;
Попытка
Письмо.Send();
Исключение
СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось отправить почтовое сообщение " + Стр.Документ.Контрагент + "Документ " + Стр.Документ);
ОшибкиПриОтправке = Истина;
Прервать;
КонецПопытки;
Если Стр.Статус > Перечисления.СтатусыДокументов.Выполнен Тогда
Статусы = РегистрыСведений.СтатусыДокументов.СоздатьНаборЗаписей();
Статусы.Отбор.Документ.Установить(Стр.Документ);
Статусы.Прочитать();
Если Статусы.Количество() > 0 Тогда
Для Каждого СтрСтатусы Из Статусы Цикл
СтрСтатусы.ТекущийСтатус = ?(Стр.Статус > Перечисления.СтатусыДокументов.Согласован, Перечисления.СтатусыДокументов.ОтправленНаСогласование, Перечисления.СтатусыДокументов.Выполнен);
КонецЦикла;
Иначе
НовСтрСтатусы = Статусы.Добавить();
НовСтрСтатусы.Документ = Стр.Документ;
НовСтрСтатусы.ТекущийСтатус = ?(Стр.Статус > Перечисления.СтатусыДокументов.Согласован, Перечисления.СтатусыДокументов.ОтправленНаСогласование, Перечисления.СтатусыДокументов.Выполнен);
КонецЕсли;
Статусы.Записать();
Стр.Статус = ?(Стр.Статус > Перечисления.СтатусыДокументов.Согласован, Перечисления.СтатусыДокументов.ОтправленНаСогласование, Перечисления.СтатусыДокументов.Выполнен);
Стр.СтатусДоРедактирования = Стр.Статус;
КонецЕсли;
Иначе
Сообщение = Новый ПочтовоеСообщение;
Сообщение.Тема = ТемаПисьма;
Сообщение.Текст = ТелоПисьма;
Если ОтправлятьОтчетКомитентуОПродажах Тогда
Сообщение.Вложения.Добавить(ИмяТемпФайла);
КонецЕсли;
Если ОтправлятьАкт И ЗначениеЗаполнено(Стр.Статус) И Стр.Статус > Перечисления.СтатусыДокументов.ОтправленНаСогласование Тогда
Сообщение.Вложения.Добавить(ИмяТемпФайлаПечатьАкта);
КонецЕсли;
Если ОтправлятьСчетНаОплатуПокупателю Тогда
Если ПрикреплятьСчетНаОплатуПокупателю Тогда
Сообщение.Вложения.Добавить(ИмяТемпФайлаСчетНаОплатуПокупателю);
КонецЕсли;
КонецЕсли;
Если ОтправлятьСчетФактураВыданный Тогда
Если ПрикреплятьСчетФактураВыданный Тогда
Сообщение.Вложения.Добавить(ИмяТемпФайлаСчетФактураВыданный);
КонецЕсли;
КонецЕсли;
Сообщение.Получатели.Добавить(Стр.АдресЭлектроннойПочты);
Почта = Новый Почта;
Попытка
Почта.Подключиться();
Почта.Послать(Сообщение);
Почта.Отключиться();
Исключение
СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось установить подключение к основной почтовой программе операционной системы.");
ОшибкиПриОтправке = Истина;
Прервать;
КонецПопытки;
Если Стр.Статус > Перечисления.СтатусыДокументов.Выполнен Тогда
Статусы = РегистрыСведений.СтатусыДокументов.СоздатьНаборЗаписей();
Статусы.Отбор.Документ.Установить(Стр.Документ);
Статусы.Прочитать();
Если Статусы.Количество() > 0 Тогда
Для Каждого СтрСтатусы Из Статусы Цикл
СтрСтатусы.ТекущийСтатус = ?(Стр.Статус > Перечисления.СтатусыДокументов.Согласован, Перечисления.СтатусыДокументов.ОтправленНаСогласование, Перечисления.СтатусыДокументов.Выполнен);
КонецЦикла;
Иначе
НовСтрСтатусы = Статусы.Добавить();
НовСтрСтатусы.Документ = Стр.Документ;
НовСтрСтатусы.ТекущийСтатус = ?(Стр.Статус > Перечисления.СтатусыДокументов.Согласован, Перечисления.СтатусыДокументов.ОтправленНаСогласование, Перечисления.СтатусыДокументов.Выполнен);
КонецЕсли;
Статусы.Записать();
Стр.Статус = ?(Стр.Статус > Перечисления.СтатусыДокументов.Согласован, Перечисления.СтатусыДокументов.ОтправленНаСогласование, Перечисления.СтатусыДокументов.Выполнен);
Стр.СтатусДоРедактирования = Стр.Статус;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЭлементыФормы.ИндикаторСозданияДокументов.Значение = ЭлементыФормы.ИндикаторСозданияДокументов.Значение + 1;
КонецЦикла;
ЭлементыФормы.ИндикаторСозданияДокументов.Видимость = Ложь;
Сообщить("Отправлено"+?(ОшибкиПриОтправке, "с ошибками...", "!"));
КонецПроцедуры