Имя: Пароль:
1C
1С v8
V8: Конвертация данных - правила выгрузки данных - произвольный алгоритм
0 JuliaSoft
 
08.04.14
13:25
Возникла необходимость выгрузить справочник Сотрудники организации (по выбранной организации на выбранную дату) из конфигурации УПП (старой) в другую конфигурацию УПП (чистую обновленную).
Загрузила структуры обоих конфигураций, создала новую конвертацию и добавила новое правило конвертации объектов для объекта Сотрудники организации. Нужна помощь/консультация в правильном написании произвольного алгоритма в правилах выгрузки данных.

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

Запрос.УстановитьПараметр("КонДата",КонДата));
Запрос.УстановитьПараметр("Организация",Организация);
ТЗ = Запрос.Выполнить().Выбрать();

ВходящиеДанные = Новый Структура(Актуальность,
ВалютаТарифнойСтавки,
ВидДоговора,
ВидЗанятости,
ВидРасчета,
ГрафикРаботы,
ГруппаВзносов,
ДатаДоговора,
ДатаНачала,
ДатаОкончания,
ДатаПриемаНаРаботу,
ДатаПриемаНаРаботуВКомпанию,
ДатаУвольнения,
ДатаУвольненияИзКомпании,
Должность,
ЗанимаемыхСтавок,
ИспытательныйСрок,
Код,
Наименование,
НомерДоговора,
ОбособленноеПодразделение,
Организация,
ОсновноеНазначение,
ПодразделениеОрганизации,
ПометкаУдаления,
ПостфиксНаименования ,
Родитель,
ТарифнаяСтавка,
ТарифныйРазряд,
ТекущаяДолжностьКомпании,
ТекущаяДолжностьОрганизации,
ТекущееПодразделениеКомпании,
ТекущееПодразделениеОрганизации,
Физлицо,
ЭтоГруппа);
Пока ТЗ.Следующий() Цикл
ВходящиеДанные.Актуальность = ТЗ.Актуальность;
ВходящиеДанные.ВалютаТарифнойСтавки = ТЗ.ВалютаТарифнойСтавки;
ВходящиеДанные.ВидДоговора = ТЗ.ВидДоговора;
ВходящиеДанные.ВидЗанятости = ТЗ.ВидЗанятости;
ВходящиеДанные.ВидРасчета = ТЗ.ВидРасчета;
ВходящиеДанные.ГрафикРаботы = ТЗ.ГрафикРаботы;
ВходящиеДанные.ГруппаВзносов = ТЗ.ГруппаВзносов;
ВходящиеДанные.ДатаДоговора = ТЗ.ДатаДоговора;
ВходящиеДанные.ДатаНачала = ТЗ.ДатаНачала;
ВходящиеДанные.ДатаОкончания = ТЗ.ДатаОкончания;
ВходящиеДанные.ДатаПриемаНаРаботу = ТЗ.ДатаПриемаНаРаботу;
ВходящиеДанные.ДатаПриемаНаРаботуВКомпанию = ТЗ.ДатаПриемаНаРаботуВКомпанию;
ВходящиеДанные.ДатаУвольнения = ТЗ.ДатаУвольнения;
ВходящиеДанные.ДатаУвольненияИзКомпании = ТЗ.ДатаУвольненияИзКомпании;
ВходящиеДанные.Должность = ТЗ.Должность;
ВходящиеДанные.ЗанимаемыхСтавок = ТЗ.ЗанимаемыхСтавок;
ВходящиеДанные.ИспытательныйСрок = ТЗ.ИспытательныйСрок;
ВходящиеДанные.Код = ТЗ.Код;
ВходящиеДанные.Наименование = ТЗ.Наименование;
ВходящиеДанные.НомерДоговора = ТЗ.НомерДоговора;
ВходящиеДанные.ОбособленноеПодразделение = ТЗ.ОбособленноеПодразделение;
ВходящиеДанные.Организация = ТЗ.Организация;
ВходящиеДанные.ОсновноеНазначение = ТЗ.ОсновноеНазначение;
ВходящиеДанные.ПодразделениеОрганизации = ТЗ.ПодразделениеОрганизации;
ВходящиеДанные.ПометкаУдаления = ТЗ.ПометкаУдаления;
ВходящиеДанные.ПостфиксНаименования  = ТЗ.ПостфиксНаименования;
ВходящиеДанные.Родитель = ТЗ.Родитель;
ВходящиеДанные.ТарифнаяСтавка = ТЗ.ТарифнаяСтавка;
ВходящиеДанные.ТарифныйРазряд = ТЗ.ТарифныйРазряд;
ВходящиеДанные.ТекущаяДолжностьКомпании = ТЗ.ТекущаяДолжностьКомпании;
ВходящиеДанные.ТекущаяДолжностьОрганизации = ТЗ.ТекущаяДолжностьОрганизации;
ВходящиеДанные.ТекущееПодразделениеКомпании = ТЗ.ТекущееПодразделениеКомпании;
ВходящиеДанные.ТекущееПодразделениеОрганизации = ТЗ.ТекущееПодразделениеОрганизации;
ВходящиеДанные.Физлицо = ТЗ.Физлицо;
ВходящиеДанные.ЭтоГруппа = ТЗ.ЭтоГруппа;
ВыгрузитьПоПравилу(,,ВходящиеДанные,,"СотрудникиОрганизаций");
КонецЦикла;

P.S. при попытке выгрузить данные с помощью унив выгр в формате хмл выдает сообщение об ошибке:
Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1593)}: Ошибка получения значения свойства объекта (по имени свойства источника)
ПКО                    =  СотрудникиОрганизаций  (Справочник: Сотрудники организаций)
ПКС                    =  18  (Код --> Код)
Объект                 =  01.01.2014 0:00:00  (Дата)
СвойствоПриемника      =  Код  (Строка)
ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8202)
КодСообщения           =  13
1 PLUT
 
гуру
08.04.14
13:37
(0) попробуй замени структуру на ТЗ

ВыборкаДанных = Новый ТаблицаЗначений;
ВыборкаДанных.Колонки.Добавить("Код");
...
2 JuliaSoft
 
08.04.14
13:38
сейчас попробую
3 JuliaSoft
 
08.04.14
13:45
не помагает
4 JuliaSoft
 
08.04.14
13:47
Ошибка получения значения свойства объекта (по имени свойства источника)
ПКО                    =  СотрудникиОрганизаций  (Справочник: Сотрудники организаций)
ПКС                    =  18  (Код --> Код)
Объект                 =  01.01.2014 0:00:00  (Дата)
СвойствоПриемника      =  Код  (Строка)
ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8202)
КодСообщения           =  13

Ошибка при выгрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1593)}: Ошибка получения значения свойства объекта (по имени свойства источника)
ПКО                    =  СотрудникиОрганизаций  (Справочник: Сотрудники организаций)
ПКС                    =  18  (Код --> Код)
Объект                 =  01.01.2014 0:00:00  (Дата)
СвойствоПриемника      =  Код  (Строка)
ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8202)
КодСообщения           =  13
5 PLUT
 
гуру
08.04.14
14:07
(4) а просто ссылку передать нельзя на сотрудника в ПКО?

ВыгрузитьПоПравилу(СсылкоНаСотрудника, , , , "СотрудникиОрганизаций");
6 JuliaSoft
 
08.04.14
14:15
(5) та же ошибка
7 PLUT
 
гуру
08.04.14
14:29
а блин, в ПВД для СотрудникиОрганизаций по произвольному алгоритму сделай ТЗ ВыборкаДанных, заполни ее результатом запроса

если у ПВД определено ПКО, то ВыгрузитьПоПравилу() не нужно писать

в ПКО в обормотчике ПередВыгрузкой еще КлючВыгружаемыхДанных определить

из справки: КлючВыгружаемыхДанных - Произвольный. По умолчанию - это ссылка на объект Источник, а если Источник неопределен, то используется ИмяПКО (подразумевается, что правило описывает в таком случае один объект-приемник). Данный параметр необходимо использовать если одному объекту источнику могут соответствовать несколько объектов приемника, например, в зависимости от входящих данных, или в случае, когда объект приемник полностью заполняется из входящих данных (например по результатам запроса), а объект источник, как таковой отсутствует.
AdBlock убивает бесплатный контент. 1Сергей