Имя: Пароль:
1C
1С v8
Как получить всю строку таблицы в обработке расшифровки
0 Powerfool
 
17.06.14
06:23
У меня есть поле табличного документа. Я в него засовываю данные полученные из СКД. В обработке расшифровки ставил свой дополнительный пункт меню в котором буду редактировать запись, но для этого мне надо получить запись целиком а не только значение, которое лежит в ячейке поля. Как это сделать?
1 Powerfool
 
17.06.14
06:32
вира
2 Powerfool
 
17.06.14
06:48
Так. Ладно. По другому.
В форме табличного документа выводится таблица с данными, которой затем группируется по строкам (по полям: Контрагент, Номенклатура), так:
ООО Ромашка
       Тазики   4 шт.
       Веники   34 шт.
       Лопаты   10 шт.
ООО Мамашка
       Тазики   63 шт.
       Веники   1 шт.
       Лопаты   0 шт.

Пользователь жмет два раза на строчку с тазиками, которые принадлежат Ромашке, и мне надо программно понять, что он выбрал именно эти тазики, а не какие то другие. Как это сделать?
3 ИС-2
 
naïve
17.06.14
07:04
сейчас уже не помню как делал, но суть была в том, что я в параметр ДанныеРасшифровки[x] передавал x больше текущего параметра до тех пор пока не был признак конца (что-то там менялось)
4 ИС-2
 
naïve
17.06.14
07:05
можно перехитрить СКД - выводить в тазиках контрагента, но сделать ширину у этой колонки 0
5 Powerfool
 
17.06.14
07:09
ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля().Получить(0).Значение
Это позволяет получить значение текущего элемента в поле.

Пробовал смотреть в ДанныеРасшифровки.Элементы там всякая белеберда, я там ничего не понимаю
6 Powerfool
 
17.06.14
07:10
(4) не уловил. Как это? Обработка расшифровки же будет реагировать на двойной клац по номенлатуре
7 Powerfool
 
17.06.14
07:17
вира!!
8 ИС-2
 
naïve
17.06.14
08:29
(5) согласен, что бред, но я как-то в этом бреде логику нашел :) Вроде бы типы меняются.
В строку выводим невидимого контрагента и при расшифровке бежим по данным расшифроки в поисках этого контрагента
9 Powerfool
 
17.06.14
13:38
Урологические изыски. Надеюсь кому нибудь помогу и сокращу его зубодробительные попытки разобраться с этой фигней.

Краткий комментарий к коду: расшифровываю 4 уровня группировки получаю итого 4 ссылки на элементы этих группировок.

Процедура УсловияОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
        
    Перем ВыполненноеДействие;
    
    ЗначениеПоля = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля().Получить(0).Значение;
    
    СтандартнаяОбработка = Ложь;
    
    ДоступныеДействия = Новый Массив();
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
    
    ДополнительныеДействия = Новый СписокЗначений;
    Если ТипЗнч(ЗначениеПоля) = Тип("СправочникСсылка.Номенклатура") Тогда
        ДополнительныеДействия.Добавить("Изменить", "Изменить");
    КонецЕсли;
    
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных")));
    ОбработкаРасшифровки.Выполнить(Расшифровка, ВыполненноеДействие, ДоступныеДействия, ДополнительныеДействия);
    
    Если ВыполненноеДействие = "Изменить" Тогда    
        
        НоменклатураПоля = ЗначениеПоля;
        ИД = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей()[0].Идентификатор;
        
        ЗначениеПоля = Неопределено;
        Пока ЗначениеПоля = Неопределено Цикл
            Попытка
                ЗначениеПоля = ДанныеРасшифровки.Элементы[ИД].ПолучитьПоля().Получить(0).Значение;                
            Исключение
            КонецПопытки;
            ИД = ДанныеРасшифровки.Элементы[ИД].ПолучитьРодителей()[0].Идентификатор;
        КонецЦикла;
        ОбъектПоля = ЗначениеПоля;
        
        ЗначениеПоля = Неопределено;
        Пока ЗначениеПоля = Неопределено Цикл
            Попытка
                ЗначениеПоля = ДанныеРасшифровки.Элементы[ИД].ПолучитьПоля().Получить(0).Значение;                
            Исключение
            КонецПопытки;
            ИД = ДанныеРасшифровки.Элементы[ИД].ПолучитьРодителей()[0].Идентификатор;
        КонецЦикла;
        КонтрагентПоля = ЗначениеПоля;
        
        ЗначениеПоля = Неопределено;
        Пока ЗначениеПоля = Неопределено Цикл
            Попытка
                ЗначениеПоля = ДанныеРасшифровки.Элементы[ИД].ПолучитьПоля().Получить(0).Значение;                
            Исключение
            КонецПопытки;
            ИД = ДанныеРасшифровки.Элементы[ИД].ПолучитьРодителей()[0].Идентификатор;
        КонецЦикла;
        ПодразделениеПоля = ЗначениеПоля;
        
    КонецЕсли;
    
КонецПроцедуры
Программист всегда исправляет последнюю ошибку.