Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Проверка реквизита документа

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

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

Так как же сделать проверку, есть ли в документе такой реквизиты или нет?
 
 
   Cool_Profi
 
1 - 22.10.18 - 20:27
в7 и неопределено?
Продам оператор попытки....
   Злопчинский
 
2 - 22.10.18 - 20:52
(0) открой в типовой ТиС глобальным поиском СкопироватьРеквизитыШапки() - и посмотри как обходятся мтаданные
   MWWRuza
 
3 - 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 в зависимости от того есть такой реквизит в метаданных объекта или нет
   big
 
8 - 23.10.18 - 05:07
Если (Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита).Выбран() = 1) ИЛИ
(Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Выбран() = 1) ИЛИ
(Метаданные.Документ(ВидДокумента).ОбщийРеквизитДокумента(ИмяРеквизита).Выбран() = 1) Тогда
    ТЗ.ИмяРеквизита = Док.ИмяРеквизита;
КонецЕсли;
   Калиостро
 
9 - 23.10.18 - 09:28
+(8) еще надо проверить
Если Метаданные.Документ(ДокВидумента).РеквизитТабличнойЧасти("Сумма").ИтогПоКолонке = 1 Тогда
Сумма = Док.Итог("Сумма");
Иначе
Сумма = 0;
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Сумма = Сумма + Док.Сумма;
КонецЦикла;
КонецЕсли;

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует