|
КД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) так у тебя _никогда_ не будет поиска по уиду в этом элементе, его нет в источнике
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |