Имя: Пароль:
1C
1С v8
Обработка открытия формы
,
0 rodrigez
 
27.03.12
15:19
Здравствуйте!
Есть условие, что на основании документа "Заказ", может заполняться и существовать, только один документ "Создание маршрутов". Заполнение происходит при вводе на основании. Запрет, на ввод нового, при имеющемся существующему документу "Создание маршрутов" делаю (ПриОткрытии() или ПриСозданииНаСервере() - отказ истина)Но этот запрет срабатывает в всех случаях открытия документа, а мне надо , что бы срабатывал только при вводе на основании.Как можно показать, говоря простыми словами "откуда летит форма".
Извините, за возможно глупый вопрос.
Спасибо!
1 le_
 
27.03.12
15:28
Все проверки на существование уже введенного документа можно сделать в обработке заполнения.
И с помощью экспортной переменной в модуле документа мНеОткрыватьФормуДокумента можно не открывать форму при вводе на основании.
2 rodrigez
 
27.03.12
15:30
Спасибо!
3 Ненавижу 1С
 
гуру
27.03.12
15:30
добавить в условия ПриСозданииНаСервере() И ЭтоНовый()?
4 Fram
 
27.03.12
15:44
5 fimanich
 
27.03.12
15:45
(3) ЭтоНовый() в управляемой форме вроде не взлетит.
Там надо на заполненность проверять Параметры.Ключ или Объект.Пустая()
6 rodrigez
 
27.03.12
16:14
(1) Может я не так понял, но запрещать открытие формы "в обработке заполнения", при вводе на основании, нельзя, все равно вылетает пустая.
Или если с объекта экспортировать переменную в модуль формы, все равно открытие формы надо запрещать, или создание, а это срабатывает на другие случаии.
Тогда, если я, например,  вставлю навигационную ссылку в оповещение то форма уже существующего дока не взлетит. А хочется ...

(3) аналогично с (1) проверка есть а открытие рубит всегда

(4) у меня нет доступа

(5) суть та же что и (3)
7 rodrigez
 
27.03.12
16:17
наверное, проще всего, имитировать ввод на основании другой кнопкой(командой) ...
8 le_
 
27.03.12
16:33
(6)
В обработке заполнения:
Если УжеСуществуетВведенныйНаОсновании() Тогда
   мНеОткрыватьФормуДокумента = Истина;
КонецЕсли;


//В форме:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   Если мНеОткрыватьФормуДокумента Тогда
       Отказ = Истина;
       Возврат;
   КонецЕсли;
КонецПроцедуры
9 fimanich
 
27.03.12
16:54
Я вот так делал. Основание - реквизит объекта, который заполняется в процедуре ОбработкаЗаполнения, (вообще обычно всегда хранят ссылку на основание)

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
   ...

   
   
   
   
   //Ввод нового допускается только на основании
   Если НЕ ЗначениеЗаполнено(Параметры.Ключ) Тогда
       
       //поэтому
       Если НЕ ЗначениеЗаполнено(Объект.Основание) Тогда
           Сообщение=Новый СообщениеПользователю;
           Сообщение.Текст="Ввод оплаты возможен только на основании документа ""Движение средств""";
           Сообщение.Сообщить();
           Отказ=Истина;
           Возврат;
       КонецЕсли;
   КонецЕсли;
10 Ненавижу 1С
 
гуру
27.03.12
16:56
(5) это на клиенте не взлетит, на сервере в ПриСозданииНаСервере() должно
11 fimanich
 
27.03.12
16:58
+(9) Вообще (9) - это то же, что и (8), только без экспортной переменной, т.к. у меня был реквизит Основание.
12 fimanich
 
27.03.12
17:02
(10) Проверил ради интереса
ПриСозданииНаСервере()
ЭтоНовый() // не взлетает
Объект.ЭтоНовый() // не взлетает
РеквизитФормыВЗначение("Объект").ЭтоНовый() //взлетает

Но так как-то красивее, имхо
НЕ ЗначениеЗаполнено(Параметры.Ключ)
Объект.Ссылка.Пустая()
13 rodrigez
 
27.03.12
17:23
Спасибо большое всем!
14 5 Элемент
 
27.03.12
17:38
(12) правильно так ЗначениеЗаполнено(Объект.Ссылка)
15 BabySG
 
27.03.12
20:16
Правильно: вызвать исключение в обработчике заполнения.
Это уже обсуждалось - разработчики платформы рекомендуют имено этот способ и, собственно, в типовых именно такое и применяется.
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn