Вход | Регистрация



Выбор значения и запись его в объект

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

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

//
&НаСервере
Функция ЗначенияСвойстОбъектовВыборНаСервере(Владелец)
    Запрос       = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ЗначенияСвойствОбъектов.Б_Идентификатор КАК Б_Идентификатор,
        |    1 КАК Поле1
        |ИЗ
        |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Владелец = &Владелец";
    Запрос.УстановитьПараметр("Владелец", Владелец);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    РезультатЗапроса.Свернуть("Б_Идентификатор","Поле1");
    Возврат РезультатЗапроса.ВыгрузитьКолонку("Б_Идентификатор");
КонецФункции
//

&НаКлиенте
Процедура ЗначенияСвойстОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    //Ответ = Вопрос("Ручной ввод - Да, или выбор из списка - Нет.", РежимДиалогаВопрос.ДаНет);

    //Если Ответ = Код

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

&НаСервере
Процедура УстановитьКодБитриксаНаСервере(КодБитрикса, Владелец)
    ВладелецОбъект                    = Владелец.ПолучитьОбъект();
    ВладелецОбъект.Б_Идентификатор = КодБитрикса;
    ВладелецОбъект.Записать();
КонецПроцедуры
//
   falselight
 
7 - 21.03.18 - 16:31
(5) Получается, как сделал я нет.

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

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

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

//

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

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

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

    Возврат Лев(ЭтаФорма.ИмяФормы, ПозицияТочки) + ИмяФормы;

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



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

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

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

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

//

&НаСервере
Функция ЗначенияСвойстОбъектовВыборНаСервере(Владелец)
    Запрос       = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ЗначенияСвойствОбъектов.Б_Идентификатор КАК Б_Идентификатор,
        |    1 КАК Поле1
        |ИЗ
        |    Справочник.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
        |ГДЕ
        |    ЗначенияСвойствОбъектов.Владелец = &Владелец";
    Запрос.УстановитьПараметр("Владелец", Владелец);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    РезультатЗапроса.Свернуть("Б_Идентификатор","Поле1");
    Возврат РезультатЗапроса.ВыгрузитьКолонку("Б_Идентификатор");
КонецФункции
//

&НаКлиенте
Процедура ЗначенияСвойстОбъектовВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    Если Поле.Имя = "ЗначенияСвойстОбъектовБ_Идентификатор" Тогда
        СтандартнаяОбработка = Ложь;
        МассивКодовБитрикса  = ЗначенияСвойстОбъектовВыборНаСервере(ВыбраннаяСтрока.Владелец);
        СтруктураПараметров  = Новый Структура("МассивКодовБитрикса", МассивКодовБитрикса);
        ОткрытьФорму(ПолучитьПолноеИмяФормы("ФормаВыбора"), СтруктураПараметров, ЭтаФорма,,,,Новый ОписаниеОповещения("УстановитьКодБитриксаНаСервере", ЭтотОбъект, ВыбраннаяСтрока.Владелец),РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
    КонецЕсли;
КонецПроцедуры
//

&НаСервере
Процедура УстановитьКодБитриксаНаСервере(КодБитрикса, Владелец) Экспорт
    ВладелецОбъект                    = Владелец.ПолучитьОбъект();
    ВладелецОбъект.Б_Идентификатор = КодБитрикса;
    ВладелецОбъект.Записать();
КонецПроцедуры
//

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

    Возврат Лев(ЭтаФорма.ИмяФормы, ПозицияТочки) + ИмяФормы;
КонецФункции
//
   falselight
 
22 - 22.03.18 - 06:55
В ФОРМЕ ВЫБОРА:

//
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Если Параметры.Свойство("МассивКодовБитрикса") Тогда
        КодыБитрикса.ЗагрузитьЗначения(Параметры.МассивКодовБитрикса);
    КонецЕсли;
КонецПроцедуры
//

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

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

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


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует