Имя: Пароль:
1C
1С v8
Значение соседней ячейки СКД
0 NewBieOneS
 
14.09.14
16:47
Здравствуйте!

Пишу отчет (СКД, УП), в котором из регистра накопления (остатки) выводятся следующие колонки: "Номенклатура", "НачальныйОстаток", "Резерв", "КонечныйОстаток". Группировок нет, только детальные записи. Необходимо при двойном клике по ячейке из колонки "Резерв" выводить в окно сообщений перечень документов, которые произвели движения.

На данный момент мне удалось решить эту задачу, только при двойном клике на ячейку из колонки "Номенклатура". А вот как при нажатии на колонку "Резерв" получить значение из колонки "Номенклатура" данной строки я не знаю. Значение необходимо для использования в функции "ПолучитьСписокДокументов()" Помогите, пожалуйста.

Привожу код:

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

&НаСервере
Функция ПолучитьСписокДокументов(Номенклатура, НачалоПериода, КонецПериода)
// Здесь получаем список документов запросом по входящим параметрам
КонецФункции

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Перем ВыбранноеДействие;
    Перем ПараметрыВыбранногоДействия;
    
    Номенклатура = ПолучитьРасшифровку(Расшифровка);
    Если Номенклатура = Неопределено Тогда
        Возврат; // Выбрано ненужное поле - оставляем стандартную обработку
    КонецЕсли;
        
    СтандартнаяОбработка = Ложь;
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,
        Новый ИсточникДоступныхНастроекКомпоновкиДанных(Отчет));
    
    ДополнительныеДействия = Новый СписокЗначений;
    ДополнительныеДействия.Добавить("Открыть список загрузочных листов");
    
    // Осуществим выбор действия расшифровки пользователем
    ОбработкаРасшифровки.ВыбратьДействие(Расшифровка, ВыбранноеДействие,
        ПараметрыВыбранногоДействия, , ДополнительныеДействия);
            
    Если ПараметрыВыбранногоДействия <> Неопределено Тогда // Если заполнено - значит выполнено типовое действие
        Если ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
            ОткрытьЗначение(ПараметрыВыбранногоДействия);
        Иначе    
            НоваяРасшифрока = Новый ОписаниеОбработкиРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,
                Расшифровка, ПараметрыВыбранногоДействия);
            
            ПараметрыФормы = Новый Структура;    
            ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
            ПараметрыФормы.Вставить("Расшифровка", НоваяРасшифрока);
            ОткрытьФорму("Отчет.ОтчетПоОстаткам.Форма", ПараметрыФормы, , Истина);
        КонецЕсли;
    Иначе // Либо нетиповое действие, либо отмена
        Если ВыбранноеДействие <> ДействиеОбработкиРасшифровкиКомпоновкиДанных.Нет Тогда // Если НЕ отмена            
            ПользовательскиеНастройки = ЭтаФорма.Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
            ПараметрыДанных = ЭтаФорма.Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы;
            
            ИдентификаторНачалоТекущегоПериода = ПараметрыДанных.Найти("НачалоТекущегоПериода").ИдентификаторПользовательскойНастройки;
            ИдентификаторКонецТекущегоПериода = ПараметрыДанных.Найти("КонецТекущегоПериода").ИдентификаторПользовательскойНастройки;
            
            НачалоТекущегоПериода = ПользовательскиеНастройки.Найти(ИдентификаторНачалоТекущегоПериода).Значение.Дата;
            КонецТекущегоПериода = ПользовательскиеНастройки.Найти(ИдентификаторКонецТекущегоПериода).Значение.Дата;
            
            СписокДокументов = ПолучитьСписокДокументов(Номенклатура, НачалоТекущегоПериода, КонецТекущегоПериода);
            Если СписокДокументов.Количество() > 0 Тогда
                ВыбранныйДок = СписокДокументов.ВыбратьЭлемент("Документы резервирования");
                Если ВыбранныйДок <> Неопределено Тогда
                    ОткрытьЗначение(ВыбранныйДок.Значение);
                КонецЕсли;
            Иначе
                Предупреждение("Документы не найдены!");
            КонецЕсли;
        КонецЕсли;
    КонецЕсли;    
КонецПроцедуры
1 Wobland
 
14.09.14
17:21
тыкай на номенклатуру и не люби мозх
2 NewBieOneS
 
14.09.14
17:23
(1) я уже вылюбил весь мозг себе и гуглить задолбался. Задача неразрешима или слишком сложна в реализации?
3 Wobland
 
14.09.14
17:31
(2) ты хочешь странного: по тыку в число как-то узнавать номенклатуру. есть такой прикол у табдокумента - расшифровка по строке. но дешевле закончить и забить имхо
4 romashov
 
15.09.14
06:44
а если сделать свой макет, и в состав расшифровки "количества" включить номенклатуру.
5 ИС-2
 
naïve
15.09.14
07:54
можно сделать так:
добавляем вычисляемое поле Псевдо резерв: данные у него номенклатура, а вот выражение представления - резерв. В итоге когда кликаешь в данных должна быть номенклатура, а по ней раскручиваешь цепочку
6 ИС-2
 
naïve
15.09.14
07:54
но если отчет простой, то можно тупо обратить к соседней ячейке табличного документа
7 Crush
 
15.09.14
09:04
(0) Для элемента расшифровки получить родителей
8 NewBieOneS
 
15.09.14
20:16
(7) ПолучитьРодителей()[0].ПолучитьПоля() - не катит, т.к. детальные записи без группировки

(5) Вариант. Попробую. Спасибо.