Имя: Пароль:
1C
1С v8
Соответствия регистров
0 anikulnikova
 
18.04.16
21:05
Всем снова здравствуйте. За ранее прошу не нервничать по поводу недопонимания. Опыта мало.
Есть 2 базы УПП. В источнике заполняется Р.С. Работники организаций, данные этого регистра необходимо выгрузить, и создать движения по уже существующим документам в базе приемнике, но только с Р..С. Работники. В документах прием, увольнение, кадровое перемещение организаций добавлена возможность проведения по Р.С. Работники
Обработка с ком соединением есть, ее необходимо доработать. В первой процедуре (ЗагрузитьВсеНажатие) создаю набор записей со всеми регистраторами из Р.С. Работники организаций. Во вторую процедуру (СравнитьИсточникПриемникТЗ) Необходимо прописать соответсвие некоторых реквизитов, которые отличаются в этих двух регистрах. Это Подразделения и Должности (в Работниках организаций используются справочники с окончанием "Организаций", а в Р.С. Работники, соответственно без данных окончаний). Данные в этих справочниках одинаковы по коду и наименованию. ВОПРОС: Как можно задать соответствия для этих двух реквизитов? И добавить в базу уже в другой регистр движения. (Вопрос объемный, за любую помощь заранее спасибо ))))

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

Процедура  СравнитьИсточникПриемникТЗ()  //Набор,Регистратор
  
    Регистратор = ТаблицаРегистраторовКОМ[ИндексТаблицаРегистраторовКОМ].Ссылка;      
  
    Набор = Регистратор.Получитьобъект().Движения.РаботникиОрганизаций;
    Набор.Прочитать();
                
    ТаблицаНаборовКОМ=ЗначениеИЗСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Набор.Выгрузить()));
  
    // набор движений в базе приемнике //работает
    Запрос = Новый Запрос;
    Запрос.Текст =
  
// текст запроса

    Запрос.УстановитьПараметр("кПериода", ДатаОкончание);
    Запрос.УстановитьПараметр("нПериода", ДатаНачало);
    Запрос.УстановитьПараметр("РегистраторКОМ", ЗначениеИзСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(Регистратор)));
  
    Выборка= Запрос.Выполнить().Выбрать();
  
    Пока Выборка.Следующий() Цикл
        мДокумент=Выборка.Регистратор;
        Набор=Выборка.Регистратор.Получитьобъект().Движения.Налоговый;      
        Набор.Прочитать();
        ТаблицаНаборов=Набор.Выгрузить();
    КонецЦикла;  
  
  
    Если мДокумент = ЗначениеИЗСтрокиВнутр(Соединение.ЗначениеВСтрокуВнутр(ТаблицаРегистраторовКОМ[ИндексТаблицаРегистраторовКОМ].Ссылка)) Тогда
        //проверка на идентичность, записываем наборы различных
        ПолностьюИдентичны = СравнитьТаблицыЗначений(ТаблицаНаборовКОМ,ТаблицаНаборов);
        Если ПолностьюИдентичны <> истина  тогда
            Набор.Отбор.Регистратор.Установить(мДокумент);
            Набор.Загрузить(ТаблицаНаборовКОМ);        
            Набор.Записать();
            Сообщить("Обработан документ:"+""+мДокумент);
        иначе
            ПоместитьСледующийТЗ();
        КонецЕсли;    
    иначе  Сообщить("Документ: "+" "+ мДокумент + " "+" "+" в текущей базе не обнаружен");
        ПоместитьСледующийТЗ() ;
    КонецЕсли;
    ПоместитьСледующийТЗ() ;
  
КонецПроцедуры
1 Чайник Рассела
 
18.04.16
22:28
2 Fram
 
18.04.16
22:38
(0) Написать функцию, которая будет заменять наименования регистров после преобразования ЗначениеВСтрокуВнутр и вызывать ее вместо ЗначениеВСтрокуВнутр
3 anikulnikova
 
19.04.16
06:40
(2) как это сделать, с учетом, что а регистрах есть различные реквизиты. Это я про Подразделения и Должности