Меню

Сабсистемс Сабсистемс Мегапрайс Мегапрайс Разработки Разработки Форум Форум Поддержка Поддержка Отзывы Отзывы Об Авторе Об Авторе Новости Новости
Регистрация Войти
Страницы: 1
Ответить
RSS
1С 8.2-8.3 - Как программно открыть вторую форму внешней обработки с данными из первой
 
Очень частый вопрос, несмотря на элементарность.
Скорее связан с тем, что по СП нет примера конкретного вызова. Люди путаются что писать в параметрах.
Привожу пример процедуры - вызов второй управляемой формы с данными из первой формы
Работает во всех режимах на управляемых формах (тонкий, толстый, веб-клиент):.

Процедура также демонстрирует возврат данных из второй формы (например что то там изменили).

&НаКлиенте
Процедура ПоискСоответствий(Команда)

АдресПередаваемыхПараметров = ПоместитьДанныеВоВременноеХранилище(); СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Адрес",АдресПередаваемыхПараметров);

//Тут два варианта в случае если обработка как внешняя, либо ее добавили в состав конфигурации
Попытка

АдресВоВременномХранилище = ОткрытьФормуМодально("Обработка.мегапрайсРасширеннаяЗагрузкаИзExcel.Форма.ФормаСоответствияИмпортСправочник"
,СтруктураПараметров,ЭтаФорма);

Исключение

АдресВоВременномХранилище = ОткрытьФормуМодально("ВнешняяОбработка.мегапрайсРасширеннаяЗагрузкаИзExcel.Форма.ФормаСоответствияИмпортСправочник"
,СтруктураПараметров,ЭтаФорма);

КонецПопытки;

//В случае если переданы обратные данные из второй формы (опять таки из хранилища по адресу)
Если ЗначениеЗаполнено(АдресВоВременномХранилище) Тогда
ЗаполнитьСоответствияНаСервере(АдресВоВременномХранилище);
КонецЕсли;

Состояние("Команда выполнена"  ;)   ;

КонецПроцедуры
 
Процедура заполнения данных  в хранилище для передачи.


Пример:


&НаСервере

Функция ПоместитьДанныеВоВременноеХранилище()

Перем СтруктураПараметров;

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Партнер",Объект.Партнер);
СтруктураПараметров.Вставить("Соглашение",Объект.Соглашение);

СтруктураПараметров.Вставить("ДокументОрганизация",Объект.ДокументОрганизация);
СтруктураПараметров.Вставить("ДокументНалогообложениеНДС",Объект.ДокументНалогообложениеНДС);
СтруктураПараметров.Вставить("ДокументСклад",Объект.ДокументСклад);

СтруктураПараметров.Вставить("ВидЦенНоменклатурыЗакупочная",Объект.ВидЦенНоменклатурыЗакупочная);
СтруктураПараметров.Вставить("ВидЦенНоменклатурыПродажи",Объект.ВидЦенНоменклатурыПродажи);

СтруктураПараметров.Вставить("мегапрайсКонтрольАртикулаИНаименования",Объект.мегапрайсКонтрольАртикулаИНаименования);
СтруктураПараметров.Вставить("мегапрайсСоздаватьШтрихкодыДляНовойНоменклатуры",Объект.мегапрайсСоздаватьШтрихкодыДляНовойНоменклатуры);

СтруктураПараметров.Вставить("ТабличнаяЧасть",Объект.ТабличнаяЧасть.Выгрузить());
СтруктураПараметров.Вставить("СвойстваНоменклатуры",Объект.СвойстваНоменклатуры.Выгрузить());
СтруктураПараметров.Вставить("СвойстваХарактеристик",Объект.СвойстваХарактеристик.Выгрузить());
СтруктураПараметров.Вставить("НастройкаПоиска",Объект.НастройкаПоиска.Выгрузить());

Адрес = ПоместитьВоВременноеХранилище(СтруктураПараметров,Новый УникальныйИдентификатор);

Возврат Адрес;

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

Пример:


&НаСервереПроцедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

СтруктураПараметров = ПолучитьИзВременногоХранилища(Параметры.Адрес);

ПроизводительОтбор = СтруктураПараметров.Производитель;

КонецПроцедуры
 
Дополнение.

Для передачи измененных данных в первую форму нужно создать обработчик события ПриЗакрытии либо какую то кнопку, которая будет закрывать вторую форму и в ней сделать тоже самое - процедуру возврата заполнения данных во временное хранилище.

В первой форме мы использовали возврат результата открытия второй формы.
АдресВоВременномХранилище = ОткрытьФормуМодально("ВнешняяОбработка.мегапрайсРасширеннаяЗагрузкаИзExcel.Форма.ФормаСоответствияИмпортСправочник"
,СтруктураПараметров,ЭтаФорма);

Там же

Если ЗначениеЗаполнено(АдресВоВременномХранилище) Тогда
ЗаполнитьСоответствияНаСервере(АдресВоВременномХранилище);
КонецЕсли;


ЗаполнитьСоответствияНаСервере - это процедурка которая будет опять читать хранилище по адресу и заполнять данные в первой форме.
 
PS Материал является примером на момент написания данного кода много лет назад.
Учитывает реализацию работы с разрешенным режимом модальных окон.

Так как 1С постепенно отказывается от модальности, то процедуры вызова открытия на текущий момент без модальности должны быть написаны иначе.
Но суть остается та же - передача данных через структуру параметров либо хранилище. Заполнение и передача обратно.

Для отключения модальности следуйте стандартной документации.
Страницы: 1
Ответить
Читают тему
Форма ответов
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Отправить Отменить