Версия для печати темы (https://pro1c.org.ua/index.php?s=bb3d12303f9d426f91c090043cf4bac8&showtopic=1204)
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ перенос иерархического справочника между конфигурациями
Автор: suhar 26.11.09, 22:28
Помогите пож.!
Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический.
На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.
Автор: MATEVI 26.11.09, 23:48
Цитата(suhar @ 26.11.09, 23:28)
Помогите пож.!
Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический.
На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.
Ну а вчем проблема то?
Если Спр.ЭтоГруппа() Тогда
ТекГруппа =Спр.ТекущийЭлемент();
КонецЕсли; находим в текущей конфе
Потом в другой создаем Группу с помощью
запоминаем и.
Спр1.Родитель=... используем в другой где создаем...
Автор: Ardi 26.11.09, 23:53
Если СпрИсточник.Владелец.Код<>0 Тогда
Ищем по коду справочник владелец в текущей базе. Если его нету - создаём. и в рекурсии создаём всех владельцев владельца.
присваиваем ТекНовому справочника владельца..
-----
А если нужно перенести все справочники - то владельцев владельцев перенести и без рекурсии можно.
Автор: suhar 27.11.09, 5:24
Цитата(MATEVI @ 27.11.09, 0:48)
Ну а вчем проблема то?
Если Спр.ЭтоГруппа() Тогда
ТекГруппа =Спр.ТекущийЭлемент();
КонецЕсли; находим в текущей конфе
Потом в другой создаем Группу с помощью
запоминаем и.
Спр1.Родитель=... используем в другой где создаем...
не совсем понятна логика. спр - справочник-приемник, спр1 - справочник-источник;
спр1.ВэбратьЭлементы();
пока спр1.ПолучитьЭлемент() цикл
если спр1.ЭтоГруппа()=1 тогда
спр.НоваяГруппа();
спр.Наименование=Спр1.ТекущийЭлемент();
спр.Записать();
//как дальше проводить проверку и записывать элементы в нужную группу
Автор: Winter 27.11.09, 9:53
Цитата(Ardi @ 27.11.09, 0:53)
Если СпрИсточник.Владелец.Код<>0 Тогда
Ищем по коду справочник владелец в текущей базе. Если его нету - создаём. и в рекурсии создаём всех владельцев владельца.
присваиваем ТекНовому справочника владельца..
-----
А если нужно перенести все справочники - то владельцев владельцев перенести и без рекурсии можно.
Не путай иерархический справочник и подчиненный. Человека интересует именно иерархический. А вообще почему для этих целей не воспользоваться универсальной обработкой Transref.ert?
Автор: Winter 27.11.09, 9:59
Цитата(suhar @ 27.11.09, 6:24)
не совсем понятна логика. спр - справочник-приемник, спр1 - справочник-источник;
спр1.ВэбратьЭлементы();
пока спр1.ПолучитьЭлемент() цикл
если спр1.ЭтоГруппа()=1 тогда
спр.НоваяГруппа();
спр.Наименование=Спр1.ТекущийЭлемент();
спр.Записать();
//как дальше проводить проверку и записывать элементы в нужную группу
Во-первых, для удобства синхронизируй код, т.е. Не только наименование переноси, но и код. Если код нет возможности, вводи новый реквизит в справочник (в старых конфигурациях был такой реквизит для этого СтарыйПолныйКод) и вноси туда значение переносимого элемента/группы справочника.
Потом проверяешь родителя и его поиск (это я сделал бы через отдельную функцию)
Если Спр1.Родитель.Выбран() =1 Тогда
Если Род.НайтиПоКоду(Спр1.Родитель.Код)=1 Тогда
Спр.Родитель = Род.ТекущийЭлемент()
КонецЕсли;
КонецЕсли;
Род - в этом случае тот же справочник, что и Спр.
Автор: suhar 27.11.09, 14:53
Цитата(Winter @ 27.11.09, 10:59)
Во-первых, для удобства синхронизируй код, т.е. Не только наименование переноси, но и код. Если код нет возможности, вводи новый реквизит в справочник (в старых конфигурациях был такой реквизит для этого СтарыйПолныйКод) и вноси туда значение переносимого элемента/группы справочника.
Потом проверяешь родителя и его поиск (это я сделал бы через отдельную функцию)
Если Спр1.Родитель.Выбран() =1 Тогда
Если Род.НайтиПоКоду(Спр1.Родитель.Код)=1 Тогда
Спр.Родитель = Род.ТекущийЭлемент()
КонецЕсли;
КонецЕсли;
Род - в этом случае тот же справочник, что и Спр.
б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1.
Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя.
как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):
спр=СоздатьОбъект("Справочник.Товар");
спр.новый();
спр.родитель="FDD"; <-------|
спр.код="1991"; //этодолжно попасть в группу------|
спр.наименование="1";//
спр.Записать();
Автор: zetovich 27.11.09, 15:31
Цитата(suhar @ 27.11.09, 15:53)
б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1.
Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя.
как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):
спр=СоздатьОбъект("Справочник.Товар");
спр.новый();
спр.родитель="FDD"; <-------|
спр.код="1991"; //этодолжно попасть в группу------|
спр.наименование="1";//
спр.Записать();
ё маё......
1.ищем родителя (если нужно)
2.нашли....
3. если нашли указываем на родителя....ток не строка, а ссылка на элемент.
....думайте
Автор: Winter 27.11.09, 17:27
Цитата(suhar @ 27.11.09, 15:53)
б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1.
Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя.
как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):
спр=СоздатьОбъект("Справочник.Товар");
спр.новый();
спр.родитель="FDD"; <-------|
спр.код="1991"; //этодолжно попасть в группу------|
спр.наименование="1";//
спр.Записать();
Читай внимательно как я написал:
Спр.Родитель = Род.ТекущийЭлемент()
Только в этом случае ты запишешь в группу, а не в корень
Автор: kapelka_vodu 30.11.09, 9:55
Цитата(suhar @ 26.11.09, 23:28)
Помогите пож.!
Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический.
На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.
напиши свое мыло, я скину тебе универсальную обработку для переноса справочника по группам
Автор: suhar 04.12.09, 17:55
Цитата(kapelka_vodu @ 30.11.09, 10:55)
напиши свое мыло, я скину тебе универсальную обработку для переноса справочника по группам
y.t.suhar@gmail.com
Автор: Кузьмич 07.12.09, 8:56
На ИТСе есть стандартная обработка: tranref.ert называется
Автор: suhar 07.12.09, 23:51
Цитата(Winter @ 27.11.09, 18:27)
Читай внимательно как я написал:
Спр.Родитель = Род.ТекущийЭлемент()
Только в этом случае ты запишешь в группу, а не в корень
прошу изв., но можно еще раз обьяснить - ничего не выходит.
как начать процедуру выборки, как проверить и записать.
вариантов множество перепробывал, выдает ошибки, а точнее 1с вылетает)).
===
ТоварыКпиОле.ВыбратьЭлементы(); //я выбираю элементы с другого справочника
Пока ТоварыКпиОле.ПолучитьЭлемент()=1 Цикл //пока идет выбрка
Если ТоварыКпиОле.Родитель.Выбран() =1 Тогда // если родитель из другого справочника выбран
Если ТоварыКпи.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда //ищу родителя в справочнике приемнике если есть родитель такой
ТоварыКпи.Родитель = ТоварыКпи.ТекущийЭлемент(); //вот здесь уже нипанятна((, как записать сам элемент и как производится в таком случае запись группы???
Автор: Ardi 08.12.09, 0:30
Если ТоварыКпи.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда
ТоварыКпи.Родитель = ТоварыКпи.ТекущийЭлемент();
Тебе нужно два объекта а не один. Текущий Справочник и родитель.
Поэтому
ТоварыКпи=СоздатьОбъект("Справочник.ИмяСпр");
ТоварыКпиРодитель=СоздатьОбъект("Справочник.ИмяСпр");
...
...
Если ТоварыКпиРодитель.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда
Иначе
ТоварыКпиРодитель.НоваяГруппа();
ТоварыКпиРодитель.Код=ТоварыКпиОле.Родитель.Код;
ТоварыКпиРодитель.Записать();
КонецЕсли;
ТоварыКпи.Родитель = ТоварыКпиРодитель.ТекущийЭлемент();
ТоварыКпи.Записать();
Автор: kapelka_vodu 10.12.09, 21:40
Цитата(suhar @ 04.12.09, 18:55)
y.t.suhar@gmail.com
Отправила, смотрите почту.
Автор: suhar 11.12.09, 17:07
Цитата(kapelka_vodu @ 10.12.09, 22:40)
Отправила, смотрите почту.
повтори пожайлуста
Автор: suhar 11.12.09, 19:01
Цитата(Winter @ 27.11.09, 18:27)
Читай внимательно как я написал:
Спр.Родитель = Род.ТекущийЭлемент()
Только в этом случае ты запишешь в группу, а не в корень
Спр.Родитель = Спр.ТекущийЭлемент();
1с вообще вылетает, с ошибками
Автор: Ardi 12.12.09, 1:01
Цитата(suhar @ 11.12.09, 20:01)
Спр.Родитель = Спр.ТекущийЭлемент();
1с вообще вылетает, с ошибками
Ты что? Издеваешся?
Автор: suhar 12.12.09, 18:01
Цитата(Ardi @ 12.12.09, 2:01)
Ты что? Издеваешся?
не понял? че эт я изд.?
Автор: MATEVI 12.12.09, 20:05
Цитата(suhar @ 12.12.09, 19:01)
не понял? че эт я изд.?
Вам же написали "Спр.Родитель =
Род.ТекущийЭлемент()"
а не
Спр.Родитель =
Спр.ТекущийЭлемент();
Как пишете Вы.
Автор: suhar 12.12.09, 22:07
Цитата(MATEVI @ 12.12.09, 21:05)
Вам же написали "Спр.Родитель = Род.ТекущийЭлемент()"
а не
Спр.Родитель = Спр.ТекущийЭлемент();
Как пишете Вы.
но и написали что Род тоже что и Спр.
Мне что надо ссылаться на 3 справочника 2 из которых одинаковые?
Автор: Ardi 12.12.09, 23:29
Там одинаковые ТИПЫ двух справочников.
А самих элементов/групп несколько.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua