Книга знаний

1С:Предприятие / v8 / Приемы программирования / Встроенный язык

v8: КД, перенос свойств

Перенос реквизитов объектов из 77 в свойства в 8 с помощью конфигурации "Конвертация данных"Автор статьи: acsent | Редакторы:
Последняя редакция №10 от 21.05.08 | История
URL: http://kb.mista.ru/article.php?id=672

Ключевые слова: Конвертация, КД, свойства, перенос


ПВД
ВходящиеДанные = СоздатьОбъект("СписокЗначений");

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

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

ПКО «ЗначенияСвойствОбъектов»

ПКС «Объект», ПолучатьИзВходящихДанных
Событие "Перед выгрузкой"
ОбъектИсточник = ВходящиеДанные.Получить("Объект");
НазначениеСвойства = ВходящиеДанные.Получить("НазначениеСвойства");

Если ТипЗначенияСтр(ОбъектИсточник) = "Справочник" Тогда
    // В типовых правилах Бух77 > БП8 определено несколько правил для
    // контрагентов и договоров 
    Если ОбъектИсточник.Вид() = "Контрагенты" Тогда
        ИмяПКО = "Контрагенты";
    ИначеЕсли ОбъектИсточник.Вид() = "Договоры" Тогда
        ИмяПКО = "ДоговорыКонтрагентов";
    Иначе
        
        ИмяПКО = "";
        Номер = НайтиПравило(ОбъектИсточник, ИмяПКО);
        
        Если Номер > 0 Тогда
            ИмяПКО = мТаблицаПравилКонвертацииОбъектов.ПолучитьЗначение(Номер, "Код");
        КонецЕсли;
        
    КонецЕсли;
    
КонецЕсли;

ПКС "Свойство", правило "СвойстваОбъектов", ПолучатьИзВходящихДанных
Событие "Перед выгрузкой"
ИсходящиеДанные = ВходящиеДанные;

ПКС "Значение", правило "ЗначенияСвойствОбъектов_Значения", ПолучатьИзВходящихДанных
Событие "Перед выгрузкой"
ИсходящиеДанные = ВходящиеДанные;

Если ПустоеЗначение(ВходящиеДанные.Получить("ТипПриемника")) = 0 Тогда
    
    ТипПриемника = ВходящиеДанные.Получить("ТипПриемника");
    ИмяПКО = "";
    Номер = НайтиПравило(ВходящиеДанные.Получить("Значение"), ИмяПКО);
    
    Если Номер > 0 Тогда
        ИмяПКО = мТаблицаПравилКонвертацииОбъектов.ПолучитьЗначение(Номер, "Код");
    КонецЕсли;
    
Иначе
    // Для чисел, дат и строк
    ТипПриемника = ТипЗначенияСтр(ВходящиеДанные.Получить("Значение"));
    ИмяПКО = "";
    
КонецЕсли;


// Конвертация произвольных значений в справочник "ЗначенияСвойствОбъектов"
ПКО "ЗначенияСвойствОбъектов_Значения"

ПКС "Владелец", ПолучатьИзВходящихДанных, Поиск
Событие "Перед выгрузкой"
Значение = ВходящиеДанные.Получить("Свойство");
ИсходящиеДанные = ВходящиеДанные;

ПКС "Наименование", Поиск
Событие "Перед выгрузкой"
Значение = Строка(Источник);

ПКО "СвойстваОбъектов"

ПКС "НазначениеСвойства", ПолучатьИзВходящихДанных, Поиск

ПКС "Наименование", Поиск
Событие "Перед выгрузкой"
Значение = Источник;


Демопример для Бух77 > УТ10.3
http://acsent.nm.ru/files/others/PerenosSvoistv.zip

P.S. Желающие более подбробно изучить КД могут почитать книгу
4601546049094 "1С:Предприятие 8. Конвертация данных: обмен данным между прикладными решениями"
Издательство 1С-Питер. 195 стр + CD с примерами и конфигурацией.

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика