|
Подскажите по тестовому заданию | ☑ | ||
---|---|---|---|---|
0
Одинесю
22.04.16
✎
10:32
|
Есть тестовое задание
Напишите внешнюю обработку для выгрузки 2х видов документов из базы УТ10.3 (либо УТ11) в файл XML. Формат файла произвольный. Для ссылочных объектов выгружать наименования. Выгрузить надо ~10 основных реквизитов и 1 ТЧ (состав реквизитов можете выбрать сами). Требования к обработке: - возможность выбора периода выгрузки - максимальная скорость выгрузки - масштабируемость (простое добавление новых документов) Все вроде понятно, не понятно, что имеется виду под масштабируемостью - ввод и выгрузка любого типа документа? Зачем тогда в условии два сначала? |
|||
7
Одинесю
22.04.16
✎
10:39
|
(6) И тч может не быть
|
|||
8
Одинесю
22.04.16
✎
10:39
|
Проверки, наверное, на состав.
|
|||
9
pessok
22.04.16
✎
10:44
|
да просто ж все
подразумевается, что работать над с метаданными, а не с реальными именами реквизитов Для Каждого Метадаланные.Документы[ТипДока].Реквизиты Цикл ВыгрузитьРеквизит(Док[Реквизит.Имя]); КонецЦикла Для Каждого ТЧ Из Метаданные.Документы[ТипДока].ТабличныеЧасти Цикл Для Каждого ТекСтр Из До[ТЧ.Имя] Цикл Для Каждого Колонка ИЗ ТЧ.Реквизиты Цикл ВыгрузитьРеквизит(ТекСтр[Колонка.Имя]); КонецЦикла КонецЦикла КонецЦикла |
|||
10
asady
22.04.16
✎
10:44
|
(0) если формат произвольный я бы сделал так:
1. выгрузил бы объект методом ЗаписатьXML() 2.пробежался по тексту и заменить УИДЫ на строковые представления |
|||
11
Локи-13
22.04.16
✎
10:44
|
(0) нужен список документов
вначале у тебя Список.Добавить("Документ1"); Список.Добавить("Документ2"); Получаешь потом документы из списка. |
|||
12
Одинесю
22.04.16
✎
10:48
|
(9) Надо примерно 10 реквизитов и одну тч.
Спасибо, если возникнут трудности - спрошу, напишу - выложу на форум. |
|||
13
pessok
22.04.16
✎
10:49
|
(12) замени для каждого на для а = 0 по 10
|
|||
14
pessok
22.04.16
✎
10:49
|
ну и не все тч, а одну
|
|||
15
Одинесю
22.04.16
✎
10:57
|
(13) (14) Спасибо, буду разбираться.
|
|||
16
Одинесю
26.04.16
✎
10:17
|
Не вырисовывается пока в голове. Мне на форме надо показать список всех документов, видов документов, это что, мне надо показать какой-то список, а потом согласно выбранных в нем анализировать список метаданных, да я упаду все описывать...
|
|||
17
DDwe
26.04.16
✎
10:24
|
(16) Пока четыре дня падал, уже 20 раз можно все написать было.
|
|||
18
DDwe
26.04.16
✎
10:25
|
(16) Дорогу осилит идущий. Здесь за тебя никто писать не будет.
|
|||
19
Одинесю
26.04.16
✎
10:27
|
(18) Я что-то не то спросил?)) Я не прошу код, как организовать разбираюсь.
|
|||
20
Масянька
26.04.16
✎
10:28
|
(16) Ты - человек или тряпка?
Пить бросить не могу, в голове не рисуется... Возьми себя в руки. Желательно, руки из плеч. |
|||
21
Одинесю
26.04.16
✎
10:29
|
(20) (18) Изыдите)
|
|||
22
Локи-13
26.04.16
✎
10:30
|
(16) рисуй не в голове - рисуй на бумажке
тестовое задание в том числе проверяет на сколько глубоко ты закопаешься в решении простых задач |
|||
23
DDwe
26.04.16
✎
10:30
|
(21) Ты эт, точно... завязывай.
|
|||
24
Масянька
26.04.16
✎
10:31
|
(21) Обойдешься...
|
|||
25
Одинесю
26.04.16
✎
10:34
|
(22) Сел, начал рисовать, пришел к тому, что не знаю, как показать на форме дерево метаданных, чтобы пользователь смог открыжить нужные, а я бы уже обрабатывал.
|
|||
26
DDwe
26.04.16
✎
10:35
|
(25) Ну, так книжки почитай, типовые посмотри. В инете примеры.
|
|||
27
Масянька
26.04.16
✎
10:36
|
(25) Поставь себя на место пользователя.
Представь, ты делаешь для себя. |
|||
28
aleks_default
26.04.16
✎
10:37
|
(25) Зачем тебе дерево ментаданных? В задаче это не нужно. Достаточно выбора из списка документов.
|
|||
29
Одинесю
26.04.16
✎
10:38
|
Люди и с большим опытом испытывали затруднение v8: Как вывести структуру метаданных объекта?
|
|||
30
DDwe
26.04.16
✎
10:38
|
(25) Задачу на мелкие подзадачи разбей:
Как вывести дерево на форму Как добавить в него крыжики Как заполнить дерево метаданными И решай потихоньку. И не ной. |
|||
31
Масянька
26.04.16
✎
10:39
|
(29) А зачем тебе структура? В задаче четко сказано - 2 вида док-ов + добавление новых док-ов.
строй список всех док-ов и "галочка" (пометка) для выгрузки. |
|||
32
Одинесю
26.04.16
✎
10:40
|
(28) мне надо, чтобы не элементы выбирали, а тип (РН,ПН, РТиУ и т.п я так понял) и выгружать.
|
|||
33
DDwe
26.04.16
✎
10:44
|
(32) Тип чего?
|
|||
34
aleks_default
26.04.16
✎
10:45
|
Ну так и причем тут дерево метаданных? Обычный список из названий типов документов. Открывай форму выбора со списком, там тыкают в название вида документа - он добавляется в список выбранных на твоей форме. Потом обходишь этот список выбранных, по названию получаешь уже структуру реквизитов и тч этого типа документа и выгружаешь.
А два вида документа в задании указано для того чтобы не ты не привязвался к конкретному документу. Т. е. еще раз подчеркивается что решение должно быть более универсальным. |
|||
35
Одинесю
26.04.16
✎
10:48
|
(34) Я вот этого и боюсь, что мне надо будет все виды документов привязывать к метаданным.
|
|||
36
Одинесю
26.04.16
✎
10:51
|
Если так - при открытии в табличную часть пихаю все названия документов, но не будет ли этот список тормозить, мне кажется это будет работать так же медленно, как и журнал регистрации.
|
|||
37
DDwe
26.04.16
✎
10:52
|
(36) Ты еще долго сопли жувать будешь или попробуешь сделать хоть что-то?
(35) Не ссы....(С) |
|||
38
aleks_default
26.04.16
✎
10:53
|
Млять, не список документов, а список типов документов! Разницу понимаешь?
|
|||
39
aleks_default
26.04.16
✎
10:55
|
Выбор самих документов на форму выводить не надо. Просто потом отбираешь все документы этого типа за указанный период и выгружаешь.
|
|||
40
aleks_default
26.04.16
✎
10:56
|
С чего бы тормозить списку из максимум нескольких сотен элементов?
|
|||
41
Одинесю
26.04.16
✎
11:10
|
(40) Делаю, создал тч на форме, 1-реквизит булево, для хранения названия использую строку, ПриОткрытии пробегаю Медаданные.Документы, пытаюсь вывести.
|
|||
42
DDwe
26.04.16
✎
11:11
|
(41) Зачем тч? Чем СЗ не устроил?
|
|||
43
Одинесю
26.04.16
✎
11:13
|
(42) Попробую, спс.
|
|||
44
Mraque
26.04.16
✎
11:17
|
Зачем тебе показывать список метаданных ?
Сделай в обработке макет. В макете сделай секцию "Документы к выгрузке". В секции заполни для начала два любых документа, на которых будешь делать обработку, например, "ПоступлениеТоваровУслуг", "РеализацияТоваровУслуг". При старте обработке читаешь из макета и составляешь список типов документов для выгрузки. Далее, как уже посоветовали, через Метаданные, но только по своим документам из списка. |
|||
45
Одинесю
26.04.16
✎
12:03
|
||||
46
DDwe
26.04.16
✎
12:09
|
(45) Ну... хоть как....прогресс..
|
|||
47
Одинесю
26.04.16
✎
12:21
|
Подскажите, устанавливаю два крыжа, на первых двух документах, код нормальный, не лоховской?
Процедура ПриОткрытии() Для каждого ВидДока из Метаданные.Документы цикл Если ВидДока = Метаданные.Документы.ABCКлассификацияПокупателей или ВидДока = Метаданные.Документы.АвансовыйОтчет Тогда Реквизит.Добавить(ВидДока, ,Истина); Иначе Реквизит.Добавить(ВидДока, ,Ложь); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
48
cw014
26.04.16
✎
12:36
|
Интересно, куда это такое тестовое задание?
|
|||
49
Одинесю
26.04.16
✎
12:57
|
(48) Это только одно задание), а их два.
|
|||
50
DDwe
26.04.16
✎
13:00
|
(49) Так интересно, ТС спрашивают "Куда" задание, а он отвечает "Сколько" заданий. Так видимо он и код пишет. ))))
|
|||
51
Futarkh
26.04.16
✎
13:12
|
(48) Мне кажется это прием на факультет прикладной математики с уклоном в 1С )))
|
|||
52
Одинесю
26.04.16
✎
13:23
|
Теперича надо определить список выгружаемых документов. В какую структуру их лучше поместить?
Заем реализовать (9) , ввиду чего возникает такой еще вопрос - реквизиты лучше задать жестко по именам(например стандартных реквизитов), или просто брать и выгружать первые 10? |
|||
53
Trotter
26.04.16
✎
13:29
|
а второе какое ?
|
|||
54
abfm
26.04.16
✎
13:36
|
Всё уже написано. Возьми в типовой Обработка.ВыгрузкаДанныхВИдентичнуюКонфигурацию и поковеркай для приличия.
|
|||
55
Одинесю
26.04.16
✎
13:43
|
(53) Необходимо привести пример своей обработки, не менее 500 строк, с выполнением запросов. (54) Да дольше будет, я уже пробовал смотреть
|
|||
56
Одинесю
26.04.16
✎
14:07
|
Составляю набор выгружаемых реквизитов, делаю так
Процедура КнопкаВыполнитьНажатие(Кнопка) Для каждого Документ из Реквизит цикл Если Документ.Пометка Тогда Для а = 0 по 10 Цикл б = Метаданные.Документы.[Документ].Реквизиты; //ВыгрузитьРеквизит(Док[Реквизит.Имя]); КонецЦикла; Не могу получить доступ к реквизитам {Форма.Форма.Форма(8,28)}: Ожидается идентификатор б = Метаданные.Документы.<<?>>[Документ] |
|||
57
Одинесю
26.04.16
✎
14:12
|
http://s8.hostingkartinok.com/uploads/images/2016/04/19bf99eb121093d6a9af534e8de376f7.png Документ у меня объект метаданных из списка значений на форме.
|
|||
58
Одинесю
26.04.16
✎
14:30
|
Подскажите как получить объект метаданных по значению, полученного ранее. Никак не работает
Ни так Метаданные.Документы.[Нужный].Реквизиты, ни так Метаданные.Документы.[Нужный.Значение].Реквизиты, ни так Метаданные.Документы.Нужный.Реквизиты, ни так Метаданные.Документы.Нужный.Значение.Реквизиты |
|||
59
singlych
26.04.16
✎
14:34
|
блин. у тебя и так уже есть объект метаданных в Документ.Значение.
|
|||
60
Одинесю
26.04.16
✎
14:35
|
(59) ы, ну тупой, спасибо, сейчас попробую
|
|||
61
Одинесю
26.04.16
✎
14:45
|
Да, теперь коллекцию реквизитов обхожу, не пойму ВыгрузитьРеквизит(Док[Реквизит.Имя]); из (9) что имелось ввиду, такого метода нет, или предполагалось собрать их еще в каком-то списке значений?
|
|||
62
Одинесю
26.04.16
✎
14:46
|
Или уже не выходить из цикла и составлять файл xml? Да, наверное так.
|
|||
63
Масянька
26.04.16
✎
14:52
|
(62) Прости, но ты - трезв?
|
|||
64
Одинесю
26.04.16
✎
15:04
|
(63) Мась, ты кому-нибудь помогаешь?
|
|||
65
Одинесю
26.04.16
✎
15:05
|
Трезв.
|
|||
66
Масянька
26.04.16
✎
15:09
|
(65) :)
|
|||
67
Одинесю
26.04.16
✎
15:14
|
Опять затык, вот так идет норм все, вот так нет Выборка=Документ.Значение.Выбрать(ДатаС,ДатаПо);
Для каждого Документ из Реквизит цикл Если Документ.Пометка Тогда Запись.ЗаписатьНачалоЭлемента(Строка(Документ)); //Запись.ЗаписатьНачалоЭлемента("Приходные"); Выборка=Документ.Значение.Выбрать(ДатаС,ДатаПо); Пока Выборка.Следующий() Цикл Если Выборка.Проведен=Истина тогда Запись.ЗаписатьНачалоЭлемента(Строка(Документ)); |
|||
68
Одинесю
26.04.16
✎
15:15
|
Вот так идет Выборка=Документы.ПриходнаяНакладная.Выбрать(ДатаС,ДатаПо);
|
|||
69
singlych
26.04.16
✎
15:31
|
ну дык менеджер объекта и объект метаданных - разные вещи
|
|||
70
Одинесю
26.04.16
✎
15:34
|
Запросом пробовать?
|
|||
71
Одинесю
26.04.16
✎
15:34
|
(69) Я это понял, я не найду как выйти на менеджер объекта.
|
|||
72
rikkar
26.04.16
✎
15:36
|
(6) а разве основной реквизит не один у объекта?
|
|||
73
singlych
26.04.16
✎
15:37
|
Документы[Документ.Значение.Имя]
а лучше запросом |
|||
74
Одинесю
26.04.16
✎
15:39
|
Чувствую и еще одну засаду, как я буду результат выборки соотносить по реквизитам, которые выбираю из метаданных...
|
|||
75
Масянька
26.04.16
✎
15:40
|
(74) Ты мне больше нравишься, когда трезвый :)))
А мысли-то как роятся :))) |
|||
76
Одинесю
26.04.16
✎
15:41
|
(73) Взлетело, спасибо большое.
|
|||
77
Одинесю
26.04.16
✎
15:43
|
(75) Дай Бог тебе не встречаться с этим, ты думаешь мне уже прям, как ангелу хорошо? Нет, восстановление длительный процесс. И та ветка все, закончилась)
|
|||
78
aleks_default
26.04.16
✎
15:49
|
Приучайся не использовать в качестве переменных слова "Документ" и "Реквизит" и т.п. Этим слова используются системой. Да и сам же запутаешься.
|
|||
79
Одинесю
26.04.16
✎
15:50
|
Выборка=Документы[Документ.Значение.Имя].Выбрать(ДатаС,ДатаПо);
Пока Выборка.Следующий() Цикл Если Выборка.Проведен=Истина тогда Запись.ЗаписатьНачалоЭлемента(Строка(Документ)); Для а = 0 по 10 Цикл б[а] = Документ.Значение.Реквизиты; //Запись.ЗаписатьАтрибут("Номер", Строка(Выборка.Номер)); //Запись.ЗаписатьАтрибут("Дата", Строка(Выборка.Дата)); //Запись.ЗаписатьНачалоЭлемента("ТабличнаяЧасть"); КонецЦикла; КонецЕсли; КонецЦикла; В цикла с а, я получаю наименования нужных реквизитов, как бы мне в нем соотнести нужный с нужным из выборки? |
|||
80
Одинесю
26.04.16
✎
15:51
|
(78) Я начал просто пробовать, а потом пошло-поехало, потом перепишу на бело.
|
|||
81
Масянька
26.04.16
✎
15:52
|
(77) Спасибо (за пожелания).
А ты думаешь, в ангела - раз и готово? Фиг тебе. Сначала отмыться нужно (от грызи), потом крылья вырастить, потом - научиться пользоваться крыльями... Думаешь летать легко? Ага, щаз... И коленки, и лоб, и остальное разобьешь не один раз... Так что - кому сейчас легко? А ты смотри на своего ангела (дочу) и пусть тебе будет не только стыдно, но и противно. Удачи! :) |
|||
82
Масянька
26.04.16
✎
15:53
|
(80) Лучше сразу писать, как надо.
Если используешь типовые имена для переменных (документ, реквизит и пр.), то добавляй (например) "м" (мДокумент, мРеквизит). |
|||
83
Одинесю
26.04.16
✎
15:56
|
(82) Я посмотрел - красным не выделено, ну да ладно, приму к сведению.
|
|||
84
Одинесю
26.04.16
✎
16:03
|
Для а = 0 по 10 Цикл
б = Документ.Значение.Реквизиты[а]; Запись.ЗаписатьАтрибут(Строка(б), Строка(Выборка.б)); //Запись.ЗаписатьАтрибут("Дата", Строка(Выборка.Дата)); //Запись.ЗаписатьНачалоЭлемента("ТабличнаяЧасть"); КонецЦикла; Что-то типа этого хочу. |
|||
85
Одинесю
26.04.16
✎
16:07
|
А если Выборка=Документы[Документ.Значение.Имя].Выбрать(ДатаС,ДатаПо);
в ТЗ, и тоже в тз и потом левым соединением? |
|||
86
Одинесю
26.04.16
✎
16:08
|
и тоже Для а = 0 по 10 Цикл
б = Документ.Значение.Реквизиты[а];* |
|||
87
singlych
26.04.16
✎
16:11
|
(84) ну такая же фигня.
ИмяРеквизита = Документ.Значение.Реквизиты[а].Имя; Запись.ЗаписатьАтрибут(ИмяРеквизита, Строка(Выборка[ИмяРеквизита]); тока учти, что - Дата и Номер находятся в коллекции СтандартныеРеквизиты - реквизитов может быть меньше 10 - реквизитов вообще может не быть |
|||
88
Одинесю
26.04.16
✎
16:15
|
(87) Проверки я сделаю, понимаешь, (ИмяРеквизита, Строка(Выборка[ИмяРеквизита]) вот здесь будет несовпадение, я в xml буду писать, допустим, Номер = Комментарий.
|
|||
89
singlych
26.04.16
✎
16:16
|
и загляни уже в СП в ОбъектМетаданных: Документ
|
|||
90
Одинесю
26.04.16
✎
16:16
|
(88) ааа, сейчас попробую, спс
|
|||
91
singlych
26.04.16
✎
16:17
|
(88) "допустим, Номер = Комментарий"
че? |
|||
92
Одинесю
26.04.16
✎
16:18
|
(90) Я угнал, что выборка-то у меня всю коллекцию реквизитов хранит, что это выборка документов.
|
|||
93
Одинесю
26.04.16
✎
16:36
|
Все хорошо, осталась ТЧ и проверки. Спасибо.
|
|||
94
Одинесю
26.04.16
✎
16:54
|
Как узнать тип реквизита, что он ссылочный?
|
|||
95
Одинесю
26.04.16
✎
18:24
|
Посмотрите, пожалуйста, кому не лень
Код с ТЧ и проверкой на границу массива, может можно что-то улучшить? |
|||
96
Одинесю
26.04.16
✎
18:24
|
Процедура КнопкаВыполнитьНажатие(Кнопка)
Запись=Новый ЗаписьXML; Запись.ОткрытьФайл("C:\Users\Lenovo\Documents\document.xml"); Запись.ЗаписатьОбъявлениеXML(); Запись.ЗаписатьНачалоЭлемента("Документы"); Для каждого ДокументВида из ВидыДокументов цикл Если ДокументВида.Пометка Тогда КоличествоРеквизитов = ДокументВида.Значение.Реквизиты.Количество(); КоличествоТЧ = ДокументВида.Значение.ТабличныеЧасти.Количество(); Если КоличествоРеквизитов >= 10 Тогда КоличествоРеквизитов = 10; КонецЕсли; Если КоличествоТЧ >= 0 Тогда КоличествоТЧ = 1; КонецЕсли; Запись.ЗаписатьНачалоЭлемента(Строка(ДокументВида)); Выборка=Документы[ДокументВида.Значение.Имя].Выбрать(ДатаС,ДатаПо); Пока Выборка.Следующий() Цикл Если Выборка.Проведен=Истина тогда Запись.ЗаписатьНачалоЭлемента(Строка(ДокументВида)); Для СчЦикла = 0 по КоличествоРеквизитов-1 Цикл Запись.ЗаписатьНачалоЭлемента(Строка(ДокументВида)); ИмяРеквизита = ДокументВида.Значение.Реквизиты[СчЦикла].Имя; Запись.ЗаписатьАтрибут(ИмяРеквизита, Строка(Выборка[ИмяРеквизита])); Запись.ЗаписатьКонецЭлемента(); КонецЦикла; КонецЕсли; КонецЦикла; Если КоличествоТЧ = 1 Тогда Для СчЦикла = 0 по КоличествоТЧ -1 Цикл //Для Каждого ТЧ Из ДокументВида.Значение.ТабличныеЧасти цикл Запись.ЗаписатьНачалоЭлемента(Строка(ДокументВида.Значение.ТабличныеЧасти[0])); //Запись.ЗаписатьАтрибут("Номенклатура", Строка(ТЧ.Номенклатура)); Запись.ЗаписатьКонецЭлемента(); КонецЦикла; КонецЕсли; Запись.ЗаписатьКонецЭлемента(); Запись.ЗаписатьКонецЭлемента(); КонецЕсли; КонецЦикла; Запись.ЗаписатьКонецЭлемента(); Запись.Закрыть(); Сообщить("выгружено!"); КонецПроцедуры Процедура ПриОткрытии() Для каждого ВидДока из Метаданные.Документы цикл Если ВидДока = Метаданные.Документы.ABCКлассификацияПокупателей или ВидДока = Метаданные.Документы.АвансовыйОтчет Тогда ВидыДокументов.Добавить(ВидДока, ,Истина); Иначе ВидыДокументов.Добавить(ВидДока, ,Ложь); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
97
Господин ПЖ
26.04.16
✎
18:28
|
тока не говори что ты весь день убил на это
|
|||
98
Одинесю
26.04.16
✎
18:29
|
(97) Да и пока еще не закончил.
|
|||
99
Одинесю
26.04.16
✎
18:36
|
Теперь здесь
Если КоличествоТЧ = 1 Тогда Для СчЦикла = 0 по КоличествоТЧ -1 Цикл Запись.ЗаписатьНачалоЭлемента(Строка(ДокументВида.Значение.ТабличныеЧасти[0])); Запись.ЗаписатьКонецЭлемента(); КонецЦикла; КонецЕсли; мне надо выгрузить всю ТЧ, еще один цикл, подскажите? |
|||
100
4St
26.04.16
✎
22:29
|
(48) Присоединюсь к вопросу. Пару лет назад я решал очень похожее задание при приеме на работу.
|
|||
101
romix
27.04.16
✎
00:26
|
Я бы запрос формировал через метаданные. Раз скорость хотят.
|
|||
102
H A D G E H O G s
27.04.16
✎
00:29
|
Жесть какая-то.
Че там делать то? |
|||
103
romix
27.04.16
✎
00:31
|
А или действительно штатную сериализацию как тут выше предложили, а получение наименований кешировать через общий модуль.
|
|||
104
H A D G E H O G s
27.04.16
✎
00:32
|
Функция ПреобразоватьВXDTO(МассивСсылок, Параметры) Экспорт
ИспользоватьFastInfoset=Параметры.ИспользоватьFastInfoset; ЗаписыватьВФайл=Параметры.ЗаписыватьВФайл; Сериализатор=Новый СериализаторXDTO(ФабрикаXDTO); Если ИспользоватьFastInfoset Тогда ЗаписьXML_FastInfoset=Новый ЗаписьFastInfoset; Иначе ЗаписьXML_FastInfoset=Новый ЗаписьXML; КонецЕсли; ИмяФайла=ПолучитьИмяВременногоФайла("xml"); Если ЗаписыватьВФайл и ИспользоватьFastInfoset=Ложь Тогда ЗаписьXML_FastInfoset.ОткрытьФайл(ИмяФайла); ИначеЕсли ИспользоватьFastInfoset Тогда ЗаписьXML_FastInfoset.УстановитьДвоичныеДанные(); Иначе ЗаписьXML_FastInfoset.УстановитьСтроку(); КонецЕсли; ЗаписьXML_FastInfoset.ЗаписатьОбъявлениеXML(); МассивОбъектов=Новый Массив; ЗаписьXML_FastInfoset.ЗаписатьНачалоЭлемента("Objects"); ЗаписьXML_FastInfoset.ЗаписатьСоответствиеПространстваИмен("cc","http://v8.1c.ru/8.1/data/enterprise/current-config"); ЗаписьXML_FastInfoset.ЗаписатьСоответствиеПространстваИмен("xls","http://www.w3.org/2001/XMLSchema"); ЗаписьXML_FastInfoset.ЗаписатьСоответствиеПространстваИмен("xli","http://www.w3.org/2001/XMLSchema-instance"); РегистрМенеджер=Неопределено; Если Параметры.Свойство("ТипРегистра") и Параметры.ТипРегистра<>0 Тогда Если Параметры.ТипРегистра=1 Тогда РегистрКласс=РегистрыСведений; КонецЕсли; РегистрМенеджер=РегистрКласс[Параметры.ИмяРегистра]; РегистрНаборЗаписей=РегистрМенеджер.СоздатьНаборЗаписей(); КонецЕсли; Для Каждого Элемент Из МассивСсылок Цикл Если xmlТипЗнч(Элемент)=Неопределено Тогда МенеджерЗаписи=РегистрМенеджер.СоздатьМенеджерЗаписи(); ЗаполнитьЗначенияСвойств(МенеджерЗаписи,Элемент); МенеджерЗаписи.Прочитать(); Если МенеджерЗаписи.Выбран()=Ложь Тогда Продолжить; КонецЕсли; НоваяЗапись=РегистрНаборЗаписей.Добавить(); ЗаполнитьЗначенияСвойств(НоваяЗапись,МенеджерЗаписи); Иначе ТекущийОбъект=Элемент.ПолучитьОбъект(); ОбъектXDTO=Сериализатор.ЗаписатьXDTO(ТекущийОбъект); ТипОбъектаXDTO=ОбъектXDTO.Тип(); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML_FastInfoset, ОбъектXDTO); КонецЕсли; КонецЦикла; Если РегистрМенеджер<>Неопределено Тогда ОбъектXDTO=Сериализатор.ЗаписатьXDTO(РегистрНаборЗаписей); ТипОбъектаXDTO=ОбъектXDTO.Тип(); ФабрикаXDTO.ЗаписатьXML(ЗаписьXML_FastInfoset, ОбъектXDTO); КонецЕсли; ЗаписьXML_FastInfoset.ЗаписатьКонецЭлемента(); Результат=ЗаписьXML_FastInfoset.Закрыть(); ЗаписьXML_FastInfoset=Неопределено; Если ЗаписыватьВФайл и ИспользоватьFastInfoset=Ложь Тогда Двоичные=Новый ДвоичныеДанные(ИмяФайла); Результат=ПоместитьВоВременноеХранилище(Двоичные,Новый УникальныйИдентификатор()); ИначеЕсли ИспользоватьFastInfoset Тогда Результат=ПоместитьВоВременноеХранилище(Результат,Новый УникальныйИдентификатор()); Иначе Результат=ПоместитьВоВременноеХранилище(Результат,Новый УникальныйИдентификатор()); КонецЕсли; Возврат Результат; КонецФункции Единственное Но. Вместо наименований ссылочных типов будут идентификаторы. Надо ДокументОбъект заменить Структурой, в которой ссылочные записи будут заменены наименованиями. Но это именно из-за глупости требований |
|||
105
Лодырь
27.04.16
✎
04:49
|
(104) Требования тут исключительно чтобы проверить наличие неких навыков. А не для того чтобы решить реальную задачу. Нормальная задачка.
|
|||
106
Одинесю
27.04.16
✎
08:40
|
(104) Спасибо, но, к сожалению в коде я не смогу разобраться быстро, ТЧ в своем варианте перенести не смог, не успеваю, придется сдаваться и признавать, что не справился.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |