Имя: Пароль:
1C
1С v8
Не получается реализовать функционал. В чем проблема?
0 brenli
 
15.03.18
19:37
// Меняем значение реквизита
//подчиненых элементов на значение взятое у родителя
Процедура ОбходЭлементовВГруппе(Источник)
    Выборка  = Справочники.Номенклатура.ВыбратьИерархически(Источник.Ссылка);
    Пока Выборка.Следующий() Цикл
        ОбъектНом            =    Выборка.ПолучитьОбъект();
        ОбъектНом.Контрагент =  Источник.Контрагент;
        ОбъектНом.Записать();
    КонецЦикла;        
КонецПроцедуры    

//Работа с реквизитом
Процедура ОбработкаРеквизитаКонтранент(Источник) Экспорт
    Если НЕ Источник.ЭтоГруппа Тогда  // Если это элемент справочника тогда заполняем контра из контра родителя
        Источник.Контрагент = Источник.Родитель.Контрагент;
    ИначеЕсли Источник.ЭтоГруппа Тогда // Если это группа справочника.
        // Группа может быть корневой и вложенной
        // Если группа корневая, контрагента у ней принудительно не устанавливаем
        Если Источник.Уровень()=0 Тогда
            Если НЕ Источник.Контрагент.Пустая() Тогда
                ОбходЭлементовВГруппе(Источник);
            КонецЕсли;    
        Иначе    
            Если НЕ Источник.Родитель.Пустая() Тогда
                Источник.Контрагент = Источник.Родитель.Контрагент;    
                ОбходЭлементовВГруппе(Источник);
            КонецЕсли;    
        КонецЕсли;    
    КонецЕсли;    
    
    Если НЕ Источник.ДополнительныеСвойства.РодительДоИзменения = Источник.Родитель Тогда
        Источник.Контрагент = Источник.Родитель.Контрагент;    
        Источник.Записать();
        ОбходЭлементовВГруппе(Источник);
    КонецЕсли;    
КонецПроцедуры    

//Подписка на событие
Процедура ЛК_НоменклатураПередЗаписью(Источник, Отказ) Экспорт
    Источник.ДополнительныеСвойства.Вставить("РодительДоИзменения", Справочники.Номенклатура.НайтиПоКоду(Источник.Код).Родитель);
КонецПроцедуры

//Подписка на событие
Процедура ЛК_НоменклатураПриЗаписи(Источник, Отказ) Экспорт
    ОбработкаРеквизитаКонтранент(Источник);
КонецПроцедуры


Задача такая: У справочника программно реализованно отображение реквизита контрагенты. У групп - доступ для редактирования Истина, у элементов - доступ для редактирования ложь.
При изменении реквизита контрагент в корневой группе (без родителя), устанавливаем значение этого реквизита у  всех дочерних. - работает.
При переносе из группы в группу значение контрагента у групп и элементов так же меняется, НО не могу запретить менять реквизит контрагент у вложенных групп.
Что только не пробовал (..
Может есть идеи?
1 Cyberhawk
 
15.03.18
19:50
Замути видео
2 Малыш Джон
 
15.03.18
21:30
Лучше стрим. Потом - выполнять реквесты, собирать донат.

(0) у тебя ведь все группы вложенные, кроме самого верхнего уровня, а говоришь - "У групп - доступ для редактирования Истина". ты с логикой работы разберись, а потом уже её в коде реализуй.
3 Сергиус
 
16.03.18
02:12
(0)Как связано то, что ты присваиваешь значение реквизиту Контрагент и запрет на изменение данного реквизита?
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.