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

Внешняя обработка, помогите со структурой иерархии.

Автор Karatel, 15 авг 2023, 07:13

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

Karatel

Создал внешнюю обработку, которая автоматом создает элемент в справочнике объект ремонта это в ТОИР, типо номенклатуры, всё хорошо загружает, но из за структуры иерархии, он не отображается на форме списка, когда убирают форму списка, отображается. В справочнике ПриСозданииНаСервере он всё правильно создает сразу в структуру, как реализовать это во внешнюю обработку

fruitella

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

Karatel

fruitella, Верно, но по группам это понятно когда у них один справочник, а Структура находится в другом справочнике, он должен к нему цепляться, ну то есть находить её и добавлять уже группы в неё, а потом сами элементы распределять по группам. Ниже скриншоты отправлю, как сейчас показывает и как должно.
Рисунок 1 - Вот так показывает, то есть группы и элементы добавлены, но они не отображаются.
Рисунок 2 - Вот так показывает, но если отключить "Форма списка"
Рисунок 3 - Вот так должно быть, Структура, под ней папки и внутри уже сами элементы!

LexaK

так вроде ни чего сложного,
у элемента справочника (в зависимости от настроек)
могут быть реквизиты
Родитель и Владелец
просто заполните их нужными данными!

посмотрите что и как заполнено в "правильных" элементах? так же заполняйте и в новых.
если помогло нажмите: Спасибо!

Karatel

LexaK, Так делал это, я находил данную структуру потом уже через Родителя и Владельца пробовал добавлять, никакого результата, вот ниже примерно как искал:
По идеи он должен был найти как родитель данную структуру, но он ругается на соответствие параметра 3, ставил как владельца всё равно не добавляет.
Иерархия = Справочники.торо_СтруктурыОР.НайтиПоНаименованию("Структура основная");

Для Каждого стр Из ДанныеФайла Цикл

НоваяГруппа = Справочники.торо_ОбъектыРемонта.НайтиПоНаименованию(стр.Бренд,Истина,Иерархия,);
Если НоваяГруппа = Справочники.торо_ОбъектыРемонта.ПустаяСсылка() ИЛИ НЕ НоваяГруппа.ЭтоГруппа Тогда
НоваяГруппа = Справочники.торо_ОбъектыРемонта.СоздатьГруппу();
НоваяГруппа.Наименование = стр.Бренд;
НоваяГруппа.Записать();
КонецЕсли;

LexaK

//это разные справочники!!!
Иерархия = Справочники.торо_СтруктурыОР.НайтиПоНаименованию("Структура основная");
НоваяГруппа = Справочники.торо_ОбъектыРемонта.НайтиПоНаименованию(стр.Бренд,Истина,Иерархия,);
,Иерархия,); - если задаете должен быть родителем (группой) этого справочника - торо_ОбъектыРемонта
если помогло нажмите: Спасибо!

Karatel

LexaK, Так я и говорил выше, у них разные справочники, так как сделать чтобы можно было обратиться к нему? Необходимо выбрать данную структуру из справочника СтруктурыОР и добавить в справочник торо_ОбъектыРемонта группу, а потом уже и элемент

LexaK

уберите неправильного родителя, (наверно, лучше, для поиска использовать запрос) 
    НоваяГруппа = Справочники.торо_ОбъектыРемонта.НайтиПоНаименованию(стр.Бренд,Истина);//,Иерархия,);
    Если НоваяГруппа = Справочники.торо_ОбъектыРемонта.ПустаяСсылка() ИЛИ НЕ НоваяГруппа.ЭтоГруппа Тогда
        НоваяГруппа = Справочники.торо_ОбъектыРемонта.СоздатьГруппу();
        НоваяГруппа.Наименование = стр.Бренд;
        НоваяГруппа.Записать();
КонецЕсли;

если помогло нажмите: Спасибо!

Karatel

LexaK, Это то уберу, у меня создается то без проблем, но без структуры, к нему не обращается, думал может кто сталкивался с этим, ладно попробую запросом, может получится

fruitella

Karatel, Вроде из примера выше, тут только идет проверка на то, что существует ли группа или нет (Только справочники разные почему то). Если нет, то ты создаешь новую группу, если существует то мы получаем найденную группу. А чтобы добавить какой-то элемент в эту группу, нам сперва нужно получить объект этой номенклатуры, далее нужно у поля Родитель указать ссылка на эту группу.
Примерно так

ГруппаОбъектыРемонта = Справочники.торо_ОбъектыРемонта.НайтиПоНаименованию(стр.Бренд, Истина, Иерархия);
//Тут можно сделать проверку на то, что группа действительно существует.

   Для Каждого ТекДанные Из ДанныеФайла Цикл
       НоменклатураОбъект = ТекДанные.ПолучитьОбъект();
       НоменклатураОбъект.Родитель = ГруппаОбъектыРемонта.Ссылка; 
       НоменклатураОбъект.Записать();
   КонецЦикла;
После этого номенклатура переместиться в эту группу.

Если это все же разные справочники, то у Номенклатуры должен быть реквизит, который также ссылается на другой справочник. Тогда при получении определенной номенклатуры, можно будет получить ссылку на Родителя у данного реквизита.

Теги:  1С форма 

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

Рейтинг@Mail.ru

Поиск