Как открыть форму с заполнением
Открытие формы с заполнением (передача в параметре открываемой формы и реализация метода «ОбработкаЗаполнения()»)
В том месте кода, откуда нужно сделать открытие и заполнение формы нужно добавить
|
1 2 3 4 5 |
ПараметрыЗаполнения = Новый Структура; ПараметрыЗаполнения.Вставить("ТестРеквизит", "Тест строка"); ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ПараметрыЗаполнения); НовыйДокумент = ПолучитьФорму("Документ.ТестДокумент.Форма.ФормаДокумента", ПараметрыФормы, ЭтаФорма); НовыйДокумент.Открыть(); |
В структуру «ПараметрыЗаполнения» записываются все нужные для заполнения данные, затем эта структура вставляется в другую структуру под названием «ПараметрыФормы».
Причем ключ, под которым структура «ПараметрыЗаполнения» вставляется в структуру «ПараметрыФормы», должен называться именно «ЗначенияЗаполнения» иначе ничего не работать не будет.
Далее нужно реализовать событие модуля формы заполняемого объекта — «ОбработкаЗаполнения()». Для этого можно использовать следующую конструкцию:
|
1 2 3 4 5 |
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда ДанныеЗаполнения.Свойство("ТестРеквизит", ТестРеквизит); КонецЕсли; КонецПроцедуры |
Напомню, что метод структуры «Свойство()» проверяет наличие в структуре элементы с именем, указанным в первом параметре и записывает найденное значение во второй параметр — в данном случае это реквизит заполняемого объекта (если элемент с указанным именем в структуре не найден, то во второй параметр записывается «Неопределено»).
Пример
Возникла задача из ДО открыть форму создания нового элемента номенклатуры в ERP и передать туда навигационную ссылку на карточку документа в ДО.
Реализация была такая:
- Код, вызывающий внешнюю обработку и передающий в неё массив с параметром. Параметров при желании можно передать больше
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
&НаКлиенте Процедура Расш_СоздатьКарточкуНоменклатурыВЕрпПосле(Команда) ИмяФайла = Элементы.ТЧ.ТекущиеДанные.Файл; СсылкаНаФайл = НайтиСсылкуНаФайл(ИмяФайла); // Открытие внешней обработки из ERP Если ЗначениеЗаполнено(Объект.Ссылка.УникальныйИдентификатор()) Тогда Если ЗначениеЗаполнено(Объект.Ссылка) тогда ЗапуститьПриложение(КаталогПрограммы() + "1cv8c.exe ENTERPRISE /S ""***"" /N ""***"" /P ""***"" /DisableStartupMessages /Execute ""\\***\ВнешниеОбработки\КарточкаНоменклатуры.epf"" /C ""1;"+Строка(СсылкаНаФайл)+"""",,Истина); // /S База /N Пользователь /P пароль /Execute Внешняя обработка /С передать параметр /N ""ОбменСДокументооборотом"" /P ""obmendo"" /itdi-открытие форм в основном окне /DisableStartupMessages ЭтаФорма.Прочитать(); КонецЕсли; Иначе Сообщить("Внимание! Перед добавлением запишите документ"); КонецЕсли КонецПроцедуры &НаСервере Функция НайтиСсылкуНаФайл(ИмяФайла) Файл = Справочники.Файлы.НайтиПоНаименованию(ИмяФайла).Ссылка; СсылкаНаФайл =ПолучитьНавигационнуюСсылку(Файл); Возврат СсылкаНаФайл; КонецФункции |
- Код обработки
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
&НаКлиенте Процедура ПриОткрытии(Отказ) Стр = СтрЗаменить(ПараметрЗапуска,";",Символы.ПС); // ПараметрЗапуска МассивПараметров = Новый Массив(); ТекстовыйДокументИзСтроки = Новый ТекстовыйДокумент(); ТекстовыйДокументИзСтроки.УстановитьТекст(Стр); Для Индекс = 1 По ТекстовыйДокументИзСтроки.КоличествоСтрок() Цикл МассивПараметров.Добавить(ТекстовыйДокументИзСтроки.ПолучитьСтроку(Индекс)); КонецЦикла; Если МассивПараметров[0] = "1" Тогда ЭлементыОтбора = Новый Структура("Описание", МассивПараметров[1]); ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЭлементыОтбора); ДругаяФорма = ПолучитьФорму("Справочник.Номенклатура.ФормаОбъекта",ПараметрыФормы,ЭтаФорма); ДругаяФорма.Объект.НавСсылка = МассивПараметров[1]; ДругаяФорма.Открыть(); КонецЕсли; Закрыть(); КонецПроцедуры |
- Кратко, что нужно
|
1 2 3 |
ДругаяФорма = ПолучитьФорму("Справочник.Номенклатура.ФормаОбъекта",ПараметрыФормы,ЭтаФорма); ДругаяФорма.Объект.НавСсылка = МассивПараметров[1]; ДругаяФорма.Открыть(); |


Комментарии закрыты