Имя: Пароль:
1C
1С v8
Обмен. Конвертация данных. Узел "Ссылка". Атрибут "ПродолжитьПоиск".
0 PiotrLoginov
 
22.09.13
12:18
Здрасте всем. Строю произвольный обмен. При приеме данных в Конфигурации-приемнике не хочет выполняться поиск объекта по полю поиска, если поиск по ID не увенчался успехом, хотя в КД соответствующее ПКО имеет галку "Продолжить поиск по полям поиска, если по идентификатору объект не найден". Нашел отладчиком место в обработке конфигурации, где идет проверка на необходимость дальнейшего поиска:


ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли = ?(РежимЗагрузкиДанныхВТаблицуЗначений(), Ложь, одАтрибут(ФайлОбмена, ТипБулево, "ПродолжитьПоиск"));

Соответственно если вручную в файле обмена дописываю узлу Ссылка атрибут ПродолжитьПоиск со значением "true", то все ищется "за милую душу".

Вопрос: может как-то можно что-то сделать при настройке правил в КД чтобы атрибут проставлялся автоматически и не приходилось дописывать его вручную всем ссылкам? Если кто знает, заранее спасибо за подсказку.
1 Serg_1960
 
22.09.13
14:48
ПКО - Обработчики событий - Поля поиска
v8: Последовательность поиска полей в "Конвертации данных" 2
2 PiotrLoginov
 
22.09.13
16:52
(1) код для полей поиска (написанный в соответствующей вкладке ПКО) используется. Это само собой. И прекрасно ищется объект по указанным мною (в этом коде) полям на пятом этапе нехитрого алгоритма:


    // Этапы идентификации (поиска) объекта:
    // 1. Поиск объекта по регистру сопоставления объектов ИБ
    // 2. Поиск объекта по имени предопределенного элемента
    // 3. Поиск объекта по уникальному идентификатору ссылки
    // 4. Поиск объекта по произвольному алгоритму поиска
    // 5. Поиск объекта по полям поиска

Но чтобы после неуспешного поиска на третьем этапе код дошел до пятого этапа, необходимо, чтобы значение переменной ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли было равно Истина. А для этого должен быть атрибут ПродолжитьПоиск (см (0) )
3 Ageres
 
23.09.13
03:52
Ну так сразу нужно говорить, что используешь подсистему обмена из БСП. В одной из старых версий была ошибка, где данный атрибут не проставлялся.
4 PiotrLoginov
 
23.09.13
15:05
(3) Выгружается из БП 2.0.45.6 . Произвольный обмен использует План обмена ОбменУправлениеТорговлейБухгалтерияКОРП (который обычно используется в БП для связи с УТ 10.3). Так Вы думаете, в обработках БСП, используемых для этого плана обмена, некорректный код? А правилами обмена я эту проблему не нивелирую никак?
5 PiotrLoginov
 
23.09.13
18:31
Какой-то ужас. Новая беда: если в запросе к регистру с соответствиями объектов источника объектам приемника, который выполняется механизмом обмена при поиске очередного объекта:



ВЫБРАТЬ ПЕРВЫЕ 1
    СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторИсточникаСтрокой КАК УникальныйИдентификаторИсточникаСтрокой
ИЗ
    РегистрСведений.СоответствияОбъектовИнформационныхБаз КАК СоответствияОбъектовИнформационныхБаз
ГДЕ
      СоответствияОбъектовИнформационныхБаз.УзелИнформационнойБазы           = &УзелИнформационнойБазы
    И СоответствияОбъектовИнформационныхБаз.УникальныйИдентификаторПриемника = &УникальныйИдентификаторПриемника
    И СоответствияОбъектовИнформационныхБаз.ТипПриемника                     = &ТипПриемника
    И СоответствияОбъектовИнформационныхБаз.ТипИсточника                     = &ТипИсточника


, указать в качестве параметра ТипПриемника или ТипИсточника пустую строку (т.е. ""), то запрос тогда найдет первую попавшуюся запись из регистра с ID, указанным в качестве УникальныйИдентификаторПриемника, даже если это строка, сформированная совсем другим обменом (заданный параметр УзелИнформационнойБазы игнорируется?); так что обязательно надо корректно указывать перед поиском параметры ТипПриемника и ТипИсточника, а они, блин, тоже берутся из соответствующих атрибутов узла, в моем случае тупо отсутствующих.

Господа, зверски нужен механизм формирования произвольных атрибутов тем или иным узлам. Неужели если код в БСП не хочет формировать все необходимые мне атрибуты, я ничего не могу с этим поделать?
6 Ageres
 
24.09.13
04:55
В обработке КонвертацияОбъектовИнформационныхБаз в месте, где формируется ссылка (УзелСсылки = СоздатьУзел("Ссылка")), дописать атрибут:
            Если ПКО.ПродолжитьПоискПоПолямПоискаЕслиПоИдентификаторуНеНашли Тогда
                УстановитьАтрибут(УзелСсылки, "ПродолжитьПоиск", Истина);
            КонецЕсли;
7 PiotrLoginov
 
24.09.13
16:32
Спасибо. Думаю, это то, что мне надо. Модифицировать конфу я не могу, но попытаюсь организовать создание необходимых атрибутов во время событий ПередВыгрузкой, ПриВыгрузке, ПослеВыгрузки.
8 PiotrLoginov
 
26.09.13
03:04
Ну что ж, на момент наступления события ПриВыгрузке В узле, содержащем какой-либо выгружаемый объект ссылочного типа, полностью сформирован узел Ссылка со свойством УникальныйИдентификатор. Тут-то бы его отредактировать во время ПриВыгрузке, добавив необходимые атрибуты, да вот беда, не знаю я, как залезть внутрь ЗаписьXML , дабы изменить одно из свойств находящегося внутри узла. Создам, наверное, отдельную темку с этим вопросом. А здесь еще раз благодарю Ageres, отозвавшегося на мою просьбу о помощи.