Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=20496)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Система компоновки данных _ Как определить в какой колонке и в какой строке пользователь нажал два раза?

Автор: kosalex 30.10.14, 13:11

Есть отчет СКД:



Как определить в какой колонке и в какой строке пользователь нажал два раза. Мне в другой ответ нужно передать параметры отбора, а взять их из названия колонок "Груженый,Мечел" и т.п. и название груза из строки.

Вот мой код, но он не удовлетворяет моим потребностям:

СтандартнаяОбработка = Ложь;
    
    ПериодБезНомернойУчетВагонов = ЭтотОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[2].Значение.Дата;
    
    
    ПринадлежностьВагонаБезНомернойУчет = ДанныеРасшифровки.Элементы.Получить(Расшифровка - 4).ПолучитьПоля()[0].Значение;
    СостояниеВагонаБезномернойУчет = ДанныеРасшифровки.Элементы.Получить(1).ПолучитьПоля()[0].Значение;
    РодГрузаБезНомернойУчет = ДанныеРасшифровки.Элементы.Получить(37).ПолучитьПоля()[0].Значение;
    
    ОтчетРасшифровка = Отчеты.КФЗНомернойУчетВагонов.Создать();
    
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",ПериодБезНомернойУчетВагонов);
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[1].ПравоеЗначение = ПринадлежностьВагонаБезНомернойУчет;
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[1].Использование = Истина;
    
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[2].ПравоеЗначение = СостояниеВагонаБезномернойУчет;
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[2].Использование = Истина;
    
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[3].ПравоеЗначение = РодГрузаБезНомернойУчет;
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[3].Использование = Истина;

    
    ФормаРасшифровки = ОтчетРасшифровка.ПолучитьФорму("ФормаОтчета");
    ФормаРасшифровки.Открыть();
    ФормаРасшифровки.СформироватьОтчет();



Не могу никак додуматься....

Упростил отчет)))



Все равно не получается "достучаться до небес" Для одной строки получается, а если для другой то уже вылетает...

Автор: kosalex 31.10.14, 8:11

Практически рабочий код)) Но есть одно НО, не получается получить состояние вагона...((ПОМОГИТЕ

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

    СостояниеВагонаБезномернойУчет = ДанныеРасшифровки.Элементы[1].ПолучитьПоля()[0].Значение; //Как получить состояние ????

    РодГрузаБезНомернойУчет = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьРодителей()[0].ПолучитьПоля()[0].Значение;
    ОтчетРасшифровка = Отчеты.КФЗНомернойУчетВагонов.Создать();
    
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Период",ПериодБезНомернойУчетВагонов);
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[1].ПравоеЗначение = ПринадлежностьВагонаБезНомернойУчет;
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[1].Использование = Истина;
    
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[2].ПравоеЗначение = СостояниеВагонаБезномернойУчет;
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[2].Использование = Истина;
    
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[3].ПравоеЗначение = РодГрузаБезНомернойУчет;
    ОтчетРасшифровка.КомпоновщикНастроек.Настройки.Отбор.Элементы[3].Использование = Истина;

    
    ФормаРасшифровки = ОтчетРасшифровка.ПолучитьФорму("ФормаОтчета");
    ФормаРасшифровки.Открыть();
    ФормаРасшифровки.СформироватьОтчет();
    
КонецПроцедуры


Автор: Kutuzov 03.11.14, 11:34

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    .....................................
    Если ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля().Найти("СуммаВзаиморасчетовНачальныйОстаток") <> Неопределено Тогда
        Попытка    
            коефПоля = 4;
            ИмяПоля = ДанныеРасшифровки.Элементы.Получить(Расшифровка-коефПоля).ПолучитьПоля()[0].Поле;
            Если ИмяПоля = "СрокДолгазаказа" Тогда
                коефПоля = 5;
                ИмяПоля = ДанныеРасшифровки.Элементы.Получить(Расшифровка-коефПоля).ПолучитьПоля()[0].Поле;
            КонецЕсли;
            Если ИмяПоля = "Поручитель" или ИмяПоля = "Контрагент" или ИмяПоля = "ДоговорКонтрагента" или ИмяПоля = "ЗаказПокупателя" Тогда  
                ЗначениеПервойКолонки = ДанныеРасшифровки.Элементы.Получить(Расшифровка-коефПоля).ПолучитьПоля()[0].Значение;
            иначе
                Если  ДанныеРасшифровки.Элементы.Получить(Расшифровка-1).ПолучитьПоля()[0].Поле="Поручитель" Тогда
                    ЗначениеПервойКолонки = ДанныеРасшифровки.Элементы.Получить(Расшифровка-1).ПолучитьПоля()[0].Значение;
                ИначеЕсли  ДанныеРасшифровки.Элементы.Получить(Расшифровка-1).ПолучитьПоля()[0].Поле="ДоговорКонтрагента" Тогда
                    ЗначениеПервойКолонки = ДанныеРасшифровки.Элементы.Получить(Расшифровка-1).ПолучитьПоля()[0].Значение;
                ИначеЕсли  ДанныеРасшифровки.Элементы.Получить(Расшифровка-1).ПолучитьПоля()[0].Поле="ЗаказПокупателя" Тогда
                    ЗначениеПервойКолонки = ДанныеРасшифровки.Элементы.Получить(Расшифровка-1).ПолучитьПоля()[0].Значение;  
                ИначеЕсли  ДанныеРасшифровки.Элементы.Получить(Расшифровка-1).ПолучитьПоля()[0].Поле="Контрагент" Тогда
                    ЗначениеПервойКолонки = ДанныеРасшифровки.Элементы.Получить(Расшифровка-1).ПолучитьПоля()[0].Значение;            
                ИначеЕсли ДанныеРасшифровки.Элементы.Получить(Расшифровка-2).ПолучитьПоля()[0].Поле="Контрагент" Тогда
                    ЗначениеПервойКолонки = ДанныеРасшифровки.Элементы.Получить(Расшифровка-2).ПолучитьПоля()[0].Значение;
                КонецЕсли;
            КонецЕсли;
        
.......


Буквально неделю назад делал. Для получение по текущей строке поля для условия делал просто вычитание количества колонок до нужной проверял ее название и уже при правильном результате подставлял в параметр. 32542460.gif

А родителя получал от первой колонке. Сделал такую проверку так как есть поля группировок которые выкидовали ошибку.

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


Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua