Перенес из двух баз (БСО 20 и 30) справочники в одну базу ( Управление строительной организации)
У справочника сохранился только первый уровень иерархии.
Поиск элемента хочу осуществить по коду, наименованию, полному наименованию. инн
Поиск группы надо делать только по наименованию и родителю.
До этого я находил способ в ПКО в событие Поля поиска добавить:
Если СвойстваПоиска["ЭтоГруппа"] Тогда
СтрокаИменСвойствПоиска = "Наименование, ЭтоГруппа, Родитель";
Иначе
СтрокаИменСвойствПоиска = "ПолноеНаименование, ИНН, Код";
КонецЕсли;
Но видимо не работает, не знаю возможно из-за того что есть ПКС которых не может быть у группы справочника(ИНН к примеру), кстати это первый вопрос(Как при этом отрабатывается ПКС и ПКО для групп справочника)
Нашел способ создания для родителя справочника ПКО для переноса групп(ПКС только характерные для групп справочника)
При этом в ПКО в событие перед выгрузкой стоит
Отказ = Источник.ЭтоГруппа;
И если я выбираю выгружать этот справочник при выгрузке каждого элемента где заполнен Родитель будет вызываться ПКО для конвертации групп справочника. Т.е. там не должны обрабатываться элементы справочника.
Но я поставил вывод сообщения в перед выгрузкой Если Источник.ЭтоГруппа = Ложь Тогда Сообщить("жавжвадж") КонецЕсли; И сообщения эти выводятся, значит в ПКО для групп в источник попадюn и просто элементы.
Может я туплю на ночь глядя. но логика работы и последовательность выполнения остается для меня загадкой.
Добавил в ПКО для групп
Если Источник.ЭтоГруппа = Ложь Тогда
Отказ = Истина
КонецЕсли;
И вроде отрабатывает как нужно.
Но разобраться как нужно делать не строя все на каких то костылях все еще хочется, тем более там есть еще такие справочники.
И важно как проходит поиск по внутреннему идентификатору. В каких случаях они будут одинаковые в обеих базах?
А количество уровней иерархии в приемнике такое же как в источнике?
По внутреннему идентификатору ищется, если стоит соответствующая галка. При этом если дополнительно стоит галка "Продолжить поиск по полям поиска, ", то в случае если не найдет по внутреннему ИД, начнет искать по указанным полям поиска. Если найдет по полям поиска, то идентификаторы могут отличаться (если были созданы в разных базах независимо), иначе создаст новый элемент с идентификатором из источника (если на текущий момент не поменяли ничего, давно разбирался).
В качестве полей поиска надо указать все поля поиска, которые встречаются и в группах и в элементах, для вашего случая это "Наименование, ЭтоГруппа, Родитель" и "ПолноеНаименование, ИНН, Код", только для элементов также добавьте реквизит "ЭтоГруппа", а "Родитель" лучше всего исключить, иначе при переносе из группы в группу, могут быть задвоения (если элемент ранее не переносился, а уже есть в приемнике в другой группе)
(3) adva, я так сначала и сделал. Указал просто по все поля поиска чтобы элемент был уникален. Он создал самые верхние папки справочника, а подпапки проигнорировал. И элементы что в них должны быть попали либо в корень, либо на уровень выше.
(4) adva, я погуглил, что это за пКГС, но в КД подобного не нашел. Да и не понял что нужно было бы сделать и как оно работает если бы и нашел
(2) kot30688, да мне нужно чтобы иерархия была как в источнике.
При этом я перенес таки, но с созданием ПКО отделно для групп. А там десятки же справочников. Скорее всего я где то что то сделал не так.
для групп не обязательно создавать отдельное правило, можете просто для элементов ПКГС создать в котором прописать Если ЭтоГруппа Тогда Отказ = Истина КонецЕсли;, и туда перенести реквизиты только для элементов, но вроде бы этого делать не обязательно (если только какой-то код выполняется при переносе реквизитов, который может к ошибкам привести).
Чтобы иерархия была как в базе из которой вы все тяните, то нужно просто добавить реквизит ЭтоГруппа в ПКО и по нему также осуществлять поиск и не забыть про ПКС родитель.