Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
20 мая 2024, 08:38

заполнение списка значений в управляемой форме

Автор blade_snl, 22 июн 2021, 09:26

0 Пользователей и 1 гость просматривают эту тему.

blade_snl

Прошу умных людей подсказать, где я косячу... ))
Есть управляемая форма, на ней поле ввода с включенным свойством "РежимВыбораИзСписка".
Хочу засунуть в него значения следующим кодом:

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

Для каждого Организация Из СписокОрганизаций Цикл
СписокВыбора.Добавить(Организация);
КонецЦикла;

Элементы.ОрганизацияНаименование.СписокВыбора.ЗагрузитьЗначения(СписокВыбора);

СтандартнаяОбработка = Ложь;

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

&НаСервереБезКонтекста
Функция ПолучитьСтруктуруОрганизаций()
СписокОрганизаций = Новый Массив;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Организации.Ссылка КАК Ссылка
|ИЗ
| Справочник.Организации КАК Организации";

РезультатЗапроса = Запрос.Выполнить();

Выборка = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл
СписокОрганизаций.Добавить(Выборка.Ссылка);
КонецЦикла;
Возврат СписокОрганизаций;
КонецФункции

но выдает ошибку:

"{РасшПереносСправочников Обработка.Расш_ОбработкаПереносСправочников.Форма.Форма.Форма(1178)}: Ошибка при вызове метода контекста (ЗагрузитьЗначения)
   Элементы.ОрганизацияНаименование.СписокВыбора.ЗагрузитьЗначения(СписокВыбора);
по причине:
Несоответствие типов (параметр номер '1')"

blade_snl

увидел, что из Запроса получаю Ссылки (это я просто по-разному экспериментировал, исправил, теперь получаю НАименование:

ВЫБРАТЬ
| Организации.Наименование КАК Наименование
|ИЗ
| Справочник.Организации КАК Организации

но это не исправило проблему - ошибка несоответствие типов осталась...

Если же передавать в СписокВыбора сразу полученный массив из функции (с Запросом):


   СписокОрганизаций = ПолучитьСтруктуруОрганизаций();

Элементы.ОрганизацияНаименование.СписокВыбора.ЗагрузитьЗначения(СписокОрганизаций);

то ошибка не выдается, но на форме в Списке выбора всеравно ничего не появляется... (((

antoneus

Заполняй список выбора сразу

&НаКлиенте
Процедура ОрганизацияНаименованиеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
   
    Элементы.ОрганизацияНаименование.СписокВыбора.Очистить();
    СписокОрганизаций = ПолучитьСтруктуруОрганизаций();
   
    Для каждого Организация Из СписокОрганизаций Цикл
        Элементы.ОрганизацияНаименование.СписокВыбора.Добавить(Организация);   
    КонецЦикла;
   
    СтандартнаяОбработка = Ложь;

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

И лучше не бегать на сервер каждый раз при событии НачалоВыбора, а заполнить список один раз - в ПриСозданииНаСервере, например. Сомневаюсь, что список организаций изменяется каждую минуту.

blade_snl

Цитата: antoneus от 22 июн 2021, 10:46Заполняй список выбора сразу

И лучше не бегать на сервер каждый раз при событии НачалоВыбора, а заполнить список один раз - в ПриСозданииНаСервере, например. Сомневаюсь, что список организаций изменяется каждую минуту.

огромное спасибо, так и сделал, заполнил ПриСозданииНаСервере, все заполнилось! )
но - почемуто выбранный элемент не появляется в поле формы...

antoneus

Значит, не соответствуют типы реквизита формы и значений в списке.

blade_snl

Цитата: antoneus от 22 июн 2021, 16:54Значит, не соответствуют типы реквизита формы и значений в списке.

Реквизит имеет Тип "строка"
к нему подвязано ПолеВвода с формы, в котором мы через выпадающий список и пытаемся выбрать значение.
Значения, как видно из кода - тоже типом Строка вроде числятся...

blade_snl

а, вижу в выложенном коде Запрос выглядит не так, я его переделал, он сейчас такой:

ВЫБРАТЬ
| Организации.Наименование КАК Наименование
|ИЗ
| Справочник.Организации КАК Организации

,соответственно, на выходе значение тоже строкового типа...

antoneus

А в обработчике НачалоВыбора так СтандартнаяОбработка = Ложь и осталось?

blade_snl

Цитата: antoneus от 22 июн 2021, 17:39А в обработчике НачалоВыбора так СтандартнаяОбработка = Ложь и осталось?

все оказалось просто, - мой косяк.
реквизит имел ограничение на кол-во символов, Наименование просто не помещалось в него и не отображалось

LexaK

Цитироватьвсе оказалось просто,
не просто! -- там до фига еще косяков. (дааа, учиться на собственных косяках... тоже вариант)

может пригодится такой совет
возьмите любую типовую(ознакомительную, тестовую) базу от 1С 
смотрите как там все устроено, используйте примеры кода для решения своих задач
если разберетесь, тогда у вас не будут возникать подобные трудности (хотя какие это трудности, элементарные вещи)


 
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск