Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
15 дек 2024, 13:39

Расшифровка отчета на СКД

Автор Новенькая, 06 авг 2013, 12:06

0 Пользователей и 1 гость просматривают эту тему.

Новенькая

Здравствуйте, имеем отчет на СКД. Запрос:

ВЫБРАТЬ
ПеремещенияОпалубкиОстаткиИОбороты.Объект,
ПеремещенияОпалубкиОстаткиИОбороты.Номенклатура,
ПеремещенияОпалубкиОстаткиИОбороты.КоличествоНачальныйОстаток,
ПеремещенияОпалубкиОстаткиИОбороты.КоличествоПриход,
ПеремещенияОпалубкиОстаткиИОбороты.КоличествоРасход,
ПеремещенияОпалубкиОстаткиИОбороты.КоличествоКонечныйОстаток,
ВЫБОР
  КОГДА ПеремещенияОпалубкиОстаткиИОбороты.Регистратор = НЕОПРЕДЕЛЕНО
   ТОГДА NULL
  ИНАЧЕ ПеремещенияОпалубкиОстаткиИОбороты.Регистратор
КОНЕЦ КАК Регистратор,
ПеремещенияОпалубкиОстаткиИОбороты.СобственнаяАрендованная,
ПеремещенияОпалубкиОстаткиИОбороты.СуммаСНДСКонечныйОстаток КАК СуммаСНДСОстаток
ИЗ
РегистрНакопления.ПеремещенияОпалубки.ОстаткиИОбороты({(&НачалоПериода)}, {(&КонецПериода)}, Авто, , ) КАК ПеремещенияОпалубкиОстаткиИОбороты



При двойном щелчке на ячейке получаем стандартное контекстное меню:
Расшифровать, Открыть, Отфильтровать и т.д. При нажатии "расшифровать" открывается форма " Выбор поля", где выбираем поле, по которому необходимо расшифровать отчет (У меня там только "Регистратор"). Можно ли сделать так, чтобы при нажатии на кнопку ""Расшифровать" сразу выводился отчет по регистратору? без выбора поля...Заранее спасибо

Dethmontt

Только если написать свою обработку расшифровки
в событии табличного документа - ОбработкаРасшифровки()
Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Новенькая

Я уже битый час с эти парюсь. Пока имею следующее:

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

    Перем СтруктураКоманды;

    СтандартнаяОбработка = Ложь;
   
    ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(
    ДанныеРасшифровки,
    Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресХранилищаСКД)
    );
   
    ВыполненноеДействие = Неопределено;
    ПараметрВыполненногоДействия = Неопределено;
   
    ДоступныеДействия = Новый Массив;
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
    ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Расшифровать);
   ДоступныеДействия.Добавить(ДействиеОбработкиРасшифровкиКомпоновкиДанных.Упорядочить);

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

КонецПроцедуры // РезультатОбработкаРасшифровки()

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
АдресХранилищаСКД = ПоместитьВоВременноеХранилище(ОтчетОбъект.СхемаКомпоновкиДанных, Новый УникальныйИдентификатор);
КонецПроцедуры



Но все не в ту степь...Где-нибудь почитать можно про это? никогда свою расшифровку не делала( получается каждую команду самому надо прописывать? и открытие и упорядочивание и т.д.? можно только "Расшифровать" заменить? в текущем варианте все равно открывается форма "Выбор поля"...За отклик спасибо

Klyacksa

Ну так все-равно же выбирается действие:
   ОбработкаРасшифровки.ВыбратьДействие(
        Расшифровка,
        ВыполненноеДействие,
        ПараметрВыполненногоДействия,
        ДоступныеДействия,
        //ДополнительноеМеню
    );

Выполняйте сразу ОткрытьЗначение
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Новенькая

Цитата: Klyacksa от 06 авг 2013, 15:11
Ну так все-равно же выбирается действие:
   ОбработкаРасшифровки.ВыбратьДействие(
        Расшифровка,
        ВыполненноеДействие,
        ПараметрВыполненногоДействия,
        ДоступныеДействия,
        //ДополнительноеМеню
    );

Выполняйте сразу ОткрытьЗначение

ТОгда получается, что пропадет контекстное меню(а регистратор все равно так и не получается открыть(

Klyacksa

Сорри, неправильно прочитала.
Попробуйте использовать конструкцию вида:
Ссылка=ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[<индекс вашего поля в расшифровке>].Значение

И дальше уже от этой ссылки открывать форму.

Индекс поля в расшифровке можно получить отладчиком... Или попробовать по имени поля искать.
xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Новенькая

у меня ДанныеРасшифровки имеют тип "Строка" и в ней сечас хранится следующее значение: "e1cib/tempstorage/486f64dd-5c5f-40af-9a2d-00d5bdaffec6"...ДанныеРасшифровки. Элементы не отработает((( Может есть у кого-нибудь примерный кусок кода?

GRADUS

Цитата: Новенькая от 06 авг 2013, 16:31
у меня ДанныеРасшифровки имеют тип "Строка" и в ней сечас хранится следующее значение: "e1cib/tempstorage/486f64dd-5c5f-40af-9a2d-00d5bdaffec6"...ДанныеРасшифровки. Элементы не отработает((( Может есть у кого-нибудь примерный кусок кода?

в расшифровку помещается ссылка, а не строка !

Новенькая

Надо было получить ДанныеРасшифровки на сервере. Пока получилось так:

&НаКлиенте
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
   
   Если ТипЗнч(Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
      Возврат;
   КонецЕсли;

         СтандартнаяОбработка = Ложь;
   Элемент =  ПолучитьКоллекцию(Расшифровка);
   Если ЗначениеЗаполнено(Элемент) Тогда
      ОткрытьЗначение(Элемент);
   КонецЕсли;

КонецПроцедуры // РезультатОбработкаРасшифровки()


&НаСервере
Функция ПолучитьКоллекцию(Расшифровка)
   
   ДанныеРасшифровкиОтчета = ПолучитьИзВременногоХранилища(ДанныеРасшифровки);
   ЭлементРасшифровки = ДанныеРасшифровкиОтчета.Элементы[Расшифровка];


   Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
      Для Каждого ЗначениеПоляРасшифровки Из ЭлементРасшифровки.ПолучитьПоля() Цикл
         Значение = ЗначениеПоляРасшифровки.Значение;
         Если Справочники.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение))
          ИЛИ Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Значение)) Тогда
            Возврат Значение;
         КонецЕсли;
      КонецЦикла;
   КонецЕсли;

   Возврат Неопределено;

КонецФункции

В результате открываются при двойном щелчке эл-т справочника Оборудования, а вот как сделать, чтобы при щелчке на полях "Приход", "Расход" и т.д. открывался этот же отчет с расшифровкой по регистратору причем с теми же отборами, так и не смогла пока сделать(

Klyacksa

Функция ПолучитьКоллекцию возвращает первое попавшееся значение расшифровки, а там их несколько. Остановитесь отладчиком на ЭлементРасшифровки.ПолучитьПоля()  и посмотрите там имена полей.

Как вариант, в функцию ПолучитьКоллекцию передавайте еще один параметр - имя нужного поля, и далее используйте
Поля=ЭлементРасшифровки.ПолучитьПоля();
Поле=Поля.Найти(ИмяПоля);
Возврат ?(Поле=Неопределено,Неопределено,Поле.Значение);

xxx: Спасибо! Я бы загуглил, но ты интересней. Материшься. Злишься. Послать можешь...

Мысль - это оргазм мозга. Кто способен его испытать - получают истинное наслаждение, остальным приходится имитировать

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск