Имя: Пароль:
1C
 
глВсеРеквизитыДокументаЗаполнены
0 Sj
 
24.10.08
13:25
привет!
Кто-нить может сюда кинуть сабжевую функцию? А то я оригинал не совсем понимаю и уже начинаю сомневаться, что это оригинал.
1 ДенисЧ
 
24.10.08
13:26
У меня так...

Функция глВсеРеквизитыДокументаЗаполнены(Конт,СписокРеквизитов) Экспорт
   
   Если Константа.РазрешитьПроводитьБудущейДатой = 0 Тогда
       Если Конт.ДатаДок>РабочаяДата() Тогда
           глНеПроводить(Конт,"Нельзя проводить документ будущей датой!");
           Возврат (0);
       КонецЕсли;                                            
   КонецЕсли;    
               
   Пока СтрДлина(СписокРеквизитов)>0 Цикл
       ПозЗапятой = Найти (СписокРеквизитов,",");
       Если ПозЗапятой = 0 Тогда
           ИдентРеквизита = СписокРеквизитов;
           СписокРеквизитов = "";
       Иначе
           ИдентРеквизита = Сред(СписокРеквизитов,1,ПозЗапятой-1);
           СписокРеквизитов = Сред(СписокРеквизитов,ПозЗапятой+1);
       КонецЕсли;
       Если ПустоеЗначение(Конт.ПолучитьАтрибут(ИдентРеквизита))=1 Тогда
           ВидДок = Конт.Вид();
           Если Метаданные.Документ(ВидДок).РеквизитШапки(ИдентРеквизита).Выбран()=1 Тогда
               Объект = Метаданные.Документ(ВидДок).РеквизитШапки(ИдентРеквизита);    
               
           ИначеЕсли Метаданные.ОбщийРеквизитДокумента(ИдентРеквизита).Выбран()=1 Тогда
               Объект = Метаданные.ОбщийРеквизитДокумента(ИдентРеквизита);
               
           ИначеЕсли Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита).Выбран()=1 Тогда
               Объект = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита);
               
           Иначе
               глНеПроводить(Конт,"ВсеРеквизитыДокументаЗаполнены(): Неверный реквизит:"+ИдентРеквизита);
               Возврат (0);
           КонецЕсли;
           ПредставлениеРеквизита = ?(ПустоеЗначение(Объект.Синоним)=0,Объект.Синоним,Объект.Идентификатор);
           глНеПроводить(Конт,"Не заполнен реквизит """+ПредставлениеРеквизита+"""");
           Возврат (0);
       КонецЕсли;
   КонецЦикла;
   
   Возврат (1);
   
КонецФункции // глВсеРеквизитыДокументаЗаполнены()
2 Sj
 
24.10.08
13:29
Да. Оно. Тогда не понятно, что сначала анализируется
       Если ПустоеЗначение(Конт.ПолучитьАтрибут(ИдентРеквизита))=1 Тогда

и только потом, если оно не заполнено анализируется наличие данного атрибута в документе... хотя, имхо, логичнее было бы наоборот. Так как - я попробовал - при атрибуте, которого нет в доке, вываливается ошибка.
3 Sj
 
24.10.08
13:31
то бишь до вот этой вот ветки мы просто никогда не сможем дойти:
"            Иначе
               глНеПроводить(Конт,"ВсеРеквизитыДокументаЗаполнены(): Неверный реквизит:"+ИдентРеквизита);
               Возврат (0);
"
5 Serjant
 
24.10.08
13:34
(2) Через метаданные делается "красивая строка" для сообщения, т.к. идентификатор реквизита пользователю может быть непонятен.
6 Ёпрст
 
24.10.08
13:36
(3) гы-гы... если еще подумать, придёт озарение...
7 Sj
 
24.10.08
13:36
Но ветка "Иначе
               глНеПроводить(..." все же нужна, правильно ?
8 Serjant
 
24.10.08
13:36
(3) Передавай в эту функцию строку с идентификаторами фактически имеющихся в доке реквизитов.
9 Sj
 
24.10.08
13:39
(6) Вы разрушаете фундаментальные основы назначения форума.
(8) Это то я понимаю, я не могу понять зачем там "иначе" стоит, если ошибка при проверки на пустоту раньше выскочит.
10 Ёпрст
 
24.10.08
13:41
(9) передал реквизит формы, а не документа, например.
11 Sj
 
24.10.08
13:43
(10) Конт.ПолучитьАтрибут(ИдентРеквизита) - ПолучитьАтрибут это метод документа, а не формы... Ну то бишь я туда и реквизит формы передал и такую же ошибку получил.
12 Serjant
 
24.10.08
13:44
(9) Потому как проверять реквизиты табличной части не всегда получится, строка может невыбрана.
14 Ёпрст
 
24.10.08
13:48
(11) Открой СП и почитай... ПолучитьАтрибут есть не только у документа, если что.
15 Sj
 
24.10.08
13:51
(12) для проверки реквизитов ТЧ нужно выбратьстроки(), но по любому, табчасть отработается веткой             ИначеЕсли Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита).Выбран()=1 Тогда
16 Serjant
 
24.10.08
13:53
Открой в отладчике и посмотри Конт.ТекущаяСтрока(). Выборка в модуле документа не меняет текущую строку на форме документа.
17 Sj
 
24.10.08
13:54
(14) а. точно. сорри. но ошибка вываливается, если я реквизит формы туда передаю.
18 Ёпрст
 
24.10.08
13:56
(17) Забей, просто делали универсальную процу, которую можно вызывать не из Модуля документа, а из модуля формы, передав контекст/ссылку на сам документ... например, в ПриЗаписи()...
19 Sj
 
24.10.08
13:58
(18) а. тогда понятно. а то у меня только при проведении вызывается, вот я и гружусь.
Спасибо! Так наверняка и есть, как ты сказал.