8.х ОБМЕН ПоискПоТабличнымЧастям

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем altenas, 13 ноя 2014.

  1. TopicStarter Overlay
    altenas
    Offline

    altenas Опытный в 1С

    Регистрация:
    1 окт 2008
    Сообщения:
    93
    Симпатии:
    0
    Баллы:
    26
    переношу из 1С документооборот КОРП в 1с ЗУП Корп внутренний документ с ТЧ. (и ТЧ в документообороте и документ-приемник в ЗУПе - добавленные, не штатные). добавлены планы обменов, созданы правила, при помощи внешней обработки "универсальный обмен данными в формате XML" все отлично переносится, он-лайн обмен не затягивает данные в ЗУП.
    При рассмотрении файлов обмена выяснилось, что в случае он-лайн обмена формируется запись <ПоискПоТабличнымЧастям>
    и в значении кроме наименования табличной части перечисляются все реквизиты, которые я хочу перенести. и именно на этом срывается он-лайн обмен при загрузке в ЗУП.
    но поиск-то по Табличным частям не нужен, и при настройке правил в конвертации данных не был указан. как от этого избавится?
  2. Dragnir
    Offline

    Dragnir Новичок в 1С

    Регистрация:
    22 окт 2014
    Сообщения:
    39
    Симпатии:
    8
    Баллы:
    4
    Добрый день.

    Я не очень силен в конвертации, но могу из опыта предположить и предложить такой выход.
    При описании правил написать код, который будет сообщать - это онлайн обмен или нет.
    При обработке объекта в случае, когда это онлайн-обмен программно переопределять поля и механизмы поиска.
    Это теоретически.

    Практически, наверно так: при описании правил конвертации данных выполнить следующее:
    1. Обработчики самой конвертации.
    1.1. "После получения узлов обмена" добавить код
    Параметры.Вставить("ЭтоОнлайнОбмен", ИСТИНА);

    2. Обработчики ПКО для документа.
    2.1. "Поля поиска" добавить код
    СтрокаИменСвойствПоиска = "<строка реквизитов поиска за вычетом добавленных реквизитов ТЧ>";

    А вообще рекомендую посмотреть описание синтаксиса данного обработчика. Думаю, что копать нужно именно в нем.
    Описание:

    Поля поиска
    Условия возникновения события
    Только для платформы V8.
    Событие выполняется при поиске элемента ссылочного типа. Если установлен поиск по уникальнму идентификатору и программа нашла элемент, то поиск прекращается. Если поиск по уникальному идентификатору не дал положительного результата и указано, что нужно продолжить поиск в этом случае или поиск по уникальному идентификатору не проводился, то программа пытается найти элементы по свойствам поиска. В обработчике нужно установить список полей через запятую по которым нужно проводить поиск. Если очередная попытка дала положительный результат, то поиск прекращается.
    Поиск возможен только по тем полям у которых на этапе выгрузка был установлен флаг поиска данных!!!

    Параметры:
    НомерВариантаПоиска - число. Номер попытки поиска. Попыток поиска может быть не больше 10.

    СвойстваПоиска – соответствие, в котором хранятся текущие значения реквизитов поиска. Эти значения можно использовать в произвольных алгоритмах для идентификации объектов ИБ при загрузке данных. Следует иметь в виду, что при создании нового объекта, значения из соответствия СвойстваПоиска используются для заполнения свойств нового объекта.

    ПараметрыОбъекта - либо Неопределено либо Соответствие, в котором хранятся дополнительные параметры, переданные для данного объекта из источника в приемник. Если параметров передано не было, то ПараметрыОбъекта = Неопределено. В данном обработчике соответствие содержит только те параметры, для которых установлен признак поиска.

    ПрекратитьПоиск - булево. Если Истина, то поиск объекта прекращается, в зависимости от того СсылкаНаОбъект заполнена или нет создается новый объект.

    СсылкаНаОбъект - ссылка на результирующий объект. Если в обработчике установить данную ссылку (не пустую) то программа ее запомнит и поиск на этом будет считать успешно завершенным

    УстанавливатьУОбъектаВсеСвойстваПоиска - булево. Определяет нужно ли после удачного завершения поиска установить объекту все реквизиты поиска. Объект может быть найден по части реквизитов. Этот флаг определяет нужно оставшиеся реквизиты, которые не участвовали в поиске (но по которым поиск возможен) установить объекту или нет. Значение по умолчанию: Истина.

    НастройкаПоиска - строка. Выбранный пользователем вариант сопоставления объектов. В ПКО есть таблица Варианты настроек полей поиска - с возможными вариантами настроек полей поиска для пользователя. Разработчик правил определяет возможные комбинации полей поиска, которые пользователь может выбирать при настройке обмена. Все настройки указанные разработчиком правил должны быть отработаны в коде обработчика "Поля поиска". Переменная НастройкаПоиска в обработчике определяет выбранный пользователем вариант сопоставления (ИмяНастройкиДляАлгоритма из соответствующей строки таблицы). Если пользователь не выбрал ни один вариант сопоставления, или ему ни один вариант не был предложен, то НастройкаПоиска - пустая строка.

    СтрокаИменСвойствПоиска – строка в которой задаются ключевые поля варианта поиска. Могут быть указаны только те свойства, для которых при настройке правил обмена был выставлен флаг поиска.

    Пример:
    Если НомерВариантаПоиска = 1 тогда

    СтрокаИменСвойствПоиска = "Код, Наименование";

    ИначеЕсли НомерВариантаПоиска = 2 тогда

    СтрокаИменСвойствПоиска = "Код";

    Иначе

    СтрокаИменСвойствПоиска = "Наименование";

    КонецЕсли;
    --- Объединение сообщений, 14 ноя 2014 ---
    Торопился... забыл сказать, что в обработчике "Поля поиска" нужно естественно опросить установленный ранее параметр.
    И только в том случае, когда он есть и равен истина - переопределять строку поиска.
  3. TopicStarter Overlay
    altenas
    Offline

    altenas Опытный в 1С

    Регистрация:
    1 окт 2008
    Сообщения:
    93
    Симпатии:
    0
    Баллы:
    26
    пришлось переписать код, отвечающий за "прочитку" правил обмена на стороне документооборота в обработке "конвертацияОбъектовИнформационныхБаз"

    // ПОЛУЧАЕМ СВОЙСТВА ПОИСКА ПОЛЕЙ ТЧ ДЛЯ ПРАВИЛ ЗАГРУЗКИ ДАННЫХ (ЗаписьXML)

    ИтоговаяСтрокаПоискаПоТЧ = "";

    // в приемник нужно передать информацию о полях поиска для табличных частей
    Для Каждого СтрокаСвойств Из НоваяСтрока.Свойства Цикл

    Если Не СтрокаСвойств.ЭтоГруппа
    ИЛИ ПустаяСтрока(СтрокаСвойств.ВидПриемника)
    ИЛИ ПустаяСтрока(СтрокаСвойств.Приемник)
    Или не СтрокаСвойств.ЭтоПолеПоиска Тогда //вот это последнее условие добавлено

    Продолжить;

    КонецЕсли;

    Если ПустаяСтрока(СтрокаСвойств.СтрокаПолейПоиска) Тогда
    Продолжить;
    КонецЕсли;

    ИтоговаяСтрокаПоискаПоТЧ = ИтоговаяСтрокаПоискаПоТЧ + Символы.ПС + СтрокаСвойств.ВидПриемника + "." + СтрокаСвойств.Приемник + ":" + СтрокаСвойств.СтрокаПолейПоиска;

    к сожалению,

    КонецЦикла;

    после чего все сразу великолепно заработало.

Поделиться этой страницей