Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: перенос иерархического справочника между конфигурациями
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
suhar
Помогите пож.!
Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический.
На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.
MATEVI
Цитата(suhar @ 26.11.09, 23:28) необходимо зарегистрироваться для просмотра ссылки
Помогите пож.!
Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический.
На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.

Ну а вчем проблема то?
Если Спр.ЭтоГруппа() Тогда
ТекГруппа =Спр.ТекущийЭлемент();
КонецЕсли; находим в текущей конфе
Потом в другой создаем Группу с помощью
запоминаем и.
Спр1.Родитель=... используем в другой где создаем...
Ardi
Если СпрИсточник.Владелец.Код<>0 Тогда
Ищем по коду справочник владелец в текущей базе. Если его нету - создаём. и в рекурсии создаём всех владельцев владельца.
присваиваем ТекНовому справочника владельца..

-----
А если нужно перенести все справочники - то владельцев владельцев перенести и без рекурсии можно.
suhar
Цитата(MATEVI @ 27.11.09, 0:48) необходимо зарегистрироваться для просмотра ссылки
Ну а вчем проблема то?
Если Спр.ЭтоГруппа() Тогда
ТекГруппа =Спр.ТекущийЭлемент();
КонецЕсли; находим в текущей конфе
Потом в другой создаем Группу с помощью
запоминаем и.
Спр1.Родитель=... используем в другой где создаем...


не совсем понятна логика. спр - справочник-приемник, спр1 - справочник-источник;
спр1.ВэбратьЭлементы();
пока спр1.ПолучитьЭлемент() цикл
если спр1.ЭтоГруппа()=1 тогда
спр.НоваяГруппа();
спр.Наименование=Спр1.ТекущийЭлемент();
спр.Записать();
//как дальше проводить проверку и записывать элементы в нужную группу
Winter
Цитата(Ardi @ 27.11.09, 0:53) необходимо зарегистрироваться для просмотра ссылки
Если СпрИсточник.Владелец.Код<>0 Тогда
Ищем по коду справочник владелец в текущей базе. Если его нету - создаём. и в рекурсии создаём всех владельцев владельца.
присваиваем ТекНовому справочника владельца..

-----
А если нужно перенести все справочники - то владельцев владельцев перенести и без рекурсии можно.


Не путай иерархический справочник и подчиненный. Человека интересует именно иерархический. А вообще почему для этих целей не воспользоваться универсальной обработкой Transref.ert?
Winter
Цитата(suhar @ 27.11.09, 6:24) необходимо зарегистрироваться для просмотра ссылки
не совсем понятна логика. спр - справочник-приемник, спр1 - справочник-источник;
спр1.ВэбратьЭлементы();
пока спр1.ПолучитьЭлемент() цикл
если спр1.ЭтоГруппа()=1 тогда
спр.НоваяГруппа();
спр.Наименование=Спр1.ТекущийЭлемент();
спр.Записать();
//как дальше проводить проверку и записывать элементы в нужную группу


Во-первых, для удобства синхронизируй код, т.е. Не только наименование переноси, но и код. Если код нет возможности, вводи новый реквизит в справочник (в старых конфигурациях был такой реквизит для этого СтарыйПолныйКод) и вноси туда значение переносимого элемента/группы справочника.
Потом проверяешь родителя и его поиск (это я сделал бы через отдельную функцию)
Если Спр1.Родитель.Выбран() =1 Тогда
Если Род.НайтиПоКоду(Спр1.Родитель.Код)=1 Тогда
Спр.Родитель = Род.ТекущийЭлемент()
КонецЕсли;
КонецЕсли;

Род - в этом случае тот же справочник, что и Спр.
suhar
Цитата(Winter @ 27.11.09, 10:59) необходимо зарегистрироваться для просмотра ссылки
Во-первых, для удобства синхронизируй код, т.е. Не только наименование переноси, но и код. Если код нет возможности, вводи новый реквизит в справочник (в старых конфигурациях был такой реквизит для этого СтарыйПолныйКод) и вноси туда значение переносимого элемента/группы справочника.
Потом проверяешь родителя и его поиск (это я сделал бы через отдельную функцию)
Если Спр1.Родитель.Выбран() =1 Тогда
Если Род.НайтиПоКоду(Спр1.Родитель.Код)=1 Тогда
Спр.Родитель = Род.ТекущийЭлемент()
КонецЕсли;
КонецЕсли;

Род - в этом случае тот же справочник, что и Спр.

б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1.
Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя.
как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):

спр=СоздатьОбъект("Справочник.Товар");
спр.новый();
спр.родитель="FDD"; <-------|
спр.код="1991"; //этодолжно попасть в группу------|
спр.наименование="1";//
спр.Записать();
zetovich
Цитата(suhar @ 27.11.09, 15:53) необходимо зарегистрироваться для просмотра ссылки
б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1.
Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя.
как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):

спр=СоздатьОбъект("Справочник.Товар");
спр.новый();
спр.родитель="FDD"; <-------|
спр.код="1991"; //этодолжно попасть в группу------|
спр.наименование="1";//
спр.Записать();

ё маё......
1.ищем родителя (если нужно)
2.нашли....
3. если нашли указываем на родителя....ток не строка, а ссылка на элемент.
....думайте
Winter
Цитата(suhar @ 27.11.09, 15:53) необходимо зарегистрироваться для просмотра ссылки
б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1.
Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя.
как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):

спр=СоздатьОбъект("Справочник.Товар");
спр.новый();
спр.родитель="FDD"; <-------|
спр.код="1991"; //этодолжно попасть в группу------|
спр.наименование="1";//
спр.Записать();


Читай внимательно как я написал:
Спр.Родитель = Род.ТекущийЭлемент()
Только в этом случае ты запишешь в группу, а не в корень
kapelka_vodu
Цитата(suhar @ 26.11.09, 23:28) необходимо зарегистрироваться для просмотра ссылки
Помогите пож.!
Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический.
На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.

напиши свое мыло, я скину тебе универсальную обработку для переноса справочника по группам
suhar
Цитата(kapelka_vodu @ 30.11.09, 10:55) необходимо зарегистрироваться для просмотра ссылки
напиши свое мыло, я скину тебе универсальную обработку для переноса справочника по группам

y.t.suhar@gmail.com
Acid
На ИТСе есть стандартная обработка: tranref.ert называется
suhar
Цитата(Winter @ 27.11.09, 18:27) необходимо зарегистрироваться для просмотра ссылки
Читай внимательно как я написал:
Спр.Родитель = Род.ТекущийЭлемент()
Только в этом случае ты запишешь в группу, а не в корень

прошу изв., но можно еще раз обьяснить - ничего не выходит.
как начать процедуру выборки, как проверить и записать.
вариантов множество перепробывал, выдает ошибки, а точнее 1с вылетает)).
===
ТоварыКпиОле.ВыбратьЭлементы(); //я выбираю элементы с другого справочника
Пока ТоварыКпиОле.ПолучитьЭлемент()=1 Цикл //пока идет выбрка
Если ТоварыКпиОле.Родитель.Выбран() =1 Тогда // если родитель из другого справочника выбран
Если ТоварыКпи.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда //ищу родителя в справочнике приемнике если есть родитель такой
ТоварыКпи.Родитель = ТоварыКпи.ТекущийЭлемент(); //вот здесь уже нипанятна((, как записать сам элемент и как производится в таком случае запись группы???
Ardi
Если ТоварыКпи.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда
ТоварыКпи.Родитель = ТоварыКпи.ТекущийЭлемент();

Тебе нужно два объекта а не один. Текущий Справочник и родитель.
Поэтому
ТоварыКпи=СоздатьОбъект("Справочник.ИмяСпр");
ТоварыКпиРодитель=СоздатьОбъект("Справочник.ИмяСпр");
...
...
Если ТоварыКпиРодитель.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда

Иначе
ТоварыКпиРодитель.НоваяГруппа();
ТоварыКпиРодитель.Код=ТоварыКпиОле.Родитель.Код;
ТоварыКпиРодитель.Записать();
КонецЕсли;
ТоварыКпи.Родитель = ТоварыКпиРодитель.ТекущийЭлемент();
ТоварыКпи.Записать();
kapelka_vodu
Цитата(suhar @ 04.12.09, 18:55) необходимо зарегистрироваться для просмотра ссылки
y.t.suhar@gmail.com

Отправила, смотрите почту.
suhar
Цитата(kapelka_vodu @ 10.12.09, 22:40) необходимо зарегистрироваться для просмотра ссылки
Отправила, смотрите почту.

повтори пожайлуста
suhar
Цитата(Winter @ 27.11.09, 18:27) необходимо зарегистрироваться для просмотра ссылки
Читай внимательно как я написал:
Спр.Родитель = Род.ТекущийЭлемент()
Только в этом случае ты запишешь в группу, а не в корень

Спр.Родитель = Спр.ТекущийЭлемент();
1с вообще вылетает, с ошибками
Ardi
Цитата(suhar @ 11.12.09, 20:01) необходимо зарегистрироваться для просмотра ссылки
Спр.Родитель = Спр.ТекущийЭлемент();
1с вообще вылетает, с ошибками

Ты что? Издеваешся?
suhar
Цитата(Ardi @ 12.12.09, 2:01) необходимо зарегистрироваться для просмотра ссылки
Ты что? Издеваешся?

не понял? че эт я изд.?
MATEVI
Цитата(suhar @ 12.12.09, 19:01) необходимо зарегистрироваться для просмотра ссылки
не понял? че эт я изд.?

Вам же написали "Спр.Родитель = Род.ТекущийЭлемент()"
а не
Спр.Родитель = Спр.ТекущийЭлемент();
Как пишете Вы.
suhar
Цитата(MATEVI @ 12.12.09, 21:05) необходимо зарегистрироваться для просмотра ссылки
Вам же написали "Спр.Родитель = Род.ТекущийЭлемент()"
а не
Спр.Родитель = Спр.ТекущийЭлемент();
Как пишете Вы.

но и написали что Род тоже что и Спр.
Мне что надо ссылаться на 3 справочника 2 из которых одинаковые?
Ardi
Там одинаковые ТИПЫ двух справочников.
А самих элементов/групп несколько.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.