Как программно определить наличие у документа опрелённого реквизита?

22. Night_Trap 22.10.16 10:02 Сейчас в теме
() LLLLLL696, На момент сейчас это ОбщегоНазначения.ЕстьРеквизитОбъекта("Подразделение", МетаданныеДокумента)
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
23. Shreki2015 2 27.10.16 12:07 Сейчас в теме
24. imax26 91 25.04.17 06:18 Сейчас в теме
Предоплереденный объект МЕтаданные поможет
+
25. dour-dead 271 28.08.09 10:43 Сейчас в теме
Как программно определить наличие у документа опрелённого реквизита? можно ли это сделать без перебора всех реквизитов по документу?
+
26. Ёпрст 1063 28.08.09 10:51 Сейчас в теме
Метаданные.Документ("Реализация").РеквизитТабличнойЧасти("Вася").Выбран()
+ поглядеть на реквизит шапки + общий реквизит...

См. во всех типовых глЕстьРеквизитШапки + глЕстьРеквизитТЧ
+
27. dour-dead 271 28.08.09 10:59 Сейчас в теме
Во! Ёпрст - Спасибо!
+
28. newbas 533 28.08.09 14:54 Сейчас в теме
29. Altair777 644 28.08.09 15:09 Сейчас в теме
(4) Чего в ней нет? Этих функций? Это нестрашно :-)

// ===============================
Функция глЕстьРеквизитШапки(ИмяРеквизита, ВидДокумента) Экспорт
	Перем Реквизит;
	Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
	     (ПустоеЗначение(ИмяРеквизита) = 1) Тогда
		Возврат Нет;
	КонецЕсли;
	Реквизит=Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита);
	Возврат ?(Реквизит.Выбран()=1, Да, Нет );
КонецФункции

// ===============================
Функция глЕстьРеквизитМнЧ(ИмяРеквизита,ВидДокумента) Экспорт
	Перем Реквизит;    // 
	Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
	     (ПустоеЗначение(ИмяРеквизита) = 1) Тогда
		Возврат Нет;
	КонецЕсли;
	Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита);
	Возврат ?(Реквизит.Выбран()=1, Да, Нет );
КонецФункции
Показать
+
30. Ёпрст 1063 28.08.09 15:14 Сейчас в теме
(5) а в россейской конфе возвращают 0,1..
что более универсально - можно втыкать процы в свой код.
+
31. Altair777 644 28.08.09 15:51 Сейчас в теме
(6) Не факт, что мои из типовой взяты. Они из рабочей.
Сейчас проверю.

Добавлено: в комплексной для Украины также
+
32. poppy 29.08.09 22:29 Сейчас в теме
(5) В функции глЕстьРеквизитШапки не учитываются общие реквизиты.
+
33. jmw 60 31.08.09 09:33 Сейчас в теме
(8) Ну, дык, они-же "общие" для всех документов конфигурации, значит есть у всех документов конфигурации! :-)
+
34. poppy 31.08.09 15:59 Сейчас в теме
(9) В том то и дело, реквизит есть у всех документов, но функция считает, что его нет ни у одного...
+
35. Altair777 644 31.08.09 16:16 Сейчас в теме
(10) А зачем наличие общего реквизита в документе нужно проверять?
Разве что для универсальных отчетов/обработок, не привязанных к определенной конфигурации.

Функция глЕстьОбщийРеквизит(ИмяРеквизита) Экспорт
	Перем Реквизит;
	Если ПустоеЗначение(ИмяРеквизита)=1 Тогда
		Возврат Нет;
	КонецЕсли;
	Реквизит=Метаданные.ОбщийРеквизитДокумента(ИмяРеквизита);
	Возврат ?(Реквизит.Выбран()=1, Да, Нет );
КонецФункции
+
36. poppy 31.08.09 16:48 Сейчас в теме
(11) Не знаю, но в типовых конфигурациях наличие общего реквизита проверяется в функции глЕстьРеквизитШапки().

З.Ы. Кстати, глобальные переменные Да и Нет в российских конфигурациях давно не используются.
+
37. Altair777 644 31.08.09 16:58 Сейчас в теме
(12) З.Ы. Это я уже прочитал в (6) :-)

Для российских собратьев по разуму привожу кусок кода из глобальника типовой российской ТиС редакции 9.2

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

//******************************************************************************
// глЕстьРеквизитМнЧ(ИмяРеквизита, ВидДокумента)
//
// Параметры:
//  ИмяРеквизита - имя реквизита (строка)
//  ВидДокумента - вид документа (строка)
//
// Возвращаемое значение: 
//  0 - нет реквизита,
//  1 - есть реквизит
//
// Описание: 
//  Проверяет, есть ли в структуре метаданных документа указанного вида
//	реквизит многострочной части с указанным названием
//
Функция глЕстьРеквизитМнЧ(ИмяРеквизита,ВидДокумента) Экспорт
	Перем Реквизит;    
	Если (ПустоеЗначение(ВидДокумента) = 1) ИЛИ
	     (ПустоеЗначение(ИмяРеквизита) = 1) Тогда
		Возврат 0;
	КонецЕсли;
	Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита);
	Возврат Реквизит.Выбран();
КонецФункции //глЕстьРеквизитМнЧ()
Показать
+
38. Арчибальд 2707 31.08.09 17:25 Сейчас в теме
(12)
////////////////////////////////////////////////////////////­///////////////
//
Перем глТаблицаСчетов Экспорт;
Перем глОбщиеУстановки Экспорт;
Перем глЗначениеОтбора Экспорт;
Перем глПоОплате Экспорт;
Перем глПоОтгрузке Экспорт;
Перем Да Экспорт;
Перем Нет Экспорт;

Типовая бухия. Декабрь 2008.

А вот глЕстьРеквизитШапки() отсутствует.
+
39. poppy 31.08.09 17:42 Сейчас в теме
(14) Точно. А в ТиС и комплексной - наоборот.
В ПУбе есть и то и другое.
+
40. Арчибальд 2707 31.08.09 17:45 Сейчас в теме
(15) Похоже, в 1С группы с "оперативной" компоненты и "бухгалтерской" слабо взаимодействуют :))
+
41. Поручик 4674 31.08.09 20:34 Сейчас в теме
Странно, как помню, у меня за восемь клюшечных лет потребностей в этих функциях не было. А может и были, но редко, редко.
+
42. Арчибальд 2707 01.09.09 10:01 Сейчас в теме
(17) Оно надо всего в двух-трех случаях:
- Замена значений
- Автоматизация конвертации/обмена
- Восможно, в самописной конфе
- Для ОЧЧень универсального отчета/обработки

я пользовался по 1 и 3 вариантам.
+
43. Altair777 644 01.09.09 10:08 Сейчас в теме
(17) Универсальные обработки, например
+
44. LLLLLL696 03.09.09 18:16 Сейчас в теме
а так?
МетаданныеДокумента = НашДокументСсылка.Метаданные();
Если ОбщегоНазначения.ЕстьРеквизитДокумента("Подразделение", МетаданныеДокумента) Тогда
...
+
45. Поручик 4674 03.09.09 18:38 Сейчас в теме
(20) Не проканает. Здесь раздел Программирования на 1С: Предприятие 7.7
+
46. deevev 17 29.03.19 15:09 Сейчас в теме
Работает:

Функция ПроверитьСтандартныеРеквизитыНаСервере(ТипОбъекта, Имя, ИмяРеквизита)

ЕстьРеквизит = Ложь;
СтандартныеРеквизиты = Метаданные[ТипОбъекта][Имя].СтандартныеРеквизиты;
Для каждого ЭлСтандартныеРеквизиты Из СтандартныеРеквизиты Цикл
Если ЭлСтандартныеРеквизиты.Имя = ИмяРеквизита Тогда
ЕстьРеквизит = Истина;
КонецЕсли;
КонецЦикла;
Возврат ЕстьРеквизит;

КонецФункции

Функция ВернутьИмяНаСервере(Имя) Экспорт

ТипОбъекта = "Справочники";
ИмяСтандартныеРеквизиты = "Наименование";
Если Не ПроверитьСтандартныеРеквизитыНаСервере(ТипОбъекта, Имя, ИмяСтандартныеРеквизиты) Тогда
ИмяСтандартныеРеквизиты = "Код";
КонецЕсли;
Возврат ИмяСтандартныеРеквизиты;

КонецФункции
47. jmw 60 29.03.19 18:27 Сейчас в теме
(46) Тема относится к «клюшкам», если что!
И ей уже 10 лет!
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот