Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 00:01

Добавление на печатную форму кнопки для отправки формы по электронной почте

Автор pavel_d, 04 мар 2016, 13:27

0 Пользователей и 1 гость просматривают эту тему.

pavel_d

Здравствуйте. Помогите, пожалуйста, с задачей. Мне нужно на внешнюю печатную форму добавить кнопку для отправки печатной формы на электронную почту.

Во вложении печатная форма, которую я создавал сам на основе имеющегося макета. Там есть нужная кнопочка , но за счёт какого кода она там есть, я не понимаю. Очевидно, механизм типовой.

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

Также, на всякий случай приложу код модуля внешней печатной формы, в которой данный механизм отправке по почте реализован:

Функция СведенияОВнешнейОбработке() Экспорт
   
   ПараметрыРегистрации = Новый Структура;
   
   МассивНазначений = Новый Массив;
   МассивНазначений.Добавить("Документ.ПоступлениеИзПереработки");
   
   ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); 
   ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
   ПараметрыРегистрации.Вставить("Наименование", "Поступление в переработку ВНЕШНИЙ");
   ПараметрыРегистрации.Вставить("Версия", "1.0");
   ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
   ПараметрыРегистрации.Вставить("Информация", "Дополнительная печатная форма к документу ПоступлениеИзПереработки");
   
   //команды
   ТаблицаКоманд = Новый ТаблицаЗначений;
   ТаблицаКоманд.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
   ТаблицаКоманд.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка"));
   ТаблицаКоманд.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка"));
   ТаблицаКоманд.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
   ТаблицаКоманд.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
   
   НоваяКоманда = ТаблицаКоманд.Добавить();
   НоваяКоманда.Представление = "Акт на списание давальческих материалов";
   НоваяКоманда.Идентификатор = "ПоступлениеИзПереработкиВнешний";
   НоваяКоманда.Использование = "ВызовСерверногоМетода";
   НоваяКоманда.ПоказыватьОповещение = Ложь;
   НоваяКоманда.Модификатор = "ПечатьMXL";
   
   ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
   
   Возврат ПараметрыРегистрации;
   
КонецФункции

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
   
   Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПоступлениеИзПереработкиВнешний") Тогда
      // Формируем табличный документ и добавляем его в коллекцию печатных форм.
      УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПоступлениеИзПереработкиВнешний", "М-29",
      бит_стр_ПечатьМ29(МассивОбъектов, ОбъектыПечати), , "бит_стр_М29");
      //bt_0905_buld_261113_K
   КонецЕсли;
   
   ОбщегоНазначенияБП.ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода);
   
КонецПроцедуры

Функция бит_стр_ПечатьМ29(МассивОбъектов, ОбъектыПечати)
   
   Возврат ПечатьМ29(МассивОбъектов, ОбъектыПечати);   

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

