Имя: Пароль:
1C
1С v8
Вопрос по конвертации
0 serg-lom89
 
17.01.18
10:49
добрый день
Вопрос по конвертации
В базе источник есть реквизит у документа ПКО контрагент(составной тип)
В базе приемник добавил реквизит  Касса_ККМ.(типы естественно не совпадают).

будьте добры подскажите как конвертации указать что бы подставлялось определенно значение в базе приемник? (слабо "шарю" по конвертации поэтому прошу помощи).
1 Рэйв
 
17.01.18
10:53
В ПослеЗагрузки анализируй Объект и заполняй как надо
2 Рэйв
 
17.01.18
10:53
или ты просто из Контрагента в Кассы гонишь данные что ли?
3 serg-lom89
 
17.01.18
11:01
(2) ну что то типо того)
там составной тип.
Я хочу что бы этот реквизит при заполнении в базе источника и при "переброске" в базу приемник подставлялось значение определенное.
4 serg-lom89
 
17.01.18
11:03
Контрагента это название реквизита просто.)
5 thobise
 
17.01.18
11:06
Явно указать правила конвертации свойств для каждого типа.
Читать справку
6 Мандалай
 
17.01.18
11:22
Если заранее значение извествно, то ПослеЗагрузки пишешь: Объект.НужныйРеквизит = НужноеЗначение.
Возможно еще и Объект.Записать() потребуется.
7 serg-lom89
 
17.01.18
11:31
(6) а как указать это значение при выгрузке из источника?
8 serg-lom89
 
17.01.18
11:35
вопрос такой еще
если в ПКО ,перед выгрузкой ВходящиеДанные есть структура
Как мне ее потом прочитать при загрузке в базу приемник?
9 serg-lom89
 
17.01.18
11:38
(8)если бы можно было прочитать структуру тогда может и получилось ..
10 Zakarum
 
17.01.18
12:07
(8) Этого сделать нельзя. При загрузке ты имеешь дело с готовым XML-файлом с выгруженными данными. В нем содержатся твои объекты в виде их моделей XML, так сказать, а также алгоритмы обработчиков ПередЗагрузкой(), ПриЗагрузке(), ПослеЗагрузки(), если ты их используешь конечно.
Если в загружаемом объекте тебе нужно изменить значение реквизита у объекта найденного или создаваемого, делаешь это как в (6).
Чтобы получить это значение при выгрузке из источника, как вариант можно в обработчике ПриВыгрузке() проделать нужные манипуляции с данными. Посмотри для этого справку - есть хорошая кнопка в самом верху окна КД, "Информация по обработчикам". Становишься на нужный обработчик, нажимаешь эту кнопку и читаешь что тебе доступно в данном обработчике.
11 serg-lom89
 
17.01.18
12:25
почитал справку

Есть
ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры переденные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено.



получается если я перед выгрузкой передам какое значение параметра потом смогу его после загрузки прочитать.
а как указать этот параметр при выгрузке?
12 Zakarum
 
17.01.18
12:42
(11)Да, действительно, дополнительные данные по объекту можно передать в обработчике "После Выгрузки В Файл":

"Событие выполняется после выгрузки объекта в файл обмена. Может быть использован для выгрузки дополнительной информации по выгруженному объекту в файл обмена. При этом информация будет записана в файл обмена после выгруженного объекта."

смотри здесь: v8: Конвертация данных - ПКО - ПослеЗагрузки - переменная ПараметрыОбъекта
13 mistеr
 
17.01.18
12:47
(3) Если значение предопределенное, то в ПКС пишешь строку с именем. Если нет, то можно так:

  Выражение = "Справочники.КассыОрганизации.НайтиПоКоду("КОД")"
14 serg-lom89
 
17.01.18
13:08
(12)
а можно чуть по подбробнее
я в ПКО вставил код
События = Новый Соответствие;
События.вставить("КодКассы","А00000092");


И в ПКО добавил загрузки добавил

Если  ПараметрыОбъекта <>неопределено тогда
    Объект.касса_ККМ =справочники.кассы.найтиПоКоду("А00000092");
    Объект.записать();
конецЕсли;

Но ничего не поменялось(
15 serg-lom89
 
17.01.18
13:11
что я делаю не так?
16 serg-lom89
 
17.01.18
13:11
я добавил в ПКО только это больше ничего не добавлял
17 mistеr
 
17.01.18
13:13
(14) КодКассы сделай параметром.

В ПКС ПередВыгрузкой пиши:

  Выражение = "Справочники.Кассы.НайтиПоКоду(" + Параметры.КодКассы +")"
18 mistеr
 
17.01.18
13:13
(16) Внимательно читай, что тебе пишут.
19 serg-lom89
 
17.01.18
13:33
(18) сорри за назойливость просто 2 -ой раз только с конвертацией сталкиваюсь.
ПКО
https://ibb.co/m9ybCR
ПКС
https://ibb.co/frG2mm

все равно прошу помощи
20 serg-lom89
 
17.01.18
13:40
что я все таки делаю не так в конвертации?
извините за назойливость!)
21 youalex
 
17.01.18
13:44
(11) В ПКС - есть галка Передавать в Параметр. И поле ИмяПараметра.
22 serg-lom89
 
17.01.18
13:46
передавать даные в параметр я указал
имя задал События
23 serg-lom89
 
17.01.18
13:52
(22) но почему то все равно не работает.
24 youalex
 
17.01.18
13:53
Теперь можешь ловить его в ПКО, событие ПослеЗагрузкиОбъекта.
25 Мандалай
 
17.01.18
13:53
Ищи Бояркина - мануал по конвертации. там все описано.
26 youalex
 
17.01.18
13:56
(19) тебе здесь не Выражение нужно, а "Значение = ", если через Параметр делаешь.
27 serg-lom89
 
17.01.18
13:57
(25) да,надо..кинули в бой без подготовки)
28 Skylark
 
17.01.18
15:13
Для составного типа надо что-то вроде вот этого в событии "ПередВыгрузкой" в правиле конвертации свойства которое имеет составной тип:

Если ОбъектКоллекции.СубконтоДт1 = "По всем работникам" Тогда
    ИмяПКО = "ПоВсемРаботникам";
ИначеЕсли ТипЗнч(ОбъектКоллекции.СубконтоДт1) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
    ИмяПКО = "ФизическиеЛица";
ИначеЕсли ТипЗнч(ОбъектКоллекции.СубконтоДт1) = Тип("СправочникСсылка.Контрагенты") Тогда
    ИмяПКО = "Контрагенты";
ИначеЕсли ТипЗнч(ОбъектКоллекции.СубконтоДт1) = Тип("СправочникСсылка.Субконто") Тогда
    // отдельная обработка справочника субконто
    Если ЗначениеЗаполнено(ОбъектКоллекции.СчетДт) Тогда
        ВидыСубконто = ОбъектКоллекции.СчетДт.ВидыСубконто;
        Если ВидыСубконто.Количество() >= 1 Тогда
            ВремИмяПКО = Данные.СоответствиеПравилКонвертацииВидовСубконто.Получить(ВидыСубконто[0].ВидСубконто);
            Если ЗначениеЗаполнено(ВремИмяПКО) Тогда
                ИмяПКО = ВремИмяПКО;
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;
29 Skylark
 
17.01.18
15:14
Ну и соответственно для каждого типа создать правила конвертации