gifts2017

Получение сведений из метаданных 1С 7.7

Опубликовал Константин Исиченко (IsiKosta) в раздел Программирование - Практика программирования

Описание 2х функций для получение списка реквизитов справочника и документа.
// Возвращает список реквизитов справочника
//	параметры: СпрВид - вид справочника
Функция ПолучитьСписокРеквизитовСправочника(знач СпрВид)

	СпрВид = ?(ТипЗначенияСтр(СпрВид) = "Строка", СпрВид, СпрВид.Вид());
	СпрВид = ?(Найти(СпрВид, ".") = 0, СпрВид, Сред(СпрВид, Найти(СпрВид, ".") + 1));
	сзРеквизиты = СоздатьОбъект("СписокЗначений");
	сзРеквизиты.ДобавитьЗначение("Код");
	сзРеквизиты.ДобавитьЗначение("Наименование");
	МД = Метаданные.Справочник(СпрВид);
	
	Для сч = 1 По МД.Реквизит() Цикл
		рек = МД.Реквизит(сч);
		сзРеквизиты.ДобавитьЗначение(рек.Идентификатор, рек.Представление());
	КонецЦикла;
	
	Возврат сзРеквизиты;

КонецФункции
//---------------------------------------------------------
// Возвращает список реквизитов документа
//	параметры: ДокВид - вид документа или документ
//	флКакиеРеквизиты:	0 - все
//						1 - шапка
//						2 - табличная часть
Функция ПолучитьСписокРеквизитовДокумента(знач ДокВид, знач флКакиеРеквизиты = 0)

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

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

Скачать файлы

Наименование Файл Версия Размер
- 137
.1226807722 2,27Kb
25.09.09
137
.1226807722 2,27Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Belomor (Belomor) 16.11.08 11:01
Было такое описание метаданных от Моисееко, так что ничего нового.
2. Константин Исиченко (IsiKosta) 16.11.08 11:17
Может и было, только вот я не нашел здесь. Поэтому выложил
3. GSoft. (GSoft) 16.11.08 13:41
(0) то что выложил хорошо, но вот если напишешь комментарии (многим начинающим они пригодятся) будет хоршо
ставлю плюс авансом и уравниваю
4. Аркадий Кучер (Abadonna) 16.11.08 16:18
Маловато будет... информации. Возвращать лучше ТЗ, а там не только идентификатор-представление, но и вид, длина, точность.
Не помешает также знать периодический или нет, подчинен справочник или нет и т.д..
5. Константин Исиченко (IsiKosta) 16.11.08 17:39
Кому надо - может и доработать. Мне этого хватает в моих разработках. Главное - идея!
6. Аркадий Кучер (Abadonna) 16.11.08 19:28
7. GSoft. (GSoft) 16.11.08 19:41
Abadonna прав - разработок использующих эту идею много
а вот "методических пособий" мало
8. transbublik (vitaliy.ermolenko) 16.11.08 21:08
смотрю функцию ПолучитьСписокРеквизитовСправочника и не совсем понимаю почему всегда добавляется "код" и "наименование" к списку возвращаемых реквизитов. разве "код" и "наименование" всегда присутствуют в справочнике?
хотя если учитывать п. (5), то отношение автора к моему минусу становится ясным. кстати, кому надо тот может и сам написать, а не дорабатывать. если здесь главное "идея", то изложи только идею, например:
"
// Возвращает список реквизитов справочника
// параметры: СпрВид - вид справочника
Функция ПолучитьСписокРеквизитовСправочника(знач СпрВид)
сзРеквизиты = СоздатьОбъект("СписокЗначений");
/////////////тута надо заполнить список значенией (сзРеквизиты) соответствующими
/////////////значениями метаданных относительно переданного параметра
Возврат сзРеквизиты;
КонецФункции
"

ибо самое главное в жизни это идеи, а их реализация - это дело десятое.
9. GSoft. (GSoft) 16.11.08 23:41
сменил свое мнение - на практический пример с описанием не тянет
10. Дмитрий Воробьев (vde69) 16.11.08 23:52
в типовых вроде подобное есть, в процедурах работы с контекстом документа,
в любом случае ни о чем...

если-бы это было в блогах, я-бы еще понял, но в "программах" - тянет на минус
11. Константин Исиченко (IsiKosta) 17.11.08 14:03
Автор: чёта я не понял: вроде доброе дело сделал, а они минусами закидали. Мне что, теперь не делиться своими наработками?
12. Епрст (Ёпрст) 17.11.08 14:08
(11) Полезно читать документацию, например, als по метаданным от Пита...написанное эдак еще годков 8 назад(или раньше, не помню ужо), перед написанием своих нетленок... Всё ужо придумано до нас.
13. Аркадий Кучер (Abadonna) 17.11.08 14:22
(11)>Мне что, теперь не делиться своими наработками?
Я тебе минус не ставил, но неужели ты на самом деле считаешь, что это НАРАБОТКА?
14. Альтаир (Altair777) 17.11.08 14:40
(11) > Автор: чёта я не понял: вроде доброе дело сделал, а они минусами закидали. Мне что, теперь не делиться своими наработками?
Просто за последнее время некто фиксин настолько обозлил общественность на ИнфоСтарте подобными мини-идеями, что народ стал строже относиться к этому.
У меня есть незавершенный проект "Контроль доступа", так там из МетаДанных вытягиваются все реквизиты всех объектов.
Но публиковать куски кода, которые не имеет самостоятельной практической ценности я не собираюсь.
А, тем более, публиковать в разделе "Программы".
п.с. кстати, есть такой "Описатель оъекта Метаданных", автор Бертыш А.В. Брянск lamer19@narod.ru
Я очень много оттуда почерпнул.
15. Андрей (SleeperVlz) 20.11.08 07:43
Уж извиняйте, но просто не сдержался...
Идея? Обалдеть!!! Любой нормальный программер напишет для своих нужд такую "идею" уже через 2-а месяца изучения 1С...
16. Константин Исиченко (IsiKosta) 20.11.08 08:14
Давайте писать более конструктивно, например: в строке N возникает ошибка, код в строках N-NN можно было бы написать лучше. А докапываться до слов не надо, так как у каждого из нас разное воспитание и уровень снобизма тоже.
17. Алексей Плутенко (Noy) 20.11.08 09:54
И чего вы все так жестоко?
Согласен, что это баян, что даже если и размещать, то надо было не в разделе программ, а в блогах.
Но минусы то зачем ставить? за компанию? так уж тут заведено?
Если не видите ценности данной "обработки" - просто проигнорируйте, а минус надо ставить за не рабочий код.
Компенисрую.
18. Андрей Бертыш (ignor) 29.08.15 08:13
Справочник может иметь как код и наименование, как что-либо одно из них (код или наименование), так и ни кода ни наименования. Соответственно как говорится "Тема сисек не раскрыта". За это и минусовали
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа