Имя: Пароль:
1C
1С v8
Структура конфигурации
0 User123456
 
10.04.14
11:26
Добрый день. Есть задача получить структуру дока(без разницы какого) с описанием его реквизитов и данных. На выходе нужно получить xml фаил.
Структуру вижу следующего вида:
реквизит документа №1 | тип| вид | значение
     описание реквизитов реквизита №1| тип| вид | значение и тд.

Т.е. получается что xml будет содержать и структуру и все значения.

Вопрос собственно в том что видал ли кто наброски на эту тему. КД -  не предлагать, т.к. для выполнения поставленной задачи не подходит.
1 Wobland
 
10.04.14
11:29
я вчера метаданные видал, до сих пор в восторге
2 cw014
 
10.04.14
11:30
Ну запили сам
3 Heckfy
 
10.04.14
11:30
Конфигурация-Отчет по конфигурации не предлагать???
4 Godofsin
 
10.04.14
11:31
(3) там хмл не получить )))
5 User123456
 
10.04.14
11:32
Отчет по конфигурации -  в принципе вариант, не пробовал. С метаданными проблем. Проблема возникает при зацикленности элементов, т.е. когда можно один и тот же объект по 20 писать в структуру.
6 User123456
 
10.04.14
11:35
xml можно получить через описание параметров, т.е. на каждый элемент(значение реквизита) писать кучу параметров ониже(тип| вид | значение)
7 Wobland
 
10.04.14
11:36
(5) чо?
8 DmitriyDI
 
10.04.14
11:36
(5) это как
9 User123456
 
10.04.14
11:38
реквизит из документа параметры-> | тип| вид | значение
   следующими элементами идут реквизиты верхнего реквизита
10 Широкий
 
10.04.14
11:38
(8) Т.е. в описании объекта делаешь ссылку на сущность, а сама сущность лежит в другом месте
11 User123456
 
10.04.14
11:39
да, в другом элементе xml
12 13_Mult
 
10.04.14
11:40
Из конвертации обработина выгрузки конфигурации, не?
13 Godofsin
 
10.04.14
11:41
(12) О! Классный совет
14 User123456
 
10.04.14
11:42
там целая куча правил, посмотрел модули ну и немного прифигел, если делать через нее, то нужно досконально изучить всю логику а потом уже дергать куски
15 13_Mult
 
10.04.14
11:42
MD82Exp.epf вроде такая ;)
16 User123456
 
10.04.14
11:42
не судите строго хочется и быстро и чтоб работало, все мы люди
17 User123456
 
10.04.14
11:43
да именно ее смотрел, с кд идет
18 Godofsin
 
10.04.14
11:43
(16) Есть три критерия, а выбрать можешь толь 2
19 User123456
 
10.04.14
11:44
не понял
20 ДенисЧ
 
10.04.14
11:44
(19) Это нормально.
21 Wobland
 
10.04.14
11:45
(19) бесплатно забыл добавить
22 User123456
 
10.04.14
11:46
да я понял, что нормально)))))))))) сериализация xml и xdto не канают, проверял, выгружают по сути только значения
23 User123456
 
10.04.14
11:46
ну я же не прошу готовое решение тут, вопрос звучал -Вопрос собственно в том что видал ли кто наброски на эту тему.
24 ДенисЧ
 
10.04.14
11:47
(22) возьми и напиши так, как тебе надо.
25 User123456
 
10.04.14
11:47
как обойти проблему зацикленности элементов?
26 ДенисЧ
 
10.04.14
11:48
(25) Это очень сложно. Это думать надо...
27 13_Mult
 
10.04.14
11:48
(14) чего там изучать, это же xml, там все ясно и понятно. полный расклад по конфигурации.
28 Wobland
 
10.04.14
11:48
(23) MD82Exp.epf
29 13_Mult
 
10.04.14
11:50
(28) а вот и не успел )) (15)
30 Wobland
 
10.04.14
11:52
(29) оттуда скопипастил ;)
31 Godofsin
 
10.04.14
11:53
(30) Ну все, ты нарушил его авторское право ))))
32 User123456
 
10.04.14
11:59
посмотрел xml полученную через MD82Exp.epf, ну хорошо описание реквизитов есть, и то репу нужно почесать с парсером че чему принадлежит. а вот что делать с данными? и как их приткнуть? чтобы получился один фаил и со структурой и со значениями реквизитов.
33 Godofsin
 
10.04.14
12:00
(32) С какими такими данными? Данными БД что ли?
34 User123456
 
10.04.14
12:01
да, я же в самом начале описал схему.
35 User123456
 
10.04.14
12:11
я так понимаю обсуждение закончилось?
36 Wobland
 
10.04.14
12:14
(35) у меня других набросков нет. а вообще не складывай мух к котлетам. стуктура - одно, данные - другое
37 User123456
 
10.04.14
12:16
согласен, баз дофига и больше, постоянно пользоваться кд сами понимаете не вариант. Вот и приходится изобретать велосипед
38 Wobland
 
10.04.14
12:17
(37) не понимаем
39 ДенисЧ
 
10.04.14
12:20
И чем ему КД не нравится - убейте, не понимаю...
40 DexterMorgan
 
10.04.14
12:20
(37) я тоже не понял
41 User123456
 
10.04.14
12:20
ладно буду думать.
42 DexterMorgan
 
10.04.14
12:21
кд - ваще лучшая типовая конфа =)
43 User123456
 
10.04.14
12:21
баз много я один, чего тут не понятного, все они еще допиленные, вот и разбирайся с каждой структурой, времени уходит вагон.
44 DexterMorgan
 
10.04.14
12:23
(43) это понятно, чем кд не устраивает
45 Wobland
 
10.04.14
12:23
(43) вообще КД в глаза не видел?
46 User123456
 
10.04.14
12:24
идея в том чтобы в одном файле передавать и правила и данные, а не последовательно как в кд.
47 Wobland
 
10.04.14
12:24
(46) не видел. передаются только данные
48 ДенисЧ
 
10.04.14
12:27
(47) В КД передаются и правила, и данные в одном файле...
49 Wobland
 
10.04.14
12:27
(48) да, и правила
50 User123456
 
10.04.14
12:34
я конечно все понимаю, но может есть смысл еще раз ознакомиться с вопросом озвученным в самом начале?
51 Wobland
 
10.04.14
12:37
там написано "КД -  не предлагать, т.к. для выполнения поставленной задачи не подходит". это ты сам придумал?
52 User123456
 
10.04.14
12:39
да)))) двойник пока что клонируется, так что приходится самому придумывать))))
53 Wobland
 
10.04.14
12:40
ну теперь расскажи чем не подходит. только что-нибудь новое
54 User123456
 
10.04.14
12:42
задача унифицировать процесс обмена данными между разношорстными базами + наличие огромного количество юзверей, которым пофиг что и как. их девиз - очу чтоб работало и все.
Вот и вся мотивация.
55 ДенисЧ
 
10.04.14
12:44
(54) Не убедил. Почему в таком случае не подходит КД?
56 Wobland
 
10.04.14
12:44
КД подходит
57 Wobland
 
10.04.14
12:44
+(56) я бы даже сказал, специально для такого придумано
58 User123456
 
11.04.14
07:56
В продолжении темы. немного почесав затылок получил следующий код.
Элементы на форме:
ТабличноеПоле1 - колонки:Объект, Реквизит, РеквизитСиноним, Тип, Вид,Значение,Общий_Шапки_ТЗ,ИмяТабличнойЧасти
ПолеВвода1 - тип: ДокументСсылка

Код обработки:
перем тз экспорт;
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Для Каждого Рекв Из ПолеВвода1.Ссылка.Метаданные().Реквизиты Цикл
        НовСТР=ТабличноеПоле1.Добавить();
        НовСТР.Реквизит=Рекв.Имя;
        НовСТР.РеквизитСиноним=Рекв;
        НовСТР.тип=ВидОбъектаПоСсылке(ПолеВвода1[Рекв.Имя]);
        если  сокрлп(НовСТР.тип)="" тогда
            НовСТР.тип=Рекв.Тип;
        иначе
            попытка
            НовСТР.вид=ПолеВвода1[Рекв.Имя].Метаданные().Имя;
        исключение
            конецпопытки;
        конецесли;
        НовСТР.Значение=ПолеВвода1[Рекв.Имя];
        НовСТР.Общий_Шапки_ТЗ="Реквизит шапки";
        НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя;
    КонецЦикла;

    
    ТабличныеЧасти = ПолеВвода1.Ссылка.Метаданные().ТабличныеЧасти;
    Для Каждого ТабличнаяЧасть из ТабличныеЧасти Цикл
                    
        если  ПолеВвода1[ТабличнаяЧасть.имя].количество()>0 тогда
        для Каждого стр из ПолеВвода1[ТабличнаяЧасть.имя] цикл
            
            для каждого рекв из  ТабличнаяЧасть.Реквизиты цикл
                НовСТР=ТабличноеПоле1.Добавить();
                НовСТР.Реквизит=Рекв.Имя;
                НовСТР.РеквизитСиноним=Рекв;
                НовСТР.тип=типОбъектаПоТипу(рекв);//ВидОбъектаПоСсылке(стр[Рекв.Имя]);
                если "СубконтоСписанияСебестоимостиНУ1"=сокрлп(Рекв.Имя) тогда
                //    сообщить("пва");
                    конецесли;
                если  сокрлп(НовСТР.тип)="" тогда
                    НовСТР.тип=Рекв.Тип;
                иначе
                    попытка
                        НовСТР.вид=ВидОбъектаПоТипу(рекв);//стр[Рекв.Имя].Метаданные().Имя;
                    исключение
                    конецпопытки;
                конецесли;
                НовСТР.Значение=стр[Рекв.Имя];
                НовСТР.Общий_Шапки_ТЗ="Реквизит табличной части";
                НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя+"";
                НовСТР.ИмяТабличнойЧасти=ТабличнаяЧасть.Имя;
            КонецЦикла;
        КонецЦикла;
    иначе
           для каждого рекв из  ТабличнаяЧасть.Реквизиты цикл
                НовСТР=ТабличноеПоле1.Добавить();
                НовСТР.Реквизит=Рекв.Имя;
                НовСТР.РеквизитСиноним=Рекв;
                если "СчетПередачиБУ"=сокрлп(Рекв.Имя) тогда
                //    сообщить("пва");
                    конецесли;
                НовСТР.тип=типОбъектаПоТипу(рекв);
                если  сокрлп(НовСТР.тип)="" тогда
                    НовСТР.тип=Рекв.Тип;
                иначе
                    попытка
                        НовСТР.вид=ВидОбъектаПоТипу(рекв);
                    исключение
                    конецпопытки;
                конецесли;
                //НовСТР.Значение=стр[Рекв.Имя];
                НовСТР.Общий_Шапки_ТЗ="Реквизит табличной части";
                НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя+"";
                НовСТР.ИмяТабличнойЧасти=ТабличнаяЧасть.Имя;
            КонецЦикла;

        
        
        конецесли;
    КонецЦикла;
    
    для Каждого стр из ТабличноеПоле1 Цикл
        если СтрЧислоВхождений(сокрлп(стр.Тип),",")=1 тогда
            стр.Тип=стрзаменить(сокрлп(стр.Тип),",","");
        конецесли;
                если СтрЧислоВхождений(сокрлп(стр.Вид),",")=1 тогда
            стр.Вид=стрзаменить(сокрлп(стр.Вид),",","");
        конецесли;

        
    КонецЦикла;
    
//    ТабличноеПоле1.Сортировать("Значение");
    ИнициализироватьТЗ();
    для каждого стр из ТабличноеПоле1 цикл
        если ВидОбъектаПоСсылке(стр.Значение)="Документ" тогда
            новстр=тз.добавить();
            НовСТР.наименование=стр.Значение;
        конецесли;
    конеццикла;
    
    тз.Свернуть("наименование");
    
    для каждого стр из тз цикл
         ПродолжитьЗаполнятьТаблицуРеквизитов(стр.наименование);
        конеццикла;
    КонецПроцедуры
    процедура    ПродолжитьЗаполнятьТаблицуРеквизитов(ЗначениеСсылки)
         ПолеВвода1=ЗначениеСсылки;
    Для Каждого Рекв Из ПолеВвода1.Ссылка.Метаданные().Реквизиты Цикл
        НовСТР=ТабличноеПоле1.Добавить();
        НовСТР.Реквизит=Рекв.Имя;
        НовСТР.РеквизитСиноним=Рекв;
        НовСТР.тип=ВидОбъектаПоСсылке(ПолеВвода1[Рекв.Имя]);
        если  сокрлп(НовСТР.тип)="" тогда
            НовСТР.тип=Рекв.Тип;
        иначе
            попытка
            НовСТР.вид=ПолеВвода1[Рекв.Имя].Метаданные().Имя;
        исключение
            конецпопытки;
        конецесли;
        НовСТР.Значение=ПолеВвода1[Рекв.Имя];
        НовСТР.Общий_Шапки_ТЗ="Реквизит шапки";
        НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя;
    КонецЦикла;

    
    ТабличныеЧасти = ПолеВвода1.Ссылка.Метаданные().ТабличныеЧасти;
    Для Каждого ТабличнаяЧасть из ТабличныеЧасти Цикл
                    
        если  ПолеВвода1[ТабличнаяЧасть.имя].количество()>0 тогда
        для Каждого стр из ПолеВвода1[ТабличнаяЧасть.имя] цикл
            
            для каждого рекв из  ТабличнаяЧасть.Реквизиты цикл
                НовСТР=ТабличноеПоле1.Добавить();
                НовСТР.Реквизит=Рекв.Имя;
                НовСТР.РеквизитСиноним=Рекв;
                НовСТР.тип=типОбъектаПоТипу(рекв);//ВидОбъектаПоСсылке(стр[Рекв.Имя]);
                если "СубконтоСписанияСебестоимостиНУ1"=сокрлп(Рекв.Имя) тогда
                //    сообщить("пва");
                    конецесли;
                если  сокрлп(НовСТР.тип)="" тогда
                    НовСТР.тип=Рекв.Тип;
                иначе
                    попытка
                        НовСТР.вид=ВидОбъектаПоТипу(рекв);//стр[Рекв.Имя].Метаданные().Имя;
                    исключение
                    конецпопытки;
                конецесли;
                НовСТР.Значение=стр[Рекв.Имя];
                НовСТР.Общий_Шапки_ТЗ="Реквизит табличной части";
                НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя+"";
                НовСТР.ИмяТабличнойЧасти=ТабличнаяЧасть.Имя;
            КонецЦикла;
        КонецЦикла;
    иначе
           для каждого рекв из  ТабличнаяЧасть.Реквизиты цикл
                НовСТР=ТабличноеПоле1.Добавить();
                НовСТР.Реквизит=Рекв.Имя;
                НовСТР.РеквизитСиноним=Рекв;
                если "СчетПередачиБУ"=сокрлп(Рекв.Имя) тогда
                //    сообщить("пва");
                    конецесли;
                НовСТР.тип=типОбъектаПоТипу(рекв);
                если  сокрлп(НовСТР.тип)="" тогда
                    НовСТР.тип=Рекв.Тип;
                иначе
                    попытка
                        НовСТР.вид=ВидОбъектаПоТипу(рекв);
                    исключение
                    конецпопытки;
                конецесли;
                //НовСТР.Значение=стр[Рекв.Имя];
                НовСТР.Общий_Шапки_ТЗ="Реквизит табличной части";
                НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя+"";
                НовСТР.ИмяТабличнойЧасти=ТабличнаяЧасть.Имя;
            КонецЦикла;

        
        
        конецесли;
    КонецЦикла;
    
    для Каждого стр из ТабличноеПоле1 Цикл
        если СтрЧислоВхождений(сокрлп(стр.Тип),",")=1 тогда
            стр.Тип=стрзаменить(сокрлп(стр.Тип),",","");
        конецесли;
                если СтрЧислоВхождений(сокрлп(стр.Вид),",")=1 тогда
            стр.Вид=стрзаменить(сокрлп(стр.Вид),",","");
        конецесли;

        
    КонецЦикла;

    конецпроцедуры
// Возвращает вид объекта по переданной ссылке - строку "Справочник", "Документ" и т.д.
// Не обрабатываются точки маршрутов бизнес-процессов.
Функция ВидОбъектаПоСсылке(Ссылка) Экспорт
перем возврСтрока;
        возврСтрока="";
    ТипСсылки = ТипЗнч(Ссылка);
    Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "Справочник";    
    ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "Документ";
    ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "БизнесПроцесс";
    ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "ПланВидовХарактеристик";
    ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "ПланСчетов";
    ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "ПланВидовРасчета";
    ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "Задача";
    ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "ПланОбмена";
    ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
        возврСтрока=возврСтрока+ "Перечисление";
    КонецЕсли;
Возврат  возврСтрока;    
КонецФункции  
Функция типОбъектаПоТипу(стр)
    перем возврСтрока;
    возврСтрока="";
    ИнициализироватьТЗ();

    типы = стр.тип.типы();
        для каждого тип из типы цикл
            Попытка
                
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Справочник") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="Справочник";    
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Перечисление") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="Перечисление";
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Документ") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="Документ";
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланСчетов") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="ПланСчетов";    
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланВидовХарактеристик") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="ПланВидовХарактеристик";
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланВидовРасчета") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="ПланВидовРасчета";    
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыСведений") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="РегистрыСведений";
                КонецЕсли;
                
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыНакопления") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="РегистрыНакопления";
                КонецЕсли;
                
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыБухгалтерии") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="РегистрыБухгалтерии";
                КонецЕсли;
                
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыРасчета") > 0 Тогда
                Строка=тз.добавить();
                Строка.наименование="РегистрыРасчета";
                КонецЕсли;
            исключение
            конецпопытки;
        конеццикла;

        тз.свернуть("Наименование");
        для Каждого значениеИзТЗ из тз Цикл
              возврСтрока=возврСтрока+значениеИзТЗ.наименование+",";
            конеццикла;
        Возврат  возврСтрока;
    конецфункции
    Функция ВидОбъектаПоТипу(стр)
        перем возврСтрока;
        возврСтрока="";
        ИнициализироватьТЗ();

        типы = стр.тип.типы();
        для каждого тип из типы цикл
            Попытка
                
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Справочник") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"Справочник.","");    
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Перечисление") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"Перечисление.","");    
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Документ") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"Документ.","");    
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланСчетов") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"ПланСчетов.","");        
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланВидовХарактеристик") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"ПланВидовХарактеристик.","");    
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланВидовРасчета") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"ПланВидовРасчета.","");        
                КонецЕсли;
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыСведений") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"РегистрыСведений.","");    
                КонецЕсли;
                
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыНакопления") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"РегистрыНакопления.","");    
                КонецЕсли;
                
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыБухгалтерии") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"РегистрыБухгалтерии.","");        
                КонецЕсли;
                
                Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыРасчета") > 0 Тогда
                    Строка=тз.добавить();
                Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"РегистрыРасчета.","");    
                КонецЕсли;
            исключение
            конецпопытки;
        конеццикла;
                тз.свернуть("Наименование");
        для Каждого значениеИзТЗ из тз Цикл
              возврСтрока=возврСтрока+значениеИзТЗ.наименование+",";
            конеццикла;

        Возврат  возврСтрока;
    конецфункции
    Функция ИнициализироватьТЗ()
                    тз=Новый ТаблицаЗначений;
                    тз.Колонки.Добавить("Наименование")
        конецфункции



Вопрос: как сделать можно дойти до конечного уровня значения по колонке "значение" тз ТабличноеПоле1?
59 User123456
 
11.04.14
07:57
* на данный момент пока обрабатываются значения типа "документ"
60 Wobland
 
11.04.14
09:10
(58) сократи цитату. такую портянку смотреть неохота
61 User123456
 
11.04.14
09:14
конченым результатом является тз с данными, хотелось бы полбежаться по колонке "значение" и дополнить тз структурой и значениями . По сути получается итерация, но вот что то туплю как это правильно сделать.
62 Wobland
 
11.04.14
09:18
документ[реквизит]?
63 User123456
 
11.04.14
09:23
так сказать первый уровень я благополучно прошел по данной схеме, а вот что делать со значениями 2.3.4 .... уровней?
64 ДенисЧ
 
11.04.14
09:26
(63) Use power of Recursion, young padawan!
65 User123456
 
11.04.14
09:29
спс мастер Йода!!!
66 User123456
 
11.04.14
09:33
и все таки по делу, как добраться до конечных значений?
т.е. у документа есть реквизит "номенклатура", он в свою очередь состоит из допустим "наименование","ставка ндс" и тд.
"Ставка ндс" это элемент справочника, соответсвенно у него есть свои реквизиты которые могут ссылаться на элементы других справочников. Вот и велосипед!!!
67 Wobland
 
11.04.14
09:35
переведу. используй силу рекурсии, юный падаван
68 Wobland
 
11.04.14
09:35
а ты каждый ссылочный реквизит будешь так обхаживать?
69 User123456
 
11.04.14
09:39
(67) ну зачемже меня совсем недалеким считать, намек понял. (68) да.
70 Wobland
 
11.04.14
09:41
ладно язык XML избыточен, пускай. но заворачивать им ещё и избыточные данные.. чо, правда предполагается 800 одинаковых "описаниев типа"?
71 User123456
 
11.04.14
09:42
конечно нет, их дубли буду исключать.
72 User123456
 
11.04.14
09:42
согласно тз можно просто будет свернуть ее и все.
73 Wobland
 
11.04.14
09:43
то есть, будет какое-то описание встречающихся типов. тогда зачем лезть внутрь ссылочного типа? СправочникСсылка - чем не тип?
74 User123456
 
11.04.14
09:45
нужно передать исчерпывающую информацию для формирования:
1) таких же объектов(если конфы источника и приемника одинаковый).
2) нужных объектов в базе приемнике(если конфы разные).
75 User123456
 
11.04.14
09:46
но передать нужно максимальное количество информации, поэтому и приходится лезть до самых элементарных типов конечного уровня конкретного значения реквизита, о как загнул)))))
76 Wobland
 
11.04.14
09:46
а вот человек, изобретший свою РЛС
v8: Отбор в списке документов
77 ДенисЧ
 
11.04.14
09:48
блЪ...
Пример (не веллформед)
<type name="Справочник.Валюты>
  <attribute name="Наименование">Руб</attribute>
</type>
</type name="Справочник.ТипыЦен">
  <attribute name="Наименование" type="Строка">Закупочная</attribute>
  <attribute name="Валюта> type="Справочник.Валюты">Руб</attribute>
</type>
78 User123456
 
11.04.14
09:53
блин, давайте про тапочки поговорим??????!!!!!!!!!!! Я в курсе что такое сериализация и тд, постоянно в сторону уходим.  

<type name="Справочник.Валюты>
  <attribute name="Наименование">Руб</attribute>
</type>
</type name="Справочник.ТипыЦен">
  <attribute name="Наименование" type="Строка">Закупочная</attribute>
  <attribute name="Валюта> type="Справочник.Валюты">Руб</attribute>
</type>

да на выходе такой вид и получим +-, но вот как дойти до конечных значений, описано (66)
79 User123456
 
11.04.14
09:54
да и я прекрасно понимаю что таких умников как я тут на форуме пачками можно выносить, но ведь на то он и форум))))))
80 Wobland
 
11.04.14
10:11
>дойти до конечных значений
Документ[Реквизит]
81 User123456
 
13.04.14
09:07
ну чтоб выкладываю то что получилось налагать)))), ждемс критики, может у кого возникнут идеи по оптимизации.

Элементы на форме:
ТабличноеПоле1 - колонки:Объект, Реквизит, РеквизитСиноним, Тип, Вид,Значение,Общий_Шапки_ТЗ,ИмяТабличнойЧасти
ПолеВвода1 - тип: любаяссылка

код:
Перем тз Экспорт;
Перем тзЗначений Экспорт;
Перем СписокРазложенныхОбъектов Экспорт;
Перем СписокЗначенийРеквизитов Экспорт;


// в реквизит ПолеВвода1 первоначально всегда попадает документ
// После нажания на кнопку "Выполнить" заполняем тз всеми реквизитами данного документа и их значениями
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    ЭлементыФормы.ТабличноеПоле1.Колонки.Значение.ЭлементУправления.СписокВыбора=СписокЗначенийРеквизитов;
     СписокРазложенныхОбъектов.Добавить(ПолеВвода1.Ссылка,ПолеВвода1.Ссылка);
     Для Каждого Рекв Из ПолеВвода1.Ссылка.Метаданные().Реквизиты Цикл
         НовСТР=ТабличноеПоле1.Добавить();
         НовСТР.Реквизит=Рекв.Имя;
         НовСТР.РеквизитСиноним=Рекв;
         НовСТР.тип=ВидОбъектаПоСсылке(ПолеВвода1[Рекв.Имя]);
         НовСТР.СсылкаНаОбъект=Сокрлп(ПолеВвода1.Ссылка.УникальныйИдентификатор());
;
         если  сокрлп(НовСТР.тип)="" тогда
             НовСТР.тип=Рекв.Тип;
         иначе
             попытка
                 НовСТР.вид=ПолеВвода1[Рекв.Имя].Метаданные().Имя;
             исключение
             конецпопытки;
         конецесли;
         НовСТР.Значение=ПодставитьЗначение(ПолеВвода1[Рекв.Имя]);
         НовСТР.Общий_Шапки_ТЗ="Реквизит шапки";
         НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя;
         НовСТР.ТипОбъекта=ВидОбъектаПоСсылке(ПолеВвода1.Ссылка);
     КонецЦикла;
     ТабличныеЧасти = ПолеВвода1.Ссылка.Метаданные().ТабличныеЧасти;
     Для Каждого ТабличнаяЧасть из ТабличныеЧасти Цикл
         если  ПолеВвода1[ТабличнаяЧасть.имя].количество()>0 тогда
             для Каждого стр из ПолеВвода1[ТабличнаяЧасть.имя] цикл
                 для каждого рекв из  ТабличнаяЧасть.Реквизиты цикл
                     НовСТР=ТабличноеПоле1.Добавить();
                     НовСТР.СсылкаНаОбъект=Сокрлп(ПолеВвода1.Ссылка.УникальныйИдентификатор());
;
                     НовСТР.Реквизит=Рекв.Имя;
                     НовСТР.РеквизитСиноним=Рекв;
                     НовСТР.тип=типОбъектаПоТипу(рекв);//ВидОбъектаПоСсылке(стр[Рекв.Имя]);
                     если  сокрлп(НовСТР.тип)="" тогда
                         НовСТР.тип=Рекв.Тип;
                     иначе
                         попытка
                             НовСТР.вид=ВидОбъектаПоТипу(рекв);//стр[Рекв.Имя].Метаданные().Имя;
                         исключение
                         конецпопытки;
                     конецесли;
                     НовСТР.ТипОбъекта=ВидОбъектаПоСсылке(ПолеВвода1.Ссылка);
                     НовСТР.Значение=ПодставитьЗначение(стр[Рекв.Имя]);
                     НовСТР.Общий_Шапки_ТЗ="Реквизит табличной части";
                     НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя+"";
                     НовСТР.ИмяТабличнойЧасти=ТабличнаяЧасть.Имя;
                 КонецЦикла;
             КонецЦикла;
         иначе
             для каждого рекв из  ТабличнаяЧасть.Реквизиты цикл
                 НовСТР=ТабличноеПоле1.Добавить();
                 НовСТР.Реквизит=Рекв.Имя;
                 НовСТР.РеквизитСиноним=Рекв;
                 НовСТР.тип=типОбъектаПоТипу(рекв);
                 если  сокрлп(НовСТР.тип)="" тогда
                     НовСТР.тип=Рекв.Тип;
                 иначе
                     попытка
                         НовСТР.вид=ВидОбъектаПоТипу(рекв);
                     исключение
                     конецпопытки;
                 конецесли;
                 НовСТР.СсылкаНаОбъект=Сокрлп(ПолеВвода1.Ссылка.УникальныйИдентификатор());
;
                 НовСТР.ТипОбъекта=ВидОбъектаПоСсылке(ПолеВвода1.Ссылка);
                 НовСТР.Общий_Шапки_ТЗ="Реквизит табличной части";
                 НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя+"";
                 НовСТР.ИмяТабличнойЧасти=ТабличнаяЧасть.Имя;
             КонецЦикла;
         конецесли;
     КонецЦикла;
     для Каждого стр из ТабличноеПоле1 Цикл
         если СтрЧислоВхождений(сокрлп(стр.Тип),",")=1 тогда
             стр.Тип=стрзаменить(сокрлп(стр.Тип),",","");
         конецесли;
         если СтрЧислоВхождений(сокрлп(стр.Вид),",")=1 тогда
             стр.Вид=стрзаменить(сокрлп(стр.Вид),",","");
         конецесли;
     КонецЦикла;
     для каждого стр из СписокЗначенийРеквизитов цикл
         Если ЗначениеЗаполнено(стр.Значение) тогда
             если ВидОбъектаПоСсылке(стр.Значение)="Документ" тогда    //        
                 если не ПроверитьНаРазложенность(стр.Значение) тогда
                     ПродолжитьЗаполнятьТаблицуРеквизитов(стр.Значение);
                     СписокРазложенныхОбъектов.Добавить(стр.Значение,стр.Значение);
                 конецесли;
             конецесли;
             если ВидОбъектаПоСсылке(стр.Значение)="Справочник" тогда    //        
                 если не ПроверитьНаРазложенность(стр.Значение) тогда
                     ПеребратьРеквизитыСправочника(стр.Значение);
                     СписокРазложенныхОбъектов.Добавить(стр.Значение,стр.Значение);
                 конецесли;
             конецесли;
         конецесли;
     конеццикла;
     ВыгрузитьТЗ_в_XML(ТабличноеПоле1,"C:\11.xml")
КонецПроцедуры


функция ПодставитьЗначение(Значение)
     ЭлементСписка = СписокЗначенийРеквизитов.НайтиПоЗначению(Значение);
     Если ЭлементСписка = Неопределено Тогда
         СписокЗначенийРеквизитов.Добавить(Значение,Значение);
         ЭлементСписка = СписокЗначенийРеквизитов.НайтиПоЗначению(Значение);
         Возврат  СписокЗначенийРеквизитов.Индекс(ЭлементСписка);
     иначе
         Возврат  СписокЗначенийРеквизитов.Индекс(ЭлементСписка);
     КонецЕсли;
конецфункции

Функция ПроверитьНаРазложенность(СтрокаДляПроверки)
     ЭлементСписка = СписокРазложенныхОбъектов.НайтиПоЗначению(СтрокаДляПроверки);
     Если ЭлементСписка <> Неопределено Тогда
         Возврат истина;
     иначе
         Возврат ложь;
     КонецЕсли;
конецфункции


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


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

                 НовСТР.тип=типОбъектаПоТипу(рекв);
                 если  сокрлп(НовСТР.тип)="" тогда
                     НовСТР.тип=Рекв.Тип;
                 иначе
                     попытка
                         НовСТР.вид=ВидОбъектаПоТипу(рекв);
                     исключение
                     конецпопытки;
                 конецесли;
                 НовСТР.ТипОбъекта=ВидОбъектаПоСсылке(ПолеВвода1.Ссылка);
                 НовСТР.Общий_Шапки_ТЗ="Реквизит табличной части";
                 НовСТР.Объект=ПолеВвода1.Ссылка.Метаданные().Имя+"";
                 НовСТР.ИмяТабличнойЧасти=ТабличнаяЧасть.Имя;
             КонецЦикла;
         конецесли;
     КонецЦикла;
     для Каждого стр из ТабличноеПоле1 Цикл
         если СтрЧислоВхождений(сокрлп(стр.Тип),",")=1 тогда
             стр.Тип=стрзаменить(сокрлп(стр.Тип),",","");
         конецесли;
         если СтрЧислоВхождений(сокрлп(стр.Вид),",")=1 тогда
             стр.Вид=стрзаменить(сокрлп(стр.Вид),",","");
         конецесли;
     КонецЦикла;
конецпроцедуры



// Возвращает вид объекта по переданной ссылке - строку "Справочник", "Документ" и т.д.
// Не обрабатываются точки маршрутов бизнес-процессов.
Функция ВидОбъектаПоСсылке(Ссылка) Экспорт
     перем возврСтрока;
     возврСтрока="";
     ТипСсылки = ТипЗнч(Ссылка);
     Если Справочники.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "Справочник";    
     ИначеЕсли Документы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "Документ";
     ИначеЕсли БизнесПроцессы.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "БизнесПроцесс";
     ИначеЕсли ПланыВидовХарактеристик.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "ПланВидовХарактеристик";
     ИначеЕсли ПланыСчетов.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "ПланСчетов";
     ИначеЕсли ПланыВидовРасчета.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "ПланВидовРасчета";
     ИначеЕсли Задачи.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "Задача";
     ИначеЕсли ПланыОбмена.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "ПланОбмена";
     ИначеЕсли Перечисления.ТипВсеСсылки().СодержитТип(ТипСсылки) Тогда
         возврСтрока=возврСтрока+ "Перечисление";
     КонецЕсли;
     Возврат  возврСтрока;    
КонецФункции  

Функция типОбъектаПоТипу(стр)
     перем возврСтрока;
     возврСтрока="";
     ИнициализироватьТЗ();
     типы = стр.тип.типы();
     для каждого тип из типы цикл
         Попытка
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Справочник") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="Справочник";    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Перечисление") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="Перечисление";
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Документ") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="Документ";
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланСчетов") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="ПланСчетов";    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланВидовХарактеристик") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="ПланВидовХарактеристик";
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланВидовРасчета") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="ПланВидовРасчета";    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыСведений") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="РегистрыСведений";
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыНакопления") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="РегистрыНакопления";
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыБухгалтерии") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="РегистрыБухгалтерии";
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыРасчета") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование="РегистрыРасчета";
             КонецЕсли;
         исключение
         конецпопытки;
     конеццикла;
     тз.свернуть("Наименование");
     для Каждого значениеИзТЗ из тз Цикл
         возврСтрока=возврСтрока+значениеИзТЗ.наименование+",";
     конеццикла;
     Возврат  возврСтрока;
конецфункции

Функция ВидОбъектаПоТипу(стр)
     перем возврСтрока;
     возврСтрока="";
     ИнициализироватьТЗ();
     типы = стр.тип.типы();
     для каждого тип из типы цикл
         Попытка
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Справочник") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"Справочник.","");    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Перечисление") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"Перечисление.","");    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "Документ") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"Документ.","");    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланСчетов") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"ПланСчетов.","");        
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланВидовХарактеристик") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"ПланВидовХарактеристик.","");    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "ПланВидовРасчета") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"ПланВидовРасчета.","");        
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыСведений") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"РегистрыСведений.","");    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыНакопления") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"РегистрыНакопления.","");    
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыБухгалтерии") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"РегистрыБухгалтерии.","");        
             КонецЕсли;
             Если Найти(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(), "РегистрыРасчета") > 0 Тогда
                 Строка=тз.добавить();
                 Строка.наименование=СтрЗаменить(Метаданные.НайтиПоТипу(Тип).ПолноеИмя(),"РегистрыРасчета.","");    
             КонецЕсли;
         исключение
         конецпопытки;
     конеццикла;
     тз.свернуть("Наименование");
     для Каждого значениеИзТЗ из тз Цикл
         возврСтрока=возврСтрока+значениеИзТЗ.наименование+",";
     конеццикла;
     Возврат  возврСтрока;
конецфункции

Функция ИнициализироватьТЗ()
     тз=Новый ТаблицаЗначений;
     тз.Колонки.Добавить("Наименование")
конецфункции

//Функция ИнициализироватьТЗЗначений()
//    тзЗначений=Новый ТаблицаЗначений;
//    тзЗначений.Колонки.Добавить("Наименование")
//конецфункции

// Функция возращает дерево значний из таблицы значений, с нужной группировкой
Функция ТаблицаЗначенийВДеревоЗначений(ТЗ, ГруппировкаКолонка,ГруппировкаКолонка1,ГруппировкаКолонка2,ГруппировкаКолонка3) Экспорт
     ПЗ= Новый ПостроительЗапроса;
     ПЗ.ИсточникДанных          = Новый ОписаниеИсточникаДанных(ТЗ);//передаем ТЗ
     ПЗ.ДобавлениеПредставлений = ТипДобавленияПредставлений.НеДобавлять;
     ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка].Измерение = Истина;//по этой колонке идет группировка
     ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка1].Измерение = Истина;//по этой колонке идет группировка
     ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка2].Измерение = Истина;//по этой колонке идет группировка
     ПЗ.ИсточникДанных.Колонки[ГруппировкаКолонка3].Измерение = Истина;//по этой колонке идет группировка
     ПЗ.ЗаполнитьНастройки();
     ПЗ.Выполнить();
     Дерево = ПЗ.Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);  
     Возврат Дерево;  
КонецФункции // ТаблицаЗначенийВДеревоЗначений()

Функция ВыгрузитьТЗ_в_XML(пТЗ,пФайлИмя)
     ЗаписьXML = Новый ЗаписьXML;
     ЗаписьXML.ОткрытьФайл(пФайлИмя);
     ЗаписьXML.ЗаписатьОбъявлениеXML();
     ЗаписьXML.ЗаписатьНачалоЭлемента("Root");
     Для А=0 По пТЗ.Количество()-1 Цикл
         ЗаписьXML.ЗаписатьНачалоЭлемента("item");
         Для Каждого Колонка Из пТЗ.Колонки Цикл
             ИмяАтрибута=Колонка.Имя;
             ЗначениеАтрибута=пТЗ[А][Колонка.Имя];
             если сокрлп(ЗначениеАтрибута)="" тогда
                 ЗаписьXML.ЗаписатьАтрибут(ИмяАтрибута, Строка(ЗначениеАтрибута));    
             иначе
            &nb
82 User123456
 
13.04.14
09:08
блин в ТабличноеПоле1 добавил колонки еще СсылкаНаОбъект
83 Wobland
 
13.04.14
09:31
>сокрлп(НовСТР.тип)=""
попахивает нехорошим

>Функция ВидОбъектаПоТипу
имеем реквизит типа любая ссылка. как она себя поведёт при пустой ссылке на вон тот документ? а при неопределене?

я ещё потыкаю палочкой, но оптимизация тут одна: взять готовое
84 User123456
 
13.04.14
09:34
согласен, но готовое не подходит(и давайте на тему готового не будем объяснять что да как), вот и нужна критика
85 Wobland
 
13.04.14
09:35
будем. ты ж так и не рассказал, почему
86 User123456
 
13.04.14
09:37
НовСТР.тип=ВидОбъектаПоСсылке(ПолеВвода1[Рекв.Имя]);
         НовСТР.СсылкаНаОбъект=Сокрлп(ПолеВвода1.Ссылка.УникальныйИдентификатор());
         если  сокрлп(НовСТР.тип)="" тогда

НовСТР.тип - будет заполнен Справочник, Документ, БизнесПроцесс, ПланВидовХарактеристик, ПланСчетов, ПланВидовРасчета, Задача, ПланОбмена, Перечисление или ""
87 User123456
 
13.04.14
09:42
АААААААААААА, давайте рассматривать задачу с точки зрения не далекого усера!!!! сидит бабушка которую обучать уже бестолку, руководство ее не уволит, на обучение денег не пожалеет, но она будет ВСЕГДА, подчеркиваю ВСЕГДА  будет - тупить. Поэтому нужен механизм который как минимум для админа, прогера, короче человека соображающего в базах, спокойно и без особых усилий сможет загрузить данные в базу приемник. Согласитесь КД нужно ковырять, а студент который в глаза не видел ни структуры ни модулей 1с потратит на это кучу времени. Вот и получается, что есть небольшой кусок XML(который можно более менее спокойно загрузить в приемник, базы разные).
88 Wobland
 
13.04.14
09:43
>ПолеВвода1=ЗначениеСсылки;
кто так переменные называет - ПолеВвода1?
89 ДенисЧ
 
13.04.14
09:45
(88) Я сейчас страшную вещь скажу - 1с так называет....
90 User123456
 
13.04.14
09:45
да я знаю что имена переменых и тд, нужно оптимизировать, это просто набросок
91 Wobland
 
13.04.14
09:45
(89) у него явно в коде присвоение
92 User123456
 
13.04.14
09:46
сейчас для меня главное сделать механизм, а красотой займусь попозже, хотя знаю что до этого руки не всегда доходят)))))))
93 Wobland
 
13.04.14
09:46
(87) я вот специально для юзеров, боящихся штатной формы выгрузки-загрузки, писал свою обработку-обёртку. юзер заполняет список физлиц, жмёт кнопку. дальше наступает невидимая штатная КДшная выгрузка-загрузка строго по одному правилу.
94 User123456
 
13.04.14
09:49
(54) тут описано, баз много, пользователей много.
95 Wobland
 
13.04.14
10:22
(94) чуть ниже ещё пара слов

в общем, больше я этого кода не хочу. не смог увидеть, что тип любая ссылка обработается корректно. обработается корректно?
96 Wobland
 
13.04.14
10:22
(95) ну или там.. тип 3 справочника+2документа
97 Wobland
 
13.04.14
10:28
>сокрлп(зн)<>"<Пустое значение>"
а как насчёт строковых данных "<Пустое значение>"?
98 DarKySiK
 
13.04.14
10:29
офф: мда, связка ДенисЧ - Wobland способна затроллить любого)
99 User123456
 
13.04.14
10:31
над этим сейчас разбираюсь, на данный момент обработал только спр и доки, буду дальше обрабатывать другие ссылки. Что же касается (96) то в колонке "значение" где встречается такой смешенный тип есть указание на конкретный тип , который ниже по тз описан.
100 Wobland
 
13.04.14
10:31
а сто!
101 Wobland
 
13.04.14
10:32
(98) фу, ну что за выражения? мы стимулируем товарищу работу мозга
102 User123456
 
13.04.14
10:34
стимулируете? эммм ну какбы сказать, пока что слабовато. Настр портится эт да!!! а вот дельной критики маловато!!!
103 ДенисЧ
 
13.04.14
10:37
(102) Значит, пока не нашли объект стимулирования... Что ж поделать...
104 User123456
 
13.04.14
10:39
ладно покапаюсь на другом форуме, тут как обычно очень много философов... Видимо надо было написать в секцию LIFE.
105 Wobland
 
13.04.14
11:01
>покапаюсь на другом форуме
я слышал, наркологи умеют домой приходит без всяких форумов
106 mistеr
 
13.04.14
11:20
(87) Не надо бояться большого объема. Надо просто и наглядно разложить руководству, что реализовать кнопку "Сделать усе!" можно, но (с учетом твоего обучения) выйдет на порядок дороже, чем уволить и заменить бабушку. Но есть и золотая середина: сделать все по отработанным технологиям 1С. Да, несколько месяцев придется попахать, зато потом все одной кнопкой. Плюс для тебя: оплачиваемый объем. Плюс для руководства: это дешевле, чем вместо тебя нанять супер-спеца, который сделает за месяц, но в десять раз дороже.
107 User123456
 
13.04.14
13:18
по теме возник вопрос, как через метаданные достучаться до номера дока, даты дока, проведен, помечен на удаление и тд. ?
108 Wobland
 
13.04.14
13:23
(107) незачем
109 User123456
 
13.04.14
13:23
вопрос все тотже
110 mistеr
 
14.04.14
11:21
(107) Через метаданные - никак.
111 Wobland
 
14.04.14
11:21
(110) даже через стандартные реквизиты?
112 Мыш
 
14.04.14
11:36
Блин, ну элементарно, сделай кеш.
113 Леша1с
 
14.04.14
15:07
Казалось бы, и причем тут структура конфигурации??
114 User123456
 
19.04.14
10:11
(110) понял, буду через стандартные реквизиты
115 VladZ
 
19.04.14
10:47
(87) Сделай через КД. Для пользователя сделай простую и понятную форму.
116 Wobland
 
19.04.14
10:52
(115) КД не подходит
117 VladZ
 
19.04.14
12:14
(116) Таки не понял, почему.
118 Ерепень
 
19.04.14
12:19
(117) аналогично
119 neo_matrix_123
 
19.04.14
14:30
диск итс. типовая выгрузка\загрузка данных xml. сначала считывает любую структуру базы и ее выводит, потом подтягивает данные.
120 ДенисЧ
 
19.04.14
14:44
(117) Никто не понимает. Просто прими это как данность, как заповедь, как ОтчеНаш
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.