Имя: Пароль:
1C
1С v8
Управляемая форма 1с УТ11
,
0 Casper211
 
23.12.16
12:09
Мне необходимо с основной формы внешней обработки открыть дополнительную форму этой же обработки (передать туда какое-то значение, то есть параметр). Затем сделать там какие-то действия и передать обратно параметр (новое значение). Как это сделать?

Вот так я открываю форму:

&НаСервере
функция ПодключитьНаСервере()
    // Переводим обработку в двоичные данные    
    ДвоичныеДанныеОбработки = Новый ДвоичныеДанные(РеквизитФормыВЗначение("Объект").ИспользуемоеИмяФайла);
    // Для двоичных данных делаем хранилище
    АдресХранилища = ПоместитьВоВременноеХранилище(ДвоичныеДанныеОбработки);
    // Подключаем обработку
    ИмяВнешнейОбработки = ВнешниеОбработки.Подключить(АдресХранилища);      
    Возврат ИмяВнешнейОбработки;
КонецФункции

&НаКлиенте
Процедура ПодключитьОбработку()
    Если ПустаяСтрока(ИмяВнешнейОбработки) Тогда
        ПодключитьНаСервере();
    КонецЕсли;
    ПараметрыФормы = Новый Структура;  
    ПараметрыФормы.Вставить("ПараметрШтрихКодНоменклатури", Объект.ШтрихКодПоиск);
    ОткрытьФормуМодально("ВнешняяОбработка."+ ИмяВнешнейОбработки +".Форма.ФормаНоменклатури",ПараметрыФормы);
КонецПроцедуры
1 VladZ
 
23.12.16
12:10
Управляемая форма и "открыть модально" несовместимо!
2 Cool_Profi
 
23.12.16
12:11
(1) С какого перепугу?
3 polosov
 
23.12.16
12:12
(0) Смотри как работает форма подбора номенклатуры.
Вкратце:
Передаем в форму параметры, открываем форму (НЕ МОДАЛЬНО!!!),
в форме выбираем что надо, закидываем в хранилище и при закрытии оповещаем, в исходной форме ловим оповещение вытаскиваем данные из хранилища и работаем.
4 Casper211
 
23.12.16
12:47
&НаСервере
Функция АдресТоваровВХранилище()
    
    АдресВХранилище = Неопределено;
    
    АдресВХранилище = ПоместитьТоварыВХранилище();
        
    Возврат АдресВХранилище;
    
КонецФункции

&НаСервере
Функция ПоместитьТоварыВХранилище()
    
    Товары = Объект.Товары.Выгрузить();
    АдресТоваровВХранилище = ПоместитьВоВременноеХранилище(Товары, УникальныйИдентификатор);
    
    Возврат АдресТоваровВХранилище;
    
КонецФункции

&НаКлиенте
Процедура ПриЗакрытии()
    АдресТоваровВХранилище = АдресТоваровВХранилище();
    
    Если  АдресТоваровВХранилище <> Неопределено Тогда
        Структура = Новый Структура("АдресТоваровВХранилище", АдресТоваровВХранилище);
        ОповеститьОВыборе(Структура);
    КонецЕсли;

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



Но в ОбработкаВыбора на другой форме не попадают отладчик

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    Если ИсточникВыбора.ИмяФормы = "ВнешняяОбработка." Тогда
        
    КонецЕсли;
КонецПроцедуры
5 Casper211
 
23.12.16
12:48
(3) возможно я что-то не так сделал?
6 Casper211
 
23.12.16
12:49
(3) и спасибо за подсказку
7 Casper211
 
23.12.16
13:20
это проблема в ОповеститьОВыборе? или чем-то другом ?? почему  ОбработкаВыбора  не ловит сигнал?
8 polosov
 
23.12.16
13:22
(4) Форму не модально открывал?
9 Casper211
 
23.12.16
13:30
(8) просто
10 polosov
 
23.12.16
13:40
(9) СП:
Посылает оповещение владельцу формы о выполнении выбора или подбора, передает ему выбранное значение. Закрывает форму в соответствии со значением свойства ЗакрыватьПриВыборе. Данное действие аналогично выполнению выбора в форме, открытой для выбора в поле ввода или ячейке табличного поля.

Ты открыл форму без указания владельца.
11 Casper211
 
23.12.16
14:26
(10) ПараметрыФормы = Новый Структура;  
    ПараметрыФормы.Вставить("ПараметрШтрихКодНоменклатури", Объект.ШтрихКодПоиск);
    ОткрытьФорму("ВнешняяОбработка."+ ИмяВнешнейОбработки +".Форма.ФормаНоменклатури",ПараметрыФормы,ЭтаФорма,УникальныйИдентификатор,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);


Получил параметр

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


сделал там какие-то действия и нажимаю кнопку

&НаКлиенте
Процедура ПодтвердитьПоступления(Команда)
    ЭтаФорма.Закрыть();
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
    АдресТоваровВХранилище = АдресТоваровВХранилище();
    
    Если  АдресТоваровВХранилище <> Неопределено Тогда
        Структура = Новый Структура("АдресТоваровВХранилище", АдресТоваровВХранилище);
        ОповеститьОВыборе(Структура);
    КонецЕсли;

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


&НаСервере
Функция АдресТоваровВХранилище()
    
    АдресВХранилище = Неопределено;
    
    АдресВХранилище = ПоместитьТоварыВХранилище();
        
    Возврат АдресВХранилище;
    
КонецФункции

&НаСервере
Функция ПоместитьТоварыВХранилище()
    
    Товары = Объект.Товары.Выгрузить();
    АдресТоваровВХранилище = ПоместитьВоВременноеХранилище(Товары, УникальныйИдентификатор);
    
    Возврат АдресТоваровВХранилище;
    
КонецФункции
12 Casper211
 
23.12.16
14:27
и ничего
13 Casper211
 
23.12.16
14:34
Проблемы нет, я лоханулся и случайно удалил событие ПриЗакрытии()
14 Casper211
 
23.12.16
14:36
(10) Работает, но после того
Неизвестный идентификатор формы
и на любую процедуру на сервере больше не заходит. Я сломал форму?
15 Casper211
 
23.12.16
14:36
после того как закрыли дополнительную форму
16 polosov
 
23.12.16
14:41
(14)   АдресТоваровВХранилище = ПоместитьВоВременноеХранилище(Товары, УникальныйИдентификатор);


Сделай
  
АдресТоваровВХранилище = ПоместитьВоВременноеХранилище(Товары);

Тут не нужен УИД особо.

Просто при закрытии он уже умирает
17 Casper211
 
23.12.16
14:44
(16) тоже самое


{Форма.Форма.Форма(828)}: Ошибка при вызове метода контекста (ПодсчитатьКоличествоТоваров)
        ПодсчитатьКоличествоТоваров(ВыбранноеЗначение);    
по причине:
Неизвестный идентификатор формы

&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
    Если ИсточникВыбора.ИмяФормы = "ВнешняяОбработка."+ ИмяВнешнейОбработки +".Форма.ФормаНоменклатури" Тогда
        ПодсчитатьКоличествоТоваров(ВыбранноеЗначение);    
    КонецЕсли;
КонецПроцедуры

&НаСервере
функция ПодсчитатьКоличествоТоваров(ВыбранноеЗначение)
    ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
        Для каждого СтрокаПришедшихТоваров Из ТаблицаТоваров Цикл
            Для каждого СтрокаВсехТоваров Из Объект.Товары Цикл
                Если СтрокаПришедшихТоваров.Номенклатура= СтрокаВсехТоваров.Номенклатура и СтрокаПришедшихТоваров.Назначение = СтрокаВсехТоваров.Назначение  Тогда
                    СтрокаВсехТоваров.КоличествоПриход = СтрокаПришедшихТоваров.КоличествоПриход;     
                КонецЕсли;
            КонецЦикла;
        КонецЦикла;
КонецФункции
18 polosov
 
23.12.16
14:50
+(16) А, не. Тут гребу уже. Все правильно.
А с (16) хз, вроде должно работать.
19 polosov
 
23.12.16
14:50
+(18)Поправка - С (17)
20 Casper211
 
23.12.16
14:51
(19) ясно, спасибо что помог
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn