1с ограничение типа в поле ввода

Установка отбора для поля ввода управляемой формы через ПараметрыВыбора (без переопределения событий «НачалоВыбора», «Автоподбор»)

Для ограничения вывода элементов какого-нибудь справочника или перечисления при редактировании поля ввода можно воспользоваться программной установкой свойства элемента формы «ПараметрыВыбора», которое доступно, начиная с версии платформы 8.2.

Данное свойство представляет собой фиксированный массив элементов типа «ПараметрВыбора», позволяет организовать простую фильтрацию доступных для выбора элементов в поле ввода. При этом фильтрация будет работать как при автоподборе, так и при открытии формы выбора.

Рассмотрим пару типовых случаев применения этого свойства для установки отбора:

Отфильтруем ввод сотрудника по значению реквизита «Организация» на форме документа.

Фильтрация будет установлена у поля ввода «СписокСотрудниковСотрудник», в таблице документа.
Для выбора будут доступны только те сотрудники, у которых значения реквизита «Организация» совпадает со значением, установленным в реквизите «Организация» документа.

Вот так будет выглядеть процедура установки фильтра:

Данная процедура вызывается в событии формы «ПриОткрытии» и в событии «ПриИзменении» поля ввода «Организация».

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

Фильтрация будет установлена у поля ввода «Статус».

Если у сохранённого документа установлен статус «Черновик», то список доступных элементов перечисления «Статусы» будет ограничен значениями «Черновик» и «НаРассмотрении».

Данная процедура вызывается в событиях формы «ПриСозданииНаСервере» и «ПослеЗаписиНаСервере»

Кроме этого в параметрах выбора можно устанавливать свои нетиповые свойства:

Данный параметр потом можно будет извлечь из параметров формы выбора справочника «Сотрудники» (в событии «ПриСозданииНаСервере»), а также из параметров в обработчике «ОбработкаПолученияДанныхВыбора» в модуле менеджера справочника «Сотрудники».

Источник

Программное приведение типа значения поля ввода и колонки табличного поля формы 1С8

При создании формы возникает вопрос настройки типа значения поля ввода. Не всегда заранее точно известен используемый тип, поскольку это может зависеть от метаданных конфигурации и условий использования.

Если, как минимум, известно, что в поле потребуется вводить и использовать элемент Справочника или Документ, то можно настроить тип на общий вид значения, например СправочникСсылка или ДокументСсылка. Далее решить вопрос программно при открытии формы, для уточнения используемого типа.

1с ограничение типа в поле ввода

Если требуется использовать элемент справочника Номенклатура, но в разных конфигурациях этот объект метаданных может называться по-разному, например Товары или же Номенклатура, то программное определение наименования типа при открытии формы упростит жизнь пользователю.

Следовательно, настроим автоматический выбор и первичное преобразование полей на форме к типу значения Справочник.Номенклатура, если такой есть в метаданных конфигурации. В противном случае, выбираем в качестве начального значения первый в списке имён справочников.

Для примера разработана управляемая форма и форма в обычном режиме (см. скриншоты публикации).

Обычный режим

Ниже приведен алгоритм на языке 1С8 для формы в обычном режиме. На форме есть поле список ВыбранныйТип, для которого настроено событие ПриИзменении. В поле ВыбранныйТип пользователь выбирает тип, который желает использовать для преобразования полей. При открытии формы считываем список справочников из метаданных конфигурации. Ищем справочник Номенклатура в списке, далее инициализируем на форме поле ВыбранныйТип полученным списком имён и найденным значением. Запускаем событие ВыбранныйТипПриИзменении, для преобразования типа полей ввода. В переменную модуля формы СтрокаТипЗнч сохраним полное имя выбранного типа для использования в других процедурах.

Далее необходимо выполнить преобразование типа значения колонки табличного поля. Для этого воспользуемся событием НачалоВыбора.

1с ограничение типа в поле ввода

Код преобразования приведен ниже. В нём используется ранее инициализированная переменная СтрокаТипЗнч для получения имени выбранного типа. Алгоритм можно найти в справке по ключевому слову ПривестиЗначение.

Новый тип назначается полям динамически после каждого выбора значения в списке ВыбранныйТип.

Управляемые формы

Для управляемых форм алгоритм изменяется незначительно. Для преобразования используется свойство ОграничениеТипа. Работа с метаданными только на сервере. Для быстрого доступа к колонке табличного поля при срабатывании события НачалоВыбора сохраним в переменной на клиенте СсылкаЭлементКолонкаТП ссылку с адресом элемента.

Рассмотренный пример алгоритма можно протестировать, скачав обработку по ссылке из публикации. Работа выполнялась на 1С:Предприятие 8.3 (8.3.15.1747), с использованием конфигураций «Управление торговлей», редакция 10.3 (10.3.46.3), Управление торговлей, редакция 11 (11.4.7.150). В составе обработки одновременно присутствует управляемая форма и форма обычного режима.

Спасибо за внимание! Критика приветствуется.

Источник

Быстрый ввод строковых значений в поля составного типа

Пример: в документе «Встреча» нужно вводить как заведенные в справочнике «Площадки» значения, так и произвольные строки. Такая необходимость может возникнуть в том случае, когда замусоривание справочника случайными значениями нежелательно.

Типовое поведение полей ввода значений составного типа не позволяет простым набором текста и нажатием Enter ввести строковое значение:

— при позиционировании в таком поле нельзя сразу начать набор текста: сначала нужно нажать на «педальку» (или F4) и выбрать тип:

1с ограничение типа в поле ввода

2) при ненайденном элементе справочника платформа показывает всплывающее окно с кнопкой создания элемента и гиперссылкой «Показать все», от которого (без применения мышки) можно «избавиться»* только через Esc, либо стерев введенный текст:

1с ограничение типа в поле ввода

* под «избавиться» подразумевается ввод желаемого строкового значения с клавиатуры, а не выбор из предлагаемых элементов справочника или создание нового

Далее предлагается метод, который позволяет пользователю после набора текста сразу вводить значение в поле ввода по нажатию Enter (без показа диалогов и всплывающих окон). При этом:

— можно как выбирать любое значение из справочника:

1с ограничение типа в поле ввода

— так и вводить произвольное строковое значение:

1с ограничение типа в поле ввода

Для реализации такого поведения требуется выполнить следующие шаги:

1. В модуле формы в ПриСозданииНаСервере() выставить для поля ввода ограничение типа:

2. В событии НачалоВыбора() поля ввода реализовать возможность выбора элементов справочника:

3. Наконец, реализовать возможность подбирать в поле ввода элементы из справочника простым набором текста, добавив обработчик события АвтоПодбор():

Источник

Как установить тип для реквизита «произвольного» типа

Надеюсь кому поможет

А как бы назначить тип полю формы произвольного типа для УФ?
Метода Значение там нет.

Вообще не могу толком сделать что то типа отбора в СКД.
Есть ТЧ у справочника, там есть счет, некое поле (реквизит по которому фильтр), условие (это сз типа В списке), а потом поле формы типа произвольный в каждой строке в представлении этой ТЧ. Так вот при выборе «в списке» нужно как то сделать это поле списком значений с ограниченным типом справочников на выбор. Иначе если условие Равно, то просто это поле ТЧ пусть будет типом самого типа реквизита для выбора одного элемента.
Так вот назначить тип не получается. А потом еще как то это хранить в БД нужно.

2(1): только после вот такой вот установики типа реквизита, при нажатии кнопки «Очистить» пользователю прийдется выбирать тип реквизита из специального списка.
Правильно делать надо так, если это реквизит формы:

ОписаниеТипа = Новый ОписаниеТипов(«СправочникСсылка.Организации»);
ЭлементыФормы.Организация.ОграничениеТипа = ОписаниеТипа;
ЭлементыФормы.Организация.Значение = ОписаниеТипа.ПривестиЗначение();
ЭлементыФормы.ВыбиратьТип = Ложь; //это на всякий случай

вот тогда при очистке значения реквизита не будет необходимости заново выбирать тип реквизита

(6): спасибо за подробный пример, но в итоге тип значения остается по прежнему строковым, при том что ОписаниеТипа установилось как надо (((
Плюс ко всему в поле ввода ничего не получается вести кнопка выбора срабатывает впустую, вручную ни одного символа не получается ввести.

приведите еще пример пожалуйста.

(8) сработало частично, установилось значение элемента фирмы, но по прежнему не допускает открыть форму списка справочника для перевыбора.

присваивал как пустую ссылку, так и конкретное значение. Перебрал много вариантов:

1.
Фирма=Справочники.Фирмы.найтипокоду(«00000001»).Ссылка;
ЭлементыФормы.фирма.Значение = Фирма;
2.
Фирма=Справочники.Фирмы.найтипокоду(«00000001»);
ЭлементыФормы.фирма.Значение = Фирма;
.

Реквизиты Доступность и Только Просмотр проверял.
но доступа к списку справочника почему то нет (((
навреное потому, что тип значения поля ввода на самой форме продолжает оставаться строковым.

Источник

Ваш браузер устарел, пожалуйста обновите ваш браузер пройдя по ссылке www.microsoft.com/download

ОГЛАВЛЕНИЕ

ВВЕДЕНИЕ

Заполняя форму ввода, мы работаем со связанными данными. Так, выбирая договор контрагента, мы ожидаем увидеть в форме выбора список договоров конкретного контрагента. Пользуясь текстовым поиском в поле реквизита формы, мы также должны увидеть список, удовлетворяющий как критериям введенного поиска, так и ограничениям связей. Так, введя часть номера договора, мы ожидаем увидеть список договоров конкретного контрагента, элементы которого содержат в номере набранный образец поиска. Аналогично система должна контролировать уже введенное значение в поле реквизита формы: значение должно удовлетворять ограничениям связей.

СВЯЗИ ПАРАМЕТРОВ ВЫБОРА

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

Описанное поведение системы вполне нас могло устроить. Однако если, например, нужно настроить отбор по полю реквизита через точку, то такое мы сделать стандартно не сможем. Так же, если ограничение подразумевает использование критериев отбора через поля дополнительных таблиц, соединенных с основной таблицей выбираемого типа, то такой вариант также не предусмотрен платформой. И последнее, в платформе нет средств проверки выбранного значения на соответствие связям параметров выбора.

Однако, об этом мало кто знает, в качестве параметра выбора можно установить фиксированный массив, и тогда отбор будет не на равенство, а на вхождение значения поля основной таблицы в список значений установленного массива. И это полезно знать в рамках представленного решения, чтобы не реализовывать то, что и так поддерживается платформой.

Поясню на конкретных примерах. Представим себе форму, в которой есть два реквизита типа Контрагент. Скажем нужно указать первого контрагента, а потом выбрать второго. Однако второго контрагента можно выбрать только из той же группы контрагентов, в которой находится первый. Здесь условие связи параметров выбора могло бы быть таким: Отбор.Родитель = Контрагент.Родитель. Однако правое выражение через точку не поддерживается платформой и потому такое условие связи ввести нельзя.

Предлагаемое решение как раз снимает указанные ограничения и позволяет использовать связи параметров как с реквизитами основной таблицы, так и с реквизитами связанных таблиц. Данное решение распространяется на все обозначенные сценарии ввода значения реквизита формы:

ПАРАМЕТРЫ ВЫБОРА

При вызове формы выбора или при подборе из списка платформа передает параметры, определенные по связям. Используя переданные параметры можно сформировать свой собственный запрос к данным и подменить выборку данных. Это нам необходимо для того, чтобы обойти ограничения описания условий связей. Перед рассмотрением указанного способа получения выборки давайте ознакомимся с существующими ограничениями платформы при описании связей.

Платформа накладывает следующие ограничения на создание выражений условий связей параметров. Имя параметра должно удовлетворять условиям написания имен (не содержать пробелов, начинаться может с буквы или символа подчеркивание); в имени можно использовать только одну точку или не использовать точку вообще. Значение параметра должно быть значением реквизита формы без использования подчиненных реквизитов, однако можно указать реквизит табличной части в специальном формате через элементы формы: Элементы.Список.ТекущиеДанные.ИмяРеквизита.

ОБХОД ОГРАНИЧЕНИЙ ПАРАМЕТРОВ ВЫБОРА

Практика

На практике мне попадались следующие решения:

Недостатками этих решений являются:

Решение

В рамках наложенных ограничений платформы, недостающие параметры можно передать косвенно через указание реквизита формы. Так, если по приведенному примеру выше, нам нужно указать связь по родителю реквизита Контрагент, то условие связи параметров может быть таким: Отбор.КонтрагентРодителя = Контрагент. Тогда в форму выбора или же в предопределенную процедуру обработки выбора будет передан параметр с именем КонтрагентРодителя и значением реквизита формы Контрагент. Далее нам достаточно отработать условие по этому параметру, а именно использовать этот параметр для получения значения через точку Контрагент.Родитель и уже это, полученное косвенно, значение параметра использовать для установки необходимого отбора по родителю.

Аналогично для второго примера условие связи будет: Отбор.Договор = Договор. Несмотря на то, что условие накладывается на справочник Статьи, в котором отсутствует поле Договор, такое условие в рамках платформы вполне допустимо использовать. В этом случае в форму выбора будет передан параметр Договор со значением из реквизита формы Договор. Далее нам необходимо построить запрос через соединение основной таблицы Статьи с таблицей РегистрСведений.СтатьиДоговора и уже на поле регистра сведений наложить условие отбора по переданному значению договора.

Таким образом можно обойти ограничения платформы и передать в форму выбора необходимые параметры. Далее необходимо исходя из переданных параметров построить текст запроса. Полученный текст запроса можно использовать как в форме выбора, так и в предопределенной процедуре получения данных выбора для формирования списка.

ПОДСИСТЕМА РАБОТА С ДАННЫМИ ВЫБОРА

1с ограничение типа в поле ввода

Рисунок 1. Диаграмма последовательности

Предлагаемая подсистема реализует интерфейс для работы следующих сценариев:

Подключение к подсистеме производится через вставку вызова в форме выбора и добавление предопределенной процедуры менеджера объекта ОбработкаПолученияДанныхВыбора.

Обработка параметров, функция ПолучитьТекстЗапроса

В предлагаемое решение строится вокруг реализации функции ПолучитьТекстЗапроса. Реализация данной функции не является обязательной и нужна только для тех типов данных, выборка которых ограничивается не только по реквизитам основной таблицы.

В следующем листинге демонстрируется пример-заготовка реализации такой функции. Данная реализация основана на использовании объектной модели запроса. Работа с объектной моделью осуществляется с использованием подсистемы «Работа со схемой запроса». С шаблонами построения текста запроса при использовании подсистемы можно подробнее ознакомиться в одноименной статье.

Листинг 1. Общая структура функции ПолучитьТекстЗапроса на примере справочника _ДемоНоменклатура

Динамический список формы выбора

После того, как мы разобрались с механизмом получения текста запроса по переданным параметрам, давайте рассмотрим, как его использовать для формирования динамического списка формы выбора.

Подготовка динамического списка может быть осуществлена в предопределенной процедуре модуля формы: ПриСозданииНаСервере. В этой процедуре доступны параметры выбора, которые необходимо передать в функцию формирования текста запроса. Полученный текст запроса необходимо установить в динамическом списке. Для того, чтобы динамический список работал, необходимо также установить параметры отбора динамического списка (это те параметры, которые нельзя установить в условиях отбора данных основной таблицы, но можно использовать в тексте запроса).

Для работа подсистемы необходимо настроить динамический список формы выбора: установить произвольный запрос и изменить псевдоним основной таблицы на имя «Источник».

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

Таким образом, для работы формы выбора с динамическим списком необходимо разделить переданные параметры на отбор по реквизитам основной таблицы и параметры запроса. Первые должны остаться и будут стандартным образом обработаны системой, а вторые необходимо использовать в тексте запроса динамического списка и установить программно в параметрах динамического списка.

Листинг 2. Демонстрация разделения параметров в функции ПолучитьТекстЗапроса

Листинг 3. Подключение формы выбора к подсистеме

Примечание: подключаемая форма выбора должна содержать произвольный текст запроса основной таблицы, при этом псевдоним основной таблицы должен быть предопределенным «Источник». Этот же псевдоним используется в подсистеме для построения текста запроса путем добавления условия и соединений.

Список данных выбора

1с ограничение типа в поле ввода

Рисунок 2. Список выбора

Механизм получения списка данных выбора аналогичен описанному для динамического списка формы выбора.

Как и для формы выбора здесь при вызове предопределенной процедуры ОбработкаДанныхВыбора будут переданы параметры, в том числе и параметры связей выбора. Далее необходимо получить текст запроса и установить значения переданных параметров в запрос программно. К полученному запросу необходимо применить отбор по условию вхождения переданного образца в строке поиска в значения по полям поиска.

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

Листинг 4. Подключение процедуры к подсистеме

Проверка на соответствие условиям параметров выбора. Заполнение по-умолчанию.

Теперь, когда мы умеем формировать текст запроса по условиям связей, мы можем также проверить текущее значение реквизита на соответствие условиям связей. Это может быть полезным, когда меняются связи (топология), либо меняются значения связей, либо производится выбор значения из истории списка.

Если в выборке по условиям связей мы получим единственное значение, то его можно использовать для заполнения реквизита по-умолчанию. В этом случае пользователя не обязательно заставлять сделать выбор, когда выбора то и нет.

Листинг 5. Проверка соответствия переменной СсылкаНаЗначение переданным параметрам выбора из структуры Параметры

СТЕНД «РАБОТА С ДАННЫМИ ВЫБОРА»

1с ограничение типа в поле ввода

Рисунок 3. Форма обработки стенда

Для демонстрации работы подсистемы выбран справочник _ДемоНоменклатура из демо-конфигурации БСП. С помощью расширения конфигурации в справочнике доработан менеджер объекта и форма выбора. В модуль менеджера добавлена функция ПолучитьТекстЗапроса и предопределенная процедура ОбработкаДанныхВыбора. В форме выбора добавлен вызов процедуры ЗаполнитьТекстЗапросаДинамическогоСписка.

В функции ПолучитьТекстЗапроса реализована обработка дополнительных параметров:

В процедуре используются приемы по формированию текста запроса в объектной модели с использованием подсистемы РаботаСоСхемойЗапроса. Более подробно читайте здесь.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *