Как вставить в параметр отчета реквизит из НЕ подчиненного справочника. 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 Сейчас в теме
Оставьте свое сообщение
Вакансии
Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день