Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> перенос иерархического справочника между конфигурациями 2 страниц V   1 2 >          
suhar Подменю пользователя
сообщение 26.11.09, 22:28
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Помогите пож.!
Есть 2 конфы, из одной надо вытащить справочник в другую. Справочник иерархический.
На данном этапе есть подключение к другой базе и могу вытащить все записи справочника но без разбития по группам.

MATEVI Подменю пользователя
сообщение 26.11.09, 23:48
Сообщение #2

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 957 раз
Рейтинг: 0

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

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

Ardi Подменю пользователя
сообщение 26.11.09, 23:53
Сообщение #3

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Если СпрИсточник.Владелец.Код<>0 Тогда
Ищем по коду справочник владелец в текущей базе. Если его нету - создаём. и в рекурсии создаём всех владельцев владельца.
присваиваем ТекНовому справочника владельца..

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


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

suhar Подменю пользователя
сообщение 27.11.09, 5:24
Сообщение #4

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

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


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

Winter Подменю пользователя
сообщение 27.11.09, 9:53
Сообщение #5

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Kiev
Спасибо сказали: 2 раз
Рейтинг: 0

Цитата(Ardi @ 27.11.09, 0:53) *
Если СпрИсточник.Владелец.Код<>0 Тогда
Ищем по коду справочник владелец в текущей базе. Если его нету - создаём. и в рекурсии создаём всех владельцев владельца.
присваиваем ТекНовому справочника владельца..

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


Не путай иерархический справочник и подчиненный. Человека интересует именно иерархический. А вообще почему для этих целей не воспользоваться универсальной обработкой Transref.ert?

Winter Подменю пользователя
сообщение 27.11.09, 9:59
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Kiev
Спасибо сказали: 2 раз
Рейтинг: 0

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


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

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

Спасибо сказали: suhar,

suhar Подменю пользователя
сообщение 27.11.09, 14:53
Сообщение #7

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

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

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

zetovich Подменю пользователя
сообщение 27.11.09, 15:31
Сообщение #8

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 718
Из: Северодонецк
Спасибо сказали: 121 раз
Рейтинг: 0

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

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

ё маё......
1.ищем родителя (если нужно)
2.нашли....
3. если нашли указываем на родителя....ток не строка, а ссылка на элемент.
....думайте

Winter Подменю пользователя
сообщение 27.11.09, 17:27
Сообщение #9

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Kiev
Спасибо сказали: 2 раз
Рейтинг: 0

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

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


Читай внимательно как я написал:
Спр.Родитель = Род.ТекущийЭлемент()
Только в этом случае ты запишешь в группу, а не в корень

kapelka_vodu Подменю пользователя
сообщение 30.11.09, 9:55
Сообщение #10

Общительный
**
Группа: Пользователи
Сообщений: 32
Из: Крым, Симферополь
Спасибо сказали: 10 раз
Рейтинг: 0

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

напиши свое мыло, я скину тебе универсальную обработку для переноса справочника по группам

suhar Подменю пользователя
сообщение 04.12.09, 17:55
Сообщение #11

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

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

y.t.suhar@gmail.com

Acid Подменю пользователя
сообщение 07.12.09, 8:56
Сообщение #12

Про1С-ник
Иконка группы
За заслуги на форуме в 2010 году
Группа: Местный
Сообщений: 2104
Из: Занзибар
Спасибо сказали: 378 раз
Рейтинг: 262

На ИТСе есть стандартная обработка: tranref.ert называется


Signature

Документируйте Код! мать вашу...


suhar Подменю пользователя
сообщение 07.12.09, 23:51
Сообщение #13

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

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

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

Ardi Подменю пользователя
сообщение 08.12.09, 0:30
Сообщение #14

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

Если ТоварыКпи.НайтиПоКоду(ТоварыКпиОле.Родитель.Код)=1 Тогда
ТоварыКпи.Родитель = ТоварыКпи.ТекущийЭлемент();

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

Иначе
ТоварыКпиРодитель.НоваяГруппа();
ТоварыКпиРодитель.Код=ТоварыКпиОле.Родитель.Код;
ТоварыКпиРодитель.Записать();
КонецЕсли;
ТоварыКпи.Родитель = ТоварыКпиРодитель.ТекущийЭлемент();
ТоварыКпи.Записать();


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: suhar,

kapelka_vodu Подменю пользователя
сообщение 10.12.09, 21:40
Сообщение #15

Общительный
**
Группа: Пользователи
Сообщений: 32
Из: Крым, Симферополь
Спасибо сказали: 10 раз
Рейтинг: 0

Цитата(suhar @ 04.12.09, 18:55) *
y.t.suhar@gmail.com

Отправила, смотрите почту.

suhar Подменю пользователя
сообщение 11.12.09, 17:07
Сообщение #16

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(kapelka_vodu @ 10.12.09, 22:40) *
Отправила, смотрите почту.

повтори пожайлуста

suhar Подменю пользователя
сообщение 11.12.09, 19:01
Сообщение #17

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

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

Спр.Родитель = Спр.ТекущийЭлемент();
1с вообще вылетает, с ошибками

Ardi Подменю пользователя
сообщение 12.12.09, 1:01
Сообщение #18

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

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

Ты что? Издеваешся?


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

suhar Подменю пользователя
сообщение 12.12.09, 18:01
Сообщение #19

Общительный
**
Группа: Пользователи
Сообщений: 10
Из: Киев
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(Ardi @ 12.12.09, 2:01) *
Ты что? Издеваешся?

не понял? че эт я изд.?

MATEVI Подменю пользователя
сообщение 12.12.09, 20:05
Сообщение #20

Отдыхающий
Иконка группы
Ветеран троянской войныМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 2201
Из: Одесса
Спасибо сказали: 957 раз
Рейтинг: 0

Цитата(suhar @ 12.12.09, 19:01) *
не понял? че эт я изд.?

Вам же написали "Спр.Родитель = Род.ТекущийЭлемент()"
а не
Спр.Родитель = Спр.ТекущийЭлемент();
Как пишете Вы.

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


2 страниц V   1 2 >
Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 23.05.24, 16:45
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!