![]() |
|
Конвертация данных. ВыгрузитьПоПравилу | ☑ | ||
---|---|---|---|---|
0
Wefast
13.05.16
✎
16:57
|
Есть ПКО Сотрудник(Спр.Сотрудники => Спр.ФизическиеЛица)
Мне нужно помимо выгрузки сотрудников сделать запись в регистр сведений В обработчике приВыгрузке пишу СЗ = СоздатьОбъект("СписокЗначений"); СЗ.ДобавитьЗначение("ФизическоеЛицо",Источник); ВыгрузитьПоПравилу(,,СЗ,,"РолиФизическихЛиц"); Создаю ПКО РолиФизическихЛиц Делаю ПКС ФизическоеЛицо, ставлю получать из входящих данных. ПКО указываю СОтрудник. ПКС Роль. Приемник имеет тип перечисления. Пишу Значение = "МоеПеречисление" ПКС Организация. Пишу Значение = Константа.НазваниеОрганизации Мало того что ничего не работает кроме роли. Т.е. в регистре появляется запись где заполнена только Роль после чего вылетает с ошибкой. Так мне еще интересно как отрабатывает ПКС ФизическоеЛИцо если ПКО в нем указано то собственно откуда я все и вызвал. Разве это не рекурсия? |
|||
1
takefive
13.05.16
✎
17:19
|
Константа.НазваниеОрганизации.Получить()
это строка или ссылка? |
|||
2
Генератор
13.05.16
✎
17:20
|
может если пко называется из сотрудника в физлицо, то в СЗ надо все-таки сотрудника передавать а не физ лицо
|
|||
3
GANR
13.05.16
✎
19:32
|
(0) Рекомендую подглядеть в типовые правила конвертации. К примеру БП 1.0 -> БП 2.0. Там же переносится контактная информация по физ. лицам, а это регистр сведений.
|
|||
4
Franchiser
гуру
13.05.16
✎
20:04
|
ключ выгружаемых данных определил?
|
|||
5
Franchiser
гуру
13.05.16
✎
20:08
|
и еще если пишешь Значение = "МоеПеречисление" то не нужно указывать ПКО иначе оно будет по нему сконвентрировано
|
|||
6
Franchiser
гуру
13.05.16
✎
20:10
|
в качестве ключа можно указать сотрудника переданного через вх. данные
|
|||
7
Wefast
15.05.16
✎
03:40
|
(1) строка.
(2) как же я его передам, если в источнике нет физ лица, там сотрудник (4) можно подробнее? Не сталкивался |
|||
8
AneJIbcuH
15.05.16
✎
09:52
|
(0) Я так понял, после того, как ты выгрузил Сотрудника в ФизЛицо, в конечной базе тебе ещё необходимо создать запись в Регистре сведений.
По идее самый простой (может не самый производительный), это в обработчике "ПослеЗагрузки" определить программный текст создания записи в регистре сведений (Менеджером записи). А если хочешь записать один раз набором записи, например, то можно попробовать такую фишку использовать (предполагаю, не пробовал :) ): - В обработчике Конвертации: "Перед загрузкой данных", т.е. в самом начале загрузки в приемнике, определить Параметр: "Параметры.Вставить("СписокФизическихЛиц", Новый ТаблицаЗначений()); Параметры.СписокФизическихЛиц.Колонки.Добавить("ФизическоеЛицо");" - В обработчике Правила конвертации объекта (Наверное у тебя "Сотрудник") - "После загрузки объекта", заполнять ТЗ Физ лиц: "НайденнаяСтрока = Параметры.СписокФизическихЛиц.Найти(Объект); Если НайденнаяСтрока = Неопределено Тогда НоваяСтрока = Параметры.СписокФизическихЛиц.Добавить(); НоваяСтрока.ФизическоеЛицо = Объект; КонецЕсли;" Где Объект - Это загруженное физ лицо в конечную базу. - Итогом, В обработчике Конвертации "После загрузки данных" написать программный код формирования набора записей, где в Параметры.СписокФизическихЛиц у тебя будет ТЗ со всеми загруженными физ. лицами. |
|||
9
Wefast
15.05.16
✎
15:07
|
(8) пишу послезагрузки
Если НЕ ОбъектНайден Тогда Объект.Записать(); КонецЕсли; МЗ = РегистрыСведений.РолиФизическихЛиц.СоздатьМенеджерЗаписи(); МЗ.ФизическоеЛицо = Объект.Ссылка; МЗ.Роль = Перечисления.РолиФизическихЛиц.Акционер; МЗ.Организация = Справочники.Организации.НайтиПоНаименованию(Параметры.Организация); МЗ.Прочитать(); Если НЕ МЗ.Выбран() Тогда МЗ.ФизическоеЛицо = Объект.Ссылка; МЗ.Роль = Перечисления.РолиФизическихЛиц.Акционер; МЗ.Организация = Справочники.Организации.НайтиПоНаименованию(Параметры.Организация); МЗ.Записать(); КонецЕсли; Выдает ошибку: Ошибка при загрузке данных: {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1258)}: Ошибка в обработчике события ПослеЗагрузкиОбъекта ИмяПКО = Сотрудники ТипОбъекта = Физическое лицо Объект = Иванова ТАТЬЯНА Ивановна Обработчик = ПослеЗагрузкиОбъекта ОписаниеОшибки = Ошибка при вызове метода контекста (Записать): Запись не верна! Значение поля не соответствует установленному отбору: РолиФизическихЛиц: Иванова ТАТЬЯНА Ивановна, ОАО "Организация", Акционер, 3cca921d-35d9-4e25-946f-f5c1af11cedc (Регистр сведений: Роли физических лиц; Поле: ИдентификаторЗаписи) ПозицияМодуля = (15) КодСообщения = 21 |
|||
10
Wefast
15.05.16
✎
15:53
|
Добавил еще
МЗ.ИдентификаторЗаписи = Новый УникальныйИдентификатор; Все равно не помогло. |
|||
11
AneJIbcuH
16.05.16
✎
04:59
|
(9) Тут где-то ошибка в подстановке данных в самом уже коде. Сделай простенькую обработку, которая будет по выбранным данным делать запись в рег. сведений и отладь код в ней уже.
|
|||
12
Wefast
16.05.16
✎
08:01
|
(11) Я так и не понял что не так. Но при записи через набор записей все работает
|
|||
13
Wefast
16.05.16
✎
08:02
|
Хотя конечно хотелось бы понять что не так с ВыгрузитьПоПравилу т.к. дальше много работы по переносы между 7 и 8
|
|||
14
alkov
16.05.16
✎
08:19
|
А почему бы в ПВД не написать
ВыгрузитьПоПравилу(Объект,,,,"РолиФизическихЛиц"); |
|||
15
alkov
16.05.16
✎
08:20
|
(8) Хреновое предложение. В ПослеЗагрузки объект в базе ещё не записан, если он новый, поэтому отбора в РС по нему не будет. Используйте обработчики в ПВД
|
|||
16
AneJIbcuH
16.05.16
✎
09:15
|
(15) Мы легко его можем записать. Объект.Записать().
Ниже допишем: ОбъектМодифицирован = Ложь; |
|||
17
AneJIbcuH
16.05.16
✎
09:19
|
(14) А если объект тянется по ссылке?
|
|||
18
Wefast
16.05.16
✎
10:12
|
(14) не вышло же у меня по ВыгрузитьПоПравилу. Там что то еще сделать нужно, кажется что то связанное с КлючВыгружаемыхДанных, но что именно я не разобрался.
(15) Я написал Если Не объектнайден тогда Объект.Записать(); КонецЕсли; Тогда ссылка есть. (17) не очень понял, что имеется ввиду. |
|||
19
AneJIbcuH
16.05.16
✎
10:22
|
(18) Да это вопрос к уважаемому alkov, он предлагает через ПВД. Так вот если сотрудник, например, передается в конечную базу по ссылке, ПВД не срабатывает.
|
|||
20
Franchiser
гуру
21.05.16
✎
01:57
|
(18) Сделай еще одно ПКО Сотрудники2 из ПКО Сотрудники и поставь галочку НеЗапоминатьВыгруженные так тебе проще.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |