Имя: Пароль:
1C
1С v8
Передача параметров между двумя формами
,
0 Стажер_1С
 
09.08.18
14:53
Привет всем! Управляемые формы

Есть  2 формы: ФормаДокумента и ФормаПодбора(Произвольная форма);

Из Формы Документа я открываю 2 форму:

ВтораяФорма= ПолучитьФорму("Документ.МойДок.Форма.ФормаПодбора");
ВтораяФорма.ОсновныеСредства = Элементы.основныесредства.ТекущиеДанные.ОсновноеСредство;
ВтораяФорма.Открыть();

Во второй форме у меня есть ТаблицаЗначений с 2 колонками:
1. ШтрихКОД(тип - строка);
2. Снять (тип - булево).

Мне надо перекинуть из второй формы,все строки из ТаблицыЗначения, где снять=истина, в первую форму (ФормаДокумента) и там уже заполонить свою табличную часть.
Как это сделать???
1 Mankubus
 
09.08.18
15:17
(0) 1. При получении формы заполни владельца
2. При закрытии делай оповестить о выборе
3. В обработке выбора лови значения
2 Helfershelfer
 
09.08.18
15:25
в дополнение к (1) можно добавить:
поместите массив отобранных строк исходной таблицы во временное хранилище (ВХ).
в обработке оповещения передавайте адрес ВХ.
в первой форме на сервере по адресу получите данные из ВХ.
3 Стажер_1С
 
10.08.18
07:39
(1) При закрытие 2 формы?.Как оповестить, как это реализовать?
Обработку выбора у формы или у реквизита на форме?
4 Mankubus
 
10.08.18
07:43
(3) посмотри в типовой как сделана форма подбора в реализации товаров и услуг
>>При закрытие 2 формы?
да
>>Как оповестить, как это реализовать?
ОповеститьОВыборе
>>Обработку выбора у формы или у реквизита на форме?
без разницы. что заполнишь владельцем туда и вернется значение выбора
5 Стажер_1С
 
10.08.18
07:47
(4) Сейчас сделаю
6 Стажер_1С
 
10.08.18
07:56
(4) Смотри,как правильно:
ФормаВыбора.ВладелецФормы = Элементы.основныесредства;
ИЛИ
ФормаВыбора.ВладелецФормы =Объект.ОсновныеСредства;

Чтобы была ясность.У меня в документе,есть табли.часть(ОсновныеСредства), у этой табл части много колонок.Я добавила свою (ШтрихКод). Когда встаешь на строку,в моей колонки :

&НаКлиенте
Процедура ОсновныеСредстваШтрихКодАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
    
    Если  ЗначениеЗаполнено(Элементы.основныесредства.ТекущиеДанные.ОсновноеСредство) И  ЗначениеЗаполнено(Элементы.основныесредства.ТекущиеДанные.Количество) Тогда    
        ФормаВыбора = ПолучитьФорму("Документ.мойдок.Форма.ФормаПодбора");
        ФормаВыбора.ОсновныеСредства = Элементы.основныесредства.ТекущиеДанные.ОсновноеСредство;
        ФормаВыбора.КолВоОсталось = Элементы.основныесредства.ТекущиеДанные.Количество;
        ФормаВыбора.ВладелецФормы = Элементы.основныесредства;
        ФормаВыбора.Открыть();

КонецПроцедуры
7 Стажер_1С
 
10.08.18
07:59
далее все происходит во 2 форме:

СписокШтрихкоды- динамическийсписок,который собирается из регистрасведений
ШтрихКодыОС - таблица значений на этой же форме,на ней пользователь и отмечает галочки.

&НаСервере
Процедура ПриОткрытииНаСервере()
    СписокШтрихкоды.Параметры.УстановитьЗначениеПараметра("ОсновноеСредство", ОсновныеСредства);
    
    //Подсчет кол-ва записей в динамическом списке
    Схема       = Элементы.СписокШтрихкоды.ПолучитьИсполняемуюСхемуКомпоновкиДанных();
    Настройки   = Элементы.СписокШтрихкоды.ПолучитьИсполняемыеНастройкиКомпоновкиДанных();
    
    КМ  = Новый КомпоновщикМакетаКомпоновкиДанных;
    Макет   = КМ.Выполнить(Схема, Настройки, , ,
    Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
    
    ПК  = Новый ПроцессорКомпоновкиДанных;
    ПК.Инициализировать(Макет);
    
    ТЗ  = Новый ТаблицаЗначений;
    
    ПВ  = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    ПВ.УстановитьОбъект(ТЗ);
    ПВ.Вывести(ПК);
    
    Для каждого ТекСтр Из ТЗ Цикл
        НоваяСтрока = ШтрихКодыОС.Добавить();
        НоваяСтрока.ШтрихКодФормы = ТекСтр.ШтрихКод;
    КонецЦикла;
    
    
КонецПроцедуры
    
    
    &НаКлиенте
Процедура ПриОткрытии(Отказ)
        ПриОткрытииНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
    
    ОповеститьОВыборе(ЭтотОбъект.ШтрихКодыОС);
КонецПроцедуры
8 Стажер_1С
 
10.08.18
08:00
и вот не вышло,не появились у меня значения
9 Стажер_1С
 
10.08.18
14:03
Если кому-то надо:

В первой форме:
Если  ЗначениеЗаполнено(Элементы.основныесредства.ТекущиеДанные.ОсновноеСредство) И  ЗначениеЗаполнено(Элементы.основныесредства.ТекущиеДанные.Количество) Тогда    
        СтруктураПараметров = Новый Структура("ОС,КолВоСписать",Элементы.ОсновныеСредства.ТекущиеДанные.ОсновноеСредство,Элементы.ОсновныеСредства.ТекущиеДанные.Количество);
        
        ДопПараметры = Новый Структура("ТекОС",Элементы.ОсновныеСредства.ТекущиеДанные.ОсновноеСредство);
        Оповещение = Новый ОписаниеОповещения("ЗапонитьСтрокуШтрихКода",ЭтотОбъект,ДопПараметры);

        Открытьформу("Документ.МойДокумент.Форма.МояФорма2",СтруктураПараметров,Элементы.ОсновныеСредства,,,,Оповещение,РежимОткрытияОкнаФормы.БлокироватьВесьИнтерфейс);
    Иначе
        Сообщить("Не выбрано основное средство или количество!");
    КонецЕсли;


&НаКлиенте
Процедура ЗапонитьСтрокуШтрихКода(ШтрихКод,Параметры) Экспорт
    Тут пишем,что хотим делать с данными,которые получили из 2 формы
КонецПроцедуры



2 форма:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЭтотОбъект.ОсновныеСредства = Параметры.ОС;
    ЭтотОбъект.КолВоОсталось =  Параметры.КолВоСписать;
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
    ОповеститьОВыборе(ЭтотОбъект.ШтрихКодыОС);
КонецПроцедуры
10 Cyberhawk
 
10.08.18
14:04
Не комильфо оповещать все формы, если это происходит при закрытии формы. Передавай результат закрытия в форму-владелец
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.