Функция ПечатьМ29(МассивОбъектов, ОбъектыПечати)

   //bt_1210_zind_110511_N
   мОтказ = Ложь;
   бит_стр_МодульЗащиты.ПроверитьВозможностьРаботы(мОтказ);
   Если мОтказ Тогда
      Возврат Неопределено;
   КонецЕсли;
   //bt_1210_zind_110511_K
   
   Если МассивОбъектов.Количество() = 0 Тогда
      Возврат Неопределено;
   КонецЕсли;
   
   Если ТипЗнч(МассивОбъектов[0]) = Тип("ДокументСсылка.ТребованиеНакладная") Тогда
      ТипДок = "ТребованиеНакладная";
      ИмяТЧ_Материалы      = "Материалы";
      ИмяТЧ_МПЗ_Заказчика   = "МатериалыЗаказчика";
   ИначеЕсли ТипЗнч(МассивОбъектов[0]) = Тип("ДокументСсылка.ПоступлениеИзПереработки") Тогда
      ТипДок = "ПоступлениеИзПереработки";
      ИмяТЧ_Материалы      = "ИспользованныеМатериалы";
      ИмяТЧ_МПЗ_Заказчика   = "";
   Иначе
      Возврат Неопределено;
   КонецЕсли;
   
   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_М29";

   Макет = ЭтотОбъект.ПолучитьМакет("бит_стр_М29");
   
   ОблШапка   = Макет.ПолучитьОбласть("Шапка");
   ОблАЗ      = Макет.ПолучитьОбласть("АналитикаЗатрат");
   ОблШТабл   = Макет.ПолучитьОбласть("ШапкаТаблицы");
   ОблРаздел   = Макет.ПолучитьОбласть("Раздел");
   ОблСтрока   = Макет.ПолучитьОбласть("Строка");
   ОблПодвал   = Макет.ПолучитьОбласть("Подвал");
   
   ПервыйДокумент = Истина;
   
   Для Каждого Объект Из МассивОбъектов Цикл
      
      СсылкаНаОбъект = Объект.Ссылка;
      
      Если НЕ ПервыйДокумент Тогда
         ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;

      ПервыйДокумент = Ложь;

      НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;
            
      
      ОблШапка.Параметры.Организация = СсылкаНаОбъект.Организация.НаименованиеПолное;
      ОблШапка.Параметры.Заказчик = СсылкаНаОбъект.бит_Заказчик.НаименованиеПолное;
      ОблШапка.Параметры.Договор = СсылкаНаОбъект.бит_ДоговорПодряда;
      ОблШапка.Параметры.НоменклатурнаяГруппа = СсылкаНаОбъект.НоменклатурнаяГруппа;
      ОблШапка.Параметры.Контрагент = СсылкаНаОбъект.Контрагент.НаименованиеПолное;
      ОблШапка.Параметры.ДоговорСубподряда = СсылкаНаОбъект.ДоговорКонтрагента;
      ОблШапка.Параметры.Дата = Формат(СсылкаНаОбъект.Дата,"ДФ=dd.MM.yyyy");      
      //bt_1210_mula_240512_N
      Если ТипДок = "ТребованиеНакладная" Тогда
         
         Если СсылкаНаОбъект.СчетаУчетаЗатратВТаблице Тогда
            
            масПодр   = Новый Массив;
            масСч    = Новый Массив;
            масНГ    = Новый Массив;
            масСЗ    = Новый Массив;
            масАЗ    = Новый Массив;
            
            мИспользуетсяДопАналитика = Константы.бит_стр_ИспользоватьДополнительнуюАналитикуЗатрат.Получить() ИЛИ Константы.бит_стр_ИспользоватьДополнительнуюАналитикуЗатрат_Заказчик.Получить();
            Для Каждого Строка Из СсылкаНаОбъект.Материалы Цикл
               Если масПодр.Найти(Строка.ПодразделениеЗатрат) = Неопределено Тогда
                  масПодр.Добавить(Строка.ПодразделениеЗатрат);
               КонецЕсли;
               Если масСч.Найти(Строка.СчетЗатрат) = Неопределено Тогда
                  масСч.Добавить(Строка.СчетЗатрат);
               КонецЕсли;
               Если масНГ.Найти(Строка.НоменклатурнаяГруппа) = Неопределено Тогда
                  масНГ.Добавить(Строка.НоменклатурнаяГруппа);
               КонецЕсли;
               Если масСЗ.Найти(Строка.СтатьяЗатрат) = Неопределено Тогда
                  масСЗ.Добавить(Строка.СтатьяЗатрат);
               КонецЕсли;
               Если масАЗ.Найти(Строка.бит_стр_АналитикаЗатрат) = Неопределено Тогда
                  масАЗ.Добавить(Строка.бит_стр_АналитикаЗатрат);
               КонецЕсли;
            КонецЦикла;
            
            Если масПодр.Количество() = 0 Тогда
               ОблАЗ.Параметры.Подразделение = "Подразделение: ";
            ИначеЕсли масПодр.Количество() = 1 Тогда
               ОблАЗ.Параметры.Подразделение = "Подразделение: " + масПодр[0];
            Иначе
               Т_Подр = "";
               Для Каждого Элемент ИЗ масПодр Цикл
                  Т_Подр = Т_Подр + Элемент + ", ";
               КонецЦикла;
               Т_Подр = СтрЗаменить(Т_Подр + ",", ", ,", "");
               ОблАЗ.Параметры.Подразделение = "Подразделения: " + Т_Подр;
            КонецЕсли;
            
            Если масСч.Количество() = 0 Тогда
               ОблАЗ.Параметры.Счет = "";
            ИначеЕсли масСч.Количество() = 1 Тогда
               ОблАЗ.Параметры.Счет = "Счет затрат: " + масСч[0].Код + " (" + масСч[0].Наименование + ")";
            Иначе
               Т_Счет = "Счета затрат: ";
               Для Каждого Элемент ИЗ масСч Цикл
                  Т_Счет = Т_Счет + Элемент.Код + " (" + Элемент.Наименование + "), ";
               КонецЦикла;
               Т_Счет = СтрЗаменить(Т_Счет + ",", ", ,", "");
               ОблАЗ.Параметры.Счет = Т_Счет;
            КонецЕсли;
            
            Если масНГ.Количество() = 0 Тогда
               ОблАЗ.Параметры.ИмяСубконто1 = "Номенклатурная группа:";
               ОблАЗ.Параметры.Субконто1   = "";
               ОблШапка.Параметры.НГ      = "";
            ИначеЕсли масНГ.Количество() = 1 Тогда
               ОблАЗ.Параметры.ИмяСубконто1 = "Номенклатурная группа: ";
               ОблАЗ.Параметры.Субконто1   = масНГ[0];
               ОблШапка.Параметры.НГ      = масНГ[0];
            Иначе
               Т_НГ = "";
               Для Каждого Элемент ИЗ масНГ Цикл
                  Т_НГ = Т_НГ + Элемент + ", ";
               КонецЦикла;
               Т_НГ = СтрЗаменить(Т_НГ + ",", ", ,", "");
               ОблАЗ.Параметры.ИмяСубконто1 = "Номенклатурные группы: ";
               ОблАЗ.Параметры.Субконто1   = Т_НГ;
               ОблШапка.Параметры.НГ      = Т_НГ;
            КонецЕсли;
            
            Если масСЗ.Количество() = 0 Тогда
               ОблАЗ.Параметры.ИмяСубконто2   = "СтатьяЗатрат:";
               ОблАЗ.Параметры.Субконто2      = "";
            ИначеЕсли масСЗ.Количество() = 1 Тогда
               ОблАЗ.Параметры.ИмяСубконто2   = "СтатьяЗатрат: ";
               ОблАЗ.Параметры.Субконто2      = масСЗ[0];
            Иначе
               Т_СЗ = "";
               Для Каждого Элемент ИЗ масСЗ Цикл
                  Т_СЗ = Т_СЗ + Элемент + ", ";
               КонецЦикла;
               Т_СЗ = СтрЗаменить(Т_СЗ + ",", ", ,", "");
               ОблАЗ.Параметры.ИмяСубконто2   = "СтатьяЗатрат: ";
               ОблАЗ.Параметры.Субконто2      = Т_СЗ;
            КонецЕсли;
            
            Если мИспользуетсяДопАналитика Тогда
               Если масАЗ.Количество() = 0 Тогда
                  ОблАЗ.Параметры.ИмяСубконто3   = "Аналитика затрат:";
                  ОблАЗ.Параметры.Субконто3      = "";
               ИначеЕсли масАЗ.Количество() = 1 Тогда
                  ОблАЗ.Параметры.ИмяСубконто3   = "Аналитика затрат: ";
                  ОблАЗ.Параметры.Субконто3      = масАЗ[0];
               Иначе
                  Т_АЗ = "";
                  Для Каждого Элемент ИЗ масАЗ Цикл
                     Т_АЗ = Т_АЗ + Элемент + ", ";
                  КонецЦикла;
                  Т_АЗ = СтрЗаменить(Т_АЗ + ",", ", ,", "");
                  ОблАЗ.Параметры.ИмяСубконто3   = "Аналитика затрат: ";
                  ОблАЗ.Параметры.Субконто3      = Т_АЗ;
               КонецЕсли;
            КонецЕсли;   
            
         Иначе
            
            ОблАЗ.Параметры.Счет = "Счет затрат: " + СсылкаНаОбъект.СчетЗатрат.Код + " (" + СсылкаНаОбъект.СчетЗатрат.Наименование + ")";
            
            ОблАЗ.Параметры.Подразделение = ?(ЗначениеЗаполнено(СсылкаНаОбъект.ПодразделениеЗатрат), "Подразделение: " + СсылкаНаОбъект.ПодразделениеЗатрат, "");
            
            НГ = Неопределено;
            Для каждого Суб Из СсылкаНаОбъект.СчетЗатрат.ВидыСубконто Цикл
               Номер = Суб.НомерСтроки;
               Субконто = СсылкаНаОбъект["Субконто" + Номер];
               Если ЗначениеЗаполнено(Субконто) Тогда
                  ОблАЗ.Параметры["ИмяСубконто" + Номер]   = Суб.ВидСубконто.Наименование + ": ";
                  ОблАЗ.Параметры["Субконто" + Номер]      = Субконто;
                  Если ТипЗнч(Субконто) = Тип("СправочникСсылка.НоменклатурныеГруппы") Тогда
                     НГ = Субконто;   
                  КонецЕсли;
               КонецЕсли;
            КонецЦикла;
            
            ОблШапка.Параметры.НГ = НГ;   
            
         КонецЕсли;
         
         ТабДокумент.Вывести(ОблШапка);
         
         Если Не СсылкаНаОбъект.Материалы.Количество() = 0 Тогда
            ТабДокумент.Вывести(ОблАЗ);
         КонецЕсли;
         
      Иначе
         
         ТабДокумент.Вывести(ОблШапка);
         
      КонецЕсли;
      //bt_1210_mula_240512_K
      
      // 2. ЗАПОЛНЕНИЕ ДАННЫХ ТАБЛИЦЫ
      
      ТабДокумент.Вывести(ОблШТабл);
      
      Сч = 0;
      //bt_1210_mula_240512_N
      ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
      //bt_1210_mula_240512_K
      
      Если ТипДок = "ТребованиеНакладная" Тогда
         Если Не СсылкаНаОбъект.Материалы.Количество() = 0
            И Не СсылкаНаОбъект.МатериалыЗаказчика.Количество() = 0 Тогда
            бит_стр_ВывестиТЧ(СсылкаНаОбъект, ТабДокумент, "Материалы", ОблРаздел, "Материалы", ОблСтрока, ДопКолонка, Сч);
            бит_стр_ВывестиТЧ(СсылкаНаОбъект, ТабДокумент, "МатериалыЗаказчика", ОблРаздел, "МПЗ " + СсылкаНаОбъект.Контрагент, ОблСтрока, ДопКолонка, Сч);
         ИначеЕсли Не СсылкаНаОбъект.Материалы.Количество() = 0 Тогда
            бит_стр_ВывестиТЧ(СсылкаНаОбъект, ТабДокумент, "Материалы", ОблРаздел, "", ОблСтрока, ДопКолонка, Сч);
         ИначеЕсли Не СсылкаНаОбъект.МатериалыЗаказчика.Количество() = 0 Тогда
            бит_стр_ВывестиТЧ(СсылкаНаОбъект, ТабДокумент, "МатериалыЗаказчика", ОблРаздел, "МПЗ " + СсылкаНаОбъект.Контрагент, ОблСтрока, ДопКолонка, Сч);   
         КонецЕсли;
      ИначеЕсли ТипДок = "ПоступлениеИзПереработки" Тогда
         бит_стр_ВывестиТЧ(СсылкаНаОбъект, ТабДокумент, "ИспользованныеМатериалы", ОблРаздел, "", ОблСтрока, ДопКолонка, Сч);   
      КонецЕсли;
      
      
      // 3. ЗАПОЛНЕНИЕ ПОДВАЛА
      
      //bt_1004_buld_021012_N
      СтруктураОтветственных = бит_стр_РаботаСКомиссиями.ПолучитьСоставОтветственных(СсылкаНаОбъект);   
      
      ОблПодвал.Параметры.Заполнить(СтруктураОтветственных);
      //bt_1004_buld_021012_K
      
      ТабДокумент.Вывести(ОблПодвал);
      
      // В табличном документе зададим имя области, в которую был
      // выведен объект. Нужно для возможности печати покомплектно.
      УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент,
         НомерСтрокиНачало, ОбъектыПечати, СсылкаНаОбъект);

   КонецЦикла;
   
   Возврат ТабДокумент;   

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

Процедура бит_стр_ВывестиТЧ(СсылкаНаОбъект, ТабДокумент, ИмяТЧ, ОблРаздел, ТекстРаздела, ОблСтрока, ДопКолонка, Сч)
   
   мЕстьПлановоеКоличество = Не СсылкаНаОбъект.Метаданные().ТабличныеЧасти[ИмяТЧ].Реквизиты.Найти("бит_стр_ПлановоеКоличество") = Неопределено;
   Если Не ТекстРаздела = "" Тогда
      ОблРаздел.Параметры.Раздел = ТекстРаздела;
      ТабДокумент.Вывести(ОблРаздел);
   КонецЕсли;
   
   Для Каждого Стр Из СсылкаНаОбъект[ИмяТЧ] Цикл
      Сч = Сч + 1;
      ОблСтрока.Параметры.Заполнить(Стр);
      ОблСтрока.Параметры.Номер = Сч;
      //bt_1210_mula_240512_N
      // Доделать
      //Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
      //   ОблСтрока.Параметры.ЕдиницаИзмерения    = СокрЛП(Стр.Номенклатура.Артикул);
      //ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
      //   ОблСтрока.Параметры.ЕдиницаИзмерения    = СокрЛП(Стр.Номенклатура.Код);
      //Иначе
      //   ОблСтрока.Параметры.ЕдиницаИзмерения    = "";
      //КонецЕсли;
      ОблСтрока.Параметры.ЕдиницаИзмерения = Стр.Номенклатура.ЕдиницаИзмерения;
      //bt_1210_mula_240512_K
      ОблСтрока.Параметры.КолФакт   = Стр.Количество;
      ОблСтрока.Параметры.КолПлан   = ?(мЕстьПлановоеКоличество, Стр.бит_стр_ПлановоеКоличество, Стр.Количество);
      ОблСтрока.Параметры.Дельта   = ?(мЕстьПлановоеКоличество, Стр.бит_стр_ПлановоеКоличество - Стр.Количество, "");
      ТабДокумент.Вывести(ОблСтрока);
   КонецЦикла;   
   
КонецПроцедуры







vitasw


pavel_d


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск