1. DENSKR 5 09.07.18 12:31 Сейчас в теме

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

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

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

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

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

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

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

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

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

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


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



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

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


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

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

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


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

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

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

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


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

Это РЕШЕНИЕ всё правильно отрабатывает! Спасибо огромное!
35. Sashares 1 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С
Краснодар
зарплата от 60 000 руб. до 60 000 руб.
Полный день



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

Руководитель проектов 1С
Москва
Полный день