Имя: Пароль:
1C
1С v8
КД. Переопределить реквизит
0 kirillkr
 
02.08.16
11:37
Добрый день. Помогите, наверно, с простым вопросом. Есть правила по переносу данных из УАТ 3.0 в УАТ 2.0.
В выгрузке пластиковых карт есть выгрузка свойства КомуВыдана
<1c>
                    <Свойство>
                        <Код>3</Код>
                        <Наименование>КомуВыдана --&gt; КомуВыдана</Наименование>
                        <Порядок>150</Порядок>
                        <Источник Имя="КомуВыдана" Вид="Реквизит"/>
                        <Приемник Имя="КомуВыдана" Вид="Реквизит"/>
                        <ПередВыгрузкой>Если ТипЗнч(Источник.КомуВыдана) = Тип("СправочникСсылка.ОсновныеСредства") Тогда
    ИмяПКО = "ОС_иРСПервоначальныеСведения_В_уатТС_НЕиспВВыгДанн";
ИначеЕсли ТипЗнч(Источник.КомуВыдана) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
    ИмяПКО = "уатСотрудники_ФизЛицаИВодители_В_Сотрудники";
КонецЕсли;</ПередВыгрузкой>
                    </Свойство>
</1c>
Все бы хорошо, но у нас внесли изменения для хранения истории кому принадлежит карточка и для получения актуально владельца используется запрос
<1c>
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                    |    МестонахождениеТопливныхКартСрезПоследних.ТопливнаяКарта КАК Карта,
                    |    МестонахождениеТопливныхКартСрезПоследних.ТранспортноеСредство КАК ТС
                    |ИЗ
                    |    РегистрСведений.МестонахождениеТопливныхКарт.СрезПоследних(&ДатаСреза, ТопливнаяКарта = &ТопливнаяКарта) КАК МестонахождениеТопливныхКартСрезПоследних
                    |ГДЕ
                    |    МестонахождениеТопливныхКартСрезПоследних.ТопливнаяКарта = &ТопливнаяКарта
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |    МестонахождениеТопливныхКартСрезПоследних.Период УБЫВ";
    
    Запрос.УстановитьПараметр("ТопливнаяКарта", Карта);
    Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());
</1c>

Я переделал правила на получение свойства
<1c>
                    <Свойство>
                        <Код>3</Код>
                        <Наименование>КомуВыдана --&gt; КомуВыдана</Наименование>
                        <Порядок>150</Порядок>
                        <Источник Имя="КомуВыдана" Вид="Реквизит"/>
                        <Приемник Имя="КомуВыдана" Вид="Реквизит"/>
                        <ПередВыгрузкой>
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
                    |    МестонахождениеТопливныхКартСрезПоследних.ТопливнаяКарта КАК Карта,
                    |    МестонахождениеТопливныхКартСрезПоследних.ТранспортноеСредство КАК ТС
                    |ИЗ
                    |    РегистрСведений.МестонахождениеТопливныхКарт.СрезПоследних(&amp;ДатаСреза, ТопливнаяКарта = &amp;ТопливнаяКарта) КАК МестонахождениеТопливныхКартСрезПоследних
                    |ГДЕ
                    |    МестонахождениеТопливныхКартСрезПоследних.ТопливнаяКарта = &amp;ТопливнаяКарта
                    |
                    |УПОРЯДОЧИТЬ ПО
                    |    МестонахождениеТопливныхКартСрезПоследних.Период УБЫВ";
    
    Запрос.УстановитьПараметр("ТопливнаяКарта", Источник);
    Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата());
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Если Выборка.Следующий() Тогда
        Значение = Выборка.ТС;
        Если ТипЗнч(Значение) = Тип("СправочникСсылка.ОсновныеСредства") Тогда
            ИмяПКО = "ОС_иРСПервоначальныеСведения_В_уатТС_НЕиспВВыгДанн";
        ИначеЕсли ТипЗнч(Источник.КомуВыдана) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
            ИмяПКО = "уатСотрудники_ФизЛицаИВодители_В_Сотрудники";
        КонецЕсли;
    КонецЕсли;</ПередВыгрузкой>
                    </Свойство>
</1c>
Но при выгрузке теперь учитывается само Значение, а не ИмяПКО. Как мне использовать правило ОС_иРСПервоначальныеСведения_В_уатТС_НЕиспВВыгДанн, но уже не для Источник.КомуВыдано, а для Выборка.ТС?
1 GenAcid
 
02.08.16
11:54
ВыгрузитьПоПравилу(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ИмяПКО, УзелСсылки, ТолькоПолучитьУзелСсылки, ПКО, ЭтоПравилоСГлобальнойВыгрузкойОбъектов, ВыборкаДляВыгрузкиДанных)
2 kirillkr
 
02.08.16
12:20
(1) Спасибо... Придумал другой вариант, возможно кому-то пригодится
В ПередВыгрузкой справочника ПластиковыеКарты добавил запрос и заполнение входящих данных

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

А само свойство переделал на это

                    <Свойство>
                        <Код>3</Код>
                        <Наименование>--&gt; КомуВыдана</Наименование>
                        <Порядок>150</Порядок>
                        <Источник Имя="" Вид=""/>
                        <Приемник Имя="КомуВыдана" Вид="Реквизит"/>
                        <ПолучитьИзВходящихДанных>true</ПолучитьИзВходящихДанных>
                        <ПередВыгрузкой>Если ТипЗнч(Источник.КомуВыдана) = Тип("СправочникСсылка.ОсновныеСредства") Тогда
    ИмяПКО = "ОС_иРСПервоначальныеСведения_В_уатТС_НЕиспВВыгДанн";
ИначеЕсли ТипЗнч(Источник.КомуВыдана) = Тип("СправочникСсылка.ФизическиеЛица") Тогда
    ИмяПКО = "уатСотрудники_ФизЛицаИВодители_В_Сотрудники";
КонецЕсли;</ПередВыгрузкой>
                    </Свойство>
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан