Имя: Пароль:
1C
 
Конвертация данных. Прошу совета.
0 Пендальф Серый
 
25.09.08
12:41
В конфе приемнике есть справочник, которого нет в источнике. Этот справочник реально заполнить на основании разных объектов в источнике. Создаю правило конвертации объектов ПКО. Не указываю источник - только приемник. Создаю правило выгрузки объектов. Способ заполнения - произвольный алгоритм. Перед обработкой пишу
Выполнить(Алгоритмы.ЗаполнениеСотрудников)
Пишу алгоритм в котором задействую запрос. В результате запроса получаю таблицу из всех сотрудников. Дальше её перебирать циклом? Куда её помещать? Где-то смотрел, что создаётся таблица значений и в первую строку в ячейку помещается весь результат выборки. Или как?
Имена полей в запросе должны совпадать с свойствами приемника или не обязательно, и как тогда соответствия проставлять?
Когда выгружаю по созданному правилу - выходит ошибка:

Начало выгрузки:   25.09.2008 14:29:07

Начало обработки правила выгрузки данных:  СотрудникиОрганизаций  (СотрудникиОрганизаций)

   Выгрузка объекта выборки:  СтрокаТаблицыЗначений  (Строка таблицы значений)

       Конвертация объекта или получение ссылки:  СтрокаТаблицыЗначений  (Строка таблицы значений)
           ПКО     =  СотрудникиОрганизаций  ( --> СправочникСсылка.СотрудникиОрганизаций)

Ошибка получения свойства объекта из входящих данных
   ПКО                    =  СотрудникиОрганизаций  ( --> СправочникСсылка.СотрудникиОрганизаций)
   ПКС                    =  1  ( --> Код)
   Объект                 =  СтрокаТаблицыЗначений  (Строка таблицы значений)
   СвойствоПриемника      =  Код  (Строка)
   ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
   ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML(5487)
   КодСообщения           =  68

Ошибка получения свойства объекта из входящих данных
   ПКО                    =  СотрудникиОрганизаций  ( --> СправочникСсылка.СотрудникиОрганизаций)
   ПКС                    =  2  ( --> ЭтоГруппа)
   Объект                 =  СтрокаТаблицыЗначений  (Строка таблицы значений)
   СвойствоПриемника      =  ЭтоГруппа  (Булево)
   ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
   ПозицияМодуля          =  Обработка.УниверсальныйОбменДаннымиXML(5487)
   КодСообщения           =  68

Окончание выгрузки: 25.09.2008 14:40:21

Выгружено объектов: 1

Вобщем я в этом балбес. Может кто поможет?
Спасибо.
1 ТелепатБот
 
гуру
25.09.08
12:41
2 Пендальф Серый
 
25.09.08
12:54
(1) не помогло
3 Ashtray
 
25.09.08
12:59
Имена полей должны совпадать обязательно. Все запихивать в переменную "ВыборкаДанных" В ПВД надо указать "Произвольный алгоритм"
4 Черный всадник
 
25.09.08
13:00
(2)Отправь в правило строку ТЗ, при этом сними галочку запоминать объекты в свойствах правила.
5 Пендальф Серый
 
25.09.08
13:47
В алгоритме прописал следующее

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

то есть Стр это строка, где в колонке Сотрудники сидит результат выборки. Вот вопрос: название колонки я брал произвольно. может быть надо также как правило???
6 Пендальф Серый
 
25.09.08
14:27
{Обработка.УниверсальныйОбменДаннымиXML(5567)}: Поле объекта не обнаружено (Код)
                   Значение = Источник[ПКС.Приемник];

В приемнике Справочник.СотрудникиОрганизаций поле Код есть. Почему такая ошибка выходит?
7 hulio_ekb
 
25.09.08
15:11
Непонятно, что автору непонятно. По идее, все делается элементарно:
1. Создать правило конвертации объекта (пустой источник, заполненный приемник)
2. Создать правила конвертации свойств этого объекта
3. Создать правило выгрузки данных со способом выгрузки "Произвольный алгоритм".
4. В данном правиле прописать алгоритм "ПередОбработкой". Данный алгоритм должен сделать следующее: параметру "ВыборкаДанных" присвоить значение типа "ТаблицаЗначений". У этой таблицы сделать колонки с такими же именами, как и имена правил конвертации свойств объекта. Заполнить эту таблицу

Все. После этого все работает.

Что делаете вы:
первые три пункта правильные. 4-й пункт неверен (неверен сам алгоритм).

Надо примерно так:


Запросы.ЗапросПоСотрудникам.УстановитьПараметр("ДатаСреза",РабочаяДата);
Запросы.ЗапросПоСотрудникам.УстановитьПараметр("ПустаяДолжность",Справочники.ДолжностиОрганизаций.ПустаяСсылка());
Результат=Запросы.ЗапросПоСотрудникам.Выполнить();
ВыборкаДанных = Результат.Выгрузить(); // этот метод сам сформирует тебе таблицу значений с колонками, имена колонок которой будут совпадать с именами полей запроса
8 hulio_ekb
 
25.09.08
15:19
Добавлю в качестве примера:

Допустим, в приемнике имеется справочник "ИмяСправочника" с реквизитами "Реквизит1" и "Реквизит2". В источнике такого справочника нет, но необходимые данные для его заполнения имеются. Тогда делаем так:

1. Создаем ПКО "ИмяСправочника"
2. Для этого ПКО создаем два ПКС: "Реквизит1" и "Реквизит2"
3. Создаем ПВД "ИмяСправочника"
4. Прописываем такой алгоритм, который создаст и заполнит таблицу значений с колонками "Реквизит1" и "Реквизит2"
9 Пендальф Серый
 
25.09.08
15:40
(8) Можно ещё вопрос: в источнике есть свойство ФизЛицо (справочник.ФизЛица), в приемнике есть свойство ФизЛицо(справочник.ФизЛица) и свойство Сотрудник (тип справочник.Сотрудники). Как заполнить реквизит Сотрудник, если известно, что это сотрудник у которого реквизит ФизЛицо=ФизЛицо-источник. Где это прописать и как?
10 Пендальф Серый
 
25.09.08
15:42
Я понимаю, что надо найти запросом сотрудника с соответствующим ФизЛицом
Сотрудник.ФизЛицо=Источник.ФизЛицо, но где это прописать в каком обработчике?
11 Пендальф Серый
 
25.09.08
15:56
Простите за назойливость, но как написать, что при загрузке необходимо в базе-приемнике найти сотрудника с реквизитом = передаваемое ФизЛицо и заполнить свойство Сотрудник. В ПКС только три обработчика ПередВыгрузкой ПриВыгрузке ПослеВыгрузки. А как описать событие ПослеЗагрузки?
12 v_rtex
 
25.09.08
16:02
самопроизвольная конвертация данных