Имя: Пароль:
   
1C
1C 7.7
v7: Проверка реквизита документа
0 И Р
 
22.10.18
20:24
Здравствуйте! При формировании реестра документов показывается ошибка:
ТЗ.Сумма=Док.Сумма;
{Отчет.РеестрДокументов.Форма.Модуль(428)}: Поле агрегатного объекта не обнаружено (Сумма)

Предполагаю, что есть документ, у которого нет этого реквизита "Сумма".
Пытаюсь поставить проверку в документе на наличие реквизита и возникает следующая ошибка:
Если Док.Метаданные().Реквизиты.Найти("Сумма") <> Неопределено <<?>> Тогда
{Отчет.РеестрДокументов.Форма.Модуль(427)}: Переменная не определена (Неопределено)

Так как же сделать проверку, есть ли в документе такой реквизиты или нет?
1 Cool_Profi
 
22.10.18
20:27
в7 и неопределено?
Продам оператор попытки....
2 Злопчинский
 
22.10.18
20:52
(0) открой в типовой ТиС глобальным поиском СкопироватьРеквизитыШапки() - и посмотри как обходятся мтаданные
3 MWWRuza
 
22.10.18
20:52
Из типовой торговли 7.7:

// глЕстьРеквизитМнЧ(ИмяРеквизита, ВидДокумента)
//
// Параметры:
//  ИмяРеквизита - имя реквизита (строка)
//  ВидДокумента - вид документа (строка)
//
// Возвращаемое значение:
//  0 - нет реквизита,
//  1 - есть реквизит
//
// Описание:
//  Проверяет, есть ли в структуре метаданных документа указанного вида
//    реквизит многострочной части с указанным названием
//
Функция глЕстьРеквизитМнЧ(ИмяРеквизита,ВидДокумента) Экспорт
    Перем Реквизит;    
    Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
    (ПустоеЗначение(ИмяРеквизита) = 1) Тогда
        Возврат 0;
    КонецЕсли;
    Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита);
    Возврат Реквизит.Выбран();
КонецФункции //глЕстьРеквизитМнЧ()
4 И Р
 
22.10.18
23:53
(3) Прошу прощения, а если документы перебираются разных типов и реквизит может быть не табличной части?

Как то это немного через одно место реализовано, неужели нельзя произвести поиск по реквизитам конкретного документа?
5 И Р
 
23.10.18
00:05
Да и тут как бы не проверяется наличие такого реквизита.. тут возвращается его значение т.е. в моём случае также вернётся ошибка.
6 Злопчинский
 
23.10.18
00:36
(4) Перебрать
1. Общие (шапка) реквизиты документа
2. Реквизиты шапки документа
3. Реквизиты ТЧ документа
.
перебирай в каком тебе нужно порядке и строй алгоритм как надо и всё
7 Злопчинский
 
23.10.18
00:36
(5)  Возврат Реквизит.Выбран();
вернет 0 или 1 в зависимости от того есть такой реквизит в метаданных объекта или нет
8 big
 
23.10.18
05:07
Если (Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита).Выбран() = 1) ИЛИ
(Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Выбран() = 1) ИЛИ
(Метаданные.Документ(ВидДокумента).ОбщийРеквизитДокумента(ИмяРеквизита).Выбран() = 1) Тогда
    ТЗ.ИмяРеквизита = Док.ИмяРеквизита;
КонецЕсли;
9 Калиостро
 
23.10.18
09:28
+(8) еще надо проверить
Если Метаданные.Документ(ДокВидумента).РеквизитТабличнойЧасти("Сумма").ИтогПоКолонке = 1 Тогда
Сумма = Док.Итог("Сумма");
Иначе
Сумма = 0;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Сумма = Сумма + Док.Сумма;
КонецЦикла;
КонецЕсли;
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан