Имя: Пароль:
1C
1С v8
Как импортировать движения документа?
0 Галахад
 
гуру
12.06.14
11:22
Есть две базы. Одна копия другой. Т.е. объекты идентичны.
Хочу перенести движения по одному регистру одного вида документов из одной базы в другую.
Обработку ВыгрузкаЗагрузкаДанныхXML использовать не хочу.

Посоветуйте как можно сделать.
Если бы мне нужно было перенести объект я сделал так:

ЗаписьXML=Новый ЗаписьXML();
ЗаписьXML.ОткрытьФайл("c:\doc.xml");
ЗаписьXML.ЗаписатьНачалоЭлемента("Root");

ВыгружаемыйОбъект=Документ.ПолучитьОбъект();

ЗаписатьXML(ЗаписьXML,ВыгружаемыйОбъект);

ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();

А как движения переносят?
1 iHell
 
12.06.14
11:25
(0) хм, провести ?
2 Галахад
 
гуру
12.06.14
11:27
(1) Это долго.
3 Enders
 
12.06.14
11:32
(0) Регистр накопления всегда подчинен регистратору, так что документы делающие движения по этому регистру надо будет всё равно переносить.
Так что переносишь документы, проводишь, профит.
4 Галахад
 
гуру
12.06.14
11:38
(3) Объекты (документы) уже есть. Мне нужны движения по одному из регистров.
5 shuhard
 
12.06.14
11:39
(4) значит тебе нужно выгрузить в xml набор записей Рг с отбором по регистратору - разве это не очевидно ?
6 shuhard
 
12.06.14
11:40
(5) +1
Доступность:

Сервер, толстый клиент, внешнее соединение.
Данный объект может быть сериализован в/из XML. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/enterprise/current-config}. Имя типа XDTO: AccumulationRegisterRecordSet.
7 dj_serega
 
12.06.14
11:41
(5) с отбором по регистраторам :)
8 shuhard
 
12.06.14
11:46
(7) ну это не важно
переберёт ли ТС все документы или все регистраторы в движухах Рг

файлик то будет тот же самый
9 Stolen Dime
 
12.06.14
11:54
(0)переносил как то движения по вводу остатков чтобы каждый раз документы не тягать.
Может пригодится

        
        Запрос=Новый Запрос;
        Запрос.Текст="ВЫБРАТЬ
        |    ОперацияБух.Ссылка
        |ИЗ
        |    Документ.ОперацияБух КАК ОперацияБух
        |ГДЕ
        |    ОперацияБух.Комментарий ПОДОБНО ""%Сформирован обработкой свертки базы%""
        |    И ОперацияБух.Дата >= &Нач2014 И &Пар1
        |
        |ОБЪЕДИНИТЬ
        |
        |ВЫБРАТЬ
        |    Кор.Ссылка
        |ИЗ
        |    Документ.КорректировкаЗаписейРегистров КАК Кор
        |ГДЕ
        |    Кор.Комментарий ПОДОБНО ""%Сформирован обработкой свертки базы%""
        |    И Кор.Дата >= &Нач2014  И &Пар2";
        Запрос.УстановитьПараметр("Нач2014",'20140101000000');
        Если НЕ ЗначениеЗаполнено(Фильтр) Тогда
            Запрос.Текст=СтрЗаменить(Запрос.Текст," И &Пар1","");
            Запрос.Текст=СтрЗаменить(Запрос.Текст," И &Пар2","");
        Иначе
            Запрос.Текст=СтрЗаменить(Запрос.Текст," И &Пар1"," И ОперацияБух.Ссылка=&Фильтр");
            Запрос.Текст=СтрЗаменить(Запрос.Текст," И &Пар2"," И Кор.Ссылка=&Фильтр");
            Запрос.УстановитьПараметр("Фильтр",Фильтр);
            
        КонецЕсли;    
        тРез=Запрос.Выполнить().Выгрузить();
        тДанные.Колонки.Очистить();
        тДанные.Колонки.Добавить("Док");
        тДанные.Колонки.Добавить("тНабор");
        тШаблон=Новый  ТаблицаЗначений;
        тШаблон.Колонки.Добавить("Имя");
        тШаблон.Колонки.Добавить("ПолноеИмя");
        тШаблон.Колонки.Добавить("тДвижения");
        //Возврат;
        Для каждого Стр Из тРез Цикл
            Нов=тДанные.Добавить();
            Нов.Док=Стр.Ссылка;
            Нов.тНабор=тШаблон.Скопировать();
            ОБ=Стр.Ссылка.ПолучитьОбъект();
            Для каждого Дв Из Об.Движения Цикл
                Имя=Дв.Метаданные().Имя;
                ПолноеИмя=дв.Метаданные().ПолноеИмя();            
                Если Найти(ПолноеИмя,"РегистрНакопления")>0 Тогда
                    Набор=РегистрыНакопления[Имя].СоздатьНаборЗаписей();
                ИначеЕсли Найти(ПолноеИмя,"РегистрСведений")>0 Тогда
                    Набор=РегистрыСведений[Имя].СоздатьНаборЗаписей();
                ИначеЕсли Найти(ПолноеИмя,"РегистрБухгалтерии")>0 Тогда    
                    Набор=РегистрыБухгалтерии[Имя].СоздатьНаборЗаписей();
                КонецЕсли;    
                Набор.Отбор.Регистратор.Установить(Стр.Ссылка);
                Набор.Прочитать();
                Если Набор.количество()>0 Тогда
                    НовНабор=Нов.тНабор.Добавить();
                    НовНабор.ИМя=Имя;
                    НовНабор.ПолноеИмя=ПолноеИмя;
                    НовНабор.тДвижения=Набор.Выгрузить();
                    Сообщить(""+Стр.Ссылка+".Выгружено("+ПолноеИмя+")  "+Набор.количество());
                КонецЕсли;    
                
            КонецЦикла;    
        КонецЦикла;    
        ЭлементыФормы.тДанные.СоздатьКолонки();
        ЗначениеВФайл(ПутьКФайлу,тДанные);
        Сообщить("Записано в "+ПутьКФайлу);
10 Stolen Dime
 
12.06.14
11:54
+только документы в базе приемнике уже должны быть.А то быитые ссылки вместо регистраторов получишь
11 Галахад
 
гуру
12.06.14
11:55
Всем спасибо. Так написал:

    ИмяФайла = КаталогВременныхФайлов() + "doc.xml";
    
    ЗаписьXML=Новый ЗаписьXML();
    
    ЗаписьXML.ОткрытьФайл(ИмяФайла);
    ЗаписьXML.ЗаписатьНачалоЭлемента("Root");
    
    Для каждого НаборЗаписей Из СсылкаНаОбъект.ПолучитьОбъект().Движения Цикл
        Если ТипЗнч(НаборЗаписей) = Тип("РегистрНакопленияНаборЗаписей.ТоварыВРознице") ИЛИ
             ТипЗнч(НаборЗаписей) = Тип("РегистрНакопленияНаборЗаписей.ТоварыНаСкладах") Тогда
            
            НаборЗаписей.Прочитать();
            ЗаписатьXML(ЗаписьXML,НаборЗаписей);
        КонецЕсли;
    КонецЦикла;
    
    ЗаписьXML.ЗаписатьКонецЭлемента();
    ЗаписьXML.Закрыть();