Имя: Пароль:
1C
1С v8
Запретить ввод на основании Документа
0 zhuk125
 
24.03.16
15:49
Подскажите как запретить ввод на основании текущего документа, если его состояние не равно "Утвержден", Утвержден - это реквизит типа"Перечисление".В критерии отбора проверяю подчиненность."Упп для Украины" Пишу такой код в ФормеДокумента в

Процедура ПередЗаписью(Источник, Отказ, РежимЗаписи, РежимПроведения)

Если НЕ Источник.ЭтоНовый() Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               |    ЗапретСоздНаОсновании.Ссылка
               |ИЗ
               |    КритерийОтбора.ЗапретСоздНаОсновании(&Документ) КАК ЗапретСоздНаОсновании";
              
        Запрос.УстановитьПараметр("Документ", Источник.Ссылка);        
        Результат = Запрос.Выполнить();
        Если НЕ Результат.Пустой() и Состояние <> Перечисления.СостоянияДокументов.Утверждено Тогда
            ВызватьИсключение "созадние на основании не возмонжо" ;        
    КонецЕсли;                      
                   
КонецПроцедуры
1 Чайник Рассела
 
24.03.16
15:50
а почему перед записью?
2 Fragster
 
гуру
24.03.16
15:51
В модуле объекта:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения)
Если ДанныеЗаполнения.Состояние <> Утвержден Тогда
ВызватьИсключение("Недостаточно утверждений, нужно больше утверждений");
КонецЕсли;
3 Amra
 
24.03.16
15:51
Почему перед записью, а не при создании нового? Причем тут критерии отбора?
4 Fragster
 
гуру
24.03.16
15:51
ну, или что-то типа того
5 zhuk125
 
24.03.16
15:59
(3) Видел статью, там ребята говорили передЗаписью делать.. а с критерием отбора -натупил, почему то думал что нужно сравнивать и Доки.
6 Rie
 
24.03.16
16:02
(5) Не слушай плохих ребят. Ввод на основании несколько раньше происходит, чем "перед записью".
И - "Читайте книги. В них видно фиги".
7 samozvanec
 
24.03.16
16:03
(5) ну да, юзер ввел, все заполнил, а записать не дают - очень удобно
8 zhuk125
 
24.03.16
16:30
(2) сделал так, ничего не происходит (
9 Rie
 
24.03.16
16:34
(8) "Утвержден" замени на правильное значение.
10 aleks_default
 
24.03.16
16:35
(2) нужно делать в создаваемом документе
11 netsurfer
 
24.03.16
16:43
&ИменемБорисаНуралиева
Если Основание = ИмяДокумента.ПустаяСсылка() Тогда
ВсёГуд = Истина;
Иначе
ВсёГуд = Не ВсёГуд;
КонецЕсли
12 Ёпрст
 
24.03.16
16:49
ежели обычные формы, то делаешь переменную модуля, в
ОбработкаЗаполнения втыкаешь условие, если не катит, переменной присваеваешь нечто, далее в модуле формы в ПередОткрытием смотришь на значение переменной, ежели = нечто (обычно проверка на истину) то предупреждение/сообщение и отказ=истина

если уф - принцип почти тот же. Только изврата больше.
13 Fragster
 
гуру
24.03.16
16:51
14 zhuk125
 
24.03.16
16:52
Разобрался, нужно было вот так сделать. Всем спасибо

Процедура ОбработкаЗаполнения(Основание)
    Если ТипЗнч(Основание) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда    
    а = Перечисления.СостоянияДокументов.Утверждено;
    Если Основание.Состояние <> а Тогда
        ВызватьИсключение("Недостаточно утверждений, нужно больше утверждений");
    КонецЕсли;
КонецЕсли;    
КонецПроцедуры
15 zhuk125
 
24.03.16
16:52
(13) Доступ ограничен )
16 Fragster
 
гуру
24.03.16
16:53
(15) чтож ты так, без ИТСа живешь?
17 hhhh
 
24.03.16
16:57
(16) жук еще тот
18 Ёпрст
 
24.03.16
16:57
(13) ну, как бэ, у меня нет доступа туда и исключение - это за гранью добра и зла.
19 Одинесю
 
24.03.16
16:57
А зачем скобки у ВызватьИсключение?
20 Fragster
 
гуру
24.03.16
16:58
(19) по инерции. там в (2) еще пара ошибок синтаксических
21 aleks_default
 
24.03.16
17:01
а = Перечисления.СостоянияДокументов.Утверждено;
    Если Основание.Состояние <> а Тогда

феерично
Закон Брукера: Даже маленькая практика стоит большой теории.