|
работа с реквизитами доков и справочников | ☑ | ||
---|---|---|---|---|
0
Droning
10.05.18
✎
13:06
|
Доброго времени суток)
Я- стажер, работодатель дал задание- создать подписку на событие, которая бы выполняла следующие действия: необходимо чтобы обработка пробегала по документам и справочникам, писала в сообщения о том что это за тип метаданных. Справочник или Документ. Далее заходила бы в каждый документ и справочник и определяла типы реквизитов с выводом сообщений, в том числе табличные части, если заполнены и их реквизиты. если не заполнены, то должно выводиться соответствующее сообщение. Вроде должно делаться через рекурсию. пока что я родил только подписку на событие и в качестве обработчика указал новосозданный общий модуль. а вот что в нем писать- это уже ступор. нашел на итс такой вот код- Процедура ОпределениеТиповОбъектовИИхРеквизитов(ТипЗначения) Экспорт Спр = ТипЗнч(Справочники); Док = ТипЗнч(Документы); ТипЗначения = ТипЗнч(ВыбСчет); ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения); Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда Сообщить("Это Справочник"); ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда Сообщить("Это Документ"); КонецЕсли; КонецПроцедуры; процедуру называл сам, параметры какие указывать пока даже не знаю( Очень хотелось бы, чтобы вы смогли направить меня в нужном направлении, может что-то подсказать по структуре и синтаксису. Заранее благодарен! |
|||
1
Droning
10.05.18
✎
13:07
|
изначально код выглядел так
ТипЗначения = ТипЗнч(ВыбСчет); ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения); Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда Сообщить("Справочник"); ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда Сообщить("Документ"); КонецЕсли; |
|||
2
Mankubus
10.05.18
✎
13:08
|
>>процедуру называл сам, параметры какие указывать пока даже не знаю(
зачем сам? Когда подписку создаешь она сама процедуру создает |
|||
3
lubitelxml
10.05.18
✎
13:09
|
(2) как думаешь на какое действие (0) нужна подписка?
|
|||
4
Droning
10.05.18
✎
13:20
|
у меня в 1ске возможно 5 вариантов. Думаю при записи норм будет. это не главное, насколько я понял. сам код не знаю с чего начать писать
|
|||
5
Droning
10.05.18
✎
13:21
|
Mankubus тоесть весь код я должен писать внутри созданной процедуры?
тут? Процедура ПодпискаНаСобытие1ПриЗаписи(Источник, Отказ) Экспорт // Вставить содержимое обработчика. КонецПроцедуры |
|||
6
lubitelxml
10.05.18
✎
13:22
|
(5) да, чтобы именно подписка сработала
|
|||
7
lubitelxml
10.05.18
✎
13:25
|
вот пример: https://forum.infostart.ru/forum9/topic184824/
|
|||
8
Droning
10.05.18
✎
13:28
|
да, видел этот пример. А как забраться внутрь каждого элемента массива справочников и документов? как пробежаться по реквизитам?
|
|||
9
Droning
10.05.18
✎
13:34
|
Процедура ПодпискаНаСобытие1ПриЗаписи(Источник, Отказ) Экспорт
МассивОбъектов = Новый Массив; МассивОбъектов.Добавить("Документы"); МассивОбъектов.Добавить("Справочники"); Для Каждого Элем из МассивОбъектов Цикл Для Каждого ТекОбъект из Метаданные[Элем] Цикл Если СтрДлина(ТекОбъект.Имя) > 123 тогда //что-то делаем КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры какой цикл должен быть вместо Если СтрДлина(ТекОбъект.Имя) > 123 тогда //что-то делаем КонецЕсли; |
|||
10
PR
10.05.18
✎
13:36
|
Давайте, бухтите ТС про космические корабли :))
|
|||
11
lubitelxml
10.05.18
✎
13:37
|
(10) что за космические корабли? )
|
|||
12
Mankubus
10.05.18
✎
13:38
|
(3) ему не нужна подписка, а вдруг потом когда-нибудь понадобится. Зато теперь он знает что для нее не надо писать процедуру руками
(5) С чего ты решил что создавать надо именно подписку? |
|||
13
PR
10.05.18
✎
13:39
|
(11) Классику нужно знать
Операция Ы и другие приключения Шурика |
|||
14
Droning
10.05.18
✎
13:39
|
Mankubus это вроде как понадобится потом для обмена и работодатель сказал, что так будет проще в дальнейшем.
|
|||
15
Индиго
10.05.18
✎
13:40
|
(0)
вот тебе болванка.Разбирайся:-) //--- Запрос=Новый Запрос; ТекстЗ="Выбрать Док.ссылка Из Документ.ИмяДок КАК Док"; Для Каждого Менеджер из Документы Цикл Мета=Менеджер.Пустаяссылка().Метаданные(); Имя=Мета.Имя; Запрос.Текст=СтрЗаменить(ТекстЗ,"ИмяДок",Имя); Выборка=Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ОбработкаПрерыванияПользователя(); Сообщить("Документ."+Выборка.ссылка+"---------------------------------- | РЕКВИЗИТЫ:"); Док=Выборка.Ссылка; Для Каждого Рек Из Мета.Реквизиты Цикл ИмяРек=Рек.Имя; Сообщить(" -"+ИмяРек+":"+Док[ИмяРек]+", тип:"+ТипЗнч(Док[ИмяРек])); КонецЦикла; Для Каждого ТЧ Из Мета.ТабличныеЧасти Цикл ИмяТЧ=ТЧ.Имя; Сообщить(" ТАБ. ЧАСТЬ '"+ИмяТЧ+"',кол. строк"+Док[ИмяТЧ].Количество()); Для Каждого Стр из Док[ИмяТЧ] Цикл ОбработкаПрерыванияПользователя(); строчка=""; Для Каждого РекТЧ Из ТЧ.Реквизиты Цикл ИмяРекТЧ=РекТЧ.Имя; строчка=строчка+ИмяРекТЧ+":"+Стр[ИмяРекТЧ]+"...."; КонецЦикла; Сообщить(" -"+Стр.НомерСтроки+"."+строчка); КонецЦикла; КонецЦикла; КонецЦикла; КонецЦикла; |
|||
16
Индиго
10.05.18
✎
13:40
|
со справочниками также
|
|||
17
Droning
10.05.18
✎
13:41
|
Индиго, спасибо, сейчас буду шарить что к чему))
а по тому коду, что выше? забить? |
|||
18
Индиго
10.05.18
✎
13:42
|
(17)Можешь распечатать и повесить в рамочке.На память.
|
|||
19
Droning
10.05.18
✎
13:47
|
Индиго Для Каждого Менеджер из Документы Цикл
Мета=Менеджер.Пустаяссылка().Метаданные(); а что тут подразуменвается под словом Менеджер? в этом выражении мне нужно обратиться к реквизитам? по типу Для Каждого Реквизит потом нужно както обозначить что слово Реквизит в данном случае будет обращаться к реквизиту доккумента... Так вот. как блин обратиться к реквизиту? синтаксиса у меня в голове пока что минимум. например по анологии Мета= ??????????????? |
|||
20
Индиго
10.05.18
✎
13:48
|
(19)Менеджер подразумевается, что Документы - это стандартная коллекция менеджеров документов и ты их перебираешь.
|
|||
21
Индиго
10.05.18
✎
13:49
|
(19)там же все написано. Пробегает и по реквизитам и по таб частям и по реквизитам таб частей. Чего тебе еще не хватает?
|
|||
22
Индиго
10.05.18
✎
13:50
|
можно конечно и просто через Метаданные.Документы, но мне вот так первое в голову пришло.
|
|||
23
Droning
10.05.18
✎
13:52
|
Знаний мне не хватает) в особенности знаний синтаксиса) ладно, щас попробую что-то наваять. спасибо большущее)
|
|||
24
Индиго
10.05.18
✎
13:53
|
(23)Книжки читай. Литературы море. А ходя кругами с бубном ты еще долго синтаксис знать не будешь
|
|||
25
Droning
10.05.18
✎
14:01
|
а можно это сделать не через запрос с через созданный массив данных ?
|
|||
26
Мандалай
10.05.18
✎
14:09
|
(25)Че?
|
|||
27
FIXXXL
10.05.18
✎
14:35
|
(25) запрос тебе не нужен
для начала порекомендую освоить отладчик в конфигураторе, посмотреть "потроха", из чего состоят метаданные и прочее что бы понимать, что ты пишешь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |