Имя: Пароль:
1C
1С v8
КД
0 MadHead
 
17.01.12
18:06
Требуется заполнить реквизит приемника на основании данных из источника.
Обычно в таких случаях я заполняю значение в исходящих данных в ПВД и ставлю галочку "Получать из входящих данных", но столкнулся с ситуацией когда объект выгружается по ссылке не явно(с другим объектом) тогда правила выгрузки не отрабатывают и соответственно нечего не работает.
Я в частности я переношу сотрудников из базы где данные о увольнении хранятся в регистре сведений в базе приемнике. Как в таком случае правильно переносить объект по ссылке?
1 cw014
 
17.01.12
18:07
Эммм, не совсем понял. А зачем ты входящие и исходящие данные трогаешь?
2 Rie
 
17.01.12
18:09
(0) В соответствующем ПКС соответствующего правила программно сформировать Значение - не оно?
3 cw014
 
17.01.12
18:10
Смотри, ты выгружаешь регистр сведений.

В ПКС для данного ПКО ты ставишь соответствия полей, и для ПКС Сотрудник->Сотрудник ставишь свое правило "Сотрудники". Нафиг тебе входящие и исходящие дынные?
4 echo77
 
17.01.12
18:11
В ПВД что-то переопределять - это не то.
5 cw014
 
17.01.12
18:12
(4) Зачем в ПВД что то переопределять? У тебя ПВД должен быть "РегистрСведений.ХХХ->РегистрСведений.ХХХ"
6 MadHead
 
17.01.12
18:18
(3) В Источнике имеется Справочник "Сотрудники", оттуда тяну реквизиты код и наименование и есть регистр сведений "РаботникиОрганизаций" оттуда тяну признак "уволен(актуальность)".
В приемнике есть справочник "Сотрудники" с 3-мя реквизитами "код, наименование, уволен(актуальность)". В приемнике нету регистра соответствующего регистру "РаботникиОрганизаций" приемника.
(4)(5) Вот такой код Запрос = Новый Запрос;

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

ИсходящиеДанные = Новый Структура("Актуальность",Актуальность);
7 Rie
 
17.01.12
18:21
(6) Создать ПКС для реквизита Актуальность.
Получить значение тем запросом, который приведен, только вместо
Запрос.УстановитьПараметр("Сотрудник",Объект);
написать
Запрос.УстановитьПараметр("Сотрудник",Источник);

и затем
Значение = ?(Выборка.Следующий(),Выборка.Актуальность,Ложь);
8 cw014
 
17.01.12
18:23
Погоди, ты сотрудников тянешь из регистра сведений в справочник?
9 cw014
 
17.01.12
18:24
Или все таки ты справочник сотрудников в справочник сотрудников грузишь?
10 MadHead
 
17.01.12
18:28
(8) я гружу справочник сотрудников в справочник сотрудников, только дополняю это все данными из регистра который есть только в источнике
11 MadHead
 
17.01.12
18:28
(7) Сейчас попробую
12 cw014
 
17.01.12
18:28
Если все таки (9) тогда убирай первый код у ПКО, отрубай "Получить из входящих данных" у свойства "Активность" а в ПКС прописать:

Срез = РегистрыСведений.РаботникиОрганизаций.СрезПоследних(, Новый Структура("Сотрудник", Источник.Ссылка);

Значение = ?(Срез.Количество()>0,Срез[0].ПричинаИзмененияСостояния = Перечислениz.ПричиныИзмененияСостояния.Увольнение,Ложь);
13 cw014
 
17.01.12
18:29
(11) делай как я говорю
14 cw014
 
17.01.12
18:29
(11) и будет тебе счастье
15 cw014
 
17.01.12
18:29
(12) ПеречислениЯ
16 MadHead
 
17.01.12
18:42
(12) в (7) примерно тоже самое и написано. Всем спасибо разобрался как в таком случае поступать
AdBlock убивает бесплатный контент. 1Сергей