|
Структура конфигурации | ☑ | ||
---|---|---|---|---|
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) Никто не понимает. Просто прими это как данность, как заповедь, как ОтчеНаш
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |