Как программно определить наличие у документа опрелённого реквизита?
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Как программно определить наличие у документа опрелённого реквизита? можно ли это сделать без перебора всех реквизитов по документу?
Метаданные.Документ("Реализация").РеквизитТабличнойЧасти("Вася").Выбран()
+ поглядеть на реквизит шапки + общий реквизит...
См. во всех типовых глЕстьРеквизитШапки + глЕстьРеквизитТЧ
+ поглядеть на реквизит шапки + общий реквизит...
См. во всех типовых глЕстьРеквизитШапки + глЕстьРеквизитТЧ
(4) Чего в ней нет? Этих функций? Это нестрашно :-)
// ===============================
Функция глЕстьРеквизитШапки(ИмяРеквизита, ВидДокумента) Экспорт
Перем Реквизит;
Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
(ПустоеЗначение(ИмяРеквизита) = 1) Тогда
Возврат Нет;
КонецЕсли;
Реквизит=Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита);
Возврат ?(Реквизит.Выбран()=1, Да, Нет );
КонецФункции
// ===============================
Функция глЕстьРеквизитМнЧ(ИмяРеквизита,ВидДокумента) Экспорт
Перем Реквизит; //
Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
(ПустоеЗначение(ИмяРеквизита) = 1) Тогда
Возврат Нет;
КонецЕсли;
Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита);
Возврат ?(Реквизит.Выбран()=1, Да, Нет );
КонецФункции
Показать
(10) А зачем наличие общего реквизита в документе нужно проверять?
Разве что для универсальных отчетов/обработок, не привязанных к определенной конфигурации.
Разве что для универсальных отчетов/обработок, не привязанных к определенной конфигурации.
Функция глЕстьОбщийРеквизит(ИмяРеквизита) Экспорт
Перем Реквизит;
Если ПустоеЗначение(ИмяРеквизита)=1 Тогда
Возврат Нет;
КонецЕсли;
Реквизит=Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита);
Возврат ?(Реквизит.Выбран()=1, Да, Нет );
КонецФункции
(12) З.Ы. Это я уже прочитал в (6) :-)
Для российских собратьев по разуму привожу кусок кода из глобальника типовой российской ТиС редакции 9.2
Для российских собратьев по разуму привожу кусок кода из глобальника типовой российской ТиС редакции 9.2
//******************************************************************************
// глЕстьРеквизитШапки(ИмяРеквизита, ВидДокумента)
//
// Параметры:
// ИмяРеквизита - имя реквизита (строка)
// ВидДокумента - вид документа (строка)
//
// Возвращаемое значение:
// 0 - нет реквизита,
// 1 - есть реквизит
//
// Описание:
// Проверяет, есть ли в структуре метаданных документа указанного вида
// реквизит шапки с указанным названием
//
Функция глЕстьРеквизитШапки(ИмяРеквизита, ВидДокумента) Экспорт
Если ПустоеЗначение(ИмяРеквизита) = 1 Тогда
Возврат 0;
ИначеЕсли Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита).Выбран() = 1 Тогда
Возврат 1;
ИначеЕсли ПустоеЗначение(ВидДокумента) = 1 Тогда
Возврат 0;
ИначеЕсли Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита).Выбран() = 1 Тогда
Возврат 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции //глЕстьРеквизитШапки()
//******************************************************************************
// глЕстьРеквизитМнЧ(ИмяРеквизита, ВидДокумента)
//
// Параметры:
// ИмяРеквизита - имя реквизита (строка)
// ВидДокумента - вид документа (строка)
//
// Возвращаемое значение:
// 0 - нет реквизита,
// 1 - есть реквизит
//
// Описание:
// Проверяет, есть ли в структуре метаданных документа указанного вида
// реквизит многострочной части с указанным названием
//
Функция глЕстьРеквизитМнЧ(ИмяРеквизита,ВидДокумента) Экспорт
Перем Реквизит;
Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
(ПустоеЗначение(ИмяРеквизита) = 1) Тогда
Возврат 0;
КонецЕсли;
Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита);
Возврат Реквизит.Выбран();
КонецФункции //глЕстьРеквизитМнЧ()
Показать
(12)
//////////////////////////////////////////////////////////// ///////////////
//
Перем глТаблицаСчетов Экспорт;
Перем глОбщиеУстановки Экспорт;
Перем глЗначениеОтбора Экспорт;
Перем глПоОплате Экспорт;
Перем глПоОтгрузке Экспорт;
Перем Да Экспорт;
Перем Нет Экспорт;
Типовая бухия. Декабрь 2008.
А вот глЕстьРеквизитШапки() отсутствует.
////////////////////////////////////////////////////////////
//
Перем глТаблицаСчетов Экспорт;
Перем глОбщиеУстановки Экспорт;
Перем глЗначениеОтбора Экспорт;
Перем глПоОплате Экспорт;
Перем глПоОтгрузке Экспорт;
Перем Да Экспорт;
Перем Нет Экспорт;
Типовая бухия. Декабрь 2008.
А вот глЕстьРеквизитШапки() отсутствует.
Странно, как помню, у меня за восемь клюшечных лет потребностей в этих функциях не было. А может и были, но редко, редко.
а так?
МетаданныеДокумента = НашДокументСсылка.Метаданные();
Если ОбщегоНазначения.ЕстьРеквизитДокумента("Подразделение", МетаданныеДокумента) Тогда
...
МетаданныеДокумента = НашДокументСсылка.Метаданные();
Если ОбщегоНазначения.ЕстьРеквизитДокумента("Подразделение", МетаданныеДокумента) Тогда
...
Работает:
Функция ПроверитьСтандартныеРеквизитыНаСервере(ТипОбъекта, Имя, ИмяРеквизита)
ЕстьРеквизит = Ложь;
СтандартныеРеквизиты = Метаданные[ТипОбъекта][Имя].СтандартныеРеквизиты;
Для каждого ЭлСтандартныеРеквизиты Из СтандартныеРеквизиты Цикл
Если ЭлСтандартныеРеквизиты.Имя = ИмяРеквизита Тогда
ЕстьРеквизит = Истина;
КонецЕсли;
КонецЦикла;
Возврат ЕстьРеквизит;
КонецФункции
Функция ВернутьИмяНаСервере(Имя) Экспорт
ТипОбъекта = "Справочники";
ИмяСтандартныеРеквизиты = "Наименование";
Если Не ПроверитьСтандартныеРеквизитыНаСервере(ТипОбъекта, Имя, ИмяСтандартныеРеквизиты) Тогда
ИмяСтандартныеРеквизиты = "Код";
КонецЕсли;
Возврат ИмяСтандартныеРеквизиты;
КонецФункции
Функция ПроверитьСтандартныеРеквизитыНаСервере(ТипОбъекта, Имя, ИмяРеквизита)
ЕстьРеквизит = Ложь;
СтандартныеРеквизиты = Метаданные[ТипОбъекта][Имя].СтандартныеРеквизиты;
Для каждого ЭлСтандартныеРеквизиты Из СтандартныеРеквизиты Цикл
Если ЭлСтандартныеРеквизиты.Имя = ИмяРеквизита Тогда
ЕстьРеквизит = Истина;
КонецЕсли;
КонецЦикла;
Возврат ЕстьРеквизит;
КонецФункции
Функция ВернутьИмяНаСервере(Имя) Экспорт
ТипОбъекта = "Справочники";
ИмяСтандартныеРеквизиты = "Наименование";
Если Не ПроверитьСтандартныеРеквизитыНаСервере(ТипОбъекта, Имя, ИмяСтандартныеРеквизиты) Тогда
ИмяСтандартныеРеквизиты = "Код";
КонецЕсли;
Возврат ИмяСтандартныеРеквизиты;
КонецФункции
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот