Занятие № 03. Курс «1С:Конвертация данных 2.1 – Профессиональная настройка правил обмена и типовые сценарии переноса данных»
Синхронизация объектов
Изучите теорию модуля № 1:
- Глава 4. Синхронизация данных
Выполните практические задания:
Отчеты по домашним заданиям размещайте по ссылкам, указанным выше. Отчеты, опубликованные на этой странице, удаляются без предупреждения.
Ваши вопросы по материалам данного занятия задавайте в комментарии ниже.
Общие вопросы по курсу, не связанные с конкретным занятием, задавайте на странице: http://kursy-po-1c.ru/data-conv/all-hw/convdata-common-qa/
Общие вопросы по курсу, не связанные с конкретным занятием, задавайте на странице: http://kursy-po-1c.ru/data-conv/all-hw/convdata-common-qa/
К сожалению, у Вас недостаточно прав для дальнейшего просмотра.
Если Вы приобрели курс, но еще не активировали токен — пожалуйста, активируйте доступ по инструкциям, высланным на Ваш email после покупки.
Если Вы не залогинены на сайте — залогиньтесь, вернитесь на эту страницу и обновите ее.
Если Вы залогинены, у Вас активирован токен доступа, но Вы все равно видите эту запись — напишите нам на e-mail поддержки.
Комментарии / обсуждение (334):
Комментарии закрыты

Добрый день! Зациклило меня на начале видео 1.4.8. Ну никак не укладывается у меня в голове, каким образом происходит синхронизация в случае, если есть флаги поиска и текст в обработчике «Поля поиска». Мои мысли:
1. Если есть галка поиска по UUID, то сначала ищем по нему
2. Далее при включенной галке «продолжать поиск по полям поиска» и при выставленных галках в ПКС идет поиск по полям поиска.
Еще я пришла к выводу, что если ПКС отключено, то оно вообще никак не влияет и значение его никуда не передается. В нашем примере в начальных правилах все-таки при отключении ПКС «Артикул» синхронизация идет сначала по UUID, а потом по КОДУ, благодаря чему диван не загрузился в базе, а «нашелся».
Вопросы:
1. Что обрабатывается сначала: поиск по полям с галками или обработчик «Поля поиска».
2. Почему в нашем примере в случае новой номенклатуры без соответствия с каким-либо существующим элементом в Конечной базе при загрузке мне отладчик выдавал, что он заходит в наш обработчик «Поля поиска» 2 раза (оба раза были неудачны в плане поиска). Как сделать так, чтобы не делать повторных заходов в обработчик «Поля поиска»?
Посмотрите на этой странице Лучшие вопросы участников курса, вопрос № 11, схема вариантов поиска.
1. Сначала выполняется обработчик поля поиска.
2. После каждого неудачного поиска по полям счетчик НомерВариантаПоиска увеличивается на единицу, и снова выполняется алгоритм поля поиска. Если после выполнения этого алгоритма изменилась СтрокаИменСвойствПоиска, то опять будет выполняться поиск по полям, уже другим. А если не изменилась, то будет создаваться новый объект. Поэтому обработчик Поля поиска правильно повторно выполняется, не нужно мешать ему ))
А чтобы, например, второй раз не выполнялся тот же неудачный запрос, можно внести его под условие
Если НомерВариантаПоиска = 1 Тогда…
Ольга, спасибо. Схему посмотрела, хочу уточнить. Я правильно поняла, что если, например, у нас у 3 ПКС указаны флаги поиска: Код, наименование, Артикул. Тогда поиск будет идти так:
1. НомерВариантаПоиска будет 1, СтрокаИменСвойствПоиска будет идти первое ПКС с галкой поиска ( нашем примере это «Код»). Сначала выполняется обработчик поля поиска. После неудачного поиска будет идти поиск СтрокаИменСвойствПоиска на которой мы так сказать стоим — в нашем примере это Код? Как мне кажется, поиск по Коду будет идти.
2. Если поиск по Коду прошел неудачно, то счетчик НомерВариантаПоиска станет равным 2, СтрокаИменСвойствПоиска = «Наименование». Далее будет сначала выполняться обработчик поля поиска (второй раз, результат здесь предсказуем — неудачный, так как мы уже здесь 1 раз были). Если поиск будет неудачен, то будет идти поиск по «Наименованию»?
3 Если поиск по наименованию пройдет неудачно, то счетчик НомерВариантаПоиска станет равным 3, СтрокаИменСвойствПоиска = «Артикул». Далее будет сначала выполняться обработчик поля поиска (третий раз и все неудачно). Если поиск будет неудачен, то будет идти поиск по «Артикул»?
Мне как-то так это представляется. Подскажите, я правильно думаю или нет? Это вариант именно тогда, когда в коде обработчика «Поля поиска» для каждого НомерВариантаПоиска не указаны конкретно СтрокаИменСвойствПоиска.
Ольга, подскажите, в каком момент и каким образом меняется СтрокаИменСвойствПоиска, если она не прописана конкретно в коде обработчика «Поля поиска»?
1. Нет, если просто расставить три флага поиска у ПКС, то будет поиск элемента по совокупности значений свойств. Т.е. программа будет искать такой элемент, у которого все три поля такие же, как у загружаемого.
2. Если Обработчик Поля поиска совсем пустой, там нет ни одного символа, он не выполняется. Если там что-то есть, то он сначала выполнится в начале, перед поиском по полям, потом после поиска — еще раз. Если в нем нет кода, который изменяет параметр СтрокаИменСвойствПоиска, то вторая итерация поиска происходить не будет.
СтрокаИменСвойствПоиска не изменяется программно, ее может изменить только разработчик правил в алгоритме Поля поиска.
Ольга, спасибо!!! То есть порядок работы моих (ну то есть правил из видео 1.4.8) правил ПравилаОбменаДанными_1_4_8.rar при загрузке номенклатуры следующий:
1. сначала поиск по UUID
2. затем в случае неудачно поиска выполняется обработчик «поля поиска». В виду того, что ПКС «Артикул» отключено, в обработчик значение артикла не передается и соответственно поиск выполняется неудачно
3. далее идет поиск по полям — в нашем случае только по Коду, так как у Артикла стоит галка «отключить». Поиск по полям (коду) срабатывает на номенклатуре «Диван-кровать»
4. если поиск по полям (коду) не удачен (как в случае с другой номенклатурой), то опять выполняется обработчик «поля поиска» (не удачно)
5. так как обработчике «Поля поиска» нет кода, изменяющего параметрСтрокаИменСвойствПоиска, то поиск закончен
Ольга, теперь я правильно написала алгоритм для конкретных правил?
Да, правильно )
Ура!!! Спасибо :) В голове схема уложилась :)
Добрый день! Вопрос по видео 1.4.8. «Синхронизация по внешним данным», время 08:40. Релиз конвертации 2.1.8.2. Лично у меня не получилось добиться нужного результата при переносе номенклатуры (сопоставление Диван-кровати в Конечной базе и дивана из Исходной базы) с указанными настройками ПКС «Артикул»: включение флагов «Поиск объекта при загрузке по свойству» и «Отключить обработку правил», так как в этом случае у меня в обработчик «Поля поиска» артикул просто не передавался совсем и сопоставления при загрузке не происходило. Мне помогло снятие флага «Отключить обработку правил» и включение флага «Не замещать значения свойства у существующих объектов в приемнике » у ПКС «Артикул». В результате у меня номенклатура перенеслась корректно. Подскажите, как же все-таки правильно???
Увидела одну закономерность: в Конечной базе в спр. «Номенклатура» есть предопределенный элемент «Прочие услуги» с кодом 000000100. При добавлении «Диван-кровати» код присваивается 000000101. И правила из видео не работают. Если изменить код диван-кровати на 000000001, то правила срабатывают. Мое мнение, что правила срабатывают по причине того, что в ПКС «код» стоит галка поиска объект при загрузке по свойству и соответствие идет именно по коду, а не по нужному регистру.
Попробовала сделать так: код у диван-кровати установила 000000001 (как в соответствующем товаре из Исходной базы), отключила ПКС «Код», включила поиск, например, по наименованию (иначе не было включенных полей для поиска и загрузка не происходила), сделала выгрузку-загрузку правилами из видео — загрузка произошла некорректно, сопоставления диванов не произошло. Правила прилагаю.
Здравствуйте!
Да, в Ваших правилах ПКС Артикул отключено, в этом случае поиск работать не будет. Нужно именно передавать артикул в параметр объекта
Ольга, в моих правилах ПКС Артикул отключено, так как это сделано Евгением в видео 1.4.8 на 08:40 минуте (я тестирую пока эти правила и как-то не совсем с ними согласна) и у него вроде как все загружается, но по моим соображениям у него идет синхронизация по коду (так как у ПКС Код указан флаг поиска), а не по указанному коду в обработкчике «Поля поиска». И все-таки, это ошибка в видео или конкретно я что-то делаю не так (а я все методично повторяю из видео)?
Не уверена, что это ошибка, возможно, особенность той версии, но текущая версия обработки точно так работать не будет. Параметры объекта созданы именно для этих целей
Может тогда все-таки внести изменения или дописать видео, чтобы не вводить в заблуждение людей, так как учимся и работаем мы на текущей версии КД, где с данными настройками как у ПКС Артикул поиск не работает нужным нам образом. Да и про параметры объекта в видео 1.4.8 нет ни слова. Кстати, особенности старой версии КД я тестовым методом исключила: я не поленилась, нашла КД версии 2.1.6.1 (эта версия устанавливается изначально в видео), создала в этой версии КД правила, сделала выгрузку-загрузку с помощью обработок версии 2.1.6.1 — «диван-кровать» с кодом 00000101 не нашел по нашему регистру, сделала код равным 00000001 — диваны сопоставились.
Модули будут обновляться, но конкретных дат назвать не могу пока
Еще один на мой взгляд минус предложенных в видео правил. Состояние правил, когда в ПКЛ «Артикул» сняли галку «Отключить обработку правил» и включили галку «Не замещать значения свойств у существующих». В ПКС «Код» не стоит галки «Не замещать значения свойств у существующих» и поэтому происходит замещение кода номенклатуры в Конечной базе, что на мой взгялд недопустимо, так как ведет к дублированию кодов в виду того, что согласно постановке задачи добавление товаров возможно как в Исходной, так и в Конечной базе. В связи с этим я считаю, что дальнейшее предложение в видео (было дописано в обработчике «Поля поиска») по поиску по коду тоже не приемлемо в данной ситуации, так как в Конечной базе может быть (да и в видео это есть) несколько элементов с одинаковым кодом, как обработка будет выбирать какой из этих нескольких элементов надо поставить?
Насчет синхронизации объектов — единственный корректный способ, который я знаю — это регистр сведений СоответствияОбъектовИнформационныхБаз, все остальные имеют ограничения и могут работать неправильно. Этот регистр есть во всех типовых решениях и в модуле БСП. Там хранятся идентификатор и тип данных объекта из другой базы и ссылка на объект этой базы. Для регулярных обменов данными лучше всего использовать этот регистр или его аналог.
Если в справочнике несколько элементов с одинаковым кодом, а поиск производится по коду, то будет выбран какой-то из этих элементов. Какой, неизвестно.
Спасибо! Посмотрю регистр сведений СоответствияОбъектовИнформационныхБаз.
Ок
Для этих целей есть ПКС с видом «Передать в параметр». Можно создать такое ПКС для Артикула и отметить его флажком поиска. Тогда этот параметр будет доступен именно в обработчике Поля поиска в соответствии ПараметрыОбъекта
Спасибо. Попробую — отпишусь :)
Хорошо )
Добрый день!
Вопрос по видео 1.4.7 «Ключ выгружаемых данных». Повторяю все действия из видео. У меня возникла следующая ситуация: если правилами, получившимися после снятия галки «Не запоминать выгружаемые объекты» в ПКО «КонтактныеЛица_ТребуетсяПередачаВладельца» и указания ключа, выгрузить-загрузить документы «Контакт» в пустую Конечную базу, то у контрагента «Гамма ООО» в Конечной базе не будет заполнен реквизит «Основное контактное лицо» (справочник «Контактные лица» заполняется корректно). Если с помощью этих же правил выгрузить-загрузить в пустую Конечную базу просто справочник контрагентов, то реквизит «Основное контактное лицо» будет заполнен. Скажите, почему так получается и как получилось у Евгения, к сожалению в видео он не заходил в самого контрагента после загрузки? И как надо изменить правила, чтобы выгрузка-загрузка была корректна в любом случае? Свои правила прилагаю.
Здравствуйте!
По всей вероятности, это вариант ошибки, связанной с циклическими ссылками. Попробуйте поменять местами ПКС Контрагент и Контактное лицо в документе, и все должно загрузиться корректно
Спасибо! Про поменять местами я как раз и забыла. Пересмотрю видео 1.4.7 еще раз — проверю какой порядок ПКС там.
Просто тема урока другая. Там на этом не фокусировались. Про циклические ссылки было в другом уроке
Здравствуйте.
Почему ДЗ-1.3.1 и ДЗ-1.3.2 абсолютно одинаковые
Здравствуйте!
Они не одинаковые, в 1.3.1 должен выполняться поиск по совокупности значений полей ИНН и Наименование, а в 1.3.2 должен выполняться поиск либо только по ИНН, либо только по наименованию, если ИНН пустой
Смотрю типовые правила обмена УТ-БП, у многих ПКО в настройках указан только поиск по уникальному идентификатору, при этом еще стоят флажки поиска у некоторых ПКС(обработчик «Поля поиска» пустой), у документов это «Номер», «Дата». Не понятно зачем ставятся эти флажки, если по ним не происходит поиск. При on-line обмене эти поля поиска выгружаются всегда вместе с ссылкой зачем-то?
Здравствуйте!
Я точно не знаю, зачем разработчики правил так установили флажки, возможно, правила работали бы и без этого. Но и эти флажки не мешают их работе.
Добрый день!
Есть абстрактная задача синхронизации данных произвольного источника со справочником, имеющим предопределенные значения.
Для предопределенных элементов справочника перенос работает корректно, т.к. Источник содержит текстовую строку — имя предопределенного объекта. Какие варианты доработки правил я могу произвести, чтобы перенос работал и для непредопределенных элементов справочника с поиском по наименованию. Вижу два варианта:
1. Использовать обработчик поля поиска, но как в таком случае использовать имя предопределенного?
2. Добавить ПКС для Наименования, создать правило конвертации, указать флаг поиска по наименованию, но как тогда указать, что сначала поиск осуществляется по имени предопределенного элемента, а уже потом по наименованию, если объект не найден?
Подскажите, пожалуйста алгоритм настройки правил в такой ситуации.
Заранее спасибо.
Здравствуйте!
Лучше всего настроить полноценное ПКО, создать ПКС для Наименования, установить поиск по нему. Если Вы при выгрузке знаете, что это должен быть именно предопределенный элемент, то его имя можно передать через параметр объекта (ПКС с видом «передча в параметр», с включенным флагом поиска).
А в обработчике Поля поиска нужно вручную найти элемент по этому имени:
Если ТипЗнч(ПараметрыОбъекта) = Тип(«Соответствие») Тогда
СсылкаНаОбъект = Справочники.ИмяСправочника[ПараметрыОбъекта[«Предопределенный»]];
ПрекратитьПоиск = Истина;
КонецЕсли;
К вопросу синхронизации строки в составной тип(строка+перечисление).
В обработчике перед выгрузкой ПКС ПричинаУвольнения делаю что-то не так,т.к. в результате загрузки получаю строку «ЗаПрогул», а не перечисление. Подскажите, где собака порылась. Спасибо. Вот текст обработчика:
Если Найти(Источник.ПричинаУвольнения,»собствен»)>0 Тогда
Значение = «ПоСобственномуЖеланию»;
ТипПриемника = «ПеречислениеСсылка.ПричиныУвольнения»;
ИначеЕсли Найти(Источник.ПричинаУвольнения,»прогул»)>0 Тогда
Значение = «ЗаПрогул»;
ТипПриемника = «ПеречислениеСсылка.ПричиныУвольнения»;
Сообщить(«»+Значение ); // сообщение вижу
КонецЕсли;
Здравствуйте!
Видимо, в обработке Универсальный обмен на закладке “Дополнительные настройки” включен флажок “Использовать оптимизированный формат”.
Об этом рассказано в видео-уроке 2.5.1
Отключите этот флажок, и все должно получиться
Доброго времени суток!
Подскажите пожалуйста, как можно оптимизировать, точнее избавиться от запроса в цикле, в случае «Синхронизации по внешним данным»? Урок 1.4.8.
Здравствуйте!
Если очень сильно тормозит загрузка, то можно несколько оптимизировать этот момент. Но схема будет сложная, и увеличится файл с данными. Для этого нужно будет выбрать запросом артикулы всех выгружаемых товаров и вручную записать их в файл с данными до выгрузки самих товаров, в начале файла. Потом перед загрузкой эти артикулы получить, выполнить запрос, сформировать таблицу соответствия, записать ее в параметр, и искать объекты уже по этой таблице.
Но обычно это не оправдано.
Есть некий стереотип, что запрос в цикле — это некорректно, но в данном случае это самый логичный подход.
Если Вы установите поиск по полям поиска, то каждый объект тоже будет искаться запросом (а как еще?)
Спасибо! Оставлю запрос в цикле.
Немного запуталась с НомерВариантаПоиска. Когда проверяем на ЭтоГруппа, не пишем условия с НомерВариантаПоиска. Потом пишем…
НомерВариантаПоиска имеет смысл использовать, если нужно производить синхронизацию в несколько этапов: «Сначала ищем (1) по полям ИНН и КПП. Если не нашли, то (2) по полю «Наименование», и т.д.
Группы же мы решили искать только по наименованию, а если не нашли, то сразу создавать новые. Поэтому НомерВариантаПоиска не пригодился
1.В занятии 1.4.1 говорится, что для иерархических справочников нужно обязательно ставить флажок поиска по «ЭтоГруппа». В то же время, флажок «продолжить по полям поиска» не ставим. Система корректно будет обрабатывать эту ситуацию?
2. Типовая конфигурация на поддержке. Для необходимых полей поиска не установлен флаг «Индексировать». Насколько это критично?
4. Если мы в ПКО поставим флаги поиска у трех элементов (например, у Код, Наименование, ИНН), а в обработчике «Поля поиска» прописан поиск только по двум из них, по третьему реквизиту поиск осуществляться не будет?
5. Поиск под Дате всегда идет с точностью до секунды? как быть, если нужно, например, искать без времени?
6. не очень поняла про Ключ выгружаемых данных, принцип его работы. Вопрос №10 посмотрела.
7. Если идет выгрузка по какому-то алгоритму (запросу) из исходной базы, источника как такового нет. Приемник — документ. Как можно сделать поиск в базе-приемнике, чтобы документы не создавались каждый раз новые, а замещались?
8. Не замещать значения свойства из вопроса №5. Т.е. будет заменено и значение того свойства, по которому НЕ ведется поиск?
Здравствуйте!
1. Да, корректно. Поиск может происходить только по идентификатору, но все равно нужно отметить флажком поиска поле ЭтоГруппа для того, чтобы корректно создавались новые группы справочника
2. Не критично. Возможно, поиск объектов по этим полям будет происходить несколько дольше, но не обязательно намного дольше.
4. Не будет. Поиск осуществляется так, как прописано в обработчике «Поля поиска»
5. Скорее всего, лучше будет прописать в этом случае поиск вручную, т.е. написать запрос, где указать, что Дата должна быть между началом и концом суток
6. Ключ выгружаемых данных — это ключ уникальности объекта при выгрузке. Для объектов в базе данных это результат функции ЗначениеВСтрокуВнутр(). Для каких-то произвольных данных мы сами можем определять, что является ключом уникальности.
7. Нужно ответить на вопрос, по каким критериям система должна решить, что сделать с загружаемым элементом, заместить им какой-то из имеющихся, или создать новый. Т.е. решить, по каким полям должна происходить синхронизация. И проставить этим полям флажки поиска
8. Речь именно о тех свойствах, по которым не ведется поиск и не установлен флажок поиска.
КлючВыгружаемыхДанных актуален только при переносе подчиненых элементов? При тестах в базе заметил только данное отличие чем в случае если вообще его не использовать.
Здравствуйте!
Нет, КлючВыгружаемыхДанных актуален тогда, когда система не может определить ключ самостоятельно. Обычно ключом объекта служит строка, получаемая методом ЗначениеВСтрокуВнутр(). Но если выгружается, например, выборка из запроса или таблица значений, или произвольные данные, то нужно помочь системе определить ключ уникальности выгружаемого объекта.
в течении какого времени рассматриваются домашние задания, и дается правильный ответ от преподавателя ?
Здравствуйте!
Отчеты по ДЗ одобряются обычно в течение суток. Скорость ответа на вопросы сильно зависит от сложности вопросов.
Не замещать значения свойства-3.
Настройка «Не замещать значение свойства у существующих объектов в приемнике» не работает, если объект был найден по полям поиска, после того как по идентификатору объект приемник не был найден. Но только в том случае, если у этого поля не установлен флаг поиска, если же флаг поиска установлен, то все работает корректно. Получается, можно просто установить флаг поиска на тех полях, которые не нужно замещать(и флаг «Не замещать значение…»), а в обработчике ПоляПоиска задать нужные поля поиска.
Здравствуйте!
Посмотрела код — да, так должно работать! Спасибо за вариант!
Здравствуйте!
Вопрос по видео 1.4.8 (Синхронизация по внешним данным).
Разве транзакция будет отменена при неудачной записи объекта?
Не правильнее было бы кроме транзакции использовать конструкцию
попытка-исключение?
Если Объект.ЭтоНовый() Тогда
Попытка // ДОБАВЛЕНО
НачатьТранзакцию();
Объект.Записать();
НаборЗаписей = РегистрыСведений.СоответствиеНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.АртикулПоставщика.Установить(Объект.Артикул);
Запись = НаборЗаписей.Добавить();
Запись.АртикулПоставщика = Объект.Артикул;
Запись.АртикулСобственный = Объект.Артикул;
НаборЗаписей.Записать();
ОбъектМодифицирован = Ложь; // Перемещено
ЗафиксироватьТранзакцию();
//ОбъектМодифицирован = Ложь;
// ДОБАВЛЕНО +++
Исключение
ОтменитьТранзакцию();
Отказ = Истина;
Сообщить(«Ошибка.» + ОписаниеОшибки());
КонецПопытки;
// ДОБАВЛЕНО —
КонецЕсли;
Или это было упрощение в методических целях?
Здравствуйте!
Если произойдет ошибка при записи объекта, то вся транзакция не будет зафиксирована. Что касается конструкции «попытка-исключение», то все обработчики событий и так выполняются внутри попытки, так что описание ошибки будет выдано пользователю
Ясно. Спасибо.
Добрый день!
В чём может быть проблема, я отвечаю на тест, обязательно по одному из вопросов флаг ставится не на тот ответ, который я проставил?
Добрый день, Дмитрий!
Пожалуйста, проверьте работу теста на другом браузере.
Та же проблема, Google.
Добрый день!
Причина данной проблемы не ясна. Возможно ошибка в плагине. Уточните, пожалуйста, проблема в каком-то конкретном вопросе?
Здравствуйте, вопрос по первому вопросу из теста). Почему правильный ответ «Код и ЭтоГруппа», а не просто ЭтоГруппа ? Справочник в приемнике пустой, как понимаю галка не запоминать выгруженные объекты снята и дублирования не будет.
Здравствуйте!
Потому, что, например, при некоторых условиях этот флажок может слететь программно. Есть и другие факторы, мешающие кэшированию. Согласна, что возможна такая ситуация, что и при снятом флаге поиска по полю Код перенос данных может пройти нормально, но корректно будет в любом случае настроить синхронизацию.
Понял, спасибо)
Здравствуйте. Не очень понял как создать служебное поле. При попытке создания открывается форма создания элемента справочника «Свойства объектов», но имя я при этом указать не могу. Или я должен такой реквизит физически у справочника создать в конечной базе и передавать ему значение Строка(УИД)?
Здравствуйте!
Какой видео-урок и какую задачу Вы имеете в виду?
Уникальный идентификатор не может повторяться в рамках одной таблицы одной БД. А может получиться так, что одинаковый уникальный идентификатор сформируется и в источнике, и в приемнике в рамках соответствующих таблиц при создании элементов пользователями? В этом случае будет неверное сопоставление. На практике, при работе с большими объёмами данных, возможен ли такой случай?
Здравствуйте!
Вероятность того, что одинаковые идентификаторы возникнут в базах, совершенно независимых друг от друга, исчезающе мала. Но если они являются потомками одной базы, или если между ними уже происходили обмены данными с переносом уникальных идентификаторов, эта вероятность резко повышается.
Вообще, по моему мнению, синхронизация по уникальному идентификатору подходит только для случаев однократного одностороннего переноса данных.
Чем в схеме поиска из ответов на вопросы «выполнение обработчика по полям поиска» отличается от «выполняется поиск по полям поиска»
Здравствуйте!
«Выполнение обработчика ПоляПоиска» — это значит, что выполняется код, который разработчик правил обмена написал в ПКО в обработчике события «Поля поиска». В этом обработчике может быть выполнен запрос, и ссылка на объект уже найдена или создана. Тогда программа понимает, что больше не нужно выполнять поиск.
А если в этом обработчике ссылка на объект не заполнена, но переопределен параметр СтрокаИменСвойствПоиска, то для программы это значит, что нужно выполнить поиск по тем полям, которые указаны в этой строке. Это на схеме обозначено как «Выполняется поиск по полям поиска»
Добрый день. Конвертация 2.1.8.1. Делаю пример с урока 1.4.8. В случае если по артикулу отключаю пкс, он просто не передается в поля поиска. Если пкс по артикулу включен, то все нормально. Что я делаю не так ?
Здравствуйте!
Нужно использовать несколько другой прием — создайте ПКС с видом «Передавать в параметр». Если у этого ПКС установить флаг поиска, то его значение будет доступно в обработчике Поля поиска в соответствии ПараметрыОбъекта
Добрый вечер!
Вопрос по уроку 1.4.3.
Почему нельзя было отметить флагом поиска реквизит «КодПоКлассификатору»?
Вопрос снимаю!
ок ))
Здравствуйте!
Правильно ли я понимаю что при переносе Иерархических справочников при использовании среди полей поиска не относящихся к Группам,- для исключения дублирования групп необходимо обязательно задействовать обработку в событии «Поля поиска». (пример с незаполненным ИНН)?
Здравствуйте!
Да, все правильно, в этом случае для групп нужно определить другой набор полей для поиска
Видеоурок 1.4.4 (про несколько полей поиска). Касаемо обработчика «Поля поиска»: почему в случае, если элемент — группа, мы указываем ЭтаГруппа явно в строке со списком полей, а если нет — пишет строку, игнорируя это поле? Несмотря на то, что оно все равно используется для определения того, создавать группу или элемент.
Здравствуйте!
В этом видео-уроке в строку поиска групп вставили свойство «ЭтоГруппа» чтобы группа искалась среди групп. В случае же поиска элемента использовались те свойства, которые не определены для групп. Таким образом, вместо элемента и так не могла быть найдена группа. Если бы требовался поиск элемента, например, по Наименованию, то свойство ЭтоГруппа нужно было бы вставить в строку имен свойств поиска
Добрый день!
Кол-во объектов не совсем верно сосчитано в уроке № 1.4.7.
Здравствуйте!
Да, там небольшая ошибка. И это объясняет, почему выгрузилось 7 объектов, а после оптимизации – 5. Просто это Контактное лицо было выгружено три раза – из одного документа, из второго документа, а еще по ссылке из справочника Контрагент, там же тоже есть на него ссылка.
Понятно, СПАСИБО!
Помогите, пожалуйста, разобраться: в уроке 1.4.7 документы перенеслись правильно, но Основаное контактное лицо у контрагента не заполнилось, хотя в подчиненный справочник оно перенеслось. Если же выгружать контрагентов отдельно (только по правилу Контрагенты) — все нормально. Не могу найти, в чем ошибка. Правила в файле.
Здравствуйте!
В Вашем комментарии нет вложения. Чтобы прикрепить к комментарию xml-файл, его нужно запаковать в zip или rar архив
Файл
Здравствуйте!
Судя по структуре файла выгрузки, очень похоже, что получилась ситуация как в уроке 1.3.3 про циклические ссылки. Если это все-таки не та ситуация, прикрепите, пожалуйста именно правила, а не данные.
Спасибо! Проверила, действительно, дело в цикл. ссылках.
хорошо )
Скажите, я неправильно понимаю, что поиск по полям, отмеченным флагом, выполняется последовательно (как по условию ИЛИ), а когда поля указываются через запятую в обработчике поиска, то по условию И?
Пример задание 1.3.1:т.е.,когда надо искать по паре ИНН+ Наименование, то надо прописать условия этого поиска в обработчике и это условие будет исполняться как найти сотрудника с таким ИНН И таким наименованием.Или все же поиск всегда осуществляется сначала по ИНН, а если по ИНН не нашли, то по Наименованию и т.д.?
Здравствуйте!
Нет, поиск производится по совокупности значений полей поиска, т.е. по условию «И». Если обработчик ПоляПоиска не задан, то — по совокупности всех полей, отмеченных флагом поиска. Если в обработчике Поля поиска задана другая строка имен свойств поиска, то по совокупности тех полей, которые указаны в этой строке.
Добрый день.
У меня непонятная ситуация. Делал задание и столкнулся с тем что мешают предыдущие решения.
Есть два ПКО которые конвертируют СотрудникиПредприятия—>Сотрудники.
ПКО1 — общее для выгрузки всех свойств без должности.
ПКО2 — зависимое, для ПКС ДолжностьСотрудника ожидается входящий параметр.
Теперь если я делаю ПВД только для ПКО1, то происходит ошибка. Говорят что не передано свойство ДолжностьСотрудника(для ПКО2), хотя это совсем другое ПКО и никак не связано с ПКО1.
Долго разбиравшись, оказалось что необходимо у ПКО1 явно указать для свойства Родитель правило — ПКО1 (по умолчанию пусто). Если этого не сделать то, то как ни старайся почему-то цепляется ПКО2.
Т.е при выгрузке ищет какое-то другое ПКО, а не самого себя.
Это особенность такая? Или ошибка, или как-то можно эту ситуацию по нормальному решить.
Хотел бы почитать ваши комментарии на этот счет. Уж очень неприятная особенность получается, о которой надо помнить всегда.
P/S Надеюсь понятно описал свой вопрос :)
Здравствуйте!
Подбор ПКО происходит по значению поля «Приоритет» среди ПКО, подходящих по типам.
Ситуация, которую Вы описываете, возникает очень часто. В реальных переносах она дает неочевидные ошибки, которые трудно исправить. Поэтому я рекомендую всегда указывать ПКО в ПКС явно, а когда свойство-приемник ПКС составного типа, писать алгоритм по подбору нужного ПКО. Это подход, который реально сокращает время на создание правил и количество ошибок.
Столкнулся с аналогичной проблемой. Задание 1.3.1 сделал. Но если включаю ПВД ПриемНаРаботу, то должности не переносятся! Пробовал разные варианты, результат нулевой. Объясните подробней, как настроить второе ПКС СотрудникиПриемНаРаботу.
Здравствуйте!
На приложенных скриншотах ошибок я не нашла. Прикрепите к комментарию правила в форме zip или rar архива, я посмотрю.
Написал команды в Обработчике поляПоиска, но они не выполняются, хотя в настройках указан «поиск по УИД» и «продолжить поиск».
Однако если Поиск по УИД убрать, тогда команды выполняются.
Разве поиск по УИД не должен выполняться, причем первым?
Здравствуйте!
Посмотрите на этой странице Лучшие вопросы участников курса, вопрос №14, возможно, это Ваш случай
Если в правилах стоит искать по УИД и потом по реквизитам поиска, то при создании объекта (не нашли) система присвоит УИД из исходной базы или он может быть произвольным?
Здравствуйте!
Присвоит идентификатор из исходной базы, и при последующих загрузках будет находить его по идентификатору
Как вернуть обратно настройку выбора пути сохранения правил, при нажатии кнопки «Сохранить»???
Не могу найти ))
Сервис — Настройки пользователя — снять флажок «Выгружать правила обмена при открытии формы настройки»
спасибо ) не совсем логичное название флажка, не подумал на него
Если, поиск по УИД в ПКО отключен, то в обработчике «Поля поиска» итерации нужно начинать с 0 или 1? Т.е. такой код будет правильный:
Если НомерВариантаПоиска = 0 Тогда
СтрокаИменСвойствПоиска = «Инн, Наименование»;
КонецЕсли;
Нет, НомерВариантаПоиска никогда не принимает значение «0»; В любом случае он начинается с единицы.
В видео ответе ConvData-Session-04-DisabledText-QA03.avi предлагается создать «некое служебное поле» где будет храниться строкое предстваление УИД. Я не совсем понял, а как создать это служебное поле?
Имеется в виду реквизит в базе-Приемнике, где хранился бы уникальный идентификатор соответствующего объекта из базы-Источника
Видео 1.4.7 0:04:26
И все таки мне кажется, преподаватель не правильно посчитал выгруженные объекты. Был 2 раза посчитан второй документ.
Здравствуйте!
Да, там небольшая ошибка. И это объясняет, почему выгрузилось 7 объектов, а после оптимизации — 5. Просто это Контактное лицо было выгружено три раза — из одного документа, из второго документа, а еще по ссылке из справочника Контрагент, там же тоже есть на него ссылка.
Вопрос.
Если у нас объект найден по полям поиска, то при переносе UUID источника перезаписывает UUID приемника или нет?
Нет. UUID нельзя перезаписать
Такая ситуация. Две базы, в каждой из которых формируются доки. Соответственно УИДы могут совпадать, а остальные поля поиска нет. При переносе из источника ( поиск по УИД включен) встретился уже имеющийся УИД в приемнике. Что произойдет? По идее, если флаг не замещать объекты выключен, объект презапишется. А если включен, то новый не создастся и соответственно объект из источника не будет создан?
Да, при условии, что наименования типов объектов с одинаковым УИДом из базы-источника и базы-приемника совпадут, все именно так.
Вопрос по видеоуроку 1.4.8: если в обработчике «Поля поиска» написан свой алгоритм поиска (в уроке запрос к рег.свед. СоответствиеНоменклатуры) и он не дал результата (СсылкаНаОбъект не заполнилась), то далее будет выполнен «стандартный» поиск по полям поиска? Или далее надо вручную прописывать поиск используя СтрокаИменСвойствПоиска?
Здравствуйте!
В этом видео-уроке как раз используется такой подход — в обработчике ПоляПоиска выполняется запрос, если с его помощью элемент не найден, то указывается набор полей, по которым происходит поиск. Если не изменять переменную СтрокаИменСвойствПоиска, то поиск пройдет по всем свойствам, которые отмечены флагами поиска.
Вообще, если интересно, как работает поиск, лучше всего открыть код обработки и посмотреть функцию НайтиОбъектПоСсылке()
Т.е., если СтрокаИменСвойствПоиска в тексте обработчика ПоляПоиска не используется вообще, то поиск пойдет по полям с «галками»? И чтобы выйти, надо указать хоть какое-то поле поиска, например, Код?
Здравствуйте!
Да, по умолчанию будет попытка найти объект по сумме значений свойств, отмеченных флагами поиска. Про «выйти» не очень поняла. Если попытка поиска объекта по полям поиска не удалась, а параметр СтрокаИменСвойствПоиска так и не изменен, то поиск будет прекращен. Если нужно, чтобы попытки поиска не было, то можно написать
ПрекратитьПоиск = Истина;
Я не поняла из ролика, зачем после запроса, если элемент не найден, еще поиск по Коду.
В этом видео-уроке выполняется поиск по Коду после того, как поиск по Артикулу не дал результата. Это просто демонстрация еще одного варианта при поиске объектов, который может быть при необходимости реализован.
Но чтобы поиск по полям не производился, и после неудачного поиска по Артикулу создавался новый элемент, нужно было бы еще в конце написать
ПрекратитьПоиск = Истина;
Доброго времени суток.
Небольшой вопрос по обработке «Универсальный обмен данными в формате XML» для конфигурации КД версии «2.1.8.1»: при обновлении правил обмена (через кнопку, которая рядом с выбором файла правил) — не происходит обновления флагов состава правил выгрузки, как у Евгения в видеоуроках. Где и что надо «подпилить» в обработке, чтобы было аналогичное поведение?
Здравствуйте!
В обычной (не управляемой) форме обработки это делается так: нужно найти процедуру ВыполнитьЗагрузкуПравилОбмена(), в ней есть вызов процедуры ВосстановитьОтборыПостроителя(), эту строку нужно закомментировать
Здравствуйте!
Вопрос по видеоуроку 1.4.7: В ПКО КонтактныеЛица поиск установлен по полям Код,Владелец, при кэшировании КонтактногоЛица кэшируется только UUID, поля поиска не учитываются?
Здравствуйте!
КлючВыгружаемыхДанных формируется с помощью функции ЗначениеВСтрокуВнутр() от Источника. Поля поиска и все остальное при этом не учитывается
В 3 лучшем вопросе предалгается создать служебное поле ПКС. Поясните, как это сделать. Пытаюсь создать, произвольное поле, но система не дает. Получается только пустая строка.
Здравствуйте!
Имеется в виду, что можно создать реквизит в Конечной базе, в котором будет хранится Идентификатор соответствующего элемента из Исходной базы.
Скажите, почему в видеоуроке 1.4.7 при переносе контрагентов с контак.лицами, в спр контактные лица создалось два одинаковых элемента Сидоров с разными владельцами, а код у элементов один??
Потому, что было настроено ПКС для свойства Код. Т.е. все данные, включая код, были перенесены из Исходной базы. При загрузке контроль уникальности кодов, как и многие другие проверки, не выполняются
В видео сказано, что поля поиска должны быть проиндексированы в конечной ИБ. Но КодПоКлассификации, судя по выгрузке конечной ИБ, не проиндексирован. И в лучших вопросах тоже говорится, что можно осуществлять поиск по непроиндексированным полям, но это будет медленнее. Часто бывает ситуация, что поле не проиндексировано, а конфигурацию изменять нельзя. Можно пояснить эту ситуацию?
Здравствуйте!
Кроме случаев поиска по Идентификатору, поиска по Коду или Наименованию у Справочников и поиска по Номеру и Дате у Документов, остальные варианты поиска элемента в базе-приемнике происходят с помощью выполнения запроса. Т.е., если Вы отмечаете флагом поиска поле КодПоКлассификации, то будет выполнен запрос с условием на реквизит КодПоКлассификации в разделе «ГДЕ». Для выполнения такого запроса индексировать поле не обязательно.
Вы можете даже отметить флагом поиска поле типа Строка неограниченной длины, но тогда в запросе будет использована конструкция ПОДОБНО, которая существенно замедляет его работу
К первому вопросу. Не согласен с тем, что с РС в плане полей поиска по-другому нельзя, ведь за исключением того, что УИДа у записей РС нет, ничено не мешает проводить поиск в РС по полям поиска, и выполнять различные фишки вроде 2-в-1. Получается существующее ограничение является искусственным (разработчики 1с упростили себе жизнь)?
Записи регистров сведений несколько отличаются от, например, справочников. На них, например, нет ссылок, поэтому «2 в 1» на самом деле может касаться только ресурсов записи. И две записи с одинаковым набором измерений и периодом тоже создать нельзя. Поэтому в большинстве случаев набор измерений -это и есть естественный ключ поиска. А частные случаи можно решить написанием обработчиков
Добрый день. Мне кажется, что стоит уточнить задачу поиска элементов. Часто при переносе наименования групп повторяются. Например, есть группы верхнего уровня (филиал А) и внутри этой группы есть группа (например покупатели). С таким же наименованием группа может быть например в другом филиале. Если искать группы только по наименованию, иерархия в базе приемнике будет отличаться. Поэтому возможно уместно включать в критерий поиска еще родителя.
Здравствуйте!
Да, действительно, поиск группы по наименованию и родителю позволяет избежать многих ошибок
Что за названия у вопросов? Например: ConvData-Session-06-LabelTextColor-QA04.avi — непроработка?
Добрый день!
Рекомендуем на названия файлов не обращаться внимание — файлы называются именно таким образом по техническим причинам.
Здравствуйте,
интересует назначение поля Приоритет закладка Дополнительно ПКО. Столкнулся с такой проблемой: для справочника Сотрудники есть два ПКО, для одного сделано ПВД (указано соотв. ПКО) и еще одно служебное для документа ПриемНаРаботу (перенос реквизита должность, есть входящие параметры). У ПКО для выгрузки приоритет 50, у ПКО служебного приоритет 200. При выгрузке справочника Сотрудники обработкой (вер. 2.1.7) выдаются ошибки (требуются входящие параметры, это не дословно), в общем, почему-то при выгрузке используется служебное ПКО (выгрузка только справочника). Решение: поставить у служебного ПКО приоритет меньше 50. Хотя по идее приоритет по возрастанию должен быть, да и в ПВД указано явно какое ПКО использовать.
Более того, при попытке, что-либо написать в обработчике Поля поиска ПКО для выгрузки, код не отрабатывает. Физически удалил служебное правило из КД (2.1.8.1) и только тогда диагностические сообщения при загрузке из обработчика Поля поиска появились!!!! Но это же невыход, служебные ПКО нужны (для выгрузки/загрузки используются обработки V8Exchan82.epf, т.к. V8Exchan83.epf не открывается, т.к. недоступен контекст УправляемойФормы {ЭтотОбъект — ошибка, ЭтаФорма — все нормально}). Использую ваши конфигурации Исходная и Конечная под 8.3.3.721.
Здравствуйте!
Поле приоритет используется, когда не указано конкретное ПКО (например, у ПКС), и системе требуется подобрать ПКО среди тех, у которых указан требуемый тип Приемника. Если выгрузка происходит по ПВД, в котором явно указано ПКО, то должно использоваться именно оно. Может быть, где-то в ПКС не указано ПКО и происходит подбор. Прикрепите, пожалуйста, zip или rar архив правил, где используется не то ПКО. Я посмотрю.
Про поиск по полям поиска посмотрите на этой странице среди лучших вопросов участников курса вопрос 14, думаю, это Ваш случай
Спасибо за подсказку, у ПКС Родитель ПКО справочника Сотрудники (не служебное, указано в ПВД) надо поставить в Правило ссылку на само себя принудительно (на не служебное ПКО, указанное в ПВД).
Да, и такие случаи очень часты. Поэтому я рекомендую всегда явно указывать ПКО в ПКС
Дико досадная ошибка освещена в «5. Не замещать значение свойства»
пол ночи на нее потратил в свое время!
решение вот такое нашел не совсем универсальное.
править обработку универсального обмена не вариант..
// переменная из модуля универсального обмена, доступная в обработчике
// НужноБылоЗаписатьОбъект
//Если заданы поля поиска, то нужно принудительно
//указать, что объект найден,чтобы он не заменился
Если Объект Неопределено Тогда
Если НЕ НужноБылоЗаписатьОбъект Тогда
ОбъектНайден = Истина;
Сообщить(«Старый объект, поля объекта не замещаем!: «+Объект);
Иначе
Сообщить(«Новый объект: «+Объект);
КонецЕсли;
КонецЕсли;
может кто предложит вариант поинтереснее?
самое печальное что и в 2.1.7 не исправлено
при этом конечно в ПКО должна стоять галочка
«Не замещать существующие объекты в приемнике при загрузке»
Я тут вижу два хороших подхода. Эта ошибка возникает только если стоят флажки «Поиск по уникальному идентификатору» и «Продолжить поиск по полям поиска», причем только если объект был найден именно по полям поиска. Там в этом случае переменная ОбъектНайден остается в значении Ложь, и объект как будто новый заполняется свойствами, поэтому настройка не срабатывает. Можно выполнить поиск вручную — запросом по известным полям поиска, потом записать найденную ссылку в параметр СсылкаНаОбъект и установить ПрекратитьПоиск в Истина. Тогда вроде бы должно работать корректно. Есть второй подход — «в лоб» — можно в ПКО При загрузке, когда свойства объекта еще не перезаписаны, сохранить их значения в Параметры. А потом После загрузки их оттуда извлечь и вернуть на место.
Есть такая ситуация: для групп справочников задано правило поиска по наименованию, пользователь создал в группе Группа1 еще одну группу Группа1, получилось зацикливание, обработка подвисла и только отладчиком получилось найти причину зависания. можно ли предусмотреть такую ситуацию в конвертации?
Здравствуйте!
Установите для групп поиск по Наименованию и Родителю.
Как будет работать синхронизация, если установить флаг «Поле поиска» для реквизита табличной чести?
Здравствуйте!
Синхронизация объектов не изменится никак
В видеоуроке 1.4.7 при переносе с использованием Ключа выгружаемых данных в приемнике получилось два эл-та справочника с разными владельцами, но с одинаковым кодом.
Можно было бы, конечно, отключить ПКС Код и в ПКО прописать его автоматическую генерацию. Но что, если требуется сделать следующее: при первом переносе — оставить тот код который был, а при последующих — генерировать новый?
Есть ли возможность в обработчиках понять, в который раз по заданному ключу выгружается объект?
Здравствуйте!
С помощью Ключа выгружаемых данных выгружаемые объекты сохраняются в специальной коллекции и хранятся там до окончания процесса выгрузки. После окончания выгрузки эта информация теряется, и при следующей выгрузке будет формироваться новая коллекция.
Если Вам нужно знать, который раз объект встретился за одну выгрузку, Вы можете создать параметр с таблицей, где будут Ключи выгружаемых данных объектов и счетчики для них, и в ПКО прописать алгоритм увеличения счетчиков.
Если Вы хотите знать, сколько раз объект был перенесен из базы-источника в базу-приемник, можно создать регистр сведений с историей загрузок.
Здраствуйте! впрос : при переносе справочника сотрудники (код,имя,иин,этогруппа) если выставить поля поиска Имя+ИИН+ЭтоГруппа то дублируются группы справочника а элементы переносятся корректно. ИИН используется только для элементов.
но ведь у групп совпадают поля Имя+ИИН(неопределено)+ЭтоГруппа(Истина). почему дублируются?
Поиск по УИД отключен.
Здравствуйте!
Значение ИНН разное. В загружаемом файле данных указано, что тип реквизита ИНН — Строка, а Значение — Пусто, т.е. пустая строка. А значение реквизита ИНН для группы — даже не Неопределено, а Null.
В 4-ой главе, которая посвящена поискам объектов в базах, приведен пример переноса документов, с поиском по дате и номеру. реквизит, который позволяет установить точное соответствие по дате документов при переносе доступен только при обмене данными на платформе 8. а как быть если обмен данными между 7 и 8?
сейчас у меня возникла такая ситуация:
выгрузка из ТиС 7.7 документов Реализация(розница) и Реализация(купля-продажа, опт вообщем.). выгрузка происходит в УТ 10.3, в которой это только один тип документа – РТУ. понятно, что номера документов у розничной и оптовой реализации могут совпадать. и собственно при загрузке не все документы попадают в УТ, так как поиск по номеру проходит успешно.
как обыграть такую ситуацию подскажите?…
Здравствуйте!
Можно написать запрос, который будет искать документ по номеру и дате, в обработчике «Поля поиска». (Аналогично тому, как рассказано в видео-уроке 1.4.8).