Имя: Пароль:
1C
1С v8
КД2 из обычного элемента в предопределенный
, ,
0 Maximysis
 
25.05.21
10:09
Всем хорошего дня. Уже сломал голову( При переносе справочника из источника в базу приемник нужно перенести конкретный элемент в предопределенный элемент справочника в приемнике. Предопределенный присутствует только в приемнике.
Пробовал в ПКО перед выгрузкой так, но не работает(
    Если Источник = Параметры.СегментЭксклюзивы Тогда
          Значение = "Эксклюзивы";
    КонецЕсли;
1 Pro-tone
 
25.05.21
10:11
Передавай значение в параметр, а в ПриЗагрузке() пиши код Объект.[ИмяРеквизита] = Справочники.[ТвойСпр][ПараметрыОбъекта("ТвойПараметр")]
2 mikecool
 
25.05.21
10:12
предопределенное имя точно "Эксклюзивы"?
3 mikecool
 
25.05.21
10:12
+2 поиск по наименованию есть?
4 Pro-tone
 
25.05.21
10:14
(3) наименование может по идее совпадать если не установлена по нему уникальность, надо получать через точку
5 pechkin
 
25.05.21
10:15
можно задать переменную
Выражение = "Справочники.МойСправочникюИмя";
6 Maximysis
 
25.05.21
11:17
(1) Что такое "ПараметрыОбъекта"?
Создал ПКС с признаком "передовать в параметр".Заполняю его перед выгрузкой
Значение = Источник = Параметры.СегментЭксклюзивы;
  в файле выгрузке параметр есть а при загрузке обратится к нему не могу
7 Maximysis
 
25.05.21
11:19
(2) Точно.
8 pechkin
 
25.05.21
11:23
(6) пиши не
Значение = ..
а
Выражение =
9 Maximysis
 
25.05.21
11:32
(8) У меня нет ПКС с этим значением. ПКО загружаю из ПВД.
10 Maximysis
 
25.05.21
11:33
а вот у этого ПКО создал ПКС с признаком "передовать в параметр" назвал его "ЭтоЭкслюзив"
11 Maximysis
 
25.05.21
11:33
но в приемнике не могу его получить.
12 Maximysis
 
25.05.21
11:46
Пытаюсь передать код элемента для предопределенного. Через "Параметры" но в файле почемуто пусто хотя признак параметра  выставил "Передавать при выгрузке".
13 Maximysis
 
25.05.21
11:47
<ЗначениеПараметра Имя="КодСегментЭксклюзи" Тип="Строка">
    <Пусто/>
</ЗначениеПараметра>

Почему он пустой? Хотя в обработчиках ПКО значение доступно.
14 Pro-tone
 
25.05.21
12:16
(6) ПараметрыОбъекта - это структура со значениями свойств, в которых ты поставил флаг "передавать в параметр", значения всегда строчного типа

Надо так:

Значение = "Эксклюзивы", ПКС пустое при этом, ставишь галку "Выгружать в параметр",  параметр обозвать тоже как-то надо, потом к нему по скобкам обращаешься в (1)
15 pechkin
 
25.05.21
12:18
(14) вариант (5) проще. но он хочет на уровне ПКО подменять, чтоб везде не писать.
Лично я таких способов не знаю. И может ли такое КД вообще
16 Pro-tone
 
25.05.21
12:19
(12) параметры во вкладке нужны для другого, а именно для передачи значений, которые интерактивно пользователь установил в обработке обмена руками
17 Pro-tone
 
25.05.21
12:23
+ либо программно установлены, но влияют на выполнение всех обработчиков перед конвертацией или перед/при загрузке, аналог глобальных переменных или параметров сеанса
18 Maximysis
 
25.05.21
12:28
(16) Спасибо. да разобрался что в обработке с формы перезатерает.
19 Maximysis
 
25.05.21
12:29
(14) ПараметрыОбъекта доступны только в "После загрузки"
20 Pro-tone
 
25.05.21
12:31
(19) ОбъектМодифицирован = Истина после своего кода просто поставьте, и объект будет перезаписан
21 hhhh
 
25.05.21
13:18
(19) пробуй так

Если Источник.Ссылка = Параметры.СегментЭксклюзивы Тогда
          Значение = "Эксклюзивы";
    КонецЕсли;
22 Maximysis
 
25.05.21
14:41
(21) Нет так тоже не работает, там ссылка ссылка
23 Maximysis
 
25.05.21
14:47
Решил чрез параметыОбъекта вот так:
1)Создал ПКС с признаком "Передовать данн. в параметр". Обозвал параметр "ЭтоЭксклюзив". В "Перед выгрузкой" этого ПКС добавил:
Значение = Источник = Параметры.СегментЭксклюзивы;

2)В ПКО в обработчике "После загрузки":
Если ПараметрыОбъекта<>Неопределено И ТипЗнч(ПараметрыОбъекта) = Тип("Соответствие") Тогда
   Если ПараметрыОбъекта.Получить("ЭтоЭксклюзив") Тогда
        Объект = Справочники.СегментыНоменклатуры.Эксклюзивы.ПолучитьОбъект();
    КонецЕсли;  
КонецЕсли;  


Всем спасибо!
24 RomanYS
 
25.05.21
15:25
(23) Для самого объекта может и решил. А ссылками на него разве это прокатит?
25 Pro-tone
 
25.05.21
15:42
(23) ответ был в (1)
(24) а все потому что он не сделал как я сказал, вот так надо было написать:

Объект = Справочники.СегментыНоменклатуры[ПараметрыОбъекта("СтрЗначениеПредопределенногоЭлемента")]
26 RomanYS
 
25.05.21
15:52
Полистал события загрузки. Наиболее подходящим видится "Поля поиска":
"...Событие выполняется при поиске элемента ссылочного типа.
...
ПрекратитьПоиск - булево. Если Истина, то поиск объекта прекращается, в зависимости от того СсылкаНаОбъект заполнена или нет создается новый объект.

СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным"
27 Pro-tone
 
25.05.21
16:01
(26) там недоступны ПараметрыОбъекта
28 RomanYS
 
25.05.21
16:03
(27) Доступны. Те по которым поиск включен:
"ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры, переданные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено. В данном обработчике соответствие содержит только те параметры, для которых установлен признак поиска."
29 Pro-tone
 
25.05.21
16:06
(28) я просто не за компом) ну ок, код (25) туда значит перетащить, а в ПКС галку поставить "Поиск" у свойства, значение которого передавать в параметр
30 Pro-tone
 
25.05.21
16:09
Только это все равно плохое решение;) ПослеЗагрузки - лучше, представь если объекта нет в базе, он не получен тогда хорошо бы его создать. А в обработчике "ПоляПоиска" создавать его плохой вариант.
31 Pro-tone
 
25.05.21
16:11
И там же сперва его пробовать получить по предопределенному имени, если не получилось, то по наименованию. А это как раз ПослеЗагрузки
32 RomanYS
 
25.05.21
16:49
(30) А что плохого-то? Создать болванку предопределенного элемента минимальную чтобы можно было записать. Взять его ссылку, а далее он дозагрузится стандартными процедурами.
33 Pro-tone
 
25.05.21
17:59
(32) ну для создания предопределенного нужен конфигуратор и его нельзя создать пользователю, а речь про обычный элемент если не найден предопределенный по имени
34 RomanYS
 
25.05.21
18:02
(33) В 8.3 такая ситуация может быть: предопределенный есть в конфигурации, но не создан в базе.
Вообще мы отклонились от исходной задачи: если предопределенного элемента нет в базе-приемнике, значит это не та база.
35 Йохохо
 
25.05.21
18:09
и (0) и (5) должны были сработать, надо было в отладчик
36 Pro-tone
 
25.05.21
18:15
(34) я такого не встречал. Элемент может быть скрыт отбором - да, но создается он в предприятии в любом случае. если в каких-то версиях это не так, то я просто этого ни разу не видел

>>Вообще мы отклонились от исходной задачи: если предопределенного элемента нет в базе-приемнике, значит это не та база.
ну чтоб по ошибке не падало когда не та база хорошо бы проверку наличие элемента кодом
37 RomanYS
 
25.05.21
18:19
(36) >> я такого не встречал.
В типовых этого практически нет, а в платформе такая возможность есть. Ну и кстати из-за этой возможности старые версии КД2 часто задваивали предопределенные элементы после перехода на 8.3
38 RomanYS
 
25.05.21
18:21
(35) Не должны были
(0) не может работать потому в ПКО (не ПКС) нет переменной Значение
(5) вообще не понятно куда писать, переменную "Выражение" нигде не видел (может плохо смотрел)
39 Pro-tone
 
25.05.21
18:21
(37) обработка типовая ВыгрузкаЗагрузкаXML как раз и двоит предопределенные, но она на КД3
40 RomanYS
 
25.05.21
18:23
(39) Она же и в КД2 есть. Не двоит, начиная с 2.1.8
41 Pro-tone
 
25.05.21
18:27
(38) "Выражение" вроде как есть такая переменная если поискать в модуле универ обмена:

ИначеЕсли ИмяУзла = "Выражение" Тогда
   Значение = Вычислить(одЗначениеЭлемента(ФайлОбмена, одТипСтрока, , Ложь));

туда строкой код можно писать, (35) но я бы не стал этого делать, так как по ошибке может упасть если нет элемента
42 Pro-tone
 
25.05.21
18:29
(40) ВыгрузкаЗагрузкаДанныхXML83.epf ? на форме там версии не пишут, а та что у меня она двоит
43 RomanYS
 
25.05.21
19:05
(42) скачай КД 2.1.8 и возьми оттуда
(41) не понятно чему это относится. Явно не к ПКО, а в каждом ПКС прописывать (а потом ещё поддерживать) то ещё удовольствие
44 Maximysis
 
26.05.21
06:38
(25) Это решение и есть то как я сделал. "Объект = Справочники.СегментыНоменклатуры[ПараметрыОбъекта("СтрЗначениеПредопределенногоЭлемента")]"
Только для одного предопределенного элемента. А ту строчу что вы скинули, это пипец. куда что откуда. Ну можно было хоть чуть чуть подробнее написать. Хоть имя обработчика.
45 Maximysis
 
26.05.21
06:42
(26) Интересная идея но у меня нет ПКСа чтобы поставить по нему поиск.
46 Йохохо
 
26.05.21
06:49
(45) в ПКО из (0), всё на чем стоит галка поиск уже доступно
Поля поиска
СвойстваПоиска – соответствие, в котором хранятся текущие значения реквизитов поиска. Эти значения можно использовать в произвольных алгоритмах для идентификации объектов ИБ при загрузке данных. Следует иметь в виду, что при создании нового объекта, значения из соответствия СвойстваПоиска используются для заполнения свойств нового объекта.
47 Maximysis
 
26.05.21
07:04
(46)  для моей ситуации не подойдет так как условие выполнения обработчика "Поля поиска" - "Если поиск по уникальному идентификатору не дал положительного результата" есть вероятность что в базе источнике заменят элемент который должен конвертиться в предопределенный.
48 Йохохо
 
26.05.21
07:17
(47) так у тебя _никогда_ не будет поиска по уиду в этом элементе, его нет в источнике