Как вставить в параметр отчета реквизит из НЕ подчиненного справочника. HELP!
Имеется самописный отчет по ценам (ПрайсЛистам) организации.
В запросе выбирается 2 цены из 2х разных регистров сведений: (РегистрЦен и самописный РегистрЦенКонтрагентов).
В параметрах(Элементах отбора) присутствуют ссылки на 4 справочника (Контрагент, Договор,ВидЦены и Номенклатуру).
Имеется справочник "ВидЦен" который не имеет Владельца! Но у справочника "договоров" есть реквизит с ссылкой на справочник "ВидЦен" . Так вот вопрос: Как при выборе договора автоматически подставить "вид цены" в элемент отбора.
Типа если ЗначениеЗаполнено (Объект.Договор) Тогда ВидЦен = "Договор.Ссылка.ВидЦен".
В запросе выбирается 2 цены из 2х разных регистров сведений: (РегистрЦен и самописный РегистрЦенКонтрагентов).
В параметрах(Элементах отбора) присутствуют ссылки на 4 справочника (Контрагент, Договор,ВидЦены и Номенклатуру).
Имеется справочник "ВидЦен" который не имеет Владельца! Но у справочника "договоров" есть реквизит с ссылкой на справочник "ВидЦен" . Так вот вопрос: Как при выборе договора автоматически подставить "вид цены" в элемент отбора.
Типа если ЗначениеЗаполнено (Объект.Договор) Тогда ВидЦен = "Договор.Ссылка.ВидЦен".
По теме из базы знаний
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
При компоновке результата (в модуле отчета, если он у тебя на скд) перехвати настройки, сделай нужную проверка и добавь в отбор нужное значение.
(2)Вот код модуля
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
МассивЗаголовковРесурсов = Новый Массив;
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
//Создадим и инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
//Создадим и инициализируем процессор вывода результата
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
//Обозначим начало вывода
ПроцессорВывода.НачатьВывод();
ТаблицаЗафиксирована = Ложь;
ДокументРезультат.ФиксацияСверху = 0;
//Основной цикл вывода отчета
Пока Истина Цикл
//Получим следующий элемент результата компоновки
ЭлементРезультата = ПроцессорКомпоновки.Следующий();
Если ЭлементРезультата = Неопределено Тогда
//Следующий элемент не получен - заканчиваем цикл вывода
Прервать;
Иначе
// Зафиксируем шапку
Если Не ТаблицаЗафиксирована
И ЭлементРезультата.ЗначенияПараметров.Количество() > 0
И ТипЗнч(КомпоновщикНастроек.Настройки.Структура[0]) <> Тип("ДиаграммаКомпоновкиДанных") Тогда
ТаблицаЗафиксирована = Истина;
ДокументРезультат.ФиксацияСверху = ДокументРезультат.ВысотаТаблицы;
КонецЕсли;
//Элемент получен - выведем его при помощи процессора вывода
ПроцессорВывода.ВывестиЭлемент(ЭлементРезультата);
КонецЕсли;
КонецЦикла;
ПроцессорВывода.ЗакончитьВывод();
КонецПроцедуры
Показать
(3) Попробуй как -нибудь так найти договор и вид цены, и установи параметр
Для Каждого ПараметрПользователя из КомпоновщикНастроек.ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(ПараметрПользователя) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
Если ТипЗнч(ПараметрПользователя.Значение) = Тип("СправочникСсылка.ДоговорыКонтрагентов") Тогда
//нашли договор
КонецЕсли;
КонецЕсли;
КонецЦикла;
Показать
Создать форму отчета.
На элемент формы КомпоновщикНастроекПользовательскиеНастройки повесить обработку события ПриИзменении, в которой написать примерно такое:
В тонком клиенте, соответственно, надо вызвать сервер.
На элемент формы КомпоновщикНастроекПользовательскиеНастройки повесить обработку события ПриИзменении, в которой написать примерно такое:
Значение = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение;
Если Значение <> Неопределено Тогда
Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[2].Значение = Значение.ВидЦен
КонецЕсли;
В тонком клиенте, соответственно, надо вызвать сервер.
Ну для начала регистры ЦеныНоменклатуры и ЦеныНоменклатурыКонтрагентов являются типовыми для УНФ. С незапамятных времен. И там и там есть измерение ВидЦен.
Что-то не то с задачей.
Что-то не то с задачей.
(9)Ну так во-первых покажите структуру этого "самописного" регистра сведений. Скриншот, какие у него измерения, какие ресурсы, какие реквизиты.
периодический/непериодический.
А во-вторых, странно, что отбор происходит не по измерениям, а по справочникам.
периодический/непериодический.
А во-вторых, странно, что отбор происходит не по измерениям, а по справочникам.
Так же если устанавливать связь параметров выбора "Отбор.Ссылка" Поле "договор", связь пытается найти неопределенную ссылку.
Может подойдет в СКД тип данных для правое значение отбора ВидЦен выбрать поле компоновки данных Договор.ВидЦен.
Отображаться значение не будет, но отбор будет происходить как Вам требуется.
Отображаться значение не будет, но отбор будет происходить как Вам требуется.
(15)
Тогда может лезть глубже в справочник и делать отбор не по ссылке на справочник ВидЦен, а по ВидЦен.Наименование и и Договор.ВидЦен.Наименование.
Это единственное что можно сравнить у этих двух полей.
случае отбора ВидЦен равно Договор.ВидЦен запрос отрабатывает исключительно записи второго регистра сведений я так понимаю это
Тогда может лезть глубже в справочник и делать отбор не по ссылке на справочник ВидЦен, а по ВидЦен.Наименование и и Договор.ВидЦен.Наименование.
Это единственное что можно сравнить у этих двух полей.
(16)Я пробовал, но нужно не сравнение а исходя из параметров отбора. Если вручную проставляю Договор и Вид Цены То отображается всё так как необходимо. Если В СКД Указать отбор ВидЦен=Договор.ВидЦен То тут сразу выбирается все ТОЛЬКО из регистра цен контрагента. Я Так же пробывал разделить запрос на 2 набора данных, но результат один и тот же.
Значит нужно передавать ВидЦены в параметры запроса
Кривовато, но должно работать
В запросе пишете
Кривовато, но должно работать
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Для Каждого ЭлементОтбора Из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
Если ЭлементОтбора.Использование
И ТипЗнч(ЭлементОтбора.ПравоеЗначение) = ТипЗнч(Справочники.ДоговорыКонтрагентов.ПустаяСсылка())
И НЕ ЭлементОтбора.ПравоеЗначение = Справочники.ДоговорыКонтрагентов.ПустаяСсылка() Тогда
ПараметрВидЦены = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("ВидЦены");
Если ПараметрВидЦены <> Неопределено Тогда
ПараметрВидЦены.Значение = ЭлементОтбора.ПравоеЗначение.ВидЦены;
ПараметрВидЦены.Использование = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
МассивЗаголовковРесурсов = Новый Массив;
НастройкиОтчета = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиОтчета, ДанныеРасшифровки);
//Создадим и инициализируем процессор компоновки
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки, Истина);
//Создадим и инициализируем процессор вывода результата
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
//Обозначим начало вывода
ПроцессорВывода.НачатьВывод();
ТаблицаЗафиксирована = Ложь;
...
ПоказатьВ запросе пишете
{ГДЕ
(РС1.ВидЦены = &ВидЦены),
(РС2.ВидЦены = &ВидЦены)}
(РС1.ВидЦены = &ВидЦены),
(РС2.ВидЦены = &ВидЦены)}
А в чем сложность в СКД на закладке параметры указать выражение для параметра ВидЦен из параметра Договор?
(28) Если договор задан как отбор, то может быть сравнение на не равно, не в списке, не в группе - и тд.
Тогда брать вид цен из договора будет не корректно.
Его можно брать только если вид сравнения будет равно.
А если так, то почему бы в параметр не перенести?
Тогда брать вид цен из договора будет не корректно.
Его можно брать только если вид сравнения будет равно.
А если так, то почему бы в параметр не перенести?
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот