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

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

  1. gorlanovmax

    gorlanovmax Well-Known Member
    1C Team

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

    kaa Гость

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

    gorlanovmax Well-Known Member
    1C Team

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

    kaa Гость

    Спр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

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

    kaa Гость

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

    gorlanovmax Well-Known Member
    1C Team

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

    gorlanovmax Well-Known Member
    1C Team

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

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

    Hryv Гость

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

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

    gorlanovmax Well-Known Member
    1C Team

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

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

    Hryv Гость

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

    gorlanovmax Well-Known Member
    1C Team

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

    Hryv Гость

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

    gorlanovmax Well-Known Member
    1C Team

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

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

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

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

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

    Hryv Гость

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

    gorlanovmax Well-Known Member
    1C Team

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

    Hryv Гость

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

    gorlanovmax Well-Known Member
    1C Team

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

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

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

    puh14 Well-Known Member
    1C Team

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

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

    Hryv Гость

    Но что будет, если юзер не зная про копирование подчиненных элементов начнет их руками вносить?
     
Загрузка...
Похожие Темы - Вопрос копировании элемента
  1. Генералл
    Ответов:
    2
    Просмотров:
    52
  2. ApplePen
    Ответов:
    0
    Просмотров:
    53
  3. gURaBA_N
    Ответов:
    3
    Просмотров:
    90
  4. ghost
    Ответов:
    1
    Просмотров:
    85
  5. kartaman
    Ответов:
    0
    Просмотров:
    125

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