Имя: Пароль:
1C
1С v8
Конвертация данных 8 ->7.7 Периодические реквизиты
0 Wefast
 
07.08.19
10:15
Переношу справочник Сотрудники из 8 в 7.

В 7 есть реквизит состояние сотрудника, который периодический.

Если я просто переношу его то он записывается на текущую дату.

И к примеру сотрудник работает уже 100 лет, а в 7 он будто новый. Не порядок.
1 hhhh
 
07.08.19
10:21
(0) ну, правила где брал? напиши им, чтоб правила переделали.
2 xxTANATORxx
 
07.08.19
10:22
первая ссылка в яндексе https://helpf.pro/faq/view/306.html

//так мы узнаем, какая была у сотрудника
//категория на определенную дату
Катег = СпрСотр.Категория.Получить(НекаяДата);

//так мы установим сотруднику категорию
//на определенную дату
СпрСотр.Категория.Установить(НекаяДата, НоваяКатегория);

//можно установить дату выборки периодических
//реквизитов для всего справочника
СпрСотр.ИспользоватьДату(НекаяДата);

//тогда ниже уже нельзя использовать Установить и Получить
//доступ к периодическим реквизитам становится
//такой же, как к обычным реквизитам
Категор = СпрСотр.Категория;
СпрСотр.Оклад = 100;
3 Wefast
 
07.08.19
10:31
(1) сам пишу

(2) и что? в коде то ясно как, как в конвертации сделать?
Вот получить я перед выгрузкой дату на которую надо будет установить реквизит и само значение.

ПКС Источник - Приемник. Но куда дату то девать?
4 xxTANATORxx
 
07.08.19
10:42
(3)не помню на память обработчики в конвертации для семерки. Помотри чё там есть 'ПриЗагрузке' мошт
5 Wefast
 
07.08.19
10:47
(4) ну есть там всякие обработчики. Но откуда я при загрузке возьму нужную дату?
6 mc lammer
 
07.08.19
10:48
(3) ты же знаешь, что 8ке нет периодических реквизитов и их роль выполняют периодические регистры сведений?
тебе надо сделать выборку по истории реквизита в 7ке,  и перенести эти данные в соотв. РС в 8ке (если он существует)
7 Wefast
 
07.08.19
10:51
(6) я переношу из 8 в 7.

В семерку переношу

Из восьмерки.

Получил дату из регистра сведений. Получить значение реквизита.
8 mc lammer
 
07.08.19
10:55
(7) а блин.  ну тогда ответ в (2):

//на определенную дату
СпрСотр.Реквизит.Установить(НекаяДата, Знач);

или

СпрСотр.ИспользоватьДату(НекаяДата);
СпрСотр.Реквизит = Знач;
9 mc lammer
 
07.08.19
10:56
(7) или вопрос в том, как в 8ке получить значение реквизита ?    а дату как получал ?
10 takefive
 
07.08.19
11:04
11 Wefast
 
07.08.19
11:07
(9) я получил дату для реквизита 1 объекта. Куда мне ее деть чтобы я мог в обработчике ПриЗагрузке написать Объект.РеквизитМой.Установить(Дата,Знач)?
12 Wefast
 
07.08.19
11:08
т.е. это не какая то общая дата, которую в теории я могу в параметр поместить и получить на стороне приемника, но у меня у реквизита каждого объекта может быть своя дата
13 Wefast
 
07.08.19
11:11
ну вот пример
в 8:
Сотрудник1 принят на работу 01.01.2000г
Сотрудник2 принят на работу 12.12.2012г
Сотрудник3 принят на работу 07.08.2019г.

В 8 это запись в рс к примеру текущие данные сотрудника. Да. Вот он период из регистра, вот состояние "Работает"

Делаю ПКО Сотрудник -> Сотрудник
Делаю ПКС Состояние -> Состояние.

Состояние я вот могу перенести в состояние.

И в 7 все 3 сотрудника имеют состояние "Штатный сотрудник с 07.08.2019г"
14 Wefast
 
07.08.19
11:14
(10) вот это что то интересное, надо поковырятся, но пока сложно для понимания
15 Wefast
 
07.08.19
13:06
В ПКО, в обработчике ПослеВыгрузки пишу:

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


В обработчике ПриЗагрузке пишу:

УзлыПериодического = Узел.ВыбратьУзлы("СостояниеФизлицаДата");            
Для СчУзлов = 0 По УзлыПериодического.КоличествоУзлов-1 Цикл
    УзелПериодического = УзлыПериодического.ПолучитьУзел(СчУзлов);            
    Имя = УзелПериодического.ПолучитьАтрибут("Имя");
    Периодический = СоздатьОбъект("Периодический");
    Периодический.ИспользоватьОбъект("СостояниеФизлица", Объект);
    Выборка = УзелПериодического.ВыбратьУзлы("ПериодическоеЗначение");
    Для Сч = 0 По Выборка.КоличествоУзлов-1 Цикл
        УзелЗначения = Выборка.ПолучитьУзел(Сч);
        ДатаЗнач = УзелЗначения.ПолучитьАтрибут("ДатаЗнач");
        Значение = УзелЗначения.ПолучитьАтрибут("Значение");
        Если Значение = "ОсновноеМестоРаботы" Тогда
            Зн = Перечисление.СостояниеФизЛица.СотрудникОсновной;
        ИначеЕсли (Значение = "ВнутреннееСовместительство") ИЛИ (Значение="Совместительство") Тогда
            Зн = Перечисление.СостояниеФизЛица.СотрудникНеосновной;
        Иначе
            Зн = "";
        КонецЕсли;
        
        Периодический.ДатаЗнач = Дата(Сред(ДатаЗнач,9,2)+"."+Сред(ДатаЗнач,6,2)+"."+Лев(ДатаЗнач,4));
        Периодический.Значение = Зн;
        Периодический.Записать();
    КонецЦикла;
КонецЦикла;



Не очень понятно на сколько все будет правильно работать. Но при переносе одного сотрудника вроде что то записывает.

Но как видно реквизит СостояниеФИзЛица не проходит ни через какое правило конвертации. Только то что это перечисление и спасло.