новое событие
Информационный поток
Задания вакансии материалы разработки сообщения форума
Форум

Установить отбор на выбор измерения в регистре сведений

    • #1
    • 28.08.2015 18:44
    0
    Здравствуйте! Есть рег. сведений, у него два измерения: Пользователь (справочник пользователи) и Склады (справочник склады). Он заполняется руками пользователем. Необходимо сделать так, чтобы при заполнении этого регистра сведений, пользователь не мог выбрать склад с определенным наименованием. Подскажите пожалуйста как это сделать?
    • #2
    • 29.08.2015 11:12
    0
    Если хотим исключить ВСЕ ВАРИАНТЫ записи в т.ч. программно, т.к. пользователь может найти лазейку то нужно прописать в событии "ПередЗаписью" в модуле набора записей регистра сведений:
    Процедура ПередЗаписью(Отказ, Замещение)
    	КодСкладаЗапрет = "000000001"; // Лучше привязка к коду или сделать предопределенным
    	Для Каждого Запись Из ЭтотОБъект Цикл
    		Если Запись.Склад.Код = КодСкладаЗапрет Тогда
    			Отказ = Истина; // В первую очередь отказываемся от выбора!
    			СП = Новый СообщениеПользователю;
    			СП.Текст = "Пользователю нельзя выбирать этот склад с кодом "+КодСкладаЗапрет;
    			СП.Сообщить();
    		КонецЕсли;	
    	КонецЦикла;
    КонецПроцедуры
    

    Если кофигурация на поддержке то можно (и нужно) в подписке на событие (чтоб не снимать с поддержки сам регистр и обезопасить себя от трудностей обновления).
    Если же нужно обезопасить себя от некорректного ручного ввода пользователем, то нужно создать форму записи регистра сведений и проверять уже событие формы "ПередЗаписью" (особенно полезно, если это управляемая форма и все проверки на ПК пользователя, а не на сервере как во фрагменте выше.
    Тут я расписал подробно по событиям формы: https://infostart.ru/public/298700/
    • #3
    • 29.08.2015 11:19
    0
    Формы обычные или управляемые? Вообще если более точно по Вашей задаче "чтоб пользователь не мог выбрать", то тут множество вариантов именно при нажатии на элемент формы "склад" открывалась форма подбора с фильтром где именно этот склад исключается или в зависимости от остальных выбранных вариантов заполнения полей формы предлагаются на выбор соответствующие склады (сложный программный фильтр). Для толстого клиента обычне формы (что под рукой).
    • #4
    • 29.08.2015 11:38
    • Отредактировано: 29.08.2015 11:57:46
    0
    1. Создаем у нашего регистра "Тестовый" форму записи регистра сведений.
    2. В полученой форме записи у элемента формы "склад" устанавливаем событие Начало выбора (по F4) - возникает до помещения выбранного значения в элемент формы - как правило, открытие формы выбора (формы списка в нашем случае программно):"<Элемент>НачалоВыбора(<Откуда вызвали и куда поместить результат выбора>, <Нужно ли после обработки плаформе 1С поместить результат выбора в элемент формы или программист сам это сделает (или не сделает и выведет ругательное сообщение или вообще скроет ненужный выбор от любопытных глаз как в нашем случае)>":
    Процедура СкладНачалоВыбора(Элемент, СтандартнаяОбработка)
    	//ПолеВыбора (ComboBox)
    	//НачалоВыбора (StartChoice)
    	//Синтаксис:
    	//
    	//НачалоВыбора(<СтандартнаяОбработка>) 
    	//Параметры:
    	//
    	//<СтандартнаяОбработка>
    	//
    	//Тип: Булево. 
    	//В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет.
    	//Значение по умолчанию: Истина. 
    	//Описание:
    	//
    	//Возникает при нажатии кнопки выбора или клавиши F4. 
    	СтандартнаяОбработка = Ложь; // Самое главное все будем сами делать и форму с фильтром открывать и значение выбора сами подставлять!!!
    	
    	КодСкладаПодЗапретом = "000000001"; // Можно имя склада под запретом (хоть список - вопрос оптимизации)
    	// Получение формы
    	
    	ФормаВыбораСклады = Справочники.Склады.ПолучитьФормуВыбора(, ЭтаФорма, "12345"); // 3-й параметр для исключения повторного открытия уже открытой формы
    	//Форма (Form)
    	//ОткрытьМодально (DoModal)
    	//Синтаксис:
    	//
    	//ОткрытьМодально(<Таймаут>) 
    	//Параметры:
    	//
    	//<Таймаут> (необязательный)
    	//
    	//Тип: Число. 
    	//Время показа формы в секундах, по истечении которого форма будет закрыта с параметром закрытия Неопределено. Если значение параметра не задано, время показа не ограничено.
    	//Значение по умолчанию: 0. 
    	//Возвращаемое значение:
    	//
    	//Тип: Произвольный. 
    	//Команда закрытия формы.
    	//Если форма открывалась для выбора, возвращает выбранное значение (или массив значений, в случае разрешенного множественного выделения в открываемой форме). Если значение не выбрано, возвращается Неопределено. 
    	//	Описание:
    	//	
    	//	Открывает форму в модальном режиме.
    	//	
    	//	Доступность: 
    	//	
    	//	Толстый клиент. 
    	//	Пример:
    	//	
    	//	ФормаСписка = Справочники.Объекты.ПолучитьФормуСписка();
    	//	ФормаСписка.ОткрытьМодально();
    	//	
    	//	
    	//	См. также:
    	//	
    	//	Форма, метод Открыть
    	//	Форма, метод Закрыть
    	
    	// Установим фильтр запрета и включим его (в отладчике свойство Отбор)
    	ФормаВыбораСклады.отбор.Ссылка.ВидСравнения = ВидСравнения.НеРавно;
    	ФормаВыбораСклады.отбор.Ссылка.Значение = Справочники.Склады.НайтиПоКоду(КодСкладаПодЗапретом);
    	ФормаВыбораСклады.отбор.Ссылка.Использование = Истина;
    	
    	ВыбСклад = ФормаВыбораСклады.ОткрытьМодально();
    	Если ВыбСклад<>Неопределено Тогда
    		Элемент.Значение = ВыбСклад;
    	КонецЕсли;	
    	
    КонецПроцедуры
    • #5
    • 29.08.2015 12:10
    0
    Результат работы открытия формы подбора можно посмотреть при открытии формы регистра записей (или создать общую форму и сделать ее основной для выбора в регистре сведений). Ненужного склада нет (можно и список складов как уже говорил для каждого пользователя, форма фильтра в командрой панели формы выбора не работает и пользователь его не отключит.
    Для управляемых форм в новых конфигурациях где НЕЖЕЛАТЕЛЕН или ЗАПРЕЩЕН режим МОДАЛЬНОСТИ нужно пользоваться механизмом оповедений.
Для участия в обсуждении Вам необходимо авторизоваться либо   зарегистрироваться