Отказ от ввода на основании

1. uri1978 138 31.07.14 12:35 Сейчас в теме
Коллеги, изучаю работу управляемых форм. Не знаю как реализовать следуюющее:
ДокументА делается на основании ДокументаБ. В зависимости от некоего условия ДокументБ не должен создаваться, не должно также открываться окно нового документа.

На обычных формах решал эту задачу так: В модудел документа создавал экспортную переменную ОтказВводаНаОсновании. В событии "ОбработкаЗаполнения" проверял условие и присваивал Истина или Ложь. В событии формы "ПередОткрытием" проверял значение переменной ОтказВводаНаОсновании и елси нужно запрещал открытие нового документа.

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

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

Спасибо за помощь.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. dj_serega 394 31.07.14 12:53 Сейчас в теме
(1) uri1978,
В управляемых формах данный метод не проходит, не могу достучаться до экспортной переменной из модуля объекта. Даже если использую событие формы "ПриСозданииНаСервере".

а как пытаешься достучаться?
16. triviumfan 99 22.04.22 17:58 Сейчас в теме
(1)
В управляемых формах данный метод не проходит, не могу достучаться до экспортной переменной из модуля объекта. Даже если использую событие формы "ПриСозданииНаСервере".

Тебе уже ответили, что достаточно вызвать исключение в ОбработкаЗаполнения(), тем самым отказаться от создания объекта.
Ещё вариант - ПриСозданииНаСервере(): в ЭтотОбъект.Параметры.Основание передаётся тот злополучный "ДокументаБ". Тут можно тоже проверку запилить и в отказ - форма не создастся, объект удалиться. Но этот метод работает дольше, разумеется, ведь объект все это время заполнялся, плюс форма уже создана и передана.
2. uri1978 138 31.07.14 12:43 Сейчас в теме
Пробовал через "ДополнительныеСвойства" - ЭтотОбъект.ДополнительныеСвойства.Вставить("ОтказВводНаОсновании", Истина);
В событии ПриСозданииНаСервере - тоже не могу получить.
4. uri1978 138 31.07.14 12:58 Сейчас в теме
РеквизитФормыВЗначение("Объект").ОтказВводНаОсновании - всегда Неопределено.
Сама переменная есть, а значение не передается.
5. dj_serega 394 31.07.14 13:10 Сейчас в теме
(4) uri1978, а если в назначении переменных установить значение переменной (в конце модуля объекта)?
6. Shurik1C 31.07.14 13:15 Сейчас в теме
Перед заполнением Документа Б на основании - если не выполняются условия которые тебе нужны и документ не должен создаваться - запиши ему в Комментарий - "НеСоздавать" и сразу возврат, а потом перед открытием (при создании на сервере) Документа Б - проверяй, есть ли в комментарии "НеСоздавать" - если да, то Отказ.
wau8824ru; uri1978; +2 Ответить
8. dj_serega 394 31.07.14 13:18 Сейчас в теме
(6) Shurik1C, ну это как выход из ситуации :) хочется же правильно сделать :)
(7) uri1978,
Пробовал через "ДополнительныеСвойства" - ЭтотОбъект.ДополнительныеСвойства.Вставить("ОтказВводНаОсновании", Истина);
В событии ПриСозданииНаСервере - тоже не могу получить.

А как проверял "ПриСозданииНаСервере". через "РеквизитФормыВЗначение"?
10. uri1978 138 31.07.14 13:22 Сейчас в теме
(8) dj_serega,

Да, снова проверял РеквизитФормыВЗначение. Вообще дополнительные свойства не видит. Причем удивляет что проверяю в событии вызываемом на сервере. Создаю на сервере, проверяю на сервере - не передаются...
9. uri1978 138 31.07.14 13:20 Сейчас в теме
(6) Shurik1C,
Спасибо, так заработало.

Вопрос по УФ, а как быть с экспортными переменными модуля объекта? Где они видны? Почему не изменяются в событиях?
ДополнительныеСвойства - с ними что, тоже самое?
11. dj_serega 394 31.07.14 13:34 Сейчас в теме
(9) uri1978, Только учти вариант когда комментарий нужно будет заполнять на основании. А они сейчас используется для анализа.
(10) uri1978,
Вообще дополнительные свойства не видит.

не может быть :) Правда я не в обработке заполнения вставлял элемент структуры.
12. uri1978 138 31.07.14 13:37 Сейчас в теме
(11) dj_serega,
Попробуй в обработке заполнения вставь. Я сам крайне удивлен, что из этого события ("ОбработкаЗаполнения") нельзя ни экспортную переменную установить ни дополнительное свойство.
13. dj_serega 394 31.07.14 13:39 Сейчас в теме
(12) uri1978, видимо мы чего-то не знаем :)
Не закрывай тему, в свободное время поиграюсь с этим. Если что получится, отпишусь.
7. uri1978 138 31.07.14 13:15 Сейчас в теме
Если в конце модеуля установить то переменная присваивается, если в событии "ОбработкаЗаполнения" то нет. Почему так?
14. uri1978 138 31.07.14 13:42 Сейчас в теме
Ок.
Но для меня это жесть, к чему привык теперь в УФ или не работает, или работает не так...
Shurik1C; +1 Ответить
15. ppdron 8 22.04.22 16:31 Сейчас в теме
Вот выжимка с сайта its.1c.ru по этому вопросу

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

1. В случае если в силу каких-либо условий необходимо ограничивать ввод на основании по команде "Создать на основании", то такую проверку следует выполнять в обработчике ОбработкаЗаполнения модуля объекта (набора записей). Например, это могут быть проверки вида:

Для команды "Создать на основании" не различимы группы и элементы справочников и планов видов характеристик: команда одинаково доступна в форме списка как для групп, так и для элементов. Требуется запретить ввод на основании групп.
Требуется запретить ввод на основании непроведенных документов.

2. Для оповещения пользователя о причинах отказа, в обработчике ОбработкаЗаполнения следует использовать исключения:

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) 

   Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Сотрудники") Тогда
      Если ПолучитьЗначениеРеквизита(ДанныеЗаполнения, "ЭтоГруппа") = Истина Тогда
         ВызватьИсключение "Ввод приказа о приеме на основании группы сотрудников невозможен!
                           |Выберите сотрудника. Для раскрытия группы используйте клавиши Ctrl и стрелку вниз"; 
      КонецЕсли; 

      // обработка заполнения объекта по данным заполнения 

   КонецЕсли;

КонецПроцедуры
Показать


При этом не рекомендуются какие-либо иные решения для подобных проверок. В частности, не следует создавать дополнительные команды для ввода на основании и размещать проверки в обработчиках этих команд.

ITS.1c.ru
Garasik; NikolaySk; Diamante; dbachinsky; GonziK_KIV; sshunyakov; stepani4; akmich; Uncore; user712426; user631502_m.parakhina; solary; triviumfan; +13 Ответить
17. johny1987 13.09.23 14:23 Сейчас в теме
(15) а на хера тогда в процедуре нужен параметр "Стандартная обработка" , если он ни хрена не работает и я не могу сделать пару документов вместо одного, связанных с с этим доком-основанием?!?
18. user1661012 24.10.24 00:52 Сейчас в теме
(17) "Стандартная обработка" не равно "Отказ". Отказался от стандартных действий, значит своим кодом заполнять будешь. Но будешь!
19. Deon 24.12.24 14:25 Сейчас в теме
(15) Тоже так делаю, но, как мне кажется, так себе 1С предлагает решение. В случае исключения эта ошибка пишется в журнал регистрации, хотя поведение вполне штатное.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот