Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:32

Перенос данных по com соединению

Автор 19yellow92, 17 апр 2016, 10:24

0 Пользователей и 1 гость просматривают эту тему.

19yellow92

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

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


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

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


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

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

Hedinnk

Для создания записи в регистре с подчинением регистратору, наличие в базе реально существующего документа обязательно. Без создания документа тут не обойтись
Добавлено: 17 апр 2016, 10:48


И ещё, у регистров сведений не может быть движений

19yellow92

Цитата: Hedinnk от 17 апр 2016, 10:41
Для создания записи в регистре с подчинением регистратору, наличие в базе реально существующего документа обязательно. Без создания документа тут не обойтись
Добавлено: 17 апр 2016, 10:48


И ещё, у регистров сведений не может быть движений

А если я в кадровых документах добавлю регистратор Р.С. Работники? И при создании или изменении этих документов, соответсвеннол будут добавляться новые записи в этом регистре? Тогда как предыдущие записи добавить, без перепроведения документов?

Hedinnk


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск