Коллеги, изучаю работу управляемых форм. Не знаю как реализовать следуюющее:
ДокументА делается на основании ДокументаБ. В зависимости от некоего условия ДокументБ не должен создаваться, не должно также открываться окно нового документа.
На обычных формах решал эту задачу так: В модудел документа создавал экспортную переменную ОтказВводаНаОсновании. В событии "ОбработкаЗаполнения" проверял условие и присваивал Истина или Ложь. В событии формы "ПередОткрытием" проверял значение переменной ОтказВводаНаОсновании и елси нужно запрещал открытие нового документа.
В управляемых формах данный метод не проходит, не могу достучаться до экспортной переменной из модуля объекта. Даже если использую событие формы "ПриСозданииНаСервере".
Как-то можно прочиать значение переменной или передайть его в форму с сервера? Добавлять глобальную переменную не хотелось бы, разрабатывать собственную кнопку "ВводНаОсновании" тоже.
В управляемых формах данный метод не проходит, не могу достучаться до экспортной переменной из модуля объекта. Даже если использую событие формы "ПриСозданииНаСервере".
В управляемых формах данный метод не проходит, не могу достучаться до экспортной переменной из модуля объекта. Даже если использую событие формы "ПриСозданииНаСервере".
Тебе уже ответили, что достаточно вызвать исключение в ОбработкаЗаполнения(), тем самым отказаться от создания объекта.
Ещё вариант - ПриСозданииНаСервере(): в ЭтотОбъект.Параметры.Основание передаётся тот злополучный "ДокументаБ". Тут можно тоже проверку запилить и в отказ - форма не создастся, объект удалиться. Но этот метод работает дольше, разумеется, ведь объект все это время заполнялся, плюс форма уже создана и передана.
Пробовал через "ДополнительныеСвойства" - ЭтотОбъект.ДополнительныеСвойства.Вставить("ОтказВводНаОсновании", Истина);
В событии ПриСозданииНаСервере - тоже не могу получить.
Перед заполнением Документа Б на основании - если не выполняются условия которые тебе нужны и документ не должен создаваться - запиши ему в Комментарий - "НеСоздавать" и сразу возврат, а потом перед открытием (при создании на сервере) Документа Б - проверяй, есть ли в комментарии "НеСоздавать" - если да, то Отказ.
(6) Shurik1C, ну это как выход из ситуации :) хочется же правильно сделать :)
(7) uri1978,
Пробовал через "ДополнительныеСвойства" - ЭтотОбъект.ДополнительныеСвойства.Вставить("ОтказВводНаОсновании", Истина);
В событии ПриСозданииНаСервере - тоже не могу получить.
А как проверял "ПриСозданииНаСервере". через "РеквизитФормыВЗначение"?
Да, снова проверял РеквизитФормыВЗначение. Вообще дополнительные свойства не видит. Причем удивляет что проверяю в событии вызываемом на сервере. Создаю на сервере, проверяю на сервере - не передаются...
Вопрос по УФ, а как быть с экспортными переменными модуля объекта? Где они видны? Почему не изменяются в событиях?
ДополнительныеСвойства - с ними что, тоже самое?
(11) dj_serega,
Попробуй в обработке заполнения вставь. Я сам крайне удивлен, что из этого события ("ОбработкаЗаполнения") нельзя ни экспортную переменную установить ни дополнительное свойство.
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. В случае если в силу каких-либо условий необходимо ограничивать ввод на основании по команде "Создать на основании", то такую проверку следует выполнять в обработчике ОбработкаЗаполнения модуля объекта (набора записей). Например, это могут быть проверки вида:
Для команды "Создать на основании" не различимы группы и элементы справочников и планов видов характеристик: команда одинаково доступна в форме списка как для групп, так и для элементов. Требуется запретить ввод на основании групп.
Требуется запретить ввод на основании непроведенных документов.
2. Для оповещения пользователя о причинах отказа, в обработчике ОбработкаЗаполнения следует использовать исключения:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
Если ПолучитьЗначениеРеквизита(ДанныеЗаполнения, "ЭтоГруппа") = Истина Тогда
ВызватьИсключение "Ввод приказа о приеме на основании группы сотрудников невозможен!
|Выберите сотрудника. Для раскрытия группы используйте клавиши Ctrl и стрелку вниз";
КонецЕсли;
// обработка заполнения объекта по данным заполнения
КонецЕсли;
КонецПроцедуры
Показать
При этом не рекомендуются какие-либо иные решения для подобных проверок. В частности, не следует создавать дополнительные команды для ввода на основании и размещать проверки в обработчиках этих команд.
(15) а на хера тогда в процедуре нужен параметр "Стандартная обработка" , если он ни хрена не работает и я не могу сделать пару документов вместо одного, связанных с с этим доком-основанием?!?
(15) Тоже так делаю, но, как мне кажется, так себе 1С предлагает решение. В случае исключения эта ошибка пишется в журнал регистрации, хотя поведение вполне штатное.