Имя: Пароль:
1C
 
Выбор значения и запись его в объект
0 falselight
 
21.03.18
15:42
Подскажите пожалуйста, как лучше и правильнее организовать выбор
в форму?
Запросом получаю массив. Загружаю его в список значения.
Потом организую выбор через ВыбратьЭлемент. Но ругается "использование модальных окон в данном режиме запрещено!"
Как правильнее организовать форму выбора?


        М                    = ЗначенияСвойстОбъектовВыборНаСервере(ВыбраннаяСтрока.Владелец);
        ДляДиалогаВыбора.ЗагрузитьЗначения(М);
        КодБитрикса = ДляДиалогаВыбора.ВыбратьЭлемент("ВЫБЕРИТЕ НЕОБХОДИМЫЙ КОД БИТРИКСА");
        Если КодБитрикса <> Неопределено Тогда  
            УстановитьКодБитриксаНаСервере(КодБитрикса, ВыбраннаяСтрока.Владелец);
        КонецЕсли;
1 falselight
 
21.03.18
15:58
Например у обработки создаю ФормуВыбора.
Обработка внешняя. На ней список значений. Как
в коде его заполнить?
2 hhhh
 
21.03.18
16:03
(0) там чего-то правой кнопкой мыши нажимаете Рефакторинг. И пункт убрать асинхронные вызовы. И оно вам само отредактирует
3 falselight
 
21.03.18
16:09
(2) ЭТО О ЧЕМ ПРОСТИТЕ?
4 falselight
 
21.03.18
16:09
(3+) Я так понял нужно, делат ьне так как я.....
5 FIXXXL
 
21.03.18
16:26
(0) у поля есть СписокВыбора, заполни его своим массивом, хоть ПриСозданииНаСервере
у реквизита поставь галку РежимВыбораИзСписка
дальше "оно само"
6 falselight
 
21.03.18
16:28
(5)

//
&НаСервере
Функция ЗначенияСвойстОбъектовВыборНаСервере(Владелец)
    Запрос       = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗначенияСвойствОбъектов.Б_Идентификатор КАК Б_Идентификатор,
        |    1 КАК Поле1
        |ИЗ
        |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Владелец = &Владелец";
    Запрос.УстановитьПараметр("Владелец", Владелец);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    РезультатЗапроса.Свернуть("Б_Идентификатор","Поле1");
    Возврат РезультатЗапроса.ВыгрузитьКолонку("Б_Идентификатор");
КонецФункции
//
&НаКлиенте
Процедура ЗначенияСвойстОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    //Ответ = Вопрос("Ручной ввод - Да, или выбор из списка - Нет.", РежимДиалогаВопрос.ДаНет);
    //Если Ответ = Код
    КодБитрикса      = 0;
    Если Поле.Имя = "ЗначенияСвойстОбъектовБ_Идентификатор" Тогда
        ДляДиалогаВыбора     = Новый СписокЗначений;
        СтандартнаяОбработка = Ложь;
        М                    = ЗначенияСвойстОбъектовВыборНаСервере(ВыбраннаяСтрока.Владелец);
        ДляДиалогаВыбора.ЗагрузитьЗначения(М);
        КодБитрикса = ДляДиалогаВыбора.ВыбратьЭлемент("ВЫБЕРИТЕ НЕОБХОДИМЫЙ КОД БИТРИКСА");
        Если КодБитрикса <> Неопределено Тогда  
            УстановитьКодБитриксаНаСервере(КодБитрикса.Значение, ВыбраннаяСтрока.Владелец);
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
//
&НаСервере
Процедура УстановитьКодБитриксаНаСервере(КодБитрикса, Владелец)
    ВладелецОбъект                    = Владелец.ПолучитьОбъект();
    ВладелецОбъект.Б_Идентификатор = КодБитрикса;
    ВладелецОбъект.Записать();
КонецПроцедуры
//
7 falselight
 
21.03.18
16:31
(5) Получается, как сделал я нет.

ЗначенияСвойстОбъектов - это динамический список на форме.
8 FIXXXL
 
21.03.18
16:31
(6) прочитай еще раз (5)
твой код, кроме получения списка(массива) допустимых значений - не нужен
9 FIXXXL
 
21.03.18
16:32
(7) при чем тут дин.список? что надо то?
10 falselight
 
21.03.18
16:39
(9) Ок. Общая постановка. Что нужно известно.
На форме лежит динамический список. На одной колонке
производится щелчек.
Срабатывает процедура выбор ЗначенияСвойстОбъектовВыбор
И в этот момент производится запрос, и полученный
результат нужно вывести пользователю для выбора, или
дать ему возможность ввести одно значение, не выбирая его из списка.

Я так понимаю что нужно сделать свою форму выбора.
Но как открыть свою форму выбора во внешней обработке?
Открыть её, с возможностью предоставления ввода либо произвольного значения. Либо выбор из предоставленного списка?????

Подскажите если можно? Может пример есть, в инете или у вас.
11 FIXXXL
 
21.03.18
17:20
(10) ПоказатьВводЗначения почитай
12 falselight
 
21.03.18
17:24
Один вопрос

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

&НаКлиенте
Функция ПолучитьПолноеИмяФормы(ИмяФормы)

    СимволТочка = ".";
    ПозицияТочки = СтрДлина(ЭтаФорма.ИмяФормы);
    Пока Сред(ЭтаФорма.ИмяФормы, ПозицияТочки, 1) <> СимволТочка Цикл ПозицияТочки = ПозицияТочки - 1; КонецЦикла; //
    Возврат Лев(ЭтаФорма.ИмяФормы, ПозицияТочки) + ИмяФормы;

КонецФункции




Отрабатывает и выдает "использование модальных окон в данном режиме запрещено!"

Что нужно сделать?????
13 falselight
 
21.03.18
17:26
(12+) Что бы сообщение не выходило?!
14 Evgenchik
 
21.03.18
17:30
забудь про модальные окна
15 Evgenchik
 
21.03.18
17:32
ОткрытьФорму("ИмяФормы", СтруктураПараметров, ЭтаФорма,,,,Новый ОписаниеОповещения("ИмяПроцедурыПослеФормы", ЭтотОбъект, ПараметрКакойТо),РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

А ниже экспортную процедуру ИмяПроцедурыПослеФормы
16 falselight
 
21.03.18
17:35
(15) Примеры копирую, нахожу.
А что будет в этой процедуре?

Нужно при нажатии на поле в динамическом списке на форме,
открыть форму обработки внешней. Она откроется со списком и с полем ввода. Либо по выбору значения из списка, либо по вводу значения в поле, потом передать это значение в код и обработать, обновив его в базе.
17 falselight
 
21.03.18
17:37
(15) сложный у вас код ругается на СтруктураПараметров и ПараметрКакойТо.
18 falselight
 
21.03.18
17:42
(15) Как можно по вашему сделать (10) если можно, пожалуйста.
20 igorPetrov
 
22.03.18
04:18
(18) Ты когда читать научишься?
21 falselight
 
22.03.18
06:54
В ОСНОВНОЙ ФОРМЕ:

//
&НаСервере
Функция ЗначенияСвойстОбъектовВыборНаСервере(Владелец)
    Запрос       = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ЗначенияСвойствОбъектов.Б_Идентификатор КАК Б_Идентификатор,
        |    1 КАК Поле1
        |ИЗ
        |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Владелец = &Владелец";
    Запрос.УстановитьПараметр("Владелец", Владелец);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    РезультатЗапроса.Свернуть("Б_Идентификатор","Поле1");
    Возврат РезультатЗапроса.ВыгрузитьКолонку("Б_Идентификатор");
КонецФункции
//
&НаКлиенте
Процедура ЗначенияСвойстОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    Если Поле.Имя = "ЗначенияСвойстОбъектовБ_Идентификатор" Тогда
        СтандартнаяОбработка = Ложь;
        МассивКодовБитрикса  = ЗначенияСвойстОбъектовВыборНаСервере(ВыбраннаяСтрока.Владелец);
        СтруктураПараметров  = Новый Структура("МассивКодовБитрикса", МассивКодовБитрикса);
        ОткрытьФорму(ПолучитьПолноеИмяФормы("ФормаВыбора"), СтруктураПараметров, ЭтаФорма,,,,Новый ОписаниеОповещения("УстановитьКодБитриксаНаСервере", ЭтотОбъект, ВыбраннаяСтрока.Владелец),РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    КонецЕсли;
КонецПроцедуры
//
&НаСервере
Процедура УстановитьКодБитриксаНаСервере(КодБитрикса, Владелец) Экспорт
    ВладелецОбъект                    = Владелец.ПолучитьОбъект();
    ВладелецОбъект.Б_Идентификатор = КодБитрикса;
    ВладелецОбъект.Записать();
КонецПроцедуры
//
&НаКлиенте
Функция ПолучитьПолноеИмяФормы(ИмяФормы)
    СимволТочка = ".";
    ПозицияТочки = СтрДлина(ЭтаФорма.ИмяФормы);
    Пока Сред(ЭтаФорма.ИмяФормы, ПозицияТочки, 1) <> СимволТочка Цикл ПозицияТочки = ПозицияТочки - 1; КонецЦикла; //
    Возврат Лев(ЭтаФорма.ИмяФормы, ПозицияТочки) + ИмяФормы;
КонецФункции
//
22 falselight
 
22.03.18
06:55
В ФОРМЕ ВЫБОРА:

//
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("МассивКодовБитрикса") Тогда
        КодыБитрикса.ЗагрузитьЗначения(Параметры.МассивКодовБитрикса);
    КонецЕсли;
КонецПроцедуры
//
&НаКлиенте
Процедура КодыБитриксаЗначениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
    ОповеститьОВыборе("b7");
КонецПроцедуры
//
23 igorPetrov
 
22.03.18
06:56
Хватит скакать по разным темам )))
24 falselight
 
22.03.18
06:57
Тут проблема. В списке значения не получены.
Так как их нет в базе. Делаю ввод первого значения в коде что бы посмотреть b7.

По коду оно записывается. Но потом нигде не выбирается.
Это я не понял как решить!!!!!
Нужно сделать редактор кода Б_Идентификатор

&НаСервере
Процедура УстановитьКодБитриксаНаСервере(КодБитрикса, Владелец) Экспорт
    ВладелецОбъект                    = Владелец.ПолучитьОбъект();
    ВладелецОбъект.Б_Идентификатор = КодБитрикса;
    ВладелецОбъект.Записать();
КонецПроцедуры
//
25 falselight
 
22.03.18
06:57
(23) Спросили я отвечаю.
В одной задаче может быть несколько тем.
26 igorPetrov
 
22.03.18
06:58
(25) Ага, двадцать восемь создай, что бы не ошибиться.
27 Evgenchik
 
22.03.18
08:43
ты определись, с чем тебе помочь.
по (10) используй ПоказатьВыборИзСписка