Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
19 апр 2024, 09:36

как скопировать элемент справочника в новый справочник?

Автор Yamuna, 02 июн 2019, 09:33

0 Пользователей и 1 гость просматривают эту тему.

Yamuna

Добрый день! Конфигурация самописная. При проведении документа нужно скопировать элемент справочника из одного справочника в другой. Не получается скопировать элемент справочника в новый справочник подскажите как это сделать? ошибка:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.РегистрацияКлиентов.МодульОбъекта(124)}: Поле объекта недоступно для записи (Ссылка)
            ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;

//Копируем Развившегося в другой справочник
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КабинетНачинающихКлиентов.Ссылка КАК Ссылка,
| КабинетНачинающихКлиентов.Родитель КАК Родитель,
| КабинетНачинающихКлиентов.НомерКарты КАК НомерКарты,
| КабинетНачинающихКлиентов.Телефон КАК Телефон,
| КабинетНачинающихКлиентов.ДатаРегистрации КАК ДатаРегистрации,
| КабинетНачинающихКлиентов.Код КАК Код
|ИЗ
| Справочник.КабинетНачинающихКлиентов КАК КабинетНачинающихКлиентов
|ГДЕ
| КабинетНачинающихКлиентов.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Родитель);

Выборка = Запрос.Выполнить().Выбрать();
Если  Выборка.Следующий() Тогда
ОбъектПервогоУровня = Справочники.КабинетКлиентовПервогоУровня.СоздатьЭлемент();
ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;
ОбъектПервогоУровня.Код = Выборка.Код;
ОбъектПервогоУровня.Родитель = Выборка.Родитель;
ОбъектПервогоУровня.НомерКарты = Выборка.НомерКарты;
ОбъектПервогоУровня.Телефон = Выборка.Телефон;
ОбъектПервогоУровня.ДатаРегистрации = Выборка.ДатаРегистрации;
ОбъектПервогоУровня.Записать();

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(Родитель)+" Скопирован в справочник ""Кабинет клиентов первого уровня""";
Сообщение.Сообщить();
КонецЕсли;


Yamuna

Цитата: Yamuna от 02 июн 2019, 09:33
Добрый день! Конфигурация самописная. При проведении документа нужно скопировать элемент справочника из одного справочника в другой. Не получается скопировать элемент справочника в новый справочник подскажите как это сделать? ошибка:
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.РегистрацияКлиентов.МодульОбъекта(124)}: Поле объекта недоступно для записи (Ссылка)
            ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;

//Копируем Развившегося в другой справочник
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КабинетНачинающихКлиентов.Ссылка КАК Ссылка,
| КабинетНачинающихКлиентов.Родитель КАК Родитель,
| КабинетНачинающихКлиентов.НомерКарты КАК НомерКарты,
| КабинетНачинающихКлиентов.Телефон КАК Телефон,
| КабинетНачинающихКлиентов.ДатаРегистрации КАК ДатаРегистрации,
| КабинетНачинающихКлиентов.Код КАК Код
|ИЗ
| Справочник.КабинетНачинающихКлиентов КАК КабинетНачинающихКлиентов
|ГДЕ
| КабинетНачинающихКлиентов.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Родитель);

Выборка = Запрос.Выполнить().Выбрать();
Если  Выборка.Следующий() Тогда
ОбъектПервогоУровня = Справочники.КабинетКлиентовПервогоУровня.СоздатьЭлемент();
ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;
ОбъектПервогоУровня.Код = Выборка.Код;
ОбъектПервогоУровня.Родитель = Выборка.Родитель;
ОбъектПервогоУровня.НомерКарты = Выборка.НомерКарты;
ОбъектПервогоУровня.Телефон = Выборка.Телефон;
ОбъектПервогоУровня.ДатаРегистрации = Выборка.ДатаРегистрации;
ОбъектПервогоУровня.Записать();

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(Родитель)+" Скопирован в справочник ""Кабинет клиентов первого уровня""";
Сообщение.Сообщить();
КонецЕсли;

с этим разобрался получилось вот так
//Копируем Развившегося в другой справочник
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| КабинетНачинающихКлиентов.Ссылка КАК Ссылка,
| КабинетНачинающихКлиентов.Родитель КАК Родитель,
| КабинетНачинающихКлиентов.НомерКарты КАК НомерКарты,
| КабинетНачинающихКлиентов.Телефон КАК Телефон,
| КабинетНачинающихКлиентов.ДатаРегистрации КАК ДатаРегистрации,
| КабинетНачинающихКлиентов.Код КАК Код
|ИЗ
| Справочник.КабинетНачинающихКлиентов КАК КабинетНачинающихКлиентов
|ГДЕ
| КабинетНачинающихКлиентов.Ссылка = &Ссылка";

Запрос.УстановитьПараметр("Ссылка", Родитель);

Выборка = Запрос.Выполнить().Выбрать();
Если  Выборка.Следующий() Тогда
ОбъектПервогоУровня = Справочники.КабинетКлиентовПервогоУровня.СоздатьЭлемент();
ОбъектПервогоУровня.Наименование = Выборка.Ссылка;
ОбъектПервогоУровня.Код = Выборка.Код;
ОбъектПервогоУровня.Родитель = Выборка.Родитель;
ОбъектПервогоУровня.НомерКарты = Выборка.НомерКарты;
ОбъектПервогоУровня.Телефон = Выборка.Телефон;
ОбъектПервогоУровня.ДатаРегистрации = Выборка.ДатаРегистрации;
ОбъектПервогоУровня.Записать();

Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = Строка(Родитель)+" Скопирован в справочник ""Кабинет клиентов первого уровня""";
Сообщение.Сообщить();
КонецЕсли;


есть еще один вопрос сейчас элемент копируется в новый справочник и сначала по условию скопировался родитель и дальше будет копироваться подчиненный элемент и когда он оказывается в новом справочнике то записывается не как подчиненный,к своему родителю, а как самостоятельный элемент...кто то может подсказать как это решить? это происходить скорее всего потому что одним документом создается первый элемент и другим документом другой элемент.. и можно ли при таком раскладе делать запись элементов в иерархии как в изначальном справочнике(справочник с иерархией элементов)?

LexaK

ну очевидный же ответ! нужно перед записью элемента справочника найти нужного родителя и прописать его ссылку новому(копируемому) элементу, (как найти родителя (какая у них взаимоподчиненность) в новом справочнике, знаете только вы)
если помогло нажмите: Спасибо!

Yamuna

Цитата: LexaK от 03 июн 2019, 09:08
ну очевидный же ответ! нужно перед записью элемента справочника найти нужного родителя и прописать его ссылку новому(копируемому) элементу, (как найти родителя (какая у них взаимоподчиненность) в новом справочнике, знаете только вы)
Ссылку получаем в запросе и потом ее я хотел прописать новому элементу но получаем ошибку как еще можно сделать? в первыъх сообщениях я писал про это ...
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.РегистрацияКлиентов.МодульОбъекта(124)}: Поле объекта недоступно для записи (Ссылка)
            ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;

LexaK

так не надо эту команду делать!
ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;
если помогло нажмите: Спасибо!

Yamuna

Цитата: LexaK от 03 июн 2019, 12:10
так не надо эту команду делать!
ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;
LexaK так я уже по разному пробовал и УИД передавал и УстановитьСсылкуНового() ничего не получается подскажи пожалуйста что там сделать..


LexaK

да зачем? просто эту команду уберите!

            ОбъектПервогоУровня = Справочники.КабинетКлиентовПервогоУровня.СоздатьЭлемент();
                //ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;
                ОбъектПервогоУровня.Код = Выборка.Код;
                ОбъектПервогоУровня.Родитель = Выборка.Родитель;
                ОбъектПервогоУровня.НомерКарты = Выборка.НомерКарты;
                ОбъектПервогоУровня.Телефон = Выборка.Телефон;
                ОбъектПервогоУровня.ДатаРегистрации = Выборка.ДатаРегистрации;
                ОбъектПервогоУровня.Записать();

так ошибки не должно быть
если помогло нажмите: Спасибо!

Yamuna

Цитата: LexaK от 03 июн 2019, 12:32
да зачем? просто эту команду уберите!

            ОбъектПервогоУровня = Справочники.КабинетКлиентовПервогоУровня.СоздатьЭлемент();
                //ОбъектПервогоУровня.Ссылка = Выборка.Ссылка;
                ОбъектПервогоУровня.Код = Выборка.Код;
                ОбъектПервогоУровня.Родитель = Выборка.Родитель;
                ОбъектПервогоУровня.НомерКарты = Выборка.НомерКарты;
                ОбъектПервогоУровня.Телефон = Выборка.Телефон;
                ОбъектПервогоУровня.ДатаРегистрации = Выборка.ДатаРегистрации;
                ОбъектПервогоУровня.Записать();

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

LexaK

сначала родители а потом подчиненные элементы
вот когда вы новый элемент создаете, родитель уже должен был быть! вот его по этой команде и прописываете   
(можно сначала просто элементы насоздавать, а потом раскидать их по родителям, тут уже как вы сами свой бизнес процесс построите)
ОбъектПервогоУровня.Родитель = КакаяТоВыборка.Родитель;//что за выборка не понятно
если помогло нажмите: Спасибо!

Yamuna

Цитата: LexaK от 03 июн 2019, 15:38
сначала родители а потом подчиненные элементы
вот когда вы новый элемент создаете, родитель уже должен был быть! вот его по этой команде и прописываете   
(можно сначала просто элементы насоздавать, а потом раскидать их по родителям, тут уже как вы сами свой бизнес процесс построите)
ОбъектПервогоУровня.Родитель = КакаяТоВыборка.Родитель;//что за выборка не понятно
так у меня есть справочник НачальногоУровня откуда я копирую элементы и есть справочник ПервогоУровня это куда я копирую и мне значит нужно сейчас получить элемент из справочника ПервогоУровня кому я буду подчинять элемент из НачальногоУровня... ну если сейчас я его например могу найти по коду или по имени то в следующий раз мне ведь нужен будет другой элемент котрый тоже можно найти по коду или имени и как же тогда его находить...
имя у них меняться не будет, что в том справочнике что в этом имя останется получается что надо попробовать выборкой получать имя Родитель.Родитель так ? можете что нибудь посоветовать как это реализовать?

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск