Вернуть значение из другой формы

Ответить


Этот вопрос предназначен для предотвращения автоматической отправки данных форм спам-ботами.
Смайлики
:D :) ;) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :!: :?: :idea: :arrow: :| :mrgreen: :geek: :ugeek:
BBCode ВКЛЮЧЕН
[img] ВКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВКЛЮЧЕНЫ
Обзор темы
   

Развернуть Обзор темы: Вернуть значение из другой формы

Re: Вернуть значение из другой формы

Сообщение Sergey-Chelny » 01 сен 2016, 21:30

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

Re: Вернуть значение из другой формы

Сообщение admin » 01 сен 2016, 10:14

Примерно так:

Код: выделить все
Функция ОтправкаПочтыДефектовка() Экспорт
      
      Режим = РежимДиалогаВопрос.ДаНет;
      Текст = "ru = ""Отправить почту?"";" + " en = ""Отправить почту?""";
      Ответ = Вопрос(НСтр(Текст), Режим, 0);
      Если Ответ = КодВозвратаДиалога.Да
         Тогда   
         Запрос = Новый Запрос;
         Запрос.Текст =
         "ВЫБРАТЬ
         |   КонтактнаяИнформация.Объект,
         |   КонтактнаяИнформация.Тип,
         |   КонтактнаяИнформация.Вид,
         |   КонтактнаяИнформация.Представление
         |ИЗ
         |   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
         |ГДЕ
         |   КонтактнаяИнформация.Объект = &Объект
         |   И КонтактнаяИнформация.Тип = &Тип";
         
         Запрос.УстановитьПараметр("Объект", Заказчик);
         Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
         //Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыРабочий);
         
         Результат = Запрос.Выполнить();
         Выборка = Запрос.Выполнить().Выбрать();
         Рез= Результат.Выгрузить();
         //добавлено мною +++     
         Если Выборка.Количество()=0 Тогда         
            Сообщить("У данного контрагента отсутствует почтовый адрес.");
         Иначе
            Если Выборка.Количество()>1 Тогда
               
               Выбор= Документы.ЗаказНаряд.ПолучитьФорму("ФормаЕмайл");
               Выбор.РезультатЗапроса = Рез;
               // ++
               мАдреса = Выбор.ОткрытьМодально(); //изменено
               Если мАдреса = Неопределено или мАдреса.Количество()=0 Тогда
                  Возврат Ложь;
               КонецЕсли;
            Иначе
               мАдреса = Новый Массив;
               мАдреса.Добавить(Рез[0].Представление);
            КонецЕсли;
            
            Для каждого Кому Из мАдреса Цикл
            // --
               
            // добавлено мною ---           
               Попытка
                  ТабДок = Новый ТабличныйДокумент;
                  ПечатьДефектовочнаяВедомость(ТабДок);
                  ТабДок.АвтоМасштаб = Истина;
                  ТабДок.ПолеСверху = 0;
                  ТабДок.ПолеСлева = 0;
                  ТабДок.ПолеСнизу = 0;
                  ТабДок.ПолеСправа = 0;
                  ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
                  НазваниеФайла = "X:\" +  Номер + " " + "Дефектовочная ведомость" + ".PDF";
                  ТабДок.Записать(НазваниеФайла,ТипФайлаТабличногоДокумента.PDF);
                  ТабДок.Очистить();
               Исключение
                  Сообщить("Ошибка при печати " + НазваниеФайла);
                  Сообщить(ОписаниеОшибки());
                  НетОшибки = Ложь;
               КонецПопытки;
               
               //данные почтового ящика отправителя
               Профиль = Новый ИнтернетПочтовыйПрофиль;
               //Профиль.ИспользоватьSSLSMTP = Истина;
               //Профиль.ИспользоватьSSLPOP3 = Истина;
               Профиль.АдресСервераSMTP = "...........";
               Профиль.АдресСервераPOP3 = "...........";
               Профиль.ПортSMTP = "25";
               Профиль.ПортPOP3 = "110";
               Профиль.Пользователь = "........@mail.ru";
               Профиль.Пароль = "........";
               Профиль.ПользовательSMTP  = ".......@mail.ru";
               Профиль.ПарольSMTP = "........";
               Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
               
               //Если Выборка.Следующий()Тогда
               //   Кому = Выборка.Представление;
               //Иначе
               //   Кому = "";
               //КонецЕсли;
               
               Письмо=Новый ИнтернетПочтовоеСообщение;
               Письмо.Получатели.Добавить(Кому);
               Фаил = Строка(Номер) + "_" + "Дефектовочная ведомость.PDF";
               Письмо.Вложения.Добавить(Новый ДвоичныеДанные(НазваниеФайла), Фаил);
               Письмо.ИмяОтправителя = ".........";
               Письмо.Отправитель = ".........@mail.ru";
               Письмо.Кодировка = "windows-1251";
               Письмо.Тема = "Дефектовочная ведомость " + Номер;
               
               Попытка
                  Почта=Новый ИнтернетПочта;
                  Почта.Подключиться(Профиль);
                  Почта.Послать(Письмо);
                  Почта.Отключиться();
                  Сообщить ("Сообщение отправлено успешно");
               Исключение
                  Сообщить (ОписаниеОшибки());   
               КонецПопытки;
               УдалитьФайлы(НазваниеФайла);
            КонецЦикла; // Добавлено            
            
         КонецЕсли;           
         
      КонецЕсли;
      
   КонецФункции


В вашей форме при нажатии на некоторую кнопку, например "Отправить"
Код: выделить все
// помещаете в массив мАдреса выбранные адреса
// и далее
Закрыть(мАдреса);

Re: Вернуть значение из другой формы

Сообщение Sergey-Chelny » 01 сен 2016, 00:12

Вот код функции, который содержиться в модуле объекта документа "Заказ-наряд":
Код: выделить все
Функция ОтправкаПочтыДефектовка() Экспорт
   
   
   Режим = РежимДиалогаВопрос.ДаНет;
   Текст = "ru = ""Отправить почту?"";" + " en = ""Отправить почту?""";
   Ответ = Вопрос(НСтр(Текст), Режим, 0);
   Если Ответ = КодВозвратаДиалога.Да
      Тогда   
          Запрос = Новый Запрос;
               Запрос.Текст =
               "ВЫБРАТЬ
               |   КонтактнаяИнформация.Объект,
               |   КонтактнаяИнформация.Тип,
               |   КонтактнаяИнформация.Вид,
               |   КонтактнаяИнформация.Представление
               |ИЗ
               |   РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
               |ГДЕ
               |   КонтактнаяИнформация.Объект = &Объект
               |   И КонтактнаяИнформация.Тип = &Тип";
               
               Запрос.УстановитьПараметр("Объект", Заказчик);
               Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
               //Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.АдресЭлектроннойПочтыРабочий);

               Результат = Запрос.Выполнить();
               Выборка = Запрос.Выполнить().Выбрать();
               Рез= Результат.Выгрузить();
//добавлено мною +++      
          Если Выборка.Количество()=0 Тогда         
            Сообщить("У данного контрагента отсутствует почтовый адрес.");
         Иначе
            Если Выборка.Количество()>1 Тогда
            
               Выбор= Документы.ЗаказНаряд.ПолучитьФорму("ФормаЕмайл");
               Выбор.РезультатЗапроса = Рез;
               Выбор.ОткрытьМодально();
            Иначе
               
            КонецЕсли;
// добавлено мною ---            
                Попытка
               ТабДок = Новый ТабличныйДокумент;
               ПечатьДефектовочнаяВедомость(ТабДок);
               ТабДок.АвтоМасштаб = Истина;
               ТабДок.ПолеСверху = 0;
               ТабДок.ПолеСлева = 0;
               ТабДок.ПолеСнизу = 0;
               ТабДок.ПолеСправа = 0;
               ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
               НазваниеФайла = "X:\" +  Номер + " " + "Дефектовочная ведомость" + ".PDF";
                ТабДок.Записать(НазваниеФайла,ТипФайлаТабличногоДокумента.PDF);
               ТабДок.Очистить();
               Исключение
               Сообщить("Ошибка при печати " + НазваниеФайла);
               Сообщить(ОписаниеОшибки());
               НетОшибки = Ложь;
               КонецПопытки;
               
               //данные почтового ящика отправителя
                Профиль = Новый ИнтернетПочтовыйПрофиль;
               //Профиль.ИспользоватьSSLSMTP = Истина;
               //Профиль.ИспользоватьSSLPOP3 = Истина;
               Профиль.АдресСервераSMTP = "...........";
               Профиль.АдресСервераPOP3 = "...........";
               Профиль.ПортSMTP = "25";
               Профиль.ПортPOP3 = "110";
               Профиль.Пользователь = "........@mail.ru";
               Профиль.Пароль = "........";
               Профиль.ПользовательSMTP  = ".......@mail.ru";
               Профиль.ПарольSMTP = "........";
               Профиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;
               
               Если Выборка.Следующий()Тогда
                  Кому = Выборка.Представление;
               Иначе
                  Кому = "";
               КонецЕсли;
               
               Письмо=Новый ИнтернетПочтовоеСообщение;
               Письмо.Получатели.Добавить(Кому);
               Фаил = Строка(Номер) + "_" + "Дефектовочная ведомость.PDF";
               Письмо.Вложения.Добавить(Новый ДвоичныеДанные(НазваниеФайла), Фаил);
               Письмо.ИмяОтправителя = ".........";
               Письмо.Отправитель = ".........@mail.ru";
               Письмо.Кодировка = "windows-1251";
               Письмо.Тема = "Дефектовочная ведомость " + Номер;
               
               Попытка
                  Почта=Новый ИнтернетПочта;
                  Почта.Подключиться(Профиль);
                  Почта.Послать(Письмо);
                  Почта.Отключиться();
                  Сообщить ("Сообщение отправлено успешно");
               Исключение
                  Сообщить (ОписаниеОшибки());   
               КонецПопытки;
               УдалитьФайлы(НазваниеФайла);
            
                     
         КонецЕсли;            

   КонецЕсли;
      
КонецФункции


В созданной мной форме такой код:
Код: выделить все
Процедура ПриОткрытии()    // при открытии заполняется таблица
   ТабличноеПоле1= РезультатЗапроса;
КонецПроцедуры

Процедура ТабличноеПоле1Выбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)  // При двойном клике выбирается элемент и собирается в строку
   Адрес= Адрес+ Элемент.ТекущаяСтрока.Представление;
КонецПроцедуры

Процедура ОсновныеДействияФормыОтправить(Кнопка)  // Кнопка закрыть форму открытую модально

   ЭтаФорма.Закрыть();
   
КонецПроцедуры


Ваш вариант я пробовал, но так и не понял где что писать- не получалось вообщем. Может подскажете какой то другой вариант вывода списка адресов ?

Re: Вернуть значение из другой формы

Сообщение admin » 31 авг 2016, 23:01

Добрый день! Сложно сказать что-то конкретное, так как задача описана очень поверхностно и не приведено никакого кода.
Поэтому отвечу общими словами. Как я понимаю Альфа-Афто работает в обычном интерфейсе.
Основные способы передачи информации из одной формы в другую:
1. Если владельцем открываемой формы является форма документа, тогда вызываете метод ОповеститьОВыборе(Данные), где в качестве параметра передаете нужные данные, а в форме документа создаете обработчик ОбработкаВыбора, где обрабатываете полученные данные.
2. Если владельцем открываемой формы является форма документа, также можно напрямую обратиться к форме документа через свойство ВладелецФормы
3. Если формы не связаны, тогда данные нужно передавать через метод Оповестить, а в форме документа обрабатывать полученные данные с помощью события Обработка Оповещения.

Вернуть значение из другой формы

Сообщение Sergey-Chelny » 31 авг 2016, 20:47

Приветствую.
Возникла проблема решении поставленной задачи.
Клиент работает в Альфа-авто. В документе "Заказ- наряд" есть возможность отправлять по почте печатные формы в PDF формате. Эту возможность писали до меня. Это не суть- вступление.
В контактных данных контрагента указывается почтовый адрес- на него и отправляется. У кого то их два и тут нужно делать выбор, на какой адрес отправить. Или на оба сразу.
Для выбора поч.адреса я создал форму. Там разместил табличное поле и туда перегоняю результат запроса (регистр сведений- контакты) из документа "Заказ-наряд" (в этом документе написана функция по отправке почтой). В моей форме я делаю выбор одному или всем адресам делать рассылку и этот выбор теперь мне нужно вернуть в форму документа "Заказ-наряд" для указания получателя . Как вернуть я не знаю. В интернете читал статьи и форумы по похожему вопросу, но приведенные примеры не работали в моем случае.
Подскажите " в какую сторону копать ", или может есть более гуманные методы решения данной задачи.

Вернуться наверх

cron