OLE перенос справочника (проблема с родителем и уровнями иерархии)... #349588


#0 by Старуха Шапокляк
Здравствуйте, пытаюсь по OLE перенести контрагентов из одной базы в другую. В результате группы создаются, но только с одним уровнем вложенности (иерархии), а у нас может быть и три уровня. Создаются и элементы, но они не привязанны ни к одному родителю. Помогите пож-та, как мне при переносе соблюсти многоуровневость и подчиненность элемента родителю. P.S. Синхронизация по кодам мне не нужна. Процедура Сформировать
#1 by Mort
Рекурсия рулит.
#2 by Ёпрст
Прежде чем лепить бездумно новые, нужно в начале найти существующие ... та и рекурсия рулит ...
#3 by dk
Можно и без рекурсии С рекурсией работала?
#4 by Лефмихалыч
(1,2) если оперативы дохрена...
#5 by Mort
Выборка по родителю     В цикле СоздатьОбъект(Ввборка);     Как то так.
#6 by Mort
В справочниках человеческих не больше шести-семи уровней, оператива не нужна.
#7 by Ёпрст
Можно, но с рекурсией кода меньше..
#8 by Старуха Шапокляк
, а что такое рекурсия?
#9 by Лефмихалыч
да в идеале вообще все здорово. А бывают справочники и большей вложенностью. Бывают справочники с дохрена элементов, многие из которых - неограниченые строки. о как!..
#10 by Ёпрст
Вызов функции самой из себя... Основ программирования нема ? Окромя 1с -ины не на чем не писала до того как ? ...
#11 by H A D G E H O G s
Вот как - то так. И будет вам иерархия..
#12 by Если
Малаца!
#13 by Старуха Шапокляк
тихо схожу с ума ...
#14 by H A D G E H O G s
Рекурсия вверх.. Дольше, зато для единичного объекта - самое то..
#15 by Tsar
а) При создании группы родителя, тоже нужно определять б) Нужно учесть, что у первого уровня родителя нет в) НайтиПоНаименованию - не коректно, т.к. Наименование не уникальный реквизит лучше рекурсия - тогда вообще можно без поиска обойтись
#16 by H A D G E H O G s
Это восьмерка...
#17 by Ёпрст
последний пункт наглое враньё..
#18 by Старуха Шапокляк
спасибо конечно, а нет ли способа, чтобы по-проще как-то находить родителя...???
#19 by Ёпрст
+17 точнее, что "тогда вообще можно без поиска обойтись"
#20 by H A D G E H O G s
Пропишешь раз - и пользуйся везде, потом тока реквизиты, имя справочников меняй..
#21 by H A D G E H O G s
#22 by Ёпрст
Для начала, нужно определиться, по какому признаку будешь синхронизировать элементы в разных базах...
#23 by Старуха Шапокляк
спасибо, но боюсь, что я это не осилю... конфигурации баз совершенно разные, синхронизировать надо по наименованию (коды значения не имеют)...
#24 by H A D G E H O G s
По коду (уникален)/GUID-у (что нам в семерке? ID?) и доп реквизиту в локальном справочнике. Тут думать нечего...
#25 by Tsar
Пример
#26 by Tsar
(17,19) Где в поиск?
#27 by Ёпрст
Дык код нерабочий, а если его второй раз запустить - то вообще привет...
#28 by Ёпрст
+27 Та и с первого раза тоже хню делает...
#29 by Tsar
да возможно надо так: Процедура ЗагрузитьГруппу(ОлеГр,Знач ТекГр) Но остальное должно работать Я не могу понять зачем запускать загрузку два раза :)
#30 by Ёпрст
так тоже не работает... Думаешь, новых элементов не могут добавить за всё время работы в базе ???
#31 by Tsar
В чем ошибка? или хотябы какой результат?
#32 by Ёпрст
Да его и так видно - элементы справочника лепятся в последней группе...
#33 by Tsar
ты пробывал? на мой взгляд все должно быть хорошо
#34 by Старуха Шапокляк
пишет ошибку: Если Оле.Уровень > 1 Тогда {C:ОЛЕ_100708.ERT}: Поле агрегатного объекта не обнаружено (Уровень)
#36 by Tsar
Чуть промахнулся :)
#37 by Ёпрст
код весь - в топку... ЗЫ: Чтоб не проверять на уровень, делают ПолучитьЭлемент или ВключатьПодчиненные А так - такой код нафик ненужен, ибо его повторное выполнение недопустимо.
#38 by Старуха Шапокляк
спасибо, теперь выдает ошибку на: {C:ОЛЕ_100708_2.ERT}: Неверный тип справочника
#39 by Старуха Шапокляк
?
#40 by Ёпрст
Не изобретай велосипед, возьми универсал, к примеру - всё перенесётся...
#41 by Дядя Васька
Чтобы понять что такое рекурсия, надо понять что такое рекурсия :)
#42 by Старуха Шапокляк
Не думала, что такая простая задача будет так сложно решаться. А где взять этот Универсал? Мне бы как-нибудь без рекурсии обойтись... :(
#43 by Ёпрст
#44 by Ёпрст
Она и так очень простая... А чего непонятного в рекурсивном вызове функции? ...
#45 by Старуха Шапокляк
спасибо, скачала Универсал. Попробовала им запустить перенос, ничего не переносит, а выводит ошибки: Ошибка назначения типа реквизита неопределенного вида ПолнНаименование справочника Контрагенты.  ** 20 Поле агрегатного объекта не обнаружено (Реквизит) Ошибка назначения типа реквизита неопределенного вида ЮридическийАдрес справочника Контрагенты.  ** 20 Поле агрегатного объекта не обнаружено (Реквизит) Ошибка назначения типа реквизита неопределенного вида Телефоны справочника Контрагенты.  ** 20 Поле агрегатного объекта не обнаружено (Реквизит)
#46 by Ёпрст
круто :) А правила переноса настроила ? ...
#47 by Старуха Шапокляк
2. Инициализировала базу-приемник; 3. На вкладке-Справочники выбрала соответствие справочника-источника справочнику-приемнику, указала соответствие их реквизитов; 4. Нажала ВыполнениеПереноса Процесс пошел, но в окне сообщений ошибки, как в P.S. Может где-то еще надо настроить?
#48 by Ёпрст
чего за конфы то хоть ? Синхронизацию по какому реквизиту выставила ? По Наименованию?...
#49 by Старуха Шапокляк
1-ая конф-ция - 1СБухгалтерия, 2-ая - 1СКанцелярия. Да, синхронизацию по наименованию делала. Мне там надо то всего Наименования, Юр.адрес и телефоны перенести, соблюдая иерархию...
#50 by kdm
"1-ая конф-ция - 1СБухгалтерия, 2-ая - 1СКанцелярия. " - упсссс....
#51 by Ёпрст
кинь  md-ник от канцелярии в архиве поглядеть ...
#52 by Старуха Шапокляк
А на какой эл.адрес скинуть?
#53 by Ёпрст
Та на кидай
#54 by Старуха Шапокляк
скинула md-шник на Надо загрузить поля: Наименование, ПолноеНаименование, ЮрАдрес и Телефон из спр.Контрагенты (в Бухгалтерии) в спр.Корреспонденты (Канцелярия, его md-шник я выложила).
#55 by Impressing3
Хм..на мой взгляд все правильно написано у автора, только при нахождении группы надо заново запускать эту процедуру и передавать в нее эту группу и лазить в этой группе.. нашли еще группу, лезем внутрь еще, и т.д.... пока до конечного элемента не доберемся... Тьфу..собственно это уже и писали тут..
#56 by Старуха Шапокляк
Теоритически я все это понимаю, а вот как это все запихнуть в мой код...
#57 by Ёпрст
Взял демку от бухии, развернул конфу из твоего мд-ника... далее в бухне выставил всё прекрасно перенеслось.
#58 by Старуха Шапокляк
разобралась: я перепутала базу-источник и базу-приемник. Указала как надо, вроде перенеслось, но при ближайшем рассмотрении выяснилось: 1. перенес только те группы, у кого один уровень вложенности, а если свыше одного уровня - то не перенес ничего :( 2. перенес только Наименование, а адрес и телефоны - нет :( P.S. Т.е. опять вернулись к проблеме с иерархией... Может подскажет кто-нибудь, как мне поправить мой код в , чтобы подвязывался и родитель и если больше одного уровня... HELP!!!
#59 by kdm
странно у мну все перенеслось, все три уровня при этом правда писала: "Ошибка назначения типа реквизита неопределенного вида ПолнНаименование справочника Контрагенты.  ** 20 Поле агрегатного объекта не обнаружено (Реквизит) Ошибка назначения типа реквизита неопределенного вида ЮридическийАдрес справочника Контрагенты.  ** 20 Поле агрегатного объекта не обнаружено (Реквизит) Ошибка назначения типа реквизита неопределенного вида Телефоны справочника Контрагенты.  ** 20 Поле агрегатного объекта не обнаружено (Реквизит) но элементы и значения реквизитов перенеслись. Это вопрос к Самому то лень смотреть.
#60 by DrZombi
Целый год на форуме, и не могешь перенос организовать :( Начни хотя бы с простого, перенос первого уровня справочника :) Затем второго... Хотя тут все дело в порядке передаваемых данных. Сначала сформируй ТЗ - Таблицу значений, где данные будут представлены в иерархии:     1 стр. Группа клиента №1 (уровень 1)       2 стр. элемент группы (Группа клиента №1) (уровень 2)     3 стр. Группа клиента №2 (уровень 1)       4 стр. Группа клиента №3 (уровень 2)         2 стр. элемент группы (Группа клиента №2) (уровень 3) и т.д. Потов загружаешь в том же порядке :)
#61 by DrZombi
+2 стр. элемент группы (Группа клиента №2) (уровень 3) => 5 стр. элемент группы (Группа клиента №3) (уровень 3) Ошибся малось
#62 by Ёпрст
всё переносится :)) Мот тебе все картинки по шагам выложить? ...
#63 by Serjant
Не мучайся:
#64 by Старуха Шапокляк
у меня тоже такие же сообщения выходят, я их выложила в . спасибо за участие, может быть у Вас другая структура справочника, но у меня не переносит, если допустим: Так вот, при такой структуре справочника, переносит только Микрорайон (1уровень). А остальное не переносит...
#65 by Ёпрст
конфы разные... Переносит всё. Выкладывай скриншот с настройками, на сообщения об ошибках - забей... Переключатели правильно установила ? В настройке соответствия выставила галку - перезаписывать объекты ? ...
#66 by Старуха Шапокляк
Немного не так структуру отобразила, должно быть так: спасибо, но дает скачать только для зарегистрированных пользователей, и осуществляет перенос между одинаковыми базами, а у меня конфигурации разные.
#67 by DrZombi
Это я тебе пример без рекурсии привел, можно сказать тоже самое, если бы ты считала на пальцах ;)
#68 by Ёпрст
Забил 3 уровня - всё перенеслось...
#69 by Старуха Шапокляк
скинула свои настройки на Смотрю ваши настройки - вроде все аналогично :(
#70 by Ёпрст
не переносит только по одной причине - есть одинаковые наименования в справочнике... Или наименование группы совпадает с наименованием элемента справочника... Я б так сделал - тип кода в канцелярии выставил бы как текстовый, и переносил бы с синхронизацией по коду, предвартиельно перебив все коды в справочнике Корренспонденты с каким-нить префиксом.
#71 by Ёпрст
+70 Надеюс, переносом на копии базы играешься ? :)
#72 by Старуха Шапокляк
спасибо, сейчас так тоже попробую. да, конечно на копии ;)
#73 by svaroha
В основном, вся проблема в том, что сравнивают по наименованию. Почему бы не сделать в базе-приемнике реквизит КодСвязи и уже сравнивать КодСвязиСправочника и КодСвязиПриемника. Коды то уникальны (если конечно проставлена признак уникальности), а наименование может и совпадать. Хуже всего, когда наименов. группы=наименов элемента.
#74 by Ёпрст
КодСвязи с какого перепугу будет уникальным ? И как будешь добиваться этого ? :))
#75 by Serjant
Вот пример: Хотя если у элемента и у группы внутри одного подчинения будут одинаковые наименования вылетит с ошибкой
#76 by svaroha
Код в базе источника уникальный?? Я думаю уникальный. При загрузке из БД источника заполняем и КодСвязи = КодБДИсточника. Тогда при загрузке из БДИсточник я бы проверял бы сразу КодСвязи, а если не находил бы код связи, тогда по наименованию. И вообще, если уж грузить, выборку нужно упорядочить таким образом, чтобы ишли сначала все группы (сортировка УровеньИерархии по возрастанию, а потом уже при загруженных группах - грузил бы элементы. Если запросом, то (выбрать Элемент.ЭтоГруппа = Истина ... Соединить Элемент.ЭтоГруппа = ложь). Где то так. Зато при последующих перегрузках всегда есть связь элементов источника и элементов приемника.
#77 by Ёпрст
А что, просто синхронизировать по Коду справочника религия мешает ? Нафига сдался еще один реквизит? ...
#78 by Старуха Шапокляк
***** Ёпрст3 большое Вам СПАСИБО за участие и помощь в решении моей проблемы!!! Сделала, как Вы посоветовали в : в Канцелярии сделала текстовый код, увеличила длину кода до 8-ми (чтобы как в Бухгалтерии было) и перенумеровала с префиксом. Затем запустила Универсал - все отлично перенеслось с соблюдением иерархии. Только почему-то не перенеслись реквизиты ЮрАдрес и Телефон... Спасибо, сейчас попробую и Ваш вариант.
#79 by Ёпрст
Странно, у меня переносится всё... :( С синхронизацией по коду можешь теперь сколько угодно раз переносить - он будет просто обновлять существующие...
#80 by svaroha
Можно, если это первая выгрузка. И потом все элементы будут синхронизироватся по коду. То можно. А вообще то, для контрагентов, униклаьным кодом обычно является ЭДРПОУ/ИНН.
#81 by Ёпрст
Не угадал. Может буть один ИНН и разный КПП ...
#82 by Старуха Шапокляк
Это чудо!!! Код работает, переносится иерархия корректно. Только не пойму, почему переносит из реквизитов только Наименование, а Адрес и Телефон - нет :( Причем, если пользоваться Универсалом, то тоже не переносит Адрес и Телефон. Хотя я добавила в коде строчки: ... ... ТСпр.Новый; ... ...
#83 by Старуха Шапокляк
+  Serjant С П А С И Б О !!!
#84 by Ёпрст
... В бухне, случаем, не меняла реквизиты Адрес и телефон, на периодические, к примеру ?...И это, они вообще заполнены хоть?...
#85 by Старуха Шапокляк
все переносится нормально - извините, была моя ошибка... ВСЕМ КТО ПОМОГАЛ ОГРОМНОЕ С П А С И Б О !!!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С