Имя: Пароль:
1C
 
Перетаскивание в дереве
0 Gossar1C
 
10.03.15
10:35
Здравствуйте! Подскажите пожалуйста как сделать проверку на заполненность поля ТаблицаДереваПоставщик?


&НаКлиенте                                    
Процедура ТаблицаДереваПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
    
    Если Поле <> Неопределено Тогда
        Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.Номенклатура) Тогда
            Если Поле.Имя <> "ТаблицаДереваПоставщик" Тогда    
                ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
                СтандартнаяОбработка = Ложь;        
            КонецЕсли;
        Иначе
            ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
            СтандартнаяОбработка = Ложь;
        КонецЕсли;
    Иначе
        ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
        СтандартнаяОбработка = Ложь;
    КонецЕсли;

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



Тоесть я реализую такую возможность чтобы номенклатуру можно было перетащить в колонку ТаблицаДереваПоставщик и только в строку с заполненым значением (аля родитель)
1 Gossar1C
 
10.03.15
10:59
up
2 Fedor-1971
 
10.03.15
11:07
Используй ПриНачалеПеретаскивания - начал тащить, проверь, что тащим и можно ли оное тащить.
Прочитай в доках о порядке и месте появления событий при перетаскивании, там есть свои особенности.
3 vde69
 
10.03.15
11:08
для начала в отладчике смотри "ПараметрыПеретаскивания"
4 Gossar1C
 
10.03.15
11:13
(3) параметры содержат действие, допустимые действия и перетаскиваемое значение. Т.е. по сути мне это ничего не даст.
(2) опять же зачем мне значение перетаскиваемого элемента?
мне нужно проверить именно ту строку куда я буду перетаскивать элемент, проверить на заполненность. Подумываю получить элементы дерева и найти строку, только вот единственный вопрос возникает параметр "строка" по сути это та строка откуда мы тащим элемент, а не принимающая.
5 Fedor-1971
 
10.03.15
11:25
(4) На сколько я помню:
  ПроверкаПеретаскивания - СтандартнаяОбработка=Ложь; тут ещё нет информации конкретно куда притащили (строка, колонка), потому останавливаем стандартную обработку.
  Перетаскивание - тут уже есть место назначения куда притащили (твоя строка).
6 Gossar1C
 
10.03.15
11:42
(5) спасибо большое, да тут уже именно номер строки куда передаем, а далее я уже смогу сделать проверку на эту строку. Вообщем буду пробовать :)
7 Gossar1C
 
10.03.15
12:26
(7) сделал по такому принципу, работает. (5) Спасибо огромное за наводку :)

&НаКлиенте
Процедура ТаблицаДереваПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле)
        
    ЭлементыДереваСклады = ТаблицаДерева.ПолучитьЭлементы();
    
    Для Каждого Стр Из ЭлементыДереваСклады Цикл
        
        ЭлементыДереваПоставщики = Неопределено;
        ЭлементыДереваПоставщики = Стр.ПолучитьЭлементы();
        
        Для Каждого Стр1 Из ЭлементыДереваПоставщики Цикл
            
            ЭлементыДереваНоменклатура = Неопределено;
            ЭлементыДереваНоменклатура = Стр1.ПолучитьЭлементы();
            
            // Здесь ищем индетификатор и проверяем его с номером строки
            Для Каждого Стр2 Из ЭлементыДереваНоменклатура Цикл
                
                ИдентификаторСтроки = Стр2.ПолучитьИдентификатор();
                
                Если ИдентификаторСтроки = Строка Тогда
                    
                    ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
                    СтандартнаяОбработка = Ложь;

                КонецЕсли;
            КонецЦикла;
            
        КонецЦикла;
    КонецЦикла;
    
КонецПроцедуры
Основная теорема систематики: Новые системы плодят новые проблемы.