![]() |
|
Конвертация 2.1 обработчик Поля поиска, почему не заполняется СсылкаНаОбъект | ☑ | ||
---|---|---|---|---|
0
I_learn_1c
12.05.25
✎
15:06
|
Доброго всем дня,
Подскажите плиз что я неправильно понимаю в работе конвертации Предыстория - выгружаем физическое лицо из ЗУП в УПП, есть файл правил, грузим через "Универсальный обмен данными в формате XML" Код в УПП и ЗУП не всегда у ФЛ совпадает. Поэтому алгоритм сопоставления при загрузке такой - сначала ищем по ИНН + СтраховойНомерПФР, если не нашли, то ищем по Код. Ну и учитываем если ЭтоГруппа. Есть ПКО ФизическиеЛица. Установлено "Искать по внутреннему идентификатору" и "Продолжить поиск по полям поиска, если по идентификатору не найден". Отмечена галка "Поиск объекта при загрузке по свойству" для полей ЭтоГруппа, Код, ИНН и СтраховойНомерПФР. У этого ПКО в обработчике "Поля поиска" пишу: Если НомерВариантаПоиска = 1 Тогда СтрокаИменСвойствПоиска = "ЭтоГруппа, ИНН, СтраховойНомерПФР"; Иначе СтрокаИменСвойствПоиска = "ЭтоГруппа, Код"; КонецЕсли; Вопрос: при НомерВариантаПоиска = 1 сопоставление находится, подходящий элемент есть, к НомерВариантаПоиска = 2 процесс не переходит, что логично. Но при этом СсылкаНаОбъект остается пустая, и далее в "При загрузке" ОбъектНайден = Ложь, в "После загрузки" ОбъектНайден = Ложь, но Ссылка при этом верно заполнено ссылкой на найденный объект. Почему так? ОбъектНайден разве не должен стать Истина, раз соответствие установлено? Даже если в "Поля поиска" сопоставление находится со второй попытки (по Код), или я явно задаю найденную (запросом) ссылку на ФЛ в СсылкаНаОбъект, то далее все равно ОбъектНайден=Ложь, а Ссылка в "После загрузки" есть.. новый объект при этом не создается, что верно. Создается если совсем никаким способом сопоставления не произошло. Можно конечно обойтись проверкой в "После загрузки" значения Ссылка, а не ОбъектНайден, это работает. Но не пойму почему так работает.. как может быть Ссылка заполнена при ОбъектНайден=Ложь, ведь в "После загрузки" Ссылка – Произвольный – ссылка на найденный объект в информационной базе. ОбъектНайден - Булево. Если значение параметра равно Ложь, то объект не идентифицирован, то есть не найден в информационной базе |
|||
1
lucky_
12.05.25
✎
15:32
|
(0) в отладчике посмотреть религия запрещает?
|
|||
2
I_learn_1c
12.05.25
✎
15:35
|
(1) что посмотреть?
я и смотрю, вижу, что ОбъектНайден = Ложь, а почему там Ложь то, если Ссылка заполнено и в целом есть объект который полям поиска соответствует? |
|||
3
lucky_
12.05.25
✎
15:38
|
"ОбъектНайден = Ложь" присваивается обработкой "универсальныйобменданнымивформатеблаблабла".
это значение не берётся из воздуха. |
|||
4
GreyK
12.05.25
✎
15:54
|
Зачем искать по ИНН+СН, они оба уникальны, но один из них может быть не заполнен или оба не заполнены. Делай поиск вначале по ИНН, затем по СН. А про строку после "иначе" я промолчу.
|
|||
5
I_learn_1c
12.05.25
✎
16:07
|
(4) ну такая стоит задача, нужно найти тех где заполнено/не заполнено точно так же.
ну да ок, пусть только по ИНН например, если не нашли, то надо искать только по Код. В любом случае по какому-то из вариантов находится сопоставление. Вопрос не в том как искать. Вопрос почему далее тогда идет ОбъектНайден = Ложь, если вроде как объект то в базе найден? |
|||
6
Ёпрст
гуру
12.05.25
✎
17:01
|
(0) почитай описалово обработчиков на ночь, полезно.
ССылкаНаОбъект и рекратитьПоиск это ты сама можешь установить, чтоб не искать дальше. Автоматом, туда ничего не пишется. Сделано, для своего поиска, например, запросом. А не перечисление полей поиска как в (0) |
|||
7
I_learn_1c
12.05.25
✎
17:08
|
в общем пока прихожу к выводу, что ОбъектНайден=Истина, только если объект будет найден без доп. описания алгоритма в обработчике "Поля поиска"
А если есть алгоритм какой-то свой дописанный, то по отладке мы попадаем на такое вот Если, и не заходим в него. Т.е. не важно принудительно мы что-то запишем в СсылкаНаОбъект, или зададим СтрокаИменСвойствПоиска и по ней элемент будет найден, раз есть текст в обработчике, то в это Если не попадем, и ОбъектНайден не сменится на Истина... что как по мне все же странновато. Или что-то не так поняла. Если Не ЕстьАлгоритмПоиска Тогда // сам поиск непосредственно и без алгоритма поиска СсылкаНаОбъект = НайтиЭлементПоСвойствамПоиска(ТипОбъекта, ИмяТипаОбъекта, СвойстваПоиска, СтруктураСвойств, СтрокаИменСвойствПоиска, ПоискПоДатеНаРавенство); // ОбъектНайден = ЗначениеЗаполнено(СсылкаНаОбъект); КонецЕсли; |
|||
8
I_learn_1c
12.05.25
✎
17:09
|
(6) да блин с поиском проблемы нет, вопрос почему объектнайден = ложь
|
|||
9
I_learn_1c
12.05.25
✎
17:29
|
(6) СсылкаНаОбъект - ок, поняла, только для своего поиска, например запросом.
Но перечисление полей поиска как раз в описании обработчика ПКО "Поля поиска" как пример и приведено. Понятно что могу сама установить ссылку, но получается если хоть что-то пишу сама (не важно запрос или список полей поиска меняю), то дальше нельзя использовать ОбъектНайден в "После загрузки" например.. Цитата из справки "Информация об обработчиках": Пример: Если НомерВариантаПоиска = 1 тогда СтрокаИменСвойствПоиска = "Код, Наименование"; ИначеЕсли НомерВариантаПоиска = 2 тогда СтрокаИменСвойствПоиска = "Код"; Иначе СтрокаИменСвойствПоиска = "Наименование"; КонецЕсли; |
|||
10
Ёпрст
гуру
12.05.25
✎
17:54
|
(9) такую залипуху воткни в ПослеЗагрузки
Если НЕ ОбъектНайден Тогда Если Объект.Ссылка = Ссылка Тогда ОбъектНайден = ИСТИНА; КонецЕсли; КонецЕсли; |
|||
11
Ёпрст
гуру
12.05.25
✎
17:54
|
Я уже не помню, что там за косяк был с этими Перед и после загрузки
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |