Имя: Пароль:
1C
 
Перенос подчинённых элементов
, , ,
0 Artificial
 
04.04.16
23:26
Есть справочник "Номенклатура", есть подчиненный справочник "Спецификации номенклатуры". Необходимо при копировании элемента справочника "Номенклатура", так же копировать все подчиненные элементы справочника "Спецификации номенклатуры". Опишите алгоритм и принцип решения задачи.
1 Злопчинский
 
04.04.16
23:34
Описываю:
При копировании элемента справочника "Номенклатура" копируем элементы подчиненного справочника "Спецификации..."
2 HawkEye
 
04.04.16
23:40
(0) ты типа решил нас всех тут протестировать?
3 birkoFFFF
 
05.04.16
05:27
Если сам не в состоянии сделать, то посмотри как работает в типовой УТ 11, там если мне не изменяет память при копировании номенклатуры программа предлагает скопировать и характеристики. Может и еще где есть, но в УТ точно.
4 Рэйв
 
05.04.16
06:59
(0)Если хочется самому пройтись по всем граблм, то у справочника есть в модуле объекта событие ПриКопировании. Вот там и копай
5 Artificial
 
05.04.16
07:53
(4) Нашёл только заполнения по умолчанию (склад, валюта и т. д.). А где не по умолчанию?
6 Рэйв
 
05.04.16
07:55
(5)А не поумолчанию - это надо писать самому
7 Artificial
 
05.04.16
07:59
(6) У меня просто концепцию спрашивают. Я пересмотрел, в УТ нет. Понятно, что самому, только как?
8 ДенисЧ
 
05.04.16
08:18
(7) руками, разумеется. Телепатический интерфейс обещают только в 11й платформе
9 Artificial
 
05.04.16
08:21
(8) Можете показать пример?
10 ДенисЧ
 
05.04.16
08:36
(9) спрСерии.ИспользоватьВладельца(текущийТовар);
спрСерии.выбратьЭлементы();
Пока спрСерии.ПолучитьЭлемент() = 1 Цикл
  ПеренестиСерию(спрсерии);
КонецЦикла;
11 Artificial
 
05.04.16
08:41
(10) Это где такое? В УТ не вижу.
12 ДенисЧ
 
05.04.16
08:45
(11) А почему ты должен это видеть? В типовых такой фигни нет...
13 Artificial
 
05.04.16
08:46
(12) Тогда какой код процедуры ПеренестиСерию()?
14 ДенисЧ
 
05.04.16
08:51
(13) А вот это уже стоит денег...
15 Масянька
 
05.04.16
08:51
(13) - А вы что - и есть за меня будете?
- Ага.
(С)
16 ixijixi
 
05.04.16
09:44
Держи

Функция СкопироватьНоменклатуруСоСпецификацией(Знач ТекущиеДанные) Экспорт
    
    Если ТекущиеДанные = Неопределено Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    Номенклатура = ТекущиеДанные.Ссылка;
    Если Не ЗначениеЗаполнено(Номенклатура) или Номенклатура.ЭтоГруппа Тогда
        Возврат Неопределено;
    КонецЕсли;
        
    ЭлементШаблон = Номенклатура;
    НовыйЭлемент = Справочники.Номенклатура.СоздатьЭлемент();
    
    ЗаполнитьЗначенияСвойств(НовыйЭлемент, ЭлементШаблон,, "ОсновнаяСпецификацияНоменклатуры, Наименование, Владелец, Код, ПометкаУдаления");
    
    Для Каждого ТаблЧасть  Из Метаданные.Справочники.Номенклатура.ТабличныеЧасти Цикл
        НовыйЭлемент[ТаблЧасть.Имя].Загрузить(ЭлементШаблон[ТаблЧасть.Имя].Выгрузить());
    КонецЦикла;
    
    НовыйЭлемент.Наименование = ЭлементШаблон.Наименование + " (КОПИЯ)";
    НовыйЭлемент.Записать();
    
    // Заполнить справочник СпецификацииНоменклатуры
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Владелец", ЭлементШаблон);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    СпецификацииНоменклатуры.Ссылка КАК Спецификация
    |ИЗ
    |    Справочник.СпецификацииНоменклатуры КАК СпецификацииНоменклатуры
    |ГДЕ
    |    СпецификацииНоменклатуры.Владелец = &Владелец";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        
        Выборка = РезультатЗапроса.Выбрать();
        
        Пока Выборка.Следующий() Цикл
            
            СпецификацияШаблон = Выборка.Спецификация;
            
            НоваяСпецификация = Справочники.СпецификацииНоменклатуры.СоздатьЭлемент();
            ЗаполнитьЗначенияСвойств(НоваяСпецификация, СпецификацияШаблон,, "Владелец, Код");
            НоваяСпецификация.Владелец = НовыйЭлемент.Ссылка;
            
            Для каждого ТаблЧасть  Из Метаданные.Справочники.СпецификацииНоменклатуры.ТабличныеЧасти Цикл
                НоваяСпецификация[ТаблЧасть.Имя].Загрузить(СпецификацияШаблон[ТаблЧасть.Имя].Выгрузить());
            КонецЦикла;
            
            НоваяСпецификация.Записать();
            
            НовыйЭлемент.ОсновнаяСпецификацияНоменклатуры = НоваяСпецификация.Ссылка;
            
        КонецЦикла;
        
        НовыйЭлемент.Записать();
        
    КонецЕсли;
    
    // Заполнить регистр Сведений ХимическийСостав
    
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Номенклатура", ЭлементШаблон);
    Запрос.УстановитьПараметр("НоваяНоменклатура", НовыйЭлемент.Ссылка);
    Запрос.Текст =
    "ВЫБРАТЬ
    |    &НоваяНоменклатура КАК Номенклатура,
    |    ХимическийСостав.Белки,
    |    ХимическийСостав.Жиры,
    |    ХимическийСостав.Углеводы,
    |    ХимическийСостав.Калорийность,
    |    ХимическийСостав.Клетчатка,
    |    ХимическийСостав.Холестерин,
    |    ХимическийСостав.ВитаминА,
    |    ХимическийСостав.ВитаминB1,
    |    ХимическийСостав.ВитаминB2,
    |    ХимическийСостав.ВитаминB6,
    |    ХимическийСостав.ВитаминB12,
    |    ХимическийСостав.ВитаминPP,
    |    ХимическийСостав.ВитаминC,
    |    ХимическийСостав.ВитаминD,
    |    ХимическийСостав.ВитаминE,
    |    ХимическийСостав.Фолат,
    |    ХимическийСостав.Натрий,
    |    ХимическийСостав.Калий,
    |    ХимическийСостав.Кальций,
    |    ХимическийСостав.Магний,
    |    ХимическийСостав.Фосфор,
    |    ХимическийСостав.Железо,
    |    ХимическийСостав.Цинк,
    |    ХимическийСостав.Йод
    |ИЗ
    |    РегистрСведений.ХимическийСостав КАК ХимическийСостав
    |ГДЕ
    |    ХимическийСостав.Номенклатура = &Номенклатура";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Если Не РезультатЗапроса.Пустой() Тогда
        
        Выборка = РезультатЗапроса.Выбрать();
        
        Пока Выборка.Следующий() Цикл
            
            Запись = РегистрыСведений.ХимическийСостав.СоздатьМенеджерЗаписи();
            ЗаполнитьЗначенияСвойств(Запись, Выборка);
            Запись.Записать();
            
        КонецЦикла;
        
    КонецЕсли;
           
    Возврат НовыйЭлемент.Ссылка;
    
КонецФункции