Вопрос: О копировании элемента справочника

Тема в разделе "1C и всё что с ней связано", создана пользователем gorlanovmax, 23 авг 2008.

  1. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Есть необходимость, чтобы при копировании элемента справочника "Номенклатура" (конфа ТиС), копировались свойства товара.
    На закладке "свойства" есть таблица значений "СписокСвойств".
    Собственно сам вопрос: как получить таблицу значений "СписокСвойств" из элемента, с которого был скопирован новый элемент?
     
  2. kaa

    kaa Гость

    Репутация:
    0
    Надо смотреть справочник СвойстваНоменклатуры
     
  3. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    это понятно. в таблице значений хранятся ссылки на справочник "свойства номеклатура", вот вся проблема получить эти ссылки
     
  4. kaa

    kaa Гость

    Репутация:
    0
    Спр1 - элемент с которого копируем
    Спр2 - в который
    СпрСН1 - свойства ном
    СпрСН2

    СпрСН1.ИспользоватьВладельца(Спр1);
    СпрСН2.ИспользоватьВладельца(Спр2);
    СпрСН1.ВыбратьЭлементы();
    Пока СпрСН1.ПолучитьЭлемент()=1 Цикл
    СпрСН2.Новый();
    СпрСН2.ВидСвойства = СпрСН1.ВидСвойства;
    СпрСН2.ЗначениеСвойства = СпрСН1.ЗначениеСвойства;
    СпрСН2.Записать();
    КонецЦикла;
     
  5. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    с этим тоже более или менее понятно. спасибо. но мне нужно чтобы свойства копировались автоматически при обычном копировании элемента справочника номенклатура
     
  6. kaa

    kaa Гость

    Репутация:
    0
    ВводНового(ПризнакКоприрования,ОбъектКопирования)
    и прописывай
     
  7. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    понял, спасибо. все было так просто, а я заптормозился на поиске элемента, с которого происходило копирование
     
  8. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Не все так гладко.

    Код (Text):
    Процедура ВводНового(Признак,Родитель)
    Если Признак=1 Тогда
    СпрРодитель=СоздатьОбъект("Справочник.СвойстваНоменклатуры");
    СпрКопирование=СоздатьОбъект("Справочник.СвойстваНоменклатуры");
    СпрРодитель.ИспользоватьВладельца(Родитель);
    СпрКопирование.ИспользоватьВладельца(ТекущийЭлемент());
    СпрРодитель.ВыбратьЭлементы();
    Пока СпрРодитель.ПолучитьЭлемент()=1 Цикл
    СпрКопирование.Новый();
    СпрКопирование.ВидСвойства=СпрРодитель.ВидСвойства;
    СпрКопирование.ЗначениеСвойства=СпрРодитель.ЗначениеСвойства;
    СпрКопирование.Записать();
    КонецЦикла;
    КонецЕсли;
    Конец Процедуры
    И вот такая ошибка:
     
  9. Hryv

    Hryv Гость

    Репутация:
    0
    Попробуй
    СпрКопирование.Владелец = ТекущийЭлемент();

    написать после
    СпрКопирование.Новый();
     
  10. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    нет проблема не в этом.
    чуть ниже в цикле есть СпрКопирование.Новый();

    проблема в том, что ТекущийЭлемент() возвращает пустое значение
     
  11. Hryv

    Hryv Гость

    Репутация:
    0
    Ну да, новый элемент основного справочника еще не записан
    Можно его предварительно записать, но тут возникает туча нюансов
     
  12. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    В процедуре вводНового он не дает записать
     
  13. Hryv

    Hryv Гость

    Репутация:
    0
    А таблица значений на форме заполняется непосредственно элементами подчиненного справочника?
     
  14. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Да.

    Все проблема решена
    Вот решение

    Код (Text):
    Перем Родит

    Процедура ВводНового(Признак,Родитель)
    Если Признак=1 Тогда
    Родит=Родитель;
    КонецЕсли;
    КонецПроцедуры

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

    Hryv Гость

    Репутация:
    0
    Может тогда лучше это делать в ПриОткрытии()
     
  16. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    Так при первом вызове ПриОткрытии элемент еще не записан.
    А при провторном открытии теряется связь с элементом, с которого копировали.
     
  17. Hryv

    Hryv Гость

    Репутация:
    0
    Понял, фишка в том, что ПриЗакрытии() вызывается после ПриЗаписи() и запись остается на совести юзера
     
  18. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    19 июн 2008
    Сообщения:
    286
    Симпатии:
    0
    так если юзер не запишет новый элемент, то он не сохранится вообще. так что защита от дураков включена

    еще вопрос. пытаюсь таким же образом скопировать список цен, и мне выдает следующее

    Код (Text):
    СпрРодительЦена=СоздатьОбъект("Справочник.Цены");
    СпрКопированиеЦена=СоздатьОбъект("Справочник.Цены");
    СпрРодительЦена.ИспользоватьДату(РабочаяДата());     
    СпрРодительЦена.ИспользоватьВладельца(Родит);
    СпрКопированиеЦена=ИспользоватьВладельца(ТекущийЭлемент());
    СпрРодительЦена.ВыбратьЭлементы();
    Пока СпрРодительЦена.ПолучитьЭлемент()=1 Цикл
    СпрКопированиеЦена.Новый();
    СпрКопированиеЦена.Наименование=СпрРодительЦена.Наименование;
    СпрКопированиеЦена.Записать();
    КонецЦикла;
    ошибка:
     
  19. puh14

    puh14 Well-Known Member
    1C Team

    Репутация:
    0
    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    НовыйЭлемент() ?

    Мда -что от не то...
     
  20. Hryv

    Hryv Гость

    Репутация:
    0
    Но что будет, если юзер не зная про копирование подчиненных элементов начнет их руками вносить?
     
Загрузка...
Похожие Темы - Вопрос копировании элемента
  1. stas1995kstati
    Ответов:
    4
    Просмотров:
    96
  2. I_am_user
    Ответов:
    0
    Просмотров:
    83
  3. Hehabr
    Ответов:
    0
    Просмотров:
    95
  4. Kernel_panic
    Ответов:
    0
    Просмотров:
    89
  5. voldim
    Ответов:
    0
    Просмотров:
    154

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