Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Конвертация данных 8 ->7.7 Периодические реквизиты

Конвертация данных 8 ->7.7 Периодические реквизиты
Я
   Wefast
 
07.08.19 - 10:15
Переношу справочник Сотрудники из 8 в 7.

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

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

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

//так мы узнаем, какая была у сотрудника

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

//так мы установим сотруднику категорию

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

//можно установить дату выборки периодических

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

//тогда ниже уже нельзя использовать Установить и Получить

//доступ к периодическим реквизитам становится
//такой же, как к обычным реквизитам

Категор = СпрСотр.Категория;
СпрСотр.Оклад = 100;
   Wefast
 
3 - 07.08.19 - 10:31
(1) сам пишу

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

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

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

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

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

//на определенную дату

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

или 

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

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

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

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


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

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



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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.