Имя: Пароль:
1C
1С v8
Перенос данных по com соединению
0 anikulnikova
 
17.04.16
10:18
Всем здравствуйте. Задача такая: Имеется 2 идентичные базы УПП. Необходимо перенести движения с Р.С.Работники организаций в Р.С.Работники (данный регистр не заполнялся, он пустой). Без создания документов. Есть аналогичная обработка, с переносом аналитики вроде.
Выгрузить набор регистраторов с базы источника вроде получилось. Загвоздка в том, чтоб загрузить теперь данные в приемник. Т.к. в данных регистрах есть такие реквизиты, как подразделения и должности. в которых используются 2 разных справочника: в первом Подразделения организаций и Должности организаций, во втором Подразделения и Должности. Данные справочники можно сравнить по коду и наименованию. Эти данные у них одинаковые. Только как можно это сделать???
Процедура по выгрузке регистраторов из исочника:

Процедура ЗагрузитьДанныеВТаблицы(Кнопка)    
    ТаблицаРегистраторовКОМ.Очистить();//загрузка наборов движений РСРаботникиОрганизации
    ИндексТаблицаРегистраторовКОМ = 0;
    
    База = Неопределено;
    Соединение = Неопределено;
    
    Если Не ПроверкаПодключения(База, Соединение) Тогда
        Возврат;
    КонецЕсли;
    
    Попытка
        ЗапросКОМ = Соединение.NewObject("Запрос");
        ЗапросКОМ.Текст =
        "ВЫБРАТЬ
        |   РаботникиОрганизаций.Регистратор.Ссылка КАК Регистратор,
        |   РаботникиОрганизаций.Регистратор.Представление КАК Представление
        |ИЗ
        |   РегистрСведений.РаботникиОрганизаций КАК РаботникиОрганизаций
        |ГДЕ
        |   РаботникиОрганизаций.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
        |
        |УПОРЯДОЧИТЬ ПО
        |   РаботникиОрганизаций.Регистратор.Дата
        |АВТОУПОРЯДОЧИВАНИЕ";
    
    ЗапросКОМ.УстановитьПараметр("ДатаНачала", ДатаНачало);
    ЗапросКОМ.УстановитьПараметр("ДатаОкончания", ДатаОкончание);
    
    ВыборкаКОМ = ЗапросКОМ.Выполнить().выбрать();

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

Остальные процедуры взяты из похожей обработки, они не изменены, если необходимы просто для примера и ознакомления:

Процедура СравнитьИсточникПриемник()  
    
    Регистратор = ТаблицаРегистраторовКОМ[ИндексТаблицаРегистраторовКОМ].Ссылка;        
    Представление = ТаблицаРегистраторовКОМ[ИндексТаблицаРегистраторовКОМ].Представление;
    Набор = Регистратор.Получитьобъект().Движения.Налоговый;
    Набор.Прочитать();
    
    ЭлементыФормы.ТаблицаДвиженийКОМ.Значение=ЗначениеИЗСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Набор.Выгрузить()));
    ЭлементыФормы.ТаблицаДвиженийКОМ.СоздатьКолонки();
    
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ ПЕРВЫЕ 1
    |   НалоговыйДвиженияССубконто.СчетДт,
    |   НалоговыйДвиженияССубконто.СчетКт,
    |   НалоговыйДвиженияССубконто.Регистратор.Ссылка КАК Регистратор
    |ИЗ
    |   РегистрБухгалтерии.Налоговый.ДвиженияССубконто(&нПериода, &кПериода, Регистратор = &РегистраторКОМ, , ) КАК НалоговыйДвиженияССубконто";
    
    Запрос.УстановитьПараметр("кПериода", ДатаОкончание);
    Запрос.УстановитьПараметр("нПериода", ДатаНачало);
    Запрос.УстановитьПараметр("РегистраторКОМ", ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Регистратор)));
    
    Выборка= Запрос.Выполнить().Выбрать();
    
    Пока Выборка.Следующий() Цикл
        мДокумент=Выборка.Регистратор;
        мДокументКОМ=  ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Представление));
        ДокументКОМ= ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Представление));
        Сообщить(  Выборка.Регистратор);
        Сообщить( "в удален.базе"+мДокументКОМ)  ;
        Набор =  Выборка.Регистратор.Получитьобъект().Движения.Налоговый;      
        Набор.Прочитать();
        ЭлементыФормы.ТаблицаДвижений.Значение=Набор.Выгрузить();
        ЭлементыФормы.ТаблицаДвижений.СоздатьКолонки();    
    КонецЦикла;
    
    ВизуальноеСравнение ();
    
КонецПроцедурЫ


Процедура загружает данные в приемник

Процедура  ЗагрузитьВсеНажатие(Элемент)
    
    Сообщить("Обработка запущена: "+ТекущаяДата()+", пожалуйста, дождитесь окончания. " );
                
    
    ТаблицаРегистраторовКОМ.Очистить();
    ИндексТаблицаРегистраторовКОМ = 0;
    
    База = Неопределено;
    Соединение = Неопределено;
    
    Если Не ПроверкаПодключения(База, Соединение) Тогда
        Возврат;
    КонецЕсли;
    
    Попытка
        ЗапросКОМ = Соединение.NewObject("Запрос");
        ЗапросКОМ.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |   НалоговыйДвиженияССубконто.Регистратор.Ссылка КАК Регистратор
        |ИЗ
        |   РегистрБухгалтерии.Налоговый.ДвиженияССубконто(
        |           &нПериода,
        |           &кПериода,
        |           СчетДт.Ссылка = &СчетОтбора
        |               ИЛИ СчетКт.Ссылка = &СчетОтбора,
        |           ,
        |           ) КАК НалоговыйДвиженияССубконто
        |
        |УПОРЯДОЧИТЬ ПО
        |   НалоговыйДвиженияССубконто.Регистратор.Дата";
        
        ЗапросКОМ.УстановитьПараметр("СчетОтбора",Соединение.ПланыСчетов.Налоговый.НайтиПоКоду(Счет.Код));
        ЗапросКОМ.УстановитьПараметр("нПериода", ДатаНачало);
        ЗапросКОМ.УстановитьПараметр("кПериода",ДатаОкончание);  
        
        ВыборкаКОМ = ЗапросКОМ.Выполнить().выбрать();      
        
        Пока ВыборкаКОМ.Следующий() Цикл
            НовыйРегистратор = ТаблицаРегистраторовКОМ.Добавить();
            НовыйРегистратор.Ссылка = ВыборкаКОМ.Регистратор;
        КонецЦикла;
        
    Исключение
        ТекстОшибки = СформироватьТекстСообщения(ОписаниеОшибки());
        Сообщить (ТекстОшибки);
        Предупреждение (ТекстОшибки);
        Отказ = Истина;
        Возврат
    КонецПопытки;  
    
    //если регистраторов больше 0
    Если ТаблицаРегистраторовКОМ.Количество() > 0 Тогда
        
        СравнитьИсточникПриемникТЗ();
    Иначе
        Сообщить("Не обнаружено объектов для записи!");
    КонецЕсли;
    Сообщить("Обработка завершена:  "+ТекущаяДата());  
    
    
КонецПроцедуры
1 Звездец
 
17.04.16
10:21
А зачем все это? 2 базы идентичные- значит используй обработку обмена xml. В этом случае даже правила не нужны
2 Tarzan_Pasha
 
17.04.16
10:59
(1)+  адский труд заменяется 5 минутами )
3 anikulnikova
 
17.04.16
20:30
(1) как можно записи регистра перенести? при этом учесть, что есть разные реквизиты в этих регистрах, но данные можно сравнить по наименованию и коду. Я думаю, что этот обмен не очень подойдет
4 hhhh
 
17.04.16
20:51
(3) как разные реквизиты? Ты же написал: две идентичные  базы УПП.
5 Звездец
 
17.04.16
21:05
И вообще движения лучше не переносить, их сделают перенесённые документы
Ошибка? Это не ошибка, это системная функция.