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



работа с реквизитами доков и справочников

работа с реквизитами доков и справочников
Я
   Droning
 
10.05.18 - 13:06
Доброго времени суток) 

Я- стажер, работодатель дал задание- создать подписку на событие, которая бы выполняла следующие действия:

необходимо чтобы обработка пробегала по документам и справочникам, писала в сообщения о том что это за тип метаданных. Справочник или Документ. Далее заходила бы в каждый документ и справочник и определяла типы реквизитов с выводом сообщений, в том числе табличные части, если заполнены и их реквизиты. если не заполнены, то должно выводиться соответствующее сообщение.

Вроде должно делаться через рекурсию.

пока что я родил только подписку на событие и в качестве обработчика указал новосозданный общий модуль. а вот что в нем писать- это уже ступор.

нашел на итс такой вот код-
Процедура ОпределениеТиповОбъектовИИхРеквизитов(ТипЗначения) Экспорт 


Спр = ТипЗнч(Справочники);
Док = ТипЗнч(Документы);
ТипЗначения = ТипЗнч(ВыбСчет);


ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);
Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда
    Сообщить("Это Справочник");
ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда
    Сообщить("Это Документ");
КонецЕсли;

КонецПроцедуры;



процедуру называл сам, параметры какие указывать пока даже не знаю( 

Очень хотелось бы, чтобы вы смогли направить меня в нужном направлении, может что-то подсказать по структуре и синтаксису. Заранее благодарен!
 
 
   Droning
 
1 - 10.05.18 - 13:07
изначально код выглядел так



ТипЗначения = ТипЗнч(ВыбСчет);
ОбъектМетаданных = Метаданные.НайтиПоТипу(ТипЗначения);
Если Метаданные.Справочники.Содержит(ОбъектМетаданных) Тогда
Сообщить("Справочник");
ИначеЕсли Метаданные.Документы.Содержит(ОбъектМетаданных) Тогда
Сообщить("Документ");
КонецЕсли;
   Mankubus
 
2 - 10.05.18 - 13:08
>>процедуру называл сам, параметры какие указывать пока даже не знаю( 
зачем сам? Когда подписку создаешь она сама процедуру создает
   lubitelxml
 
3 - 10.05.18 - 13:09
(2) как думаешь на какое действие (0) нужна подписка?
   Droning
 
4 - 10.05.18 - 13:20
у меня в 1ске возможно 5 вариантов. Думаю при записи норм будет. это не главное, насколько я понял. сам код не знаю с чего начать писать
   Droning
 
5 - 10.05.18 - 13:21
Mankubus  тоесть весь код я должен писать внутри созданной процедуры?
тут?



Процедура ПодпискаНаСобытие1ПриЗаписи(Источник, Отказ) Экспорт
    // Вставить содержимое обработчика.

КонецПроцедуры
   lubitelxml
 
6 - 10.05.18 - 13:22
(5) да, чтобы именно подписка сработала
   lubitelxml
 
7 - 10.05.18 - 13:25
   Droning
 
8 - 10.05.18 - 13:28
да, видел этот пример. А как забраться внутрь каждого элемента массива справочников и документов? как пробежаться по реквизитам?
   Droning
 
9 - 10.05.18 - 13:34
Процедура ПодпискаНаСобытие1ПриЗаписи(Источник, Отказ) Экспорт
    
    МассивОбъектов = Новый Массив;
    
МассивОбъектов.Добавить("Документы");
МассивОбъектов.Добавить("Справочники");


Для Каждого Элем из МассивОбъектов Цикл
Для Каждого ТекОбъект из Метаданные[Элем] Цикл

Если СтрДлина(ТекОбъект.Имя) > 123 тогда
//что-то делаем

КонецЕсли;
КонецЦикла;
КонецЦикла;


КонецПроцедуры



какой цикл должен быть вместо 
Если СтрДлина(ТекОбъект.Имя) > 123 тогда
//что-то делаем

КонецЕсли;
   PR
 
10 - 10.05.18 - 13:36
Давайте, бухтите ТС про космические корабли :))
 
 Рекламное место пустует
   lubitelxml
 
11 - 10.05.18 - 13:37
(10) что за космические корабли? )
   Mankubus
 
12 - 10.05.18 - 13:38
(3) ему не нужна подписка, а вдруг потом когда-нибудь понадобится. Зато теперь он знает что для нее не надо писать процедуру руками
(5) С чего ты решил что создавать надо именно подписку?
   PR
 
13 - 10.05.18 - 13:39
(11) Классику нужно знать
Операция Ы и другие приключения Шурика
   Droning
 
14 - 10.05.18 - 13:39
Mankubus  это вроде как понадобится потом для обмена и работодатель сказал, что так будет проще в дальнейшем.
   Индиго
 
15 - 10.05.18 - 13:40
(0)
вот тебе болванка.Разбирайся:-)
//---

    Запрос=Новый Запрос;
    ТекстЗ="Выбрать Док.ссылка Из Документ.ИмяДок КАК Док";

    Для Каждого Менеджер из Документы Цикл
        Мета=Менеджер.Пустаяссылка().Метаданные();    
        Имя=Мета.Имя;
        Запрос.Текст=СтрЗаменить(ТекстЗ,"ИмяДок",Имя);
        Выборка=Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            ОбработкаПрерыванияПользователя();

            Сообщить("Документ."+Выборка.ссылка+"----------------------------------
            |    РЕКВИЗИТЫ:");
            Док=Выборка.Ссылка;
            Для Каждого Рек Из Мета.Реквизиты Цикл
                ИмяРек=Рек.Имя;
                Сообщить("    -"+ИмяРек+":"+Док[ИмяРек]+", тип:"+ТипЗнч(Док[ИмяРек]));
                
            КонецЦикла;    
            Для Каждого ТЧ Из Мета.ТабличныеЧасти Цикл
                ИмяТЧ=ТЧ.Имя;
                Сообщить("    ТАБ. ЧАСТЬ '"+ИмяТЧ+"',кол. строк"+Док[ИмяТЧ].Количество());
                Для Каждого Стр из Док[ИмяТЧ] Цикл
                    ОбработкаПрерыванияПользователя();

                    строчка="";
                    Для Каждого РекТЧ Из ТЧ.Реквизиты Цикл 
                        ИмяРекТЧ=РекТЧ.Имя;
                        строчка=строчка+ИмяРекТЧ+":"+Стр[ИмяРекТЧ]+"....";
                    КонецЦикла;
                    Сообщить("            -"+Стр.НомерСтроки+"."+строчка);
                КонецЦикла;    
                
            КонецЦикла;    
            
        КонецЦикла;    
        
    КонецЦикла;
   Индиго
 
16 - 10.05.18 - 13:40
со справочниками также
   Droning
 
17 - 10.05.18 - 13:41
Индиго, спасибо, сейчас буду шарить что к чему))

а по тому коду, что выше? забить?
   Индиго
 
18 - 10.05.18 - 13:42
(17)Можешь распечатать и повесить в рамочке.На память.
   Droning
 
19 - 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
можно конечно и просто через Метаданные.Документы, но мне вот так первое в голову пришло.
   Droning
 
23 - 10.05.18 - 13:52
Знаний мне не хватает) в особенности знаний синтаксиса) ладно, щас попробую что-то наваять. спасибо большущее)
   Индиго
 
24 - 10.05.18 - 13:53
(23)Книжки читай. Литературы море. А ходя кругами с бубном ты еще долго синтаксис знать не будешь
   Droning
 
25 - 10.05.18 - 14:01
а можно это сделать не через запрос с через созданный массив данных ?
   Мандалай
 
26 - 10.05.18 - 14:09
(25)Че?
   FIXXXL
 
27 - 10.05.18 - 14:35
(25) запрос тебе не нужен
для начала порекомендую освоить отладчик в конфигураторе, посмотреть "потроха", из чего состоят метаданные и прочее
что бы понимать, что ты пишешь


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