|   |   | 
| 
 | Конвертация данных. ВыгрузитьПоПравилу | ☑ | ||
|---|---|---|---|---|
| 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 из ПКО Сотрудники и поставь галочку НеЗапоминатьВыгруженные так тебе проще.     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |