Имя: Пароль:
1C
1С v8
Конвертация 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
Я уже не помню, что там за косяк был с этими Перед и после загрузки
AdBlock убивает бесплатный контент. 1Сергей