Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Структура спавочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
l2d808
Добрый день. Платформа 7.7 Подскажите пожалуста как создать новый элемент в справочнике по условию.
У меня есть группы: товар1, товар2
в каждой группе есть по 2 подгруппы: сложныйтовар, простойтовар
не знаю как создать новый товар в группе товар2 причем в подгруппе соотвецтвующей некому товару в группе товар1.
пример: товар1\простойтовар\какойтотовар у меня есть,а создать нужно товар2\простойтовар\новыйкакойтотовар.
для меня основная сложность заключается в том что: сложныйтовар, простойтовар не явлюются уникальными именами (( подскажите как поступить.
GreenFox
Цитата(l2d808 @ 05.05.11, 16:32) необходимо зарегистрироваться для просмотра ссылки
Добрый день. Платформа 7.7 Подскажите пожалуста как создать новый элемент в справочнике по условию.
У меня есть группы: товар1, товар2
в каждой группе есть по 2 подгруппы: сложныйтовар, простойтовар
не знаю как создать новый товар в группе товар2 причем в подгруппе соотвецтвующей некому товару в группе товар1.
пример: товар1\простойтовар\какойтотовар у меня есть,а создать нужно товар2\простойтовар\новыйкакойтотовар.
для меня основная сложность заключается в том что: сложныйтовар, простойтовар не явлюются уникальными именами (( подскажите как поступить.


Сначала найти группу справочника Товар2, потом найди по наименованию Простой товар используя поиск в режиме подчинения и потом создавай элемент
например

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


Как-то так
l2d808
Цитата(GreenFox @ 05.05.11, 16:22) необходимо зарегистрироваться для просмотра ссылки
Сначала найти группу справочника Товар2, потом найди по наименованию Простой товар используя поиск в режиме подчинения и потом создавай элемент
например

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


Как-то так

но по условию нужно поместить новыйкакойтотовар в группу по условию. а провеки условия какогототам товара небыло. меня именно эта стадия тормозит(( новый создать в подгруппе такой же в какой подгруппе находится и уже существующий. (((
mister-x
Цитата
в какой подгруппе находится и уже существующий.
цей існуючий вибраний/спозиціонований у списку інтерактивно (тобто виділений у списку)?
l2d808
існуючий елемент знаходиться в першій группі. а підгруппа може буті люба(складні чи прості) елемент я позиціоную найтипокоду наприклад. основна задача не як знайти цей обєкт а як вказати шлях (((
logist
Долго пытался вникнуть, мне кажется Вы хотите сделать невозможное.
Не может быть любая подгруппа - справочник представляет собой строгую иерархию, нельзя что бы между плечом и пальцами была жопа, там должна быть только рука.
mister-x
Цитата
основна задача не як знайти цей обєкт а як вказати шлях (((
Як на мене - тут пахне рекурсією.
GreenFox
Цитата(l2d808 @ 06.05.11, 9:28) необходимо зарегистрироваться для просмотра ссылки
існуючий елемент знаходиться в першій группі. а підгруппа може буті люба(складні чи прості) елемент я позиціоную найтипокоду наприклад. основна задача не як знайти цей обєкт а як вказати шлях (((

Помойму тут найболее уместным будет использование синтаксического разбора конструкции КакойтоТовар.ПолноеНаименование() и поиск по имени групы в подчинении группы Товар2.

Если алгоритм подходит и сами не справитесь - отпишитесь я Вам его реализирую (бесплатно).

P.S. Не нашел кнопки редактирования поэтому пишу еще одно сообщение.

Рекурсия - это плохо в реализации 1с, лучше развернуть ее в цикл - мене наглядно, но по ресурсам и вызовам процедур самое оно.
5_kopeek
Честно говоря, l2d808, Ваши формулировки не позволяют однозначно понять вопрос. Поэтому предлагаю решение согласно моей трактовке Вашей задачи, а именно:
Существуют некие две группы справочника, содержащие одноименные подгруппы (наименования подгрупп первой группы совпадают с наименованиями подгрупп второй группы). Необходимо создавать новый элемент во второй группе, но обязательно в подгруппе с таким же наименованием, как и у родительской подгруппы уже существующего в первой группе элемента. (Примечания. Группы верхнего уровня заранее известны. Существующий элемент задан (условно -- СуществующийТовар).)
    // Товар1 -- группа верхнего уровня
    // ПростойТовар --     группа, вложенная в Товар1
    // СложныйТовар --     группа, вложенная в Товар1
    // СуществующийТовар --     существующий товар в Товар1\ПростойТовар
    // Товар2 --         группа верхнего уровня
    // ПростойТовар --     группа, вложенная в Товар2
    // КакойТоТовар --     товар, который нужно создать во вложенной в группу Товар2 группе,
    //                     наименование которой такое же, как и у родителя уже существующего товара
    
    Предок=СокрЛП(СуществующийТовар.Родитель.Наименование);
    Спр=СоздатьОбъект("Справочник.НужныйСправочник");
    Спр.ИспользоватьРодителя(Товар2);
    Если Спр.НайтиПоНаименованию(Предок,1,1)=1 Тогда
        ПредокДляНового=Спр.ТекущийЭлемент();
        Если ПредокДляНового.ЭтоГруппа()=0 Тогда
            Возврат;
        КонецЕсли; // ПредокДляНового.ЭтоГруппа()=0
    Иначе
        Возврат;
    КонецЕсли; // Спр.НайтиПоНаименованию(Предок,1,1)=1
    Спр.ИспользоватьРодителя(ПредокДляНового);
    Спр.Новый();
    Спр.Родитель=ПредокДляНового;
    ...
mister-x
Цитата
Рекурсия - это плохо в реализации 1с...
воно то так, але зустрічав використ. рекурсії у ABBYY глобальному модулі комплексної конфігурації 7.7 (щось по зарплаті уже не пам'ятаю конкретно що, як і реліз) smile.gif. Але із тим, що краще рекурсію обійти - згоден.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.