Имя: Пароль:
1C
 
Подскажите по тестовому заданию
,
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&quot;);
    ЗаписьXML_FastInfoset.ЗаписатьСоответствиеПространстваИмен("xls","http://www.w3.org/2001/XMLSchema&quot;);
    ЗаписьXML_FastInfoset.ЗаписатьСоответствиеПространстваИмен("xli","http://www.w3.org/2001/XMLSchema-instance&quot;);

    РегистрМенеджер=Неопределено;
    
    Если Параметры.Свойство("ТипРегистра") и Параметры.ТипРегистра<>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) Спасибо, но, к сожалению в коде я не смогу разобраться быстро, ТЧ в своем варианте перенести не смог, не успеваю, придется сдаваться и признавать, что не справился.