Можно ли использовать форму списка в качестве формы выбора?
С точки зрения методологии работы с платформой в управляемых формах рекомендуется в качестве формы выбора и формы списка использовать разные формы.
Это связано с тем, что форма списка и форма выбора имеют разный внешний вид. В форме выбора стандартно присутствует кнопка Выбрать , которой нет в форме списка.
Изменение внешнего вида управляемой формы в режиме исполнения влечет за собой обращение к серверу и кроме этого может приводить к отключению кэширования такой формы, что отрицательно сказывается на производительности.
По этой причине основная форма списка и основная форма выбора должны быть разными формами.
Нужно заметить, что у таблицы управляемой формы имеется свойство РежимВыбора . Изменение этого свойства в конфигураторе, в палитре свойств, позволяет превратить форму списка в форму выбора, и наоборот.
Однако попытка изменить это свойство из встроенного языка в режиме 1С:Предприятие (см. пример ниже) ни к чему не приведет. Если была получена форма списка, будет открыта форма списка. И наоборот.
Форма = ПолучитьФорму(«Справочник.Товары.ФормаСписка»);
Форма.Элементы.Список.РежимВыбора = Истина;
Форма.Открыть();
// В открытой форме возможность выбора будет недоступна.
Как сделать форму выбора 1с
Подскажите, как в управляемых формах при нажатии на кнопку открыть форму выбора справочника и получить выбранное значение? ОткрытьФормуМодально нельзя делать.
ОткрытьФорму, указав в параметрах РежимВыбора и владельцем нужный элмент управления. Тогда выбранное значение (или значение из ОповеститьОВыборе) бдет прилетать в указанный элемент управления.
(0)
1. В ОткрытьФорму указать обработчик закрытия.
2. В открываемой форме в каком-нибудь событии прописать ЭтаФорма.Закрыть(). Оно упадет в в обработчик закрытия из п 1.
у меня есть справочник Партнеры, надо при нажатии на созданную кнопку открывать форму выбора справочника Контрагенты с отбором по текущему Партнеру и потом получать выбранного контрагента. Можно ли сделать не внося изменения в справочник Контрагенты?
(2) это сложно
+ (2) В ОткрытьФорму указать РежимОткрытияОкна Блокировать окно владельца
(3) да, в параметрах еще можно указать отбор. а лучше в свойствах реквизита указать связи параметров выбора. тогда ничего кодом вообще не надо будет делать.
В открываемой форме в каком-нибудь событии прописать ЭтаФорма.Закрыть(<ЗначениеКотороеНужноВернуть>). Мне надо без изменения внесения изменений в открываемую формуЗначениеКотороеНужноВернуть>
(4) Что сложно? Кому сложно?
ИМХО — это проще, чем городить огород с Оповещением о выборе и обработкой выбора. А если выбор нескольких реквизитов — нужно в обработка выбора анализировать что прилетело или от кого. А так — все укладывается в линейную логику ОткрытьМодально. Ну. почти.
(7) ГЫ. тогда см(6).
В случае, если от батареи не отползти — тогда и (1) не поможет. Ибо оповещение никто не кинет.
(8) если ты открываешь форму выбора и указываешь владельцем элемент управления — то ничего дополнительно прописывать не надо, если у тебя элемент управления того же типа, что и выбираемое значение. а вообще автору надо (6)
Форму система откроет автоматом и вернет из нее значение,а вот отбор кто то должен поставить,для этого,автомат нужно перевести в ручной режим,то есть открыть форму и установить в ней отбор,а выбор потом прилетит в обработку выбора.
блокировать основную форму не обязательно,но,если не блокировать,то пользователь может потерять форму списка.
Почему если делать отбор по владельцу при открытии формы, то этот отбор сохраняется даже если открыть потом другой элемент справочника?
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить(«РежимВыбора», Истина);
ПараметрыФормы.Вставить(«ЗакрыватьПриВыборе», Истина);
Отбор = Новый Структура;
Отбор.Вставить(«Партнер», Объект.Ссылка);
П = Новый Структура;
П.Вставить(«Параметры», ПараметрыФормы);
ОбработкаВыбора = Новый ОписаниеОповещения(«ВыбратьЭлементСправочника», ЭтаФорма, Новый Структура(«Параметр1»,1));
ОткрытьФорму(«Справочник.КонтактныеЛицаПартнеров.ФормаВыбора», П, ЭтаФорма, , , , ОбработкаВыбора);
v8: Создать форму выбора

2.В Имя твоей формы в процедуре ПередОткрытием
// Это все отчеты конфы и загружаешь их в цикле в ТЧ, ТЗ. СЗ что у тебя там за таб.поле
// или создаешь структуру с отчетами какие тебе нужны, а затем в таб.поле
Код 1C v 8.х
Для каждого Отч из Метаданные.Отчеты Цикл
Сообщить (Отч);
КонецЦикла;

рис. №1
Обратите внимание ФормаВыбораОтчета эта главная форма
———————————-
А вот когда запускаем обработку, открывается ФормаВыбораОтчета

рис. №2
СписокФорм = Метаданные.Документы.РеализацияТоваровУслуг.Формы;
Для каждого ТекФорма Из СписокФорм Цикл
Сообщить("Имя формы: " + ТекФорма.Имя + ". Синоним формы: " + ТекФорма.Синоним + ".");
КонецЦикла;
ЭлементыФормы.ТаблицаОтчетов.Значение.Добавить(ТекФорма.Имя);
ОбщаяФорма = ПолучитьОбщуюформу("ФормаРаботыСоСпискомЗначений"); //На форме должно быть добавлено Табличное Поле "ТабличноеПоле"
Таб = Новый ТаблицаЗначений;
Таб.Колонки.Добавить("ФормаРаботыСоСпискомЗначений",Новый ОписаниеТипов("Строка"));
Для каждого Форма из ОбработкаОбъект.Метаданные().Формы Цикл
Таб.Добавить().ИмяФормы = Форма.Имя;
КонецЦикла;
ОбщаяФорма.ТабличноеПоле = Таб;
ОбщаяФорма.ЭлементыФормы.ТабличноеПоле.СоздатьКолонки();
ОбщаяФорма.Открыть();
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
[ Главная | FAQ: Все | 7.х | 8.х | 8.2 УП | 8.3 | Видео | Files | Forum | Freelance | Поиск | Реклама на HelpF.pro | Обратная связь ]
HelpF.pro [old Help1C.com] 2009-2023 Все материалы, размещенные на сайте, добавлены посетителями сайта или взяты из свободных источников. Подробнее.
Как открыть форму выбора с определенным отбором в 1C 8.2 и в 1С 8.3 ?
Для того чтобы открыть форму выбора с отбором в 1с 8.2 (обычные формы), нам нужно выполнить некоторые действия. Сначала мы ее получим. После этого выставим отбор и программно откроем, вот пример кода:

Отбор на форме в поле ввода 1С 8.2 с несколькими значениями
В примере выше мы рассмотрели как устанавливать отбор на форме выбора по конкретному значению. Теперь давайте рассмотрим ситуацию когда нужно подставить несколько значений, это может быть например как массив, так и выгрузка из результата запроса. Это отбор в поле ввода 1с с несколькими значениями.

Для начала получаем форму выбора, в параметрах передаем «Элемент» (владельца), устанавливаем флаг режима выбора. Потом создаем список значений и массив, отмечаем что в качестве отбора когда устанавливается вид сравнения в списке, может присутствовать объект только с типом СписокЗначений. Добавляем элементы в массив, затем этот массив загружаем в СписокЗначений который в следствии мы устанавливаем в отборе. Также не забываем включить флаг использования данного отбора, и установить ВидСравнения.
Установка отбора в поле ввода на форме в 1С 8.3, событие НачалоВыбора
Теперь рассмотрим отбор в поле ввода на управляемой форме в 1С 8.3. Найдем на форме интересующий нас элемент, в котором мы будем устанавливать отбор, в нашем случае это поле «Организация». Находим событие «НачалоВыбора», щелкаем на лупу и оказываемся в процедуре. Мы видим параметр ДанныеВыбора, этот параметр имеет тип СписокЗначений. Для того чтобы ограничить выбор необходимыми элементами , нам необходимо заполнить СписокЗначений. Элементы выбрать можем только на сервере, поэтому создаем процедуру с директивой компиляции &НаСервере. В данной процедуре заполняем ДанныеВыбора.

Как альтернатива можно воспользоваться вариантом как описано открытие формы выбора с отбором для 1С 8.2, конечно код возможно чуть-чуть придется модифицировать, но суть остается та же.
У нас вы можете заказать услуги сопровождения 1с баз данных, а также любые доработки для 1с.
