|
Управляемая форма 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) ясно, спасибо что помог
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |