powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / [игнор отключен] [закрыт для гостей] / Открытие формы отчета с отбором в 8.2. Решение проблемы
3 сообщений из 3, страница 1 из 1
Открытие формы отчета с отбором в 8.2. Решение проблемы
    #36915633
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавная ссылка на проблему.
Нельзя пользоваться стандартными отборами предлагаемыми платформой, при формировании отчетов.

Пример стандартного использования - вызова отчета "Остатки товаров на складах", из справочника номенклатура с отбором по текущей строке товара.:
ПараметрыФормы = Новый Структура("Отбор,СформироватьПриОткрытии", Новый Структура("Товар", ЭтаФорма.Список.ТекущаяСтрока), Истина);
ОткрытьФорму("Отчет.ОстаткиТоваровНаСкладах.Форма", ПараметрыФормы);Если вы уже ранее открывали отчет "Остатки товаров" и не дай бог проставили хоть ОДИН параметр отбора - то при вызове вышеназванной процедуры вы получите сообщение:Невозможно применить фиксированные настройки. Пересекаются элементы отбора.Это возникает из-за конфликта сохраненных ранее ваших настроек отбора, и программного отбора.

Чтобы исправить ситуацию - вам необходимо убрать все пользовательские отборы (тоесть то что вы уже ранее выбирали в этом отчете вручную). Если вы думаете что это только в "демобазе", то глубоко заблуждаетесь - добро пожаловать в 11 релиз торговли. Все те же грабли.
И в принципе с этим можно было бы жить, если бы не возникали следующие действия пользователя. Он открыл отчет с отбором по этому товару (допустим все пользовательские отборы убраны). Увидел информацию по нужному ему товару и захотел сформировать тут же в этом окне отчета - остатки с другими отборами... Тут же появится вышенаписанное сообщение об ошибке. И пользователь - НИКАК не сможет это исправить... Кроме как закрыть отчет и открыть его через меню отчеты... Мало того - отбор прописанный программой он НИКАК не видит.

На данный момент нашел решение - через модуль отчета:

1. В ПараметрыСеанса.СтруктураФормированияОтчетов(тип - структура) добавляем "Отчет"="ОстаткиТоваров"
и "Номенклатура"=ЭтаФорма.Список.ТекущаяСтрока

2. В справочнике номенклатура пишем строки:

ПараметрыФормы = Новый Структура("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.ОстаткиТоваровНаСкладах.Форма", ПараметрыФормы);


3. В модуле отчета прописываем через видимые пользователю поля данных - наш отбор. У всех прочих полей и отборов - ставим галочку "Использование"=Ложь.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
	СтруктураФормированияОтчетов=ПараметрыСеанса.СтруктураФормированияОтчетов;
	ПараметрыСеанса.СтруктураФормированияОтчетов=Новый ФиксированнаяСтруктура();
	
	Если СтруктураФормированияОтчетов.Свойство("Отчет") 
		и СтруктураФормированияОтчетов.Отчет="ОстаткиТоваров"
		и СтруктураФормированияОтчетов.Свойство("Номенклатура") Тогда
		Для Каждого ЭлементНастройки из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
			Если ТипЗнч(ЭлементНастройки) = Тип("ЭлементОтбораКомпоновкиДанных")тогда
				Если ТипЗнч(ЭлементНастройки.ПравоеЗначение)=Тип("СправочникСсылка.Номенклатура") Тогда
					ЭлементНастройки.ПравоеЗначение=СтруктураФормированияОтчетов.Номенклатура;
					ЭлементНастройки.Использование=Истина;
					Если СтруктураФормированияОтчетов.Номенклатура.ЭтоГруппа Тогда  
						ЭлементНастройки.ВидСравнения=ВидСравненияКомпоновкиДанных.ВИерархии;
					Иначе
						ЭлементНастройки.ВидСравнения=ВидСравненияКомпоновкиДанных.Равно;
					КонецЕсли;
				Иначе
					ЭлементНастройки.Использование=Ложь;
				КонецЕсли;
			ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ОтборКомпоновкиДанных")тогда
				Для Каждого ЭлементОтбора из ЭлементНастройки.Элементы Цикл
					ЭлементОтбора.Использование=Ложь;
				КонецЦикла;
			ИначеЕсли ТипЗнч(ЭлементНастройки) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных")тогда
				ЭлементНастройки.Использование=Ложь;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры // ПриКомпоновкеРезультата()

Если кто знает о других решениях - с удовольствием посмотрю.
...
Рейтинг: 0 / 0
Открытие формы отчета с отбором в 8.2. Решение проблемы
    #37376377
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1с,

Спасибо, пригодилось.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Открытие формы отчета с отбором в 8.2. Решение проблемы
    #38406753
kirill_sid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с подобной проблемой, решил несколько иначе:

На стороне команды документа:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ПериодОтчета = Новый СтандартныйПериод;
	ПериодОтчета.ДатаНачала    = НачалоМесяца(ПараметрКоманды.ДатаПланирования);
	ПериодОтчета.ДатаОкончания = КонецМесяца(ПараметрКоманды.ДатаПланирования);
	
	ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("Период"                , ПериодОтчета);
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("Организация"           , ПараметрКоманды.Организация);
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("Сценарий"              , ПараметрКоманды.Сценарий);
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("Подразделение"         , ПараметрКоманды.Подразделение);
	ПользовательскиеНастройки.ДополнительныеСвойства.Вставить("РегистраторВидОперации", ПараметрКоманды.ВидОперации);
	
	ПараметрыОткрытия = Новый Структура;
	ПараметрыОткрытия.Вставить("СформироватьПриОткрытии"  , Истина);
	ПараметрыОткрытия.Вставить("КлючВарианта"             , "Дефицитка");
	ПараметрыОткрытия.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
	
	ОткрытьФорму("Отчет.ОтчетПоПотребностям.Форма.ФормаОтчетаУправляемая",
				 ПараметрыОткрытия,
				 ПараметрыВыполненияКоманды.Источник,
				 ПараметрыВыполненияКоманды.Источник.УникальныйИдентификатор,
				 ПараметрыВыполненияКоманды.Окно);
	
КонецПроцедуры



На стороне отчета. Модуль объекта:

1) Дополняем процедуру ПриКомпоновкеРезультата:

Код: pascal
1.
2.
3.
4.
5.
Процедура ПриКомпоновкеРезультата(ДокументРезультат, мДанныеРасшифровки, СтандартнаяОбработка)
	
	ЗаполнитьПользовательскиеНастройки();

КоенцПроцедуры



2) Определяем процедуру ЗаполнитьПользовательскиеНастройки:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
Процедура ЗаполнитьПользовательскиеНастройки()
	
	ДополнительныеСвойства = КомпоновщикНастроек.ПользовательскиеНастройки.ДополнительныеСвойства;
	Если Не ДополнительныеСвойства.Количество() Тогда
		Возврат;
	КонецЕсли;
	
	Параметры = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы;
	Отборы    = КомпоновщикНастроек.Настройки.Отбор.Элементы;
	
	Для каждого Элемент Из Параметры Цикл
		
		ИмяПараметра = Строка(Элемент.Параметр);
		ЗначениеПараметра = Неопределено;
		
		Если ДополнительныеСвойства.Свойство(ИмяПараметра, ЗначениеПараметра) Тогда
			Настройка = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Элемент.ИдентификаторПользовательскойНастройки);
			Настройка.Значение      = ЗначениеПараметра;
			Настройка.Использование = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
	Для каждого Элемент Из Отборы Цикл
		
		ИмяПараметра = Строка(Элемент.ЛевоеЗначение);
		ЗначениеПараметра = Неопределено;
		
		Если ДополнительныеСвойства.Свойство(ИмяПараметра, ЗначениеПараметра) Тогда
			Настройка = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(Элемент.ИдентификаторПользовательскойНастройки);
			Настройка.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
			Настройка.ПравоеЗначение = ЗначениеПараметра;
			Настройка.Использование  = Истина;
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Открытие формы отчета с отбором в 8.2. Решение проблемы
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]