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

КД2 из обычного элемента в предопределенный

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

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

Надо так:

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

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


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

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

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

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

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

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


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