Распределение элементов справочника по группам

Тема в разделе "1C и всё что с ней связано", создана пользователем VoodyGoo, 18 фев 2009.

Статус темы:
Закрыта.
  1. VoodyGoo

    VoodyGoo Гость

    Здраствуйте.
    Как можно изменить у существующего элемента справочника родителя, т.е. переместить его в определённую группу. При создании нового элемента всё просто:
    Код (Text):
    НовыйЭлемент.Родитель = Какая то группа
    А тот же метод на существующий элемент не действует.

    Действие происходит так:

    Есть документ с заполненной табличной частью (с реквизитом ТЧ - ТМЦ - тип спр.Номенклатура).
    делаю цикл по строкам ТЧ, выхожу на ТМЦ и пытаюсь присвоить владельца описанным выше способом - не получется((
    метод Использовать владельца тоже не работает

    как тут быть?
     
  2. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Эээ - ты ему прямо из документа пытаешся родителя задать? так не получится. Лучше примерно так ( в семерке)
    Ном = СоздатьОбъект("Справочник.Номенклатура");
    Пока ПолучитьСтроку() = 1 Цикл
    ЕСли Ном.НайтиЭлемент(ТекущаяСтрока().Номенклатура) = 1 ТОгда
    Ном.Родитель = ВыбГРуппа;
    Ном.Записать();
    Иначе
    Сообщить("Элемент не найден в строке " + НомерСтроки);
    КонецЕСли;
    КонецЦикла;
     
  3. VoodyGoo

    VoodyGoo Гость

    Так тоже самое, пробовал даже выгружать в тз, и отуда уже пытаться. Ничего.
    Через СоздатьОбъект та же ошибка.

    если смотреть по вашему коду, то ошибко уже тут
     
  4. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Значит косяк в типе переменной выбгруппа - неверное значение(элемент), не тот справочник. Мож выбгруппа вообще строка
    Он ведь нашел элемент номенклатуры в справочнике а вот родитель подкачал.
     
  5. VoodyGoo

    VoodyGoo Гость

    Для выбора родителя создал на форме ПолеВвода (ид ВыбГруппа) тип Справочник.Номенклатура. И уже через него то и выбираю владельца

    А если бы ВыбГруппа и была бы строкой, ии ещё чем либо, то элемент юы просто записался в корень справочника, такое я когда то замечал.
     
  6. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    А ещё такой переменной в форме у тебя не объявлено? 1с в первую очередь смотрит на переменные формы, а потом на поля ввода, даже если идентификатор объявлен. Ещё посмотри - мож она у тебя перезаполняется чем. Если в лом искать - переименуй ВыбГРуппа в ВЫбгруппаНоменклатуры на поле ввода и в модуле и попробуй. Мож ВЫбГруппа - это вообще глобальная переменная.
     
  7. VoodyGoo

    VoodyGoo Гость

    нет, форма чистая, обработку спец для этого создавал. Есть только 2 элемента ВыбГрупа и ВыбДок. Ничто нигде не перекрывается, точно
     
  8. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    переименуй поле ввода на форме и соответственно в модуле каким нибуть длинным названием - и попробуй.
     
  9. VoodyGoo

    VoodyGoo Гость

    никаких улучшений
     
  10. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    ТекНом - это что? Код покажи целиком
    Обычно такое бывает когда на одну переменную пытаются навесить несколько создать объект, или в поле ввода и переменная модуля совпадают.
     
  11. VoodyGoo

    VoodyGoo Гость

    тут его очень немного) Вот вся обработка
    Код (Text):
    Процедура Выполнить()

    спрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");

    ВыбДок.ВыбратьСтроки();
    Пока ВыбДок.ПолучитьСтроку() = 1 Цикл

    спрНоменклатура.НайтиПоКоду(ВыбДок.ТМЦ.Код);

    ТекНом = спрНоменклатура.ТекущийЭлемент();

    ТекНом.Родитель = ВыбГруппаДляИзменения;
    ТекНом.Записать();

    КонецЦикла;

    КонецПроцедуры
     
  12. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Процедура Выполнить()

    спрНоменклатура = СоздатьОбъект("Справочник.Номенклатура");

    ВыбДок.ВыбратьСтроки();
    Пока ВыбДок.ПолучитьСтроку() = 1 Цикл

    Если спрНоменклатура.НайтиЭлемент(ВыбДок.ТМЦ) = 1 ТОгда// ТМЦ- это точно номенклатура? мож просто значение типа Справочник

    СпрНоменклатура.Родитель = ВыбГруппаДляИзменения;
    СпрНоменклатура.Записать();
    Иначе
    Сообщить("Не нашли");//ну а вдруг...
    КонецЕСли;

    КонецЦикла;

    КонецПроцедуры

    Походу проблема в том, что ТекНом - это тебе не создатьОбъект ;-)
     
  13. VoodyGoo

    VoodyGoo Гость

    а может быть такое, что причина всему то, что на один и тот же елемент справочника у меня сразу ссылается строка тч док-а(т.к мы в цикле на ней стоим), и Справочник Создать Объект Текущий элемент


    puh14, спасибо ОГРОМНОЕ!
    Получилось, только не понимаю в чём тут фокус?
    Вроде и найти по коду и найтиэлемент возращают один и тот же тип, элемент.
    Хотелось понять, а то получается что я тупо код списал -_-

    Но и на этом уже спасибо!!!!
     
  14. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    ТЧ дока ссылается через ВыбДок.ТМЦ а справочник серез СпрНоменклатура - так что не в этом дело. Короче - работает?

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

    ВыбДок.ТМЦ.Родитель = ВыбГруппаДляИзменения;
    ВыбДок.ТМЦ.Записать();
     
  15. VoodyGoo

    VoodyGoo Гость

    Внимателльно прочитал эту строчку и понял причину!
     
  16. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    НАйтиЭлмент и Найти ПОкКОду - это немножко разное. В восьмерке есть два типа "СправочникОбъект" и "СправочникСсылка". Чем различаются толком не понимаю. Для записи надо использовать НайтиЭлемент(). МОжно было написать НайтиПоКоду(), затем НАйтиЭлемент().
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей