Два условия отображения отчета

Добрый день!
Столкнулись с такой проблемой:
Есть у нас много типов договоров (лицензионный, на ПО, на работы итд) и несколько типов оплат (100, 30/70, 50/50 итд).
Для каждого договора свой шаблон. А в базовой версии можно наложить только одно условие на отображение отчета. То есть мы либо видим для выбранного типа договора шаблоны на все типы оплат, либо наоборот, для выбранного типа оплаты шаблоны на все типы договоров.
Крайне логичным было бы здесь установить фильтрацию по двум полям, но как это делать не совсем понятно.
Помню, что подобную тему уже поднимала, то ли здесь, то ли в общении с техподдержкой, но тогда вопрос стоял не так остро.
Подскажите, что нужно допиливать и в какую сторону, чтобы наши менеджеры не пугались большого списка разных вариантов шаблонов? :)

Нравится

6 комментариев

Здравствуйте, Алена!

Подобный функционал реализован для отчетов в разделе Склад: там отображается отчет в зависимости от типа.

Возможность отображения отчета в зависимости от типа задается в настройках отчета:

111

Анна, вопрос в том, что нужно как бы два поля фильтровать. А то получается, что я либо для поля "тип" могу сделать, либо для поля "тип оплаты". А мне нужно по обоим.
Иначе. если выбираю "тип" - высвечивается 4 отчета для всех типов оплаты, а он же (тип оплаты) уже указан в карточке!

Здравствуйте, Алена!

В данном конкретном случае реализовать эту функцию можно только доработкой коробочной функциональности по фильтрации данных в отчете, в частности: добавления в карточку фильтрации по второму полю либо динамическое формирование меню Отчетов.

Анна, я примерно так себе это и представляла. :) Хотела посоветоваться, какой вариант лучше и в сторону каких скриптов нужно смотреть.

Алена, в коробочной версии формирование списка отчетов происходит в scr_BaseWorkspace в функции function amiReportsOnPrepare(ActionMenuItem)

Оптимальный вариант - дорабатывать скрипт конкретного Workspace а обработчик события OnPrepare меню отчетов. Пример программного кода:

function amiReportsOnPrepare(ActionMenuItem) {
	scr_BaseWorkspace.amiReportsOnPrepare(ActionMenuItem);
	for (i=0; i < amiReports.Count; i++){
		if(amiReports.Items(i).Caption == 'Инциденты по контрагентам'){
			amiReports.Items(i).IsVisible = false;
		}
	}
}

Спасибо! Сделали так:

var GridDataset = BaseWorkspace.GridDataset;
var Type = GridDataset.Values('ContractTypeName');
var TypeOfPayment = GridDataset.Values('TypeOfPayment');
var NameContract = Type + ' ' + TypeOfPayment; 
for (i=0; i < amiReports.Count; i++){
  if (i != 5 ){
    var ReportCaption = amiReports.Items(i).Caption;
    if (ReportCaption.indexOf('б.в.') != -1){
      amiReports.Items(i).IsVisible = true;
    }
    else if(ReportCaption == NameContract){
      amiReports.Items(i).IsVisible = true;
    }
    else{
      amiReports.Items(i).IsVisible = false;
    }
  }
}

Пришлось вставлять проверку на i=5, поскольку в этом месте в списке отчетов стоит разделитель и там упорно выпадала ошибка :)
Ну и на "б.в." проверка нужна, поскольку эти отчеты должны всегда отображаться.

Показать все комментарии