Процедура КоманднаяПанель2ЗаполнитьПоПродажам(Кнопка) ТаблицаКонтрагентов.Очистить(); СхемаКомпоновкиДанных = ЭтотОбъект.ПолучитьМакет("Макет"); ЭтотОбъект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); // Для Каждого ПараметрКомпоновщикНастроек Из КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл Параметр = Настройки.ПараметрыДанных.Элементы.Найти(ПараметрКомпоновщикНастроек); Если Параметр = Неопределено Тогда Параметр = Настройки.ПараметрыДанных.Элементы.Добавить(); ЗаполнитьЗначенияСвойств(Параметр, ПараметрКомпоновщикНастроек); КонецЕсли; КонецЦикла; УстановитьПараметр(Настройки.ПараметрыДанных, "ПериодРегистрации", ПериодРегистрации); УстановитьПараметр(Настройки.ПараметрыДанных, "Организация", Организация); УстановитьПараметр(Настройки.ПараметрыДанных, "ДатаДокументов", ДатаДокументов); УстановитьПараметр(Настройки.ПараметрыДанных, "ОтражатьВБухгалтерскомУчете", ОтражатьВБухгалтерскомУчете); УстановитьПараметр(Настройки.ПараметрыДанных, "ОтражатьВНалоговомУчете", ОтражатьВНалоговомУчете); УстановитьПараметр(Настройки.ПараметрыДанных, "ОтражатьВУправленческомУчете", ОтражатьВУправленческомУчете); Настройки.Отбор.Элементы.Очистить(); Для Каждого Стр Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл НовыйОтбор = Настройки.Отбор.Элементы.Добавить(ТипЗнч(Стр)); ЗаполнитьЗначенияСвойств(НовыйОтбор, Стр); КонецЦикла; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, , , Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений")); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки); Таблица = Новый ТаблицаЗначений; РезультатПредварительный = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений; РезультатПредварительный.УстановитьОбъект(Таблица); РезультатПредварительный.Вывести(ПроцессорКомпоновкиДанных, Истина); //ТаблицаКонтрагентов = Таблица.Скопировать(); ТаблицаКонтрагентов.Загрузить(Таблица); ЭлементыФормы.ТаблицаКонтрагентов.Колонки.Отправить.Данные = ""; ЭлементыФормы.ТаблицаКонтрагентов.Колонки.Отправить.ДанныеФлажка = "Отправить"; ЭлементыФормы.ТаблицаКонтрагентов.Колонки.ФормироватьДокументы.Данные = ""; ЭлементыФормы.ТаблицаКонтрагентов.Колонки.ФормироватьДокументы.ДанныеФлажка = "ФормироватьДокументы"; КонецПроцедуры
Процедура ОсновныеДействияФормыОтправитьПоЭлектроннойПочте(Кнопка) ПомеченныеСтроки = ТаблицаКонтрагентов.НайтиСтроки(Новый Структура("Отправить", Истина)); ИспользуемКомОбъект = Истина; ОшибкиПриОтправке = Ложь; Попытка Outlook = Новый ComОбъект("Outlook.Application"); Исключение Сообщить("Не возможно подключится к MS Outlook без вмешательства пользователя"); ИспользуемКомОбъект = Ложь; КонецПопытки; Если ПомеченныеСтроки.Количество() > 0 Тогда ЭлементыФормы.ИндикаторСозданияДокументов.Видимость = Истина; ЭлементыФормы.ИндикаторСозданияДокументов.МинимальноеЗначение = 0; ЭлементыФормы.ИндикаторСозданияДокументов.МаксимальноеЗначение = ПомеченныеСтроки.Количество(); КонецЕсли; Для Каждого Стр Из ПомеченныеСтроки Цикл Если ЗначениеЗаполнено(Стр.Документ) И ЗначениеЗаполнено(Стр.АдресЭлектроннойПочты) Тогда ДокОб = Стр.Документ.ПолучитьОбъект(); Если ДокОб > Неопределено Тогда ТемаПисьма = ?(ЗначениеЗаполнено(ЗаголовокПочтовогоСообщения), ЗаголовокПочтовогоСообщения, "отчет [1] агента за " + МесяцСтрока + " (просьба подтвердить)"); ТелоПисьма = ?(ЗначениеЗаполнено(ТекстПочтовогоСообщения), ТекстПочтовогоСообщения, "Добрый день." + Символы.ПС + "Отправляю Вам отчет [1] агента. Просьба проверить, подписать, поставить печать и скан отчета отправить обратно."); Если ОтправлятьОтчетКомитентуОПродажах Тогда ТабДок = ДокОб.ПолучитьТабличныйДокументАктаОГостиничныхУслугахКлиент(ДокОб.Ссылка, Ложь, Истина); ИмяТемпФайла = ПолучитьИмяВременногоФайла("xls"); Попытка ТабДок.Записать(ИмяТемпФайла ,ТипФайлаТабличногоДокумента.XLS); Исключение СообщитьОбОшибке(ОписаниеОшибки(),, "Не удалось прикрепить в почтовое сообщение прикрепить отчет [1] комитенту " + Стр.Документ.Контрагент + "Документ " + Стр.Документ + ". Не сформировался файл 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; КонецЦикла; ЭлементыФормы.ИндикаторСозданияДокументов.Видимость = Ложь; Сообщить("Отправлено"+?(ОшибкиПриОтправке, "с ошибками...", "!")); КонецПроцедуры
Ссылки
[1] https://www.mykib.org/article/den-devyatyy-integriroval-samyy-bolshoy-katalog-razrabotok-dlya-platformy-1s