Имя: Пароль:
1C
1С v8
Открыть форму выбора и сохранить выбранное значение для дальнейшего использования.
,
0 Nzzzz
 
20.10.20
10:08
Всем добрый день!
По нажатию кнопки - должна открываться форма выбора.

Пишу так:
ФормаВыбора = ПланыСчетов.Хозрасчетный.ПолучитьФормуВыбора();
ВыбранноеЗначение = ФормаВыбора.ОткрытьМодально();

Ошибка: Интерактивные операции недоступны

Пишу так:
ФормаОснования = ПолучитьФорму("ПланСчетов.Хозрасчетный.ФормаВыбора");
ВыбранноеЗначение = ФормаОснования.Открыть();

Ошибка:
Обращение к процедуре объекта как к функции (Открыть)
ВыбранноеЗначение = ФормаОснования.Открыть();
Как открыть форму выбора и сохранить выбранное значение для дальнейшего использования?
1 acht
 
20.10.20
10:16
2 Nzzzz
 
20.10.20
10:22
(1) Да что эти курсы?!
Лучшие курсы - это практика!
3 Nzzzz
 
20.10.20
10:26
Кто нибудь подскажет?
По нажатию кнопки Внешней обработки, должна открываться форма выбора плана счетов, далее я там выбираю значение и оно должно в реквизит обработки записаться на форме.
4 acht
 
20.10.20
10:27
(2) Ну тогда напомню, что к просветлению ведет лишь практика в одиночестве.
5 Nzzzz
 
20.10.20
10:31
(4) Так я два варианта использовал. Что не так?
6 Nzzzz
 
20.10.20
10:35
Раз всё так легко, то почему никто не подскажет?
Жалко?
7 alkorolev
 
20.10.20
11:05
(0) толстый клиент?
8 alkorolev
 
20.10.20
11:07
(3) зачем это выводить на кнопку, если без какого-либо кода это можно всё сделать из поля на форме?
9 fisher
 
20.10.20
11:07
(0)
10 fisher
 
20.10.20
11:08
(0) Дрогнула рука :) Куда сохранить, в реквизит? А зачем для этого программно открывать форму выбора?
11 fisher
 
20.10.20
11:09
(8) +1, прослоупочил
12 Nzzzz
 
20.10.20
11:10
(8) Нельзя, обработка внешняя, но заполняет ТЧ документа на форме
13 Nzzzz
 
20.10.20
11:13
(10) Напишите как по другому?
14 Nzzzz
 
20.10.20
11:15
Вот рабочий код:
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    ФормаВыбора = ПолучитьФорму("ПланСчетов.Хозрасчетный.ФормаВыбора");
    ВыбранноеЗначение = ФормаВыбора.ОткрытьМодально();
    Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл      
        Если ВыбранноеЗначение <> Неопределено Тогда
            ТекущаяСтрока.СчетУчета = ВыбранноеЗначение ;
        КонецЕсли;
    КонецЦикла ;    
КонецПроцедуры

Но сообщение всё равно выдает, о том что в данном режиме запрещена модальность. Но функционал который был нужен - работает.
15 SleepyHead
 
гуру
20.10.20
11:17
(0) Ты хоть скажи, с какой ты планеты (зачеркнуто) ОФ/УФ.

По контексту ОФ, но вдруг..
16 Nzzzz
 
20.10.20
11:17
А как можно сделать, чтобы эта ошибка не выскакивала?
"Использование модальных окон в данном режиме запрещено!"
17 Nzzzz
 
20.10.20
11:17
(15) УФ
18 SleepyHead
 
гуру
20.10.20
11:21
(17) гугли "1с УФ открыть форму выбора"
19 SleepyHead
 
гуру
20.10.20
11:21
http://catalog.mista.ru/1c/articles/1233756/

вот несколько примеров
20 Nzzzz
 
20.10.20
11:28
В интернете пишут нужно сделать по новому через ОписаниеОповещения нужно открывать
Но там блин параметры эти, фиг знает что добавлять..
21 alkorolev
 
20.10.20
11:28
(14) ОткрытьФорму("ПланСчетов.Хозрасчетный.ФормаВыбора", , ЭтаФорма);
ну и на форме источника в событии ОбработкаОповещения обрабатывай колбэк
22 Nzzzz
 
20.10.20
11:29
(21) Как обрабатывать, если всё типовое?
23 alkorolev
 
20.10.20
11:30
(22) внешняя обработка же? на форме внешней обработки в событии ОбработкаОповещения ты получишь выбранное значение
24 alkorolev
 
20.10.20
11:34
(21) тьфу ты! событие "ОбработкаВыбора" у формы.
Лови https://yadi.sk/d/es2IPMx9_xHhlA
25 fisher
 
20.10.20
11:40
Попробуй так:

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

Это сработает, если в форме выбора для списка на форме у тебя установлен признак "РежимВыбора".
Тогда когда в форме будет даблклик, в форму владельца (обработку) тебе прилетит событие формы ОбработкаВыбора() с выбранным значением.
26 Nzzzz
 
20.10.20
11:42
(24) Спасибо, ошибка пропала, но теперь не работает.
У меня вот этот код по заполнению тч был в процедуре "ВыполнитьКоманду".
Я перенес, сделал как у Вас в обработке выбора - не работает.
27 Nzzzz
 
20.10.20
11:43
(25) Прилетает выбранное значение.Но как теперь ТЧ то заполнить? Куда писать код для заполнения тЧ?
28 acht
 
20.10.20
11:44
(27) А ты вообще мальчик или девочка?
https://dropmefiles.com.ua/en/i/1894ea678da89602948e674a85fbfe09/a5288683f3e12832db656bfd95d05fdb
29 Nzzzz
 
20.10.20
11:44
(27) Было бы хорошо, если бы процедура обработки выбора была функцией и вернула в процедуру "ВыполнитьКоманду" выбранное значение.
30 Nzzzz
 
20.10.20
11:45
(28) Аккаунт на двоих.
31 alkorolev
 
20.10.20
11:48
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) Экспорт
    
    Оповещение = Новый ОписаниеОповещения("ВыполнитьКомандуЗавершение", ЭтотОбъект);
    ОткрытьФорму("ПланСчетов.Хозрасчетный.ФормаВыбора", , , ,  , , Оповещение);
    
КонецПроцедуры

&НаКлиенте
Процедура ВыполнитьКомандуЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    Если Результат = Неопределено Тогда
        Возврат;
    КонецЕсли;
    
    Для каждого  ТекущаяСтрока из ВладелецФормы.Объект.Товары Цикл      
        ТекущаяСтрока.СчетУчета = Результат;
    КонецЦикла ;    
    
КонецПроцедуры
32 fisher
 
20.10.20
11:50
(27) Это вроде очевидно - код писать в обработчике выбора (или оттуда вызывать)
(29) Добро пожаловать в асинхронное выполнение кода. В 18 релизе что-то такое завезли, как ты хочешь, но конкретно для обработки выбора и там вряд ли получится.
33 Nzzzz
 
20.10.20
11:51
(31) Сработало! Спасибо добрый человек:)
34 Nzzzz
 
20.10.20
11:51
Спасибо всем, кто помогал!!!
35 fisher
 
20.10.20
11:54
В 18 релизе насыпали ключевых слов и стало возможно ждать ожидания завершения асинхронного кода в том же месте, откуда он стартовал. Плюс насыпали куче стандартных функций возможность работать через "обещания" (т.е. и для них писать линейный асинхронный код). Вероятно, можно там и ОткрытьФорму извернуться. Опыта пока нет.
36 Ёпрст
 
20.10.20
14:35
(35) на сколько я понял, в тоже место не возвращается.. лень всё читать было, там опять что-то своё накодили..
37 Kassern
 
20.10.20
15:46
(33) А что мешало посмотреть, как это работает в типовой конфе, да в той же бухгалтерии? Зачем вы пытались использовать модальный режим? В управляемых формах его практически не используют, в конфигураторе вообще может быть запрет на модальный режим. Вы могли просто открыть форму выбора, в данной форме после закрытия использовать команду ОповеститьОВыборе(результат). В форме источнике использовать событие обработка выбора и там уже обрабатывать полученный результат. Без всяких там  доп оповещений.
пример:
&НаКлиенте
Процедура ЗагрузитьИзВнешнегоФайла(Команда)
    ПараметрыФормы = Новый Структура();
    ПараметрыФормы.Вставить("ЗагружатьЦены", Ложь);
    ПараметрыФормы.Вставить("ЗагружатьСуммы", Ложь);
    ПараметрыФормы.Вставить("ЦенаВключаетНДС", Ложь);
    ПараметрыФормы.Вставить("ВернутьМногооборотнуюТару", Ложь);
    ПараметрыФормы.Вставить("СопоставлятьПоНоменклатуреПоставщиков", Ложь);
    ПараметрыФормы.Вставить("ЗагружатьГТД", Ложь);
    ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", Новый Массив);
    ПараметрыФормы.Вставить("ИмяТЧ", "Товар");
    ПараметрыФормы.Вставить("ЗагружатьСкидки", Ложь);
    ОткрытьФорму(
    "Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма",
    ПараметрыФормы,
    ЭтаФорма,
    УникальныйИдентификатор);    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора)
    
    Если ИсточникВыбора.ИмяФормы = "Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма" Тогда
        
        ПолучитьЗагруженныеТоварыИзХранилища(РезультатВыбора);
        
    КонецЕсли;    
    
    Если Окно <> Неопределено Тогда
        Окно.Активизировать();
    КонецЕсли;
    
КонецПроцедуры
38 fisher
 
20.10.20
16:45
(36) Почему не возвращается? Пример из Зазеркалья:
&НаКлиенте
Асинх Функция СкопироватьФайл(ИсхФайл, ЦелФайл)
    Об = КопироватьФайлАсинх(ИсхФайл, ЦелФайл);
    Ждать Об;
    Сообщить("Скопирован файл: " + ЦелФайл);
КонецФункции
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс