Как вставить в параметр отчета реквизит из НЕ подчиненного справочника. HELP!

1. DENSKR 15 09.07.18 12:31 Сейчас в теме
Имеется самописный отчет по ценам (ПрайсЛистам) организации.
В запросе выбирается 2 цены из 2х разных регистров сведений: (РегистрЦен и самописный РегистрЦенКонтрагентов).
В параметрах(Элементах отбора) присутствуют ссылки на 4 справочника (Контрагент, Договор,ВидЦены и Номенклатуру).
Имеется справочник "ВидЦен" который не имеет Владельца! Но у справочника "договоров" есть реквизит с ссылкой на справочник "ВидЦен" . Так вот вопрос: Как при выборе договора автоматически подставить "вид цены" в элемент отбора.
Типа если ЗначениеЗаполнено (Объект.Договор) Тогда ВидЦен = "Договор.Ссылка.ВидЦен".
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
33. Sashares 34 09.07.18 16:59 Сейчас в теме +3 $m
(31)В выражение параметра ВидЦен написать:
Выбор Когда ЗначениеЗаполнено(&Договор) Тогда ОбщегоНазначения.ЗначениеРеквизитаОбъекта(&Договор,"ВидЦен")
Иначе Неопределено
Конец
Прикрепленные файлы:
Остальные ответы
Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. user633533_encantado 11 09.07.18 12:44 Сейчас в теме
При компоновке результата (в модуле отчета, если он у тебя на скд) перехвати настройки, сделай нужную проверка и добавь в отбор нужное значение.
3. DENSKR 15 09.07.18 12:47 Сейчас в теме
(2)Вот код модуля
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

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

	//Создадим и инициализируем процессор компоновки
	ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
	ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);

	//Создадим и инициализируем процессор вывода результата
	ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
	ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

	//Обозначим начало вывода
	ПроцессорВывода.НачатьВывод();
	ТаблицаЗафиксирована = Ложь;

	ДокументРезультат.ФиксацияСверху = 0;
	//Основной цикл вывода отчета
	Пока Истина Цикл
		//Получим следующий элемент результата компоновки
		ЭлементРезультата = ПроцессорКомпоновки.Следующий();

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

				ТаблицаЗафиксирована = Истина;
				ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы;

			КонецЕсли;
			//Элемент получен - выведем его при помощи процессора вывода
			ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
		КонецЕсли;
	КонецЦикла;
	
	ПроцессорВывода.ЗакончитьВывод();	
КонецПроцедуры


Показать
12. user633533_encantado 11 09.07.18 13:58 Сейчас в теме
(3) Попробуй как -нибудь так найти договор и вид цены, и установи параметр



	Для Каждого ПараметрПользователя из  КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
		Если ТипЗнч(ПараметрПользователя) = Тип("ЭлементОтбораКомпоновкиДанных")  Тогда
						
			Если ТипЗнч(ПараметрПользователя.Значение) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
				
				      //нашли договор
			КонецЕсли;
			
		КонецЕсли;
	КонецЦикла;
Показать
4. antz 09.07.18 12:47 Сейчас в теме
Создать форму отчета.
На элемент формы КомпоновщикНастроекПользовательскиеНастройки повесить обработку события ПриИзменении, в которой написать примерно такое:

Значение = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение;
Если Значение <> Неопределено Тогда
    Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[2].Значение = Значение.ВидЦен
КонецЕсли;


В тонком клиенте, соответственно, надо вызвать сервер.
5. DENSKR 15 09.07.18 12:54 Сейчас в теме
(4)При выборе Договора мне необходимо из этого договора выбрать "ВидЦен" и вставить выбранный "ВидЦен" в поле отбора отчета.
6. DENSKR 15 09.07.18 13:26 Сейчас в теме
(5)При чем этот вид цен автоматически должен меняться при выборе другого договора.
Я пробовал выбрать в запросе "Где Договор.ВидЦен=&ВидЦен" Но толку от этого нуль.
11. user633533_encantado 11 09.07.18 13:51 Сейчас в теме
(4) А если пользователь уберет отборы или поменяет их порядок, то полетят ошибки.
13. DENSKR 15 09.07.18 14:01 Сейчас в теме
(11)Пользователь отбирает только по полям "Контрагент", "Номенклатура", "Договор" .
Поле отбора "ВидЦен" должно заполняться автоматически при выборе договора.
7. Leon75 09.07.18 13:27 Сейчас в теме
Ну для начала регистры ЦеныНоменклатуры и ЦеныНоменклатурыКонтрагентов являются типовыми для УНФ. С незапамятных времен. И там и там есть измерение ВидЦен.
Что-то не то с задачей.
8. DENSKR 15 09.07.18 13:37 Сейчас в теме
(7)
(РегистрЦен и самописный РегистрЦенКонтрагентов)

Я же специально указал. То что есть типовой понятно...
9. DENSKR 15 09.07.18 13:38 Сейчас в теме
(8)В него записываются индивидуальные цены отличные от обычных "ЦенНоменклатуры"
25. Leon75 09.07.18 16:06 Сейчас в теме
(9)Ну так во-первых покажите структуру этого "самописного" регистра сведений. Скриншот, какие у него измерения, какие ресурсы, какие реквизиты.
периодический/непериодический.

А во-вторых, странно, что отбор происходит не по измерениям, а по справочникам.
27. DENSKR 15 09.07.18 16:16 Сейчас в теме
(25)Вот 2 регистра
Прикрепленные файлы:
10. DENSKR 15 09.07.18 13:43 Сейчас в теме
Так же если устанавливать связь параметров выбора "Отбор.Ссылка" Поле "договор", связь пытается найти неопределенную ссылку.
14. pafkas89 2 09.07.18 14:06 Сейчас в теме
Может подойдет в СКД тип данных для правое значение отбора ВидЦен выбрать поле компоновки данных Договор.ВидЦен.
Отображаться значение не будет, но отбор будет происходить как Вам требуется.
15. DENSKR 15 09.07.18 14:24 Сейчас в теме
(14)Именно, в случае отбора ВидЦен равно Договор.ВидЦен запрос отрабатывает исключительно записи второго регистра сведений я так понимаю это специфика компоновки.
16. pafkas89 2 09.07.18 14:39 Сейчас в теме
(15)
случае отбора ВидЦен равно Договор.ВидЦен запрос отрабатывает исключительно записи второго регистра сведений я так понимаю это


Тогда может лезть глубже в справочник и делать отбор не по ссылке на справочник ВидЦен, а по ВидЦен.Наименование и и Договор.ВидЦен.Наименование.
Это единственное что можно сравнить у этих двух полей.
17. DENSKR 15 09.07.18 14:54 Сейчас в теме
(16)Я пробовал, но нужно не сравнение а исходя из параметров отбора. Если вручную проставляю Договор и Вид Цены То отображается всё так как необходимо. Если В СКД Указать отбор ВидЦен=Договор.ВидЦен То тут сразу выбирается все ТОЛЬКО из регистра цен контрагента. Я Так же пробывал разделить запрос на 2 набора данных, но результат один и тот же.
19. pafkas89 2 09.07.18 15:17 Сейчас в теме
(17)
Я предлагаю сделать отбор ВидЦен.Наименование=Договор.ВидЦен.Наименование скорее всего Поля ВидЦен в регистрах из разных справочников, поэтому СКД выдаёт данные только из одного регистра.
20. DENSKR 15 09.07.18 15:35 Сейчас в теме
(19)По наименованию аналогичная ситуация. Справочник один и тот же. Регистры сведений разные. Ресурс в РСвед "ВидЦен" ссылается на один и тот справочник.
22. pafkas89 2 09.07.18 15:57 Сейчас в теме
(20)
Выложите текст запроса
18. EVKash 14 09.07.18 15:06 Сейчас в теме
Значит нужно передавать ВидЦены в параметры запроса
Кривовато, но должно работать
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)

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

    //Создадим и инициализируем процессор вывода результата
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

    //Обозначим начало вывода
    ПроцессорВывода.НачатьВывод();
    ТаблицаЗафиксирована = Ложь;
...
Показать


В запросе пишете
{ГДЕ
(РС1.ВидЦены = &ВидЦены),
(РС2.ВидЦены = &ВидЦены)}
21. DENSKR 15 09.07.18 15:50 Сейчас в теме
(18)Таким образом тоже не получается обойти. Он не понимает ДоговорыКонтрагентов.ПустаяСсылка как я понял.
23. EVKash 14 09.07.18 15:59 Сейчас в теме
(21) я не знаю из какого справочника вы договор берете. написал для примера. в УТ справочник ДоговорыКонтрагентов, где нет реквизита ВидЦены.
Подставляйте, что у Вас...
24. DENSKR 15 09.07.18 16:05 Сейчас в теме
(23)Именно в справочнике "ДоговорыКонтрагентов" есть ссылка на "ВидЦен". У вас все правильно написано. Не отрабатывает выбор из договора.
26. Sashares 34 09.07.18 16:13 Сейчас в теме
А в чем сложность в СКД на закладке параметры указать выражение для параметра ВидЦен из параметра Договор?
28. DENSKR 15 09.07.18 16:20 Сейчас в теме
(26) Договор находится в структуре пользовательских отборов, ВидЦен задан как параметр. Как написать выражение?
29. Sashares 34 09.07.18 16:26 Сейчас в теме
(28) Если договор задан как отбор, то может быть сравнение на не равно, не в списке, не в группе - и тд.
Тогда брать вид цен из договора будет не корректно.
Его можно брать только если вид сравнения будет равно.
А если так, то почему бы в параметр не перенести?
30. Leon75 09.07.18 16:39 Сейчас в теме
31. DENSKR 15 09.07.18 16:43 Сейчас в теме
(30) Чтобы написать выражение "&Договор.ВидЦен" необходимо указать параметр в запросе "&Договор.ВидЦен".
32. DENSKR 15 09.07.18 16:46 Сейчас в теме
(31)Чтобы такой параметр присутствовал. Присутствует только &Договор
33. Sashares 34 09.07.18 16:59 Сейчас в теме +3 $m
(31)В выражение параметра ВидЦен написать:
Выбор Когда ЗначениеЗаполнено(&Договор) Тогда ОбщегоНазначения.ЗначениеРеквизитаОбъекта(&Договор,"ВидЦен")
Иначе Неопределено
Конец
Прикрепленные файлы:
34. DENSKR 15 09.07.18 17:09 Сейчас в теме
(33)
Выбор Когда ЗначениеЗаполнено(&Договор) Тогда ОбщегоНазначения.ЗначениеРеквизитаОбъекта(&Договор,"ВидЦен")
Иначе Неопределено
Конец

Это РЕШЕНИЕ всё правильно отрабатывает! Спасибо огромное!
35. Sashares 34 09.07.18 17:10 Сейчас в теме
36. Leon75 09.07.18 17:51 Сейчас в теме
(34) Неопределено для составного типа.
37. Leon75 09.07.18 18:36 Сейчас в теме
(36)Если там не составной тип то лучше ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка)
38. user1013454 11.07.18 20:56 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот