Как переопределить список выбора 1с
Работаю в 8.3.5Только начинаю разбираться в платформе, до этого с 1С имел дело только как пользователь. Сейчас стоит задача написать свою небольшую конфу для нашего маленького предприятия. Накупил кучку книжек, сижу изучаю. Голова уже пухнет. Не могу своим мозгом понять как реализовать такой функционал:
Есть документ ЗаказНаряд в котором есть реквизит Комплектность с типом Поле ввода.Ясен пень, у документа есть форма с этим реквизитом.В форме документа, требуется вызывать кнопкой выбора (. ) у этого поля, окно в котором можно отметить галочками значения которые по нажатию ОК в этом окне, попадут в это поле ввода.Сами значения в этом окне должны браться из наименований элементов справочника Подстановки, причем из элементов находящихся в определенной группе этого справочника.Поле ввода необходимо, что бы помимо того, что выберет пользователь, он мог в некоторых случаях дописать некоторые данные руками.
Прошу ткнуть носом как это сделать, ибо голова уже кипит.
На всякий набросал как я себе это вижу.
Комплектность должна быть строка и не обязательно реквизит документа, это может быть просто элемент формы.
Еще у документа должна быть ТЧ как раз для хранения списка значений подстановок.
На обработчик начало выбора для комплектности организовать выбор из списка значений, в который помещены элементы из справочника подстановок.
После отметки нужных подстановок необходимо из помеченных элементов сформировать строку и поместить ее в комплектность и также записать их в ТЧ.
Касаемо дописки, мне кажется нужно сделать отдельный строковый реквизит "ДопКомплектность", и в нем уже дополнения писать и присоединять их к комплектности.
К сожалению не смог понять Ваш совет и сделал по своему.
Путем долгих мучений получилось добиться промежуточного результата.
Я написал функцию которая получает колонку "Наименование" справочника Подстановки, и вызвал ее в событии начала выбора в поле комплектности.
В результате стал выпадать список с нужными мне значениями.
Но как я писал выше, мне требуется вызывать окно, в котором можно отметить галочками нужные мне значения и в результате заполнять этими значениями поле Комплектность.
Тут у меня случился ступор, из которого я не могу выйти. Прошу подсказать как это сделать.
Зачем такая сложная реализация!?
сделайте табличную часть и выведете в нее эти значения и поле флажка, пусть пользователи выбирают галками в табличной части
В смысле просто, в форму документа поместить таблицу с значениями и флажками?
Мне очень критично именно поле ввода с таким функционалом как я описал выше, таблица в форме не подойдет ((
Потихоньку буду вникать в Ваш вариант реализации, ибо опыта ноль, не все понятно сразу.
А если просто с ходу опробовать Ваш код, то в режиме отладки по нажатии у поля кнопки выбора вызывается окно, там есть элементы справочника Подстановки, но в независимости от того, стоят отметки или нет, при нажатии "ОК" сначала ругается на :
В итоге получил тот же результат, но без использования табличной части.
Подскажите, есть какая то разница между способом где используется ТЧ и не используется?
Табличная часть нужна для сохранения списка выбранных значений в документе, другого варианта я просто не знаю.
Это ведь только первый этап - выбрать из списка, вам же нужно будет этими значениями пользоваться. При повторном открытии документа вам нужно будет учитывать, что пользователь выбрал ранее и восстановить при открытии списка пометки его элементов. Пользоваться строкой для этого очень неудобно.
В табличной части реквизит "Подстановка" - это не строка, это ссылка в справочник "Подстановки".
В данном случае достаточно и того, что можно выбрать из списка. Это поле заполняется один раз при создании документа и более выбор не используется.
Огромная Вам благодарность! Очень помогли.
Суть вопроса - имеется УТ 11 и обработка с отбором из настроек компоновщика на форме (скрин 1).
При подборе ссылочных значений в правом значении отбора открывается форма для формирования списка значений.
Есть желание переопределить данную форму на форму, которая открывается, как в отчетах СКД (видно на скрине 2 - это общая форма ВводЗначенийСпискомСФлажками в УТ 11), так как она имеет возможность вставки значений из буфера обмена.
Но как это сделать - вопрос.
Может у кого-то есть мысли по этому поводу?
P.S. Понимаю, что можно отдельно на форме обработки сделать кнопку с аналогичным функционалом вставки из буфера, но интересует именно переопределение формы, т.е открытие своей формы (либо формы ВводЗначенийСпискомСФлажками из конфигурации), вместо формы платформы. Возможно ли это?
P.P.S. Попробовал создать свою форму с настройками компоновщика, но имеющиеся варианты процедур не позволяют переопределить форму при изменении правого значения отбора.
Это понятно, но форма отчета - это форма отчета (она является общей формой в конфигурации) и её указывают основной в отчете.
В случае с отбором на форме обработки форма подбора списка значений вызывается платформенная.
Как её заменить на свою?
(3) Так это и есть обработка в которой отбор компоновщика вынесен на форму.
Обратите внимание, что вопрос именно в замене формы с заголовком "Список значений" (скрин 1), на форму с заголовком "Номенклатура" (скрин 2).
В скрине 3 попытка это сделать - скрин 3 это моя форма, которая дублирует форму "Редактирование отбора" из скрина 1 для проверки возможности подмены формы с заголовком "Список значений".
Я такой возможности не увидел и решил спросить у более опытных коллег.
(4) Благодарю за ссылку, но это немного не то. Нарисовать свою форму - нарисуем, но как переопределить платформенную при нажатии на кнопку выбора правого значения отбора. Вот тут вопрос.
Насколько я понимаю, то как вариант можно сделать свою форму для работы с настройками компоновщика и переопределить вызов настроек отбора из формы обработки.
(0) Попробуй в параметрах редактирования поля скд указать свою форму в поле "форма выбора":
Форма выбора - позволяет указать, какую форму необходимо использовать для выбора значения параметра. Путь к форме необходимо прописывать точно также, как для метода ОткрытьФорму(),
В форме размещаем кнопку "Подбор". Это может быть кнопка панели инструментов или отдельно стоящая кнопка.
В обработчике события Нажатие для кнопки пишем:
При этом происходят довольно интересные вещи:
1. В первой строке получаем форму выбора. Это особая форма, которая может не совпадать с формой списка (а может совпадать). Форму выбора можно создать самому, или она будет сгенерирована системой автоматически, или форма списка может работать в режиме выбора.
Если вы получили не форму подбора, а обычную форму (методом ПолучитьФорму или ПолучитьФормуСписка), то по умолчанию у нее не установлено свойство РежимВыбора. Нужно или установить это свойство в Истина, или оповещать о выборе элемента самостоятельно (см. метод формы ОповеститьОВыборе).
а) Первым параметром можно передать имя формы или объект описания метаданных типа формы. Если у объекта несколько форм выбора, то здесь можно указать, какую форму нужно использовать.
б) Вторым параметр указывается владелец формы - форма или элемент управления, из которого производится вызов формы выбора. После совершения выбора именно владельцу формы будет послано оповещение о выборе, которое инициирует событие "ОбработкаВыбора" (у формы или элемента формы).
в) Третьим параметром можно указать ключ уникальности для поиска среди уже открытых форм. Если форма с таким ключом уникальности будет найдена, то будет возвращена именно она. Это удобно, если не нужно открывать новых форм выбора.
2. Вторая строка устанавливает режим, при котором после выбора значения форма не будет закрываться, т.е. это и и есть основная функция подбора. При множественном выборе это свойство имеет смысл установить в Истина, но об этом ниже. Здесь же можно присвоить и другие свойства открываемой формы, например, расположение на экране, задать значения реквизитов формы или экспортных переменных модуля формы.
3. Третья строка открывает форму выбора. После первой строки форма еще не была открыта, но ее модуль уже был скомпилирован и инициализирован.
В свойствах формы должен быть назначен обработчик события "ОбработкаВыбора".
2. Множественный выбор
При таком выборе пользователь может выделить сразу несколько элементов (например, с помощью клавиши Ctrl) и после нажатия кнопки "Выбрать" система вернет массив выбранных элементов, а не один элемент, как в первом случае.
Тогда обработчик события ОбработкаВыбора можно написать так:
Примечание: Для ручной генерации события выбора из формы подбора нужно использовать функцию ОповеститьОВыборе.
« Как стать программистом 1С » Язык 1С » Выпадающий список значений 1С на форме
Выпадающий список значений 1С на форме
Очень часто бывает необходимо на форме дать возможность пользователю выбрать настройки на форме (перед нажатием кнопки «Выполнить все»). Когда нужно выбрать одно значение из нескольких предопределенных – часто используется выпадающий список значений 1С на форме.
Выпадающий список значений 1С на форме — добавьте на форму толстого клиента поле выбора, уточните его название. Чтобы пользователь не мог изменять список – снимите галочку «Редактирование текста» в свойствах поля выбора.
Сам список выбора добавим программно в обработчике формы «ПриОткрытии». У поля выбора есть подчиненный список значений ЭлементыФормы.ИмяПоляВыбора.СписокВыбора, а для установки значения по умолчанию, и для определения выбранного значения ЭлементыФормы.ИмяПоляВыбора.Значение:
Процедура ПриОткрытии()
ЭлементыФормы.ВыборЗначения.СписокВыбора.Очистить();
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(0, "Создать документ");
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(1, "Изменить документ");
ЭлементыФормы.ВыборЗначения.СписокВыбора.Добавить(2, "Удалить документ");
ЭлементыФормы.ВыборЗначения.Значение = 0;
Выпадающий список значений 1С на форме — в тонком клиенте на форму нужно создать реквизит формы, в котором мы будем хранить результат, например с типом строка. Перетащите его на форму.
Выпадающий список значений 1С на форме — Вариант 1)
- Включим кнопку выбора списка
- В свойстве «Список выбора» нажмите «…» и введите варианты
- Результат выбора будет сохранен в выбранном реквизите
Выпадающий список значений 1С на форме — Вариант 2)
- Включим кнопку выбора списка
- Добавим обработчик «НачалоВыбораИзСписка»
&НаКлиенте
Процедура ВыбранноеЗначениеНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
Элементы.ВыбранноеЗначение.СписокВыбора.Добавить("Добавить документ");
Элементы.ВыбранноеЗначение.СписокВыбора.Добавить("Редактировать документ");
Элементы.ВыбранноеЗначение.СписокВыбора.Добавить("Удалить документ");
Результат аналогичный. Требуется, если список должен быть заполнен ссылками на справочники/документы, которые не являются предопределенными.
У документа Рассылка электронной почты пользователю необходимо ограничить выбор статуса до Подготоваливается и Подготовлена. Статусы Выполняется и Завершена будут устанавливаться регламентным заданием в момент выполнения рассылки и ее завершения. Разбираемся с ограниченим выбора значений перечисления.
Задача
Имеется документ Рассылка электронной почты, при создании документа автоматически устанавливаетс статус Подготавливается, после подготовки рассылки пользователь устанавливает статус Подготовлена. Рассылка выполняется регламентным заданием с момента указанным как дата документа, в моент рассылки устанавливается статус Выполняется, по заверешении — Заверешена. Пользователю необходимо ограничить выбор статуса до Подготоваливается и Подготовлена.
Решение
При указании типа реквизита перечисление пользователю будут доступны к выбору все значения этого перечисления.
В интеренетах для ограничения доступных значений перечислений зачастую предлагают выполнять это непосредственно в форме. Но для этого в платформе предусмотрен целый механизм, потому не будем костытировать.
Для органичения необходимо в процедуре ОбработкаПолученияДанныхВыбора() модуля менеджера перечисления указать доступные данные выбора в переменной ДанныеВыбора. Для этого в переменную ДанныеВыбора поместим список допустимых значений.
Так же не забываем переменной СтандартнаяОбработка присвоить значение Ложь, иначе в списке выбора будут доступны все элементы + указанные в переменной ДанныеВыбора. Проверяем результат:
Теперь даже если будет указан не доступный для пользователя статус, он будет корректно отображаться:
Читайте также: