Имя: Пароль:
1C
1C 7.7
v7: Как организовать проверку документа
,
0 sedoi_starik
 
25.09.13
12:20
Подскажите как правильно следует сделать проверку на предмет введенных данных в форме документа. Предположим мне необходимо проверить сто реквизит шапки был не пустым значением. Я сделал так, в форме документа - модуль создал процедуру.
Процедура ПриЗаписи()
Если ПустоеЗначение(ИмяПользов)=1
Тогда
Сообщить ("не ввели имя пользователя");
// тут бы добавил что бы документ не закрывался и не записывался
// что бы пользователь смог сделать работу на ошибками
//но не знаю как
Иначе
//А тут у меня идет запись данных в справочник
КонецЕсли;
КонецПроцедуры

Как такое организовать?
1 Стрелок
 
25.09.13
12:21
статусвозврата(0);
возврат
2 VladZ
 
25.09.13
12:24
Лучше так:

Процедура ПриЗаписи()
Если ВсеУсловияСоблюдены()=0
Тогда
статусвозврата(0);
возврат;
КонецЕсли;

КонецПроцедуры

В функции ВсеУсловияСоблюдены() прописываешь все свои "свистелки и гуделки". Будет читабельнее.
3 sedoi_starik
 
25.09.13
12:26
(1) (2)  Спасибо, все гуд.
4 Бирюк
 
25.09.13
12:27
(0) В свойствах метаданных у обязательного для заполнения реквизита придумай какой-нибудь спецсимвол. И через метаданные и ПолучитьАтрибут() проверяй заполнено или нет.
5 sedoi_starik
 
25.09.13
12:27
А еще подскажите как с метками работать?
6 sedoi_starik
 
25.09.13
12:28
(4) О_о это как?
7 Бирюк
 
25.09.13
12:41
Ну примерно так.
В Комментарии реквизита ставишь символ & - признак обязательности.
Далее

    Для й=1 по Метаданные.Документ("Новый1").РеквизитШапки() Цикл
        л_ИмяРеквизита=Метаданные.Документ("Новый1").РеквизитШапки(й).Идентификатор;
        л_Комментарий=Метаданные.Документ("Новый1").РеквизитШапки(й).Комментарий;
        л_ЗначениеРеквизита=рд_Документ.ПолучитьАтрибут(л_ИмяРеквизита);
        Сообщить("_"+ л_ИмяРеквизита+"_"+л_Комментарий+"_"+л_ЗначениеРеквизита);
    КонецЦикла;    
    Для й=1 по Метаданные.Документ("Новый1").РеквизитШапки() Цикл
        л_ИмяРеквизита=Метаданные.Документ("Новый1").РеквизитШапки(й).Идентификатор;
        л_Комментарий=Метаданные.Документ("Новый1").РеквизитШапки(й).Комментарий;
        л_ЗначениеРеквизита=рд_Документ.ПолучитьАтрибут(л_ИмяРеквизита);
        Сообщить("_"+ л_ИмяРеквизита+"_"+л_Комментарий+"_"+л_ЗначениеРеквизита);
    КонецЦикла;    
и и ищи в комментарии &
8 Бирюк
 
25.09.13
12:42
извиняюсь, 2 раза скопипастил
9 PRO100 NigGaZ
 
25.09.13
12:55
Мне больше нравится как 1сники сделали
    НеВсеОсновныеЗапонены = 1;
    Если ПустоеЗначение(Склад) = 1 Тогда
        ИмяПоля = """Склад""";
        ИдПоля = "Склад";
    ИначеЕсли ПустоеЗначение(Фирма) = 1 Тогда
        ИмяПоля = """Фирма""";
        ИдПоля = "Фирма";
    Иначе        НеВсеОсновныеЗапонены = 0;
    КонецЕсли;
    
    Если НеВсеОсновныеЗапонены <> 0 Тогда
        СтатусВозврата(0);
        Предупреждение("Не заполенено поле " + ИмяПоля, 60);
        Активизировать(ИдПоля);
        Возврат;
    КонецЕсли;
10 sedoi_starik
 
25.09.13
13:08
(7) так как то очень сильно замудрено.
(9) само то.
11 Бирюк
 
25.09.13
13:13
(10) Дань универсальности..