Помогите пож.! Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический. На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.
Помогите пож.! Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический. На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.
Ну а вчем проблема то? Если Спр.ЭтоГруппа() Тогда ТекГруппа =Спр.ТекущийЭлемент(); КонецЕсли; находим в текущей конфе Потом в другой создаем Группу с помощью запоминаем и. Спр1.Родитель=... используем в другой где создаем...
Если СпрИсточник.Владелец.Код<>0 Тогда Ищем по коду справочник владелец в текущей базе. Если его нету - создаём. и в рекурсии создаём всех владельцев владельца. присваиваем ТекНовому справочника владельца..
----- А если нужно перенести все справочники - то владельцев владельцев перенести и без рекурсии можно.
Ну а вчем проблема то? Если Спр.ЭтоГруппа() Тогда ТекГруппа =Спр.ТекущийЭлемент(); КонецЕсли; находим в текущей конфе Потом в другой создаем Группу с помощью запоминаем и. Спр1.Родитель=... используем в другой где создаем...
не совсем понятна логика. спр - справочник-приемник, спр1 - справочник-источник; спр1.ВэбратьЭлементы(); пока спр1.ПолучитьЭлемент() цикл если спр1.ЭтоГруппа()=1 тогда спр.НоваяГруппа(); спр.Наименование=Спр1.ТекущийЭлемент(); спр.Записать(); //как дальше проводить проверку и записывать элементы в нужную группу
Если СпрИсточник.Владелец.Код<>0 Тогда Ищем по коду справочник владелец в текущей базе. Если его нету - создаём. и в рекурсии создаём всех владельцев владельца. присваиваем ТекНовому справочника владельца..
----- А если нужно перенести все справочники - то владельцев владельцев перенести и без рекурсии можно.
Не путай иерархический справочник и подчиненный. Человека интересует именно иерархический. А вообще почему для этих целей не воспользоваться универсальной обработкой Transref.ert?
не совсем понятна логика. спр - справочник-приемник, спр1 - справочник-источник; спр1.ВэбратьЭлементы(); пока спр1.ПолучитьЭлемент() цикл если спр1.ЭтоГруппа()=1 тогда спр.НоваяГруппа(); спр.Наименование=Спр1.ТекущийЭлемент(); спр.Записать(); //как дальше проводить проверку и записывать элементы в нужную группу
Во-первых, для удобства синхронизируй код, т.е. Не только наименование переноси, но и код. Если код нет возможности, вводи новый реквизит в справочник (в старых конфигурациях был такой реквизит для этого СтарыйПолныйКод) и вноси туда значение переносимого элемента/группы справочника. Потом проверяешь родителя и его поиск (это я сделал бы через отдельную функцию) Если Спр1.Родитель.Выбран() =1 Тогда Если Род.НайтиПоКоду(Спр1.Родитель.Код)=1 Тогда Спр.Родитель = Род.ТекущийЭлемент() КонецЕсли; КонецЕсли;
Во-первых, для удобства синхронизируй код, т.е. Не только наименование переноси, но и код. Если код нет возможности, вводи новый реквизит в справочник (в старых конфигурациях был такой реквизит для этого СтарыйПолныйКод) и вноси туда значение переносимого элемента/группы справочника. Потом проверяешь родителя и его поиск (это я сделал бы через отдельную функцию) Если Спр1.Родитель.Выбран() =1 Тогда Если Род.НайтиПоКоду(Спр1.Родитель.Код)=1 Тогда Спр.Родитель = Род.ТекущийЭлемент() КонецЕсли; КонецЕсли;
Род - в этом случае тот же справочник, что и Спр.
б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1. Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя. как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):
спр=СоздатьОбъект("Справочник.Товар"); спр.новый(); спр.родитель="FDD"; <-------| спр.код="1991"; //этодолжно попасть в группу------| спр.наименование="1";// спр.Записать();
б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1. Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя. как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):
спр=СоздатьОбъект("Справочник.Товар"); спр.новый(); спр.родитель="FDD"; <-------| спр.код="1991"; //этодолжно попасть в группу------| спр.наименование="1";// спр.Записать();
ё маё...... 1.ищем родителя (если нужно) 2.нашли.... 3. если нашли указываем на родителя....ток не строка, а ссылка на элемент. ....думайте
б..., не могу записать элемент внутри группы-родителя, элемент записывается в корне справочника, т.е. уровень 1. Как я понимаю атрибут Родитель должен указывать на группу родителя и записывать элемент в группу родителя. как это можно организовать. даже простейший пример не работает (если логика этого примера верна)))):
спр=СоздатьОбъект("Справочник.Товар"); спр.новый(); спр.родитель="FDD"; <-------| спр.код="1991"; //этодолжно попасть в группу------| спр.наименование="1";// спр.Записать();
Читай внимательно как я написал: Спр.Родитель = Род.ТекущийЭлемент() Только в этом случае ты запишешь в группу, а не в корень
Группа: Пользователи
Сообщений: 32
Из: Крым, Симферополь
Спасибо сказали: 10 раз
Рейтинг: 0
Цитата(suhar @ 26.11.09, 23:28)
Помогите пож.! Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический. На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.
напиши свое мыло, я скину тебе универсальную обработку для переноса справочника по группам
Читай внимательно как я написал: Спр.Родитель = Род.ТекущийЭлемент() Только в этом случае ты запишешь в группу, а не в корень
прошу изв., но можно еще раз обьяснить - ничего не выходит. как начать процедуру выборки, как проверить и записать. вариантов множество перепробывал, выдает ошибки, а точнее 1с вылетает)). === ТоварыКпиОле.ВыбратьЭлементы(); //я выбираю элементы с другого справочника Пока ТоварыКпиОле.ПолучитьЭлемент()=1 Цикл //пока идет выбрка Если ТоварыКпиОле.Родитель.Выбран() =1 Тогда // если родитель из другого справочника выбран Если ТоварыКпи.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда //ищу родителя в справочнике приемнике если есть родитель такой ТоварыКпи.Родитель = ТоварыКпи.ТекущийЭлемент(); //вот здесь уже нипанятна((, как записать сам элемент и как производится в таком случае запись группы???
Если ТоварыКпи.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда ТоварыКпи.Родитель = ТоварыКпи.ТекущийЭлемент();
Тебе нужно два объекта а не один. Текущий Справочник и родитель. Поэтому ТоварыКпи=СоздатьОбъект("Справочник.ИмяСпр"); ТоварыКпиРодитель=СоздатьОбъект("Справочник.ИмяСпр"); ... ... Если ТоварыКпиРодитель.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда
Иначе ТоварыКпиРодитель.НоваяГруппа(); ТоварыКпиРодитель.Код=ТоварыКпиОле.Родитель.Код; ТоварыКпиРодитель.Записать(); КонецЕсли; ТоварыКпи.Родитель = ТоварыКпиРодитель.ТекущийЭлемент(); ТоварыКпи.Записать();
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!