СКД и пересчёт в валюту полей с ролями Начальный, Конечный остаток. #785773


#0 by Deryni
Имеем регистр Расчёты с подотчётными лицам. Учёт ведётся в разрезе подотчётных лиц и валют. Хочу отчёт, где в строках - подотчётные лица, под ними документы, в колонках валюты. Каждый блок колонок Нач. ост, Приход, Расход, Кон. ост. В конце Итого в валюте, которую выбирает пользователь. Для простоты пусть это будет доллар. Сами курсы валют передаю внешним набором данных (таблица значений). Это связано с тем, что в системе есть курсы для разных стран и запрос по курсам валют - отдельная сложная тема. Поэтому мне удобнее получать таблицу курсов заранее и потом передавать в запрос именно таблицей. Естественно наборы связаны между собой. Для расчёта, собственно по курсу используются вычисляемые поля СКД. И всё вроде как хорошо. Но вычисляемому полю нельзя присвоить роль. Получается вот что. Все мы знаем, что при запросе ОстаткиИОбороты кроме собственно документов получаются ещё 2 пустых строки с начальным и конечным остатком. Они выводятся в отчёт. Ну выводятся и фиг с ними, подавить то вывод можно. Но из-за того, что вычисляемым полям нельзя задать роль получается, что сумма в долларах в начальном и конечном остатке задваивается Т.е. например у сотрудника Вася есть долг на начало 600 рублей. Это 10 долларов. Но в отчёте показывает 20. Потому что в самом запросе поле Начальный остаток имеет роль "Начальный остаток", а вот вычисляемое поле Начальный остаток долл. роли не имеет и задать её нельзя. Подскажите, как правильно сделать. Спасибо.
#1 by Курцвейл
Переодичность какая указана в запросе? И 2 - какие периоды выбраны?
#2 by Deryni
Ну естественно Регистратор и ПериодСекунда. Поэтому остатки по валютам показывает правильно. Неправильно показываются только значения вычисляемых полей. Период тоже выбран Регистратор.
#3 by Deryni
Т.е. в приведенном примере в колонке Рубль показывает начальный остаток 600 (что правильно), а вот в колонке Доллар - 20.
#4 by Курцвейл
Я про периодичность виртуальной таблицы
#5 by DrShad
а почему пересчет именно в выч полях, а не в запросе?
#6 by Deryni
Периодичность - Авто. а как я в запрос передам таблицу значений? А поля связанных наборов данных я в запросе использовать не могу. Или же не знаю, как.
#7 by DrShad
ты не поверишь, но источником данных для набора может быть таблица значений
#8 by Deryni
я в курсе. У меня в источнике данных 2 набора данных. Собственно запрос по регистру и Таблица значений. Но в запросе поля этой таблицы я использовать не могу. Только в вычисляемых полях.
#9 by DrShad
а кто тебе запрещает их использовать?
#10 by Deryni
Подскажи как. Я не знаю. Пишу в запросе поле ТаблицаКурсов.Курс. Ругается. ТаблицаКурсов - это второй набор данных.
#11 by DrShad
используй временные таблицы
#12 by Deryni
Ещё раз. Запрос выглядит вполне обычно. Так ВЫБРАТЬ     ВЗСотр.Регистратор,
#13 by DrShad
это запрос в СКД? а где параметры вирт таблицы? ну и помещай данные из ТЗ во временную, это тоже во временную, а потом соединяй или объединяй две временные таблицы
#14 by Deryni
Т.е. мне нужно сформировать таблицу значений из запроса по регистру, в ней всё пересчитать, а потом её уже использовать как источник для  СКД. Ну такая идея приходила мне в голову, но я думал, что всё-таки можно решить вопрос другим методом. Виртуальные таблицы в запросе я использовать не могу. СКД не умеет получать в запросе данные из таблицы значений. Это можно делать только в объекте Запрос. Передать ему параметром ТЗ, в запросе выбрать все её данные в ВТ, а потом ВТ использовать дальше.
#15 by Deryni
Что значит "где параметры"? Параметры начало периода и конец периода СКД добавляем само. Как и и ДвиженияИГраницыПериода. Оно работает правильно для полей запроса, для которых заданы роли. Проблема возникает именно с вычисляемыми полями. Нельзя поместить ТЗ во временную таблицу в запросе в СКД.
#16 by DrShad
и почему бы не взять курсы из регистра сведений?
#17 by DrShad
вот так и єто СКД само не делает
#18 by Курцвейл
Очень странно работают вычисляемые поля у тебя. Может нужно агрегирующую функцию применить или назначить его в ресурс? Кроме того пересчет по курсу можно вынести в общий модуль и под отладкой посмотреть что у тебя происходит с СКД
#19 by Deryni
Потому что такие начальные условия задачи. Там очень сложная структура курсов. Есть несколько регистров с курсами. Плюс курс нужно брать средний за период. Для этого у меня уже есть готовые процедуры. Зачем мне повторять эти запросы в каждом отчёте, когда можно получить таблицу курсов заранее и передать? Вопрос вообще не в этом. Вопрос в том, возможно ли такое, как я хочу именно в таком варианте со связыванием наборов данных, или нужно искать другие пути.
#20 by DrShad
ну ты же уже дошел до того что вычисляемые поля не имеют возможности быть выбранными в наборе данных - ищи другие пути
#21 by Deryni
Это не важно. Если без пересчёта всё работает хорошо. Остатки по каждой валюте считаются правильно. Да оно правильно считает по курсу, оно просто не понимает, что СуммаНачОстДолл - это начальный остаток и не нужно его суммировать. Хорошо. Результат выполнения СКД с группировкой по документам выглядит так: Сотрудник Вася    - 600 И вот оно правильно показывает 600, но в долларах считает 2 по 600. Потом, что вычисляемому полю нельзя присвоить роль. Я понимаю, что у меня происходит. Он первые две пустых строки суммирует. Я не понимаю, как это обойти и заставить его считать только одну строку.
#22 by DrShad
игнорировать NULL
#23 by Курцвейл
Это похоже на проблему получения остатков в разрезе документов :)
#24 by Deryni
Я не могу игнорировать NULL. Как минимум один раз я должен остаток посчитать. Нет, не похоже. Остатки в разрезе документов как раз работают на ура. Вопрос именно в том, что вычисляемые поля не имеют роли. Поэтому он не воспринимает их как остатки и просто суммирует.
#25 by Курцвейл
А причем тут роль? Твои вычисленные поля должны быть ресурсом. ЗЫ Так же слабо понятна причина задвоения.
#26 by Курцвейл
+ Попробуй такой вариант, добавь группировку ПериодСекунда, а в группировке Регистратор не отображать Нач и Кон остатки.
#27 by Deryni
Причина задвоения - простая. Когда выполняется запрос по ВТ с периодичностью Регистратор там всегда будет 2 строки с пустым регистратором. Это остаток на начало и на конец. Если задать роли для поле СуммаНачальныйОстаток и СуммаКонечныйОстаток, то СКД понимает, что это остатки и не суммирует остатки в этих двух строках для группировки более высокого уровня. А вот для вычисляемых полей - она не понимает. ПериодСекунда у меня в запросе есть. Именно поэтому без вычисляемых полей всё работает ок.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